I’m at Mix07 in London and Developer Division General Manager Scott Guthrie is talking about how to code a Silverlight 1.1 application. For me, it follows detailed briefings from Adobe on Flex and AIR, so I’m interested in comparing and contrasting the two technologies – look out for a post on this soon. I’m not going to go over every detail of Silverlight here – there are other places where you can do that – but will pick out some details that struck me as interesting, from Guthrie’s two sessions today.
Guthrie’s approach was to run through Silverlight 1.1 features using sample code, live demos and the occasional foray into Expression Blend. He focused on the developer perspective and showed lots of C# code, so the session was of little help if you want to work with the current 1.0 release, which lacks .NET support. If you want to try Silverlight 1.1 today, you can download an alpha release, along with Visual Studio 2008 Beta 2 and Expression Blend 2 Preview. There is a fair amount missing in the current Silverlight 1.1 alpha, as we discovered.
Silverlight 1.1 will run on Mac, Windows and Linux, the last of these via a new partnership with Novell and Mono. On Linux, target browsers will include Konqueror, Firefox and Opera.
Guthrie showed how to put together a simple Silverlight app – pretty easy, if you have any web design experience. In essence, you define a GUI in XAML, and then write code in C#, VB, Python or Ruby. Code is compiled to .NET IL (Intermediate Language); XAML is parsed at runtime but can be embedded as a resource. Apparently Silverlight apps will be compressed into Zip files by default in the final release, which will improve download time and may help with firewall issues – some firewalls block DLL files.
Silverlight 1.1 controls and layout
The current Alpha has few controls, but this will change in the final release. Available controls will include:
- TextBox
- CheckBox, ComboBox, Radio Button
- ListBox, GridView
- Slider, ScrollBox
Some controls will be data-aware, and it will apparently be easy to bind something like a GridView to data on a remove server, with data delivered via web services.
I asked about rendering HTML in Silverlight. There is no HTML control, but you can overlay HTML rendered by the browser, and in addition some folk have been working on a custom XHTML control.
The current alpha does scaleable x y layout (a slightly confusing idea); but there will be layout managers in the final release, including a StackPanel and a Grid.
I asked about a licensing model for commercial controls. Guthrie says there will not be one initially, but Microsoft will explain how to roll your own – I got the impression this might use Silverlight’s DRM features.
Skinning
Another important forthcoming feature is skinning. Guthrie explained this as being like using an external CSS stylesheet (though it is not CSS). This is a designer-friendly approach and helps to reduce download size.
HTML interaction
Silverlight gives access to the browser DOM from managed code. In addition, a [Scriptable] attribute lets you access managed code from Javascript in the browser. Guthrie showed how this enables an interesting scenario: doing UI entirely in the browser, and using Silverlight as a non-visual control/library. The win here is that you can code in C# rather than Javascript, and get the benefit of just-in-time compilation as well as the Silverlight library functions.
Caching and cross-domain access
Silverlight relies on the browser to cache previously downloaded code and assets. Currently it can only access files from the application’s source domain, but there will be a way to do cross-domain access for controls and for web service calls – I believe this will use the concept of trusted domains, rather than being unrestricted. There will be limited local storage using the .NET isolated storage model, but this will be restricted to 1MB per store, and will reside in the browser cache, so it is not very dependable*.
Web service support and LINQ
Silverlight will support JSON, WCF and SOAP. It will also include LINQ, with the possibility of creating custom LINQ data providers – Guthrie mentioned possibilities like a LINQ provider for Amazon’s S3 service.
Async support and threading
Silverlight supports asynchronous calls to web services. It will also include a BackgroundWorker class for long running tasks.
Windows Mobile
A delegate asked when we will see Silverlight for Windows Mobile. Guthrie says this is planned, but said deployment was a greater challenge than technical implementation. The problem is dealing with several parties: device manufacturers, mobile operators, etc. It is hard to imagine Steve Jobs allowing Silverlight onto the iPhone; but I would have thought a Silverlight implementation for Enterprise deployment onto Windows Mobile devices would be feasible and useful. No timescale was given for a Windows Mobile implementation.
Quick reflection
This is a Microsoft-platform crowd and generally seem impressed with Silverlight, which gives them an easy route to browser-hosted, cross-platform .NET applications. If Microsoft hoped that an event like this would attract existing Flash developers interested in alternative platforms, let me just say that I do not see any evidence of this, even in the design-focused tracks. It will be a long haul.
As for Silverlight vs Adobe Flex and AIR (FLAIR?) – that is a subject for a separate post, which I hope to do shortly.
*Update: I’m not yet clear how isostorage works, despite talking to Scott Guthrie about it. Does it live in the browser cache or outside it? If it lives outside the cache, how is it that clearing the cache clears the store (Guthrie seems definite about this)? If you have two browsers, does a domain get two separate isostores, or one shared store? I’m trying to get more information about this.
shit, i made a backgroundworker for silverlight
http://www.codeproject.com/KB/silverlight/AGBackgroundWorker.aspx