Well, although I believe that the real thing is Silverlight, I wanted to check out how the “other side” looks like.
Considering the facts that level of my previous experience with DW, Flex, Flash and Air was zero and the fact the sessions have been presented in Staropramen brewery building I anticipated a lot of cool thing to learn and some beer to be drink.
Both of my expectations were fulfilled.
Before I start
Before I start “pasting” my notes and observations from the OnAir Adobe day, I can not avoid mentioning first the other event organized last week by Microsoft here in Prague, “Silverlight for developers”
Not to be too much inflammatory here, I would just say that I was really disappointed with this Microsoft event.
I was there only one hour because I didn’t want to waste of more time but during that time:
- I saw a demo how small “flash like” games you can make with Silverlight
- I saw a demo how with Silverlight 2.0 can make media player
- I saw a bunch of false information's about competitors (e.g. Flash/Flex not supporting web service calls)
- I saw whole one slide about Silverlight architecture shown in about 15 seconds and 4 sentences
- I saw the same egg example used at literally every Silverlight presentation here
What I didn’t saw there in that one hour is:
- Presenter excitement about breaking and revolutionary new technology SL truly is
- Business value Silverlight has (beside games and video players)
- That Silverlight is NOT media player plug in
- A big picture about how Silverlight relates to ADO Net Data Services, FeedSync, Entity framework etc
- Why I should choose Silverlight instead of Ajax, WPF, Flex, Flesh, Air etc
Anyhow, I saw a bunch of people taking notes so I guess the decision to make sub L100 session was the right one after all for majority of developers attending the presentation.
Keynote was done by Ryan Stewart (firstname.lastname@example.org,twitter:ryanstewart) who is Adobe Program Manager.
His main points were that Flash is deployed to 99% of the computers with 8 million installations/day, with a very efficient flash sandbox update mechanism (when they roll out Flash 9 it took them only 12 months to complete update of most of Flash 8 sandboxes runing on client computers)
He pointed that they have a long wining tradition of being the trend setters (Acrobat reader 1993, Adobe Flash 1995, Adobe Air 2008)
Then he outlined their vision with a nice diagram showing the Adobe ecosystem where Flash covers the web needs, AIR desktop segment with Flex providing client framework for both of them
<place for diagram>
Flash 9 has significant improvements in areas of multilingual support and localizations enhanced visual performances (with GPU hardware rendering, Rich media support and Dynamic streaming (streams optimized per user bandwidth), 3d visual effects (transitions and transformations)
Most of the thing they mentioned as new in Flash 9 I can see similar to Silverlight/IIS7 stack and that is great because Flash/Silverlight crosspolination would bring only benefits to us developers
And then he mentioned what is Adobe Air…
“Adobe AIR enables web developers to use existing technologies to build and deploy rich Internet applications on desktop”
My first reaction was:”Dough?”. I came here to see how Air compares to Silverlight and realized that they are not competing at all. In fact they are two technologies taking totally opposite directions:
- Silverlight takes direction where he moves desktop programing model (WPF, .NET) to web by executing “desktop” code in SL sandbox
- Adobe Air is opposite allowing web programing model (jscript, html, css) to be executed on AIR Sandbox allowing us doing the desktop applications using Web technologies
I would say that behind that technology differences, there are two different business models Adobe and Microsoft are playing on:
Adobe plays on the fact that web applications and web developers are already deep into the enterprise so reusing the already built web applications “free of charge” in desktop environment and the same skill set of web developers. Sales pitch: “you already have the site. desktop enable it!”
Microsoft sales pitch (IMHO) is slightly different:“We know how hard is to do web development so we have a sandbox which removes the need for web development. You just do the “client like" development without having to face the same problems you are facing now.”
Ryan then show couple of demos, how RIA desktop application can look
He showed web application application done for NY Times http://www.shifd.com/ which has support for Air and demo how web site and client application cooperate. He also showed how you can SMS the data and told that iPhone support exist. Having the same app running on multiple platforms (Air and Silverlight) looks very important to both Adobe and Microsoft which I can understand considering how Mobile market is getting more and more business value .
He summarized at the end why we would like to do to RIA AIR development at the end:
- Persistent connection (offline support)
- Branded experiences (not limited by browser, pick your won window shapes etc)
- Desktop functionality (file system, notification windows, SQLLite local DB support)
- Data access (REST, HTTP, SOAP - same as you do in Web)
- Efficient development
Building AIR application can be done free (There is free AIR free SDK and Flex SDK) but for best productivity use:
- Adobe products –> Fx, Dw, Fl (support for debugging, packaging for Air) or
- Eclipse Aptana which is 3pty tool plug in for Eclipse
Air future: Air 1.5 version would sync with Flash Player 10, sync up with WebKit capabilities.
For more general level information's he recommend use of a central URL: http://www.adobe.com/go/ria
Hello world in Adobe AIR
Mike Chambers (www.mikechambers.com) then had a small session showing how to do do hello world application using Flex Builder and AIR
He pointed that Flex Builder is built on top of Eclipse.
It was standard presentation where he created new Flex Project, picked on second screen that he wants to create desktop application and the default project was created (check out Flex 3 help file for how to build AIR applications with Flex 3 for detail instructions)
Default project has two application files:
AIRHelloWorld.mxml root application file which would be compiled to swf containing markup and ActionScript/JScript code
AIRHelloWorld.xml - application description file (defines metadata needed by runtime: filename, files needed etc)
Some of the elements defined in application setting xml file are:
- <id> - unique app identifier com.mikcehambers.AIRHelloWorld (not seen by users)
- <name> - name of application (user sees, add/remove programs, shortcuts etc)
- <version> - exposed to application used for auto update
- <description> simple description which would appear on installation screen
- <initalwindow> - elements specifying how app launch and how it looks when launch
- <systemchrome> – values: STANDARD/NONE) – standard gives the standard windows chrome regardless of what OS user have, none gives opaque window, without maximize, minimize buttons, title bar etc
- <transparent> (used in combination with systemchrone -> none with true window allows having irregular shape windows)
- <visible> default false! Once the app is ready to go set it to true (Dynamic layout)
Note: Adobe MXML looks very, very similar to XAML!. Not sure if they have cool stuff like extensions, dependency and attached properties etc, but I can read MXML markup code without any problem
Once the hello world app got a button in center of window and a AIR logo image in right corner, Mike exported it to release build (Project/Eporrt to release build menu item). Interesting thing regarding the building process is that AIR applications HAVE TO digitally signed (one of wizard steps ask for certificate location – with an option of temp signing in)
And the message I got on my lap top after that (installed app was still working after that )
After hello world app was done he spoke about jscript to Air book and Flex reference poster, pointed to www.tostring.org web site which contains online version of those books and to http://onair.adobe.con/blogs/tour as place where to go to grab presentation material from presentations made on tour.
Adobe AIR done with Jscript
This presentation was done by Kevin Hoyt (email@example.com, http://blog.kevinhoyt.org) which started his presentation by doing a demo of CleVR.com site done in AIR where he uploaded couple of his panorama photos he made yesterday with his 10 MPix camera. The site took couple of his pictures and stitched them into one panorama wide picture. He emphasized couple of times that the pictures are very big and that the AIR app is smart enough to melt them together resolving their intersections automatically.
Who said Silverlight DeepZoom?
He used FlexSDK (can be downloaded from here for free) together with Notepad (whatever the OSX name for Notepad app is) and showed how a simple standard HTML page with standard HTML tags would execute on on desktop.
Beside the free tools, DEV could download the Dreamweaver CS4 beta from labs.adobe.com or download a AIR extension for Dreamweaver CS3. Another option is 3pty plug-in for Eclipse called Aptana which contains (beside other things) a lot of examples how to do most of the common activities with AIR.
He presented then very important file in FlexSDK, AIRAliases.js which performs mapping of AIR types to jscript classes.
That’s how while working with jscript classes you are using in fact the AIR. He showed a demo of how from jscript code he can write files to local hard drive using the mapped functionality
He pointed also to two different commands for adl and adt (where adl allows testing air application without installation – useful for real world development)
Kevin Hoyt also did the next presentation called script bridging where he show different examples of integrating different scripts.
He was using on this presentation Flash CS3 to show couple of demos:
- Drag & drop functionality
- Accessing CSS elements directly from AIR
- How to create a browser wit some cool extensions
- How FlexBuilder enables browser DOM debugging directly in ActionScript.
An example of how to access DOM he used was through htmlLoade class, something like this
An example of how to access flash library from AIR
air.FileStream = window.Runtime.flash.filesystem.FileStream
He showed also a demo of jscript application reading the content of the zip file using the library.swf ActionScript library done by David Cheng directly by jscript. According to him, this approach allows us (even if we want still to keep jscript applications to enrich them with functions they wouldn’t have without script bridging.
At the end he mentioned that on his blog (http://blog.kevinhoyt.org) example with zip library, custom hrome and custom grid done with CSS and jscript can be found
Czech Flex user groups
After the lunch (Staropramen beer, lots of tasty food on a perfect day – thanks Adobe! ) we had two short presentations on Czech/Slovak.
First one was presentation of Flex user group done by Juraj Michalek (www.flexgarden.net).
Key points: bunch of Air and Flex online seminars on their site and he said they are very willing to provide their help through their Flex user group at
Second presentation was done by authorized Adobe partner which host the www.flash.cz site with more then 60 articles for beginners on flash and flex and also with expert answers provided for Flex developers.
Deploying and updating AIR applications
Jasper showed how to deploy and update AIR application in 3 simple and straightforward steps
- Get your application signed
Adobe AIR application have to be signed by some certificate so during the installation of AIR application publisher identity would be known (green icon). He mentioned that most of certificates we have now would probably be ok for AIR. In case we don’t have any certificate he recommended buying one for $299/year from thawte.com)For a limited number of applications uploaded to Adobe AIR Marketplace , Adobe would provide complimentary code signing certificate (http://adobe.com/go/marketplace )
Once we have the certificate, signing application is very easy: all we need to do in Step 2 of publishing AIR application we need to provide location of certificate file and password and that’s all.
- Deploy your application
Bad way to do that – zip air app and provide a link on site – sucks big time
Good way: use installation badge which is kind of customized installation screen where user clicks on install button
and the application install application and AIR (after showing two security informational screens) .
Adobe provides 3 types of badges: standard, beta and custom.
- Standard is available in AIR SDK, ready to use now but only with standard use cases. Source available
- Beta badge – available on http://labs.adobe.com. Cool new look and extra features (can show video, help functionality)
- Custom badge – developer have to define everything. Most powerful, but also most complex to implement
- Update your application in five simple steps (Adobe “ClickOnce”)
- Check from application if server contains XML update file containing information on current application version
- Check then if installed application is older then version on server
- Create instance of the Updater class
- call Updater.Update method
- Updater would close AIR app, install new version and then restart the Application
Application update – DONE!
AIR API Overview
All of the examples he presented are available on his web site illustrating all of the common usage scenarios.
He was speaking about 6 major API function groups
- Window API major API features:
- Multi window support
- Transparent windows
- Window types (Standard, Utility and Lightweight)
- Always in front window
- File I/O major API features:
- Full Read/Write access
- Native File dialogues (save, select, select mutliple, directory)
- Async and Sync APIs
Note: I really don’t get why Adobe supports async mode. Due to the fact that browser is single threaded, file I/O operation would block the whole browser. To me that feature looks like a nice rope Adobe gave us DEV to hang ourselves
- Database support
SQL Lite DB support
Zero setup single file
SQL Lite stores all data in one file using applicationStorageDirectory comand –> (Silverlight IsolatedStorage)
SQL Lite supports transactions and the sql code executes 10x faster when using transactions (reducing number of file I/O operations)
To me SQL Lite is trying to do exactly the same as Microsoft Compact SQL Server with more limited stack of operations.
- Drag & Drop/Clipboard
- Web services support
He showed an example how to detect internet connectivity status by pininging google.com by doing something like this
new UrlRequest(www.google.com) class
- Misc - Encrypted local store
- dock notifications
- idle notifications
Google App Engine
Dion Almer, cofounder ajaxian.com, works at Google code
At the beginning he showed http://prague.360cities.net/ flash application powered by google maps which looks to me as Microsoft Deep Synth competitor (Altpught DeepSynth is much more serious, compare their example with the one from 360cites site)
The rest of the session he was speaking about Google app engine which should help building developers scalable sites in Python for free (to up to 5 million page views)
Another Interesting thing (I’m sure my friend Lorenzo Bolognini already knows about it) is that Django Python framework is fully supported (except ORM features)
Another interesting question he answered was”
Well, instead of each one of us hosting jscript libraries, Google host at http://code.google.com/apis/ajaxlibs/ jscript libraries for jquery,
Data intensive AIR Applications
I was expecting a lot from this sessions because seeing what Adobe has to offer in this area is very important for LOB applications/sites, but I get the least from this session.
The reason why lays in the fact that most of his presentation was wrapped around Adobe specific Blaze DS and Live Cycle server which are providing server side infrastructure for efficient RPC type of communication.
He showed example from http://www.jamesward.com/census on what performance gain usage of Adobe servers brings to game which looked nice but he mentioned that the data transmitted is in binary format (AMF3) with RPC which is not very firewall friendly. In post RPC era I believe we are messaging should be done by open protocols on firewall friendly ways
The difference between the Blaze DS server and Live Cycle server (beside Blaze being Open Source solution) is that Live Cycle server supports offline scenarios allowing applications talking to services to work even application would be offline and Live Cycle Data Service server would take care about synchronization and conflict resolution once the Internet connection would be up again.
Live Cycle Data Management services have XML configuration file (like the BlazeDS has) where user defines SQL adapters with the sql scripts. Original CRUD operations are modified there to support the offline/online updates which occurs on commit (and use the xml defined data). So we have a XML file filled with dynamic SQL statements. Good thing that none of the DBE were not attending because I’m sure there would be DBE yelling in that moment.
To me this example looked very familiar with “Astoria offline” demo from Mix ‘08 and I am feeling much more comfortable with solution based on REST Atom services/ FeedSync based solutions (which is btw free) versus something which looks like closed Adobe product.
Couple of useful links:
Live cycle (additional options as support for offline, conflict resolution etc)
http://www.aobe.com/products/livecycle (1 CPU license for free)
AIR + Ajax
This guy REALLY likes jscript. According to him we should be all doing jscript everywhere and anytime. And the examples he showed give him a lot of credibility in that
Why Ajax in AIR?
- Code reuse (we already have a bunch of jscript code)
- Skill reuse (we already have a bunch of jscript developers)
- HTML is REALLY good at some things ( build blog reader only in flash is not having sense)
- maintain UI patterns (same UX for web and desktop)
He showed some data graphs about sales of programming languages books showing that jscript interests is growing rapidly.
He demo couple of very interesting applications using AIR:
- AIR twitter client: www.getsnitter.com (jQuery, custom chrome, transparent, word count, notifications)
- SalesForce.com desktop client done in AIR (adobe tree controls, drag and drop of vCards)
- Robotreplay – story of usability with youtube example where everything user is not looking directly is blurred
- MacDoc wanna be – fisheye , jscript, css and png files rotating
- Spreadsheet like greed (Wizard defining data binding of grid, column mapping, live scrolling or paging etc
Dreamweaver creates php, jscript, css)
- Nice bubble tooltip creation tool
- ReadAIR – jQuerty built google reader clone
- Snippetly – stores code snippets in SQL LIter (writen in jscript using Mootool linrary)
- VOIP and SMS in AIR demo
Tabria client which calls the phones of both of people in chat using the local lines and allows them to talk over the Tabria network and/or to send SMS messages
Then he was speaking about some usability pitfalls in AIR:
- Keyboard shortcuts
- Minimize, move close when "chromeless"
- Mouse hints, invitations, tool tips
Activity indicators have to be implemented explicitly
At the end he mentioned that http://www.nitobi.com/air has bunch of useful links
has bunch of links
- use Flex when in need for : Application layout, data binding, superior coding expereince, components sets
- use flash when in need for: Animation, Video etc…
- Windowing demo He presented an application creating different types of windows (Normal, Utility
and Lightweight) combined with different Chrome options (System, Custom (Opaque) and
Custom (Transparent). He also showed “staying on top” of windows and full screen mode where air capture keystrokes even in full screen mode.
Examples he used to show this were:
- Hell’s kitchen custom chrome video player,
- a nice sidebar staying always on top with a collection of buttons producing different farts
(Seeing that no one is laughing on that, he said “This would be really funny in US”)
- Boss application
He opened a game and a Safari with PiratesBay site where he typed CS3 and the list of pirated version with pirated serial keys downloads appeared (really funny), and then he press the boss key and
- Papervision 3D
Thanks to using of GPU hardware acceleration, he showed really fast 3d carousel with live videos
- Menu-ing API
He presented that AIR supports OSX Application menu and WindowsLinux window menu (menu attached to application window, under title bar)
Developer have to do checks in the code during the run time to see if a given type of environment supports some type menu or not. He showed support for Dock menus (Mac only) and System tray menu(windows).
An example he used to demo the functionality is called :SpitEmOut and it is awesome minimalistic video player with snapshot capabilities , where every snapshot taken is randomly aligned around video player
When he was showing that context menu is not containing any “About Adobe Flash” entries (fully customizable) he called that “no Adobe usual crap in menus” Hilarious …
- File class
Worth of mentioning here (which was not mentioned before) is that AIR is in advantage over the Flash 9 with file related functions, but Flash 10 would have all the AIR file features (writing to local disk, reading from disk etc). The size of encrypted local storage is 10 Mb per application and encryption used is the default one of the user OS
Example he tried to show to us was downloading FLV file from you tube but that didn’t work (my guess due to WiFi network being down at that time)
- Drag & drop functionality
Supported D&D modes:
- Application <->Desktop
- Application <-> Application
- Application <-> Browser
You can customize the drag & drop picture.
Example: Flash video player dragging the FLV video file to video player example
- OS Interaction.
Supported: - Launch on user login mode
- File associations (full manipulation)
- Tracking user presence (application is aware of user being idle where idle threshold must be more then 5 seconds) - Control over application invocation and termination through appropriate events
- Only one instance of one AIR app can run at the same time
The example he had was targeted to Microsoft and Vista UAC. He made a little app which was after user was idle for 5 seconds popping up a dialog with a message like "Are you sure that you want to move mouse?" in a dialog box looking like Vista dialog box (grayed background, system colors etc)
A bit to much Mac-ish for my taste. Speaking about Macs: guys from Adobe looked really surprised when they saw a minority of people raising hands on “Who’s Mac owner”… I guess that’s because in US Mac has much higher penetration in the Adobe user group. Each one of the presenters was using Mac for its presentation
- With AIR you can associate any file type on user computer to AIR application. He showed an example where he switched application handling the FLV files to start up his GoogleAds AIR application.
I can see a bunch of people trying to do the same thing and I am not sure how AV software would prevent this because in a sense it is not real virus but the effect (in case of most users) would be the same as you have Trojans in your computer
- WiFI example
AIR can get information from Wireless card about available networks. He used this example to show us how to pass start up parameters to AIR application. Also he showed network connectivity AIR functionality together with cross application communication (AIR to AIR, AIR to SWF (through local connection)
Adobe organized great event here in Prague where even persons like me (new to Adobe ecosystem) get a lot of important information's.
To me the most important thing I was hoping to get answer on was: How Adobe offerings compare to Microsoft Silverlight stack.
The answer I got can be summarized as: Adobe doesn’t have a chance on long run. The only thing they have huge advantage is Flash plug in penetration (99% of browsers) but IMHO is just matter of time when MS would get similar figures with SL.
Here’s the comparison (although it is hard to figure out what to compare “AIR vs SL” or “AIR vs WPF’
Adobe is limited to ActionScript and jscript. Silverlight supports CLR (C#, VB) and DLR langauages (Iron Python and Iron Ruby) - including even php support through Phalanger project.
The decision Microsoft made in SL 2.0 to get rid of the jscript in favor of .NET languages is perfectly fine with me.
Although I was surprised with how good Flex Builder 3 and Flash IDE’s are (thanks to Eclipse) my opinion is that they are still not match to VS IDE offerings (standard with or without plug ins).
Microsoft Blend in version 2.5 is “still not right there” but it is making big steps toward being designer friendly tool. IMHO, all Blend needs is mainstream adoption from designers which would bring significant feedback “from the trenches” which is only thing Blend team need. I am not even sure that the people criticizing it is not criticizing it because mostly “it is different then Flash”… Ah, time would tell about this
Very important difference here between the platform is that (according to demos I saw) there is no “code behind” in Adobe case (markup and ActionScript code are mixed) which definitely makes life difficult in case of multiple personas working on the same file (conflict resolutions etc)
Microsoft SQL Compact and Adobe SQL Lite look like doing the same thing on same way (no installation, app local database). I am biased a bit, but SQL Compact coding model (standard ADO NET code) looks more robust and powerful then the one I saw for SQL Lite
We are living in SaaS and S+S era, so Adobe proposal of using propitiatory AF3 binary format with RPC communication style looks not very convincing.
In Microsoft stack we have WCF supporting a bunch of different messaging protocols. There are also ADO NET Data Services with their RESTfull AtomRss API.
LiveCycle offers a offline mode with syncing and conflict resolution, but having FeedSync and Astoria already and Astoria Offline prototyped at Mix ‘08 removes that advantage for me.
The big differences here are :
- FeedSync and Astoria can work with ANY sync and data provider
- MS Offering basically comes for free
Web/Win/Mobile code reuse
Adobe AIR tries to bring the html/jscript support to the desktop, which has sense on short term but I don’t think anyone would really like to do their desktop applications coding in jscript. Also, Adobe take on mobile phones support is that they al support jscript, html and most of them Flash which might and might not be true, but still (AFAIK) requires serrate coding
Having SL as “a subset of WPF” and heavily investing into the WPF/Blend with the whole machinery MS has would (I’m sure) bring much more code reuse in case of SL/WPF then the Adobe offering. Mix ‘08 mobile demo showed SL supported on Nokia phones and windows mobile powered smart phones where the same application written for WEB/WIN would works on Mobile thanks to the WPF built in scaling features
We didn’t saw any demo about acceptability, internationalization features etc.. which are the features supported very well with SL… Having whole stack of supporting technologies (Entity framework (it will get right in V2), SQL Data services), best customer support (books, videos, MS evangelist, training etc) most of those technologies totally free with source code available makes this a clear choice to me: