Silverlight Hack

Silverlight & related .NET technologies

About Me

Welcome to Silverlighthack.com.  This is a site where you can find many articles on Silverlight, Windows Phone 7 and .NET related technologies.  

My name is Bart Czernicki.  I have been working with computers since 1988 and have over 12 professional years in the IT field focusing on architecture, technology strategy and product management.  I currently work as a Sr. Software Architect at a large software development company.

Below is the cover of my new book that shows how Silverlight's unique RIA features can be applied to create next-generation business intelligence (BI 2.0) applications.

Silverlight 4 Business Intelligence Soft 

Contact: bartczernicki@gmail.com

View Bart Czernickis profile on LinkedIn

NONE of the comments or opinions expressed here should be considered ofmy past or current employer(s).  The code provided is as-is without anyguarantees or warranties.

Silverlight 3 and F# Support in Visual Studio 2010

The goal of this blog post is to make you aware of F# support in Silverlight in Visual Studio 2010.  In addition, this blog post shows an example why F# is going to be very important for Silverlight architects and developers.  Note:  This is NOT an intro to F#.

Demo and Visual Studio 2010 source code are provided with this article.

In Visual Studio 2010, F# is a first-class language.  Over the last several months, the language has been "productized."  It is officially part of the Visual Studio 2010 ecosystem (tools and .NET 4.0 framework).  However, F# is not limited to the full .NET framework; it is also available in the Silverlight runtime.  This is really exciting as this allows you to take advantage of functional programming features in Silverlight.

 

In Visual Studio 2010, the "F# Silverlight Library" project is natively supported.

 

Silverlight 3 application that includes an F# assembly.

  

Why should I care about F# in Silverlight?

Most C# developers/architects who do not have experience with functional programming language features could assume that F# is another language like Visual Basic, J# or C++.  It would be wrong to compare F# to any of these languages (including C#).  As a functional language, F# allows developers to design software using the functional paradigm.  What does that mean?  This means functional patterns such as interactive programming, pattern matching, immutable data types, type inference, lambda expressions, workflows, higher-order functions, discriminated unions, etc., are all included in F#.  While taking advantage of these features, a developer using F# can use the type system, implement object-oriented design and make use of the .NET classes.  This makes F# a very unique language that combines all the features of a first-class .NET language (i.e., C#) and a professional functional language.

Note: F# compiles to IL just like any other .NET language.  However, F# has been designed from the ground up over the last couple of years.  Therefore, the IL it generates has been optimized and many new language optimization features have been implemented.  For example, you may have seen blog posts that compare C# and F# syntax that shows F# compiling into cleaner IL and faster code.  Conversely, C#'s core functionality has not been redesigned in about a decade (C#/.NET has been extended with functional features such as type inference, extension methods, lambdas, AST, LINQ, etc.)

 

Show me some code that proves how F# can add value to Silverlight

This short blog post is not meant to be an F# introduction (Please see links below for intro material).  However, I did want to pick at least one compelling feature that really shows off the power and functional brevity of F# married with Silverlight functionality.  The feature that I decided to show off in a Silverlight F# module is a concurrent programming pattern.

If you do not already know, Silverlight supports distributing logic up to eight processor cores (This frustrates me that Microsoft doesn't adverstise this enough). In my opinion, concurrent programming is THE biggest feature of Silverlight over other RIA technologies (i.e., Flash, JavaFX).  However, implementing asynchronous patterns in Silverlight is not trivial.  The callback pattern is messy and leads to a lot of code.  Silverlight runs in an STA mode and requires UI elements to only be modified by the main thread (dispatching or synchronization).  Even asynchronous constructs like the BackgroundWorker that are supposed to make concurrent programming simple lead to many messy lines of code with events.  Wouldn't it be great to get the benefit of asynchronous programming without having to write many lines of additional code?

One of the fantastic features of F# is that the default type immutability and functional design allows the language to express the desired result declaratively.  This means you write F# syntax by telling the program what you want it to do rather than how to do it.  For example, if you are using constructs that use secondary threads and allocate code to these threads, then you are writing imperative code.  A lot of lines of code are wasted telling the code how we want it to behave.  Wouldn't it be better to define pieces of logic and simply say that we want them to execute in parallel?  Functional declarative code in F# can do exactly that.  F# includes a feature called asynchronous workflows that allow you to write logic by composition with the aim to be executed in parallel.

Initial Steps

  • I created a simple Silverlight application.
  • I added an "F# Silverlight Library" project
  • In the F# assembly, I added an F# code file called ConcurrencyTest.fs.
  • I created an F# function called addNumbers that takes two parameter:
    • The first parameter is an accumulator that is the existing sum in the running sequence (This will be passed by the reduce sequence function).
    • The second parameter is the number in the sequence we want to add.
  • I created an F# function called squareNumber that takes two parameters:
    • The first parameter is an accumulator that is the existing square sum in the running sequence (This will be passed by the reduce sequence function).
    • The second parameter is the number in the sequence we want to square.
  • I created an F# function (equivelant to a C# method) that takes no input parameters named PerformTwoLongRunningTasks:
    • Inside that function, I defined two tasks that use the addNumbers and squareNumber functions to add the numbers across a sequence of numbers from 0 to 10,000,000
    • The PerformTwoLongRunningTasks function returns an array of 64-bit integers.  The array of 64-bit integers are the results of the two aggregates functions.
    • The first function returns the sum of the numbers.  The second function returns the square of the numbers.

The F# static method/function is shown below (Some familiarity with F# is required to understand what is going on, but I commented on the code for those unfamiliar with F#):


Now that we have this function (static method) defined in our F# library, it is ready to be used.  In the Silverlight application, we can add a reference to the F# library and then we can call the function (static method) as shown below in our C# Silverlight MainPage class.  Note that below we are calling the function just like we would call a static method with the [Name of Class].[Name of public function].  Notice also that because F# uses the base .NET type system, the returned array of integers does not need special casting/marshalling to C#.

Parallizing the Tasks

Now it is time to parallize the two tasks and scale it across multiple logical/physical processor cores.  As mentioned earlier, we are going to accomplish this with asynchronous workflows. In the figure below, I highlighted the changes to the function and it now scales across multiple cores.  This was done in two steps:

  • Wrap the body of the member functions with the async {... } syntax.
    • Add a return keyword (This signifies the return parameter/completion of the body).
    • The body of the function Seq.reduce addNumbers {0L..10000000L} now becomes async { return Seq.reduce addNumbers {0L..10000000L} }.
  • The main function (PerformTwoLongRunningTasks) now returns an array of async tasks.  These can be thought of delegates that need an Invoke-type command to execute them.  We simply change let results = [| task1; task2 |] to let results = Async.RunSynchronously (Async.Parallel [ task1; task2 ]).
    • All this does is tells the F# compiler to parallize these tasks.  However, run the result synchronously.  Therefore, the code returns to the main thread and we do not need dispatching/synchornization, etc.  This is analogous to creating a wait event in C# and having the two pieces of logic scheduled on secondary threads and waiting for this process to come back.


Asynchronous workflows allowed us to simply wrap the tasks as an "async function" declaratively.  This is a very important distinction as we just declared the logic and told it we want this to run in parallel.  Notice we didn't tell it "how to run in parallel" (imperative code).  Therefore, we did not have to:

  • explicitly start, stop threads (i.e., Thread.Start)
  • use BackgroundWorker
  • use callbacks (AsyncCallBack)
  • use BeginExecute asynchronous pattern

We simply told the code we want the tasks distributed among multiple cores and let the F# compiler figure out the hard part and generate the IL.  This is really powerful and in the very near future of "declarative parallel processing".  This is an example of what I mentioned earlier that the F# compiler has been designed recently and can include this type of "magic" right in the language.  C# does not have this feature and needs to be extended to provide this kind of automation.


Can't I do this with PLINQ?

Those familiar with the Parallel Extensions Libraries that will be added to .NET 4.0 might be aware that LINQ has been extended with parallelism features.  This allows you to extend your existing LINQ queries with parallism features.  This is known as PLINQ (parallel LINQ).  For example, a screen shot below shows a LINQ query that can be easily parallized by simply adding the AsParallel() extension method.

Unfortunately, the Parallel Extensions Library will NOT be available for Silverlight for the Visual Studio 2010 release.  However, I think that there is a good chance future versions of Silverlight will eventually get this feature.  There are some big features in the Silverlight assemblies that are simply missing and need to be added before features like PLINQ can be added.  This is exactly where asynchronous workflows can be substituted for PLINQ in a Silverlight application.  If you are working with large data sets, complex math computations, AI for a game, etc., parallelizing your code in F# libraries makes pefect sense for a Silverlight application.  This is MUCH easier than writing your own imperative multithreaded code.

How about the Performance?

I extended the functions and created functions for two, four and eight tasks and put this in a Silverlight application.  On my workstation (four cores), there was about a 50% improvement by parallelizing the two tasks.  With four tasks, the improvement in performance was about 3.5x.  As you can see, asynchronous workflows can easily dramatically improve the performance of your code on the Silverlight client.

Click the picture below to launch the demo application

 

Getting started with F#

Information on F# has been around for several years.  There are many articles, white papers, and books on F#.  However, you do have to be careful and get content that is recent and relative to the current F# release.  The F# specification has changed dramatically over the last several months as the language was being "productized" and many methods/functions simply don't exist in F# anymore.   Below are some links I put together where to get started.

Videos

  • Getting Started with F# - This video (from the 2008 PDC) is the place to start if you have zero F# experience and/or if you want a really good introduction into functional programming and some F# examples.

Books (I have read four different F# books and the two below are by far the best ones and most current.  Don Syme's F# book is good but a little outdated.)

Websites

  • http://www.fsharp.net/- This the main Microsoft F# page.  Includes numerours links, downloads for Visual Studio, F# extensions, etc.
  • Don Syme's blog - Don Syme is one of the main "creators" of F#.  His blog is a must read to get insight into advanced topics and upcoming F# news.

 

I hope this post gets Silverlight architects/developers exited about upcoming F# support.  F# is another tool that software architects can use that helps them create better software.  Furthermore, F# suport is another example of Microsoft's ability to integrate the Silverlight runtime across the .NET development stack.

kick it on DotNetKicks.com
Posted: Nov 04 2009, 16:16 by Bart Czernicki | Comments (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:
Social Bookmarks: E-mail | Kick it! | DZone it! | del.icio.us

Silverlight 3 Beta - Downloads You May Have Missed

Everyone that is interested in Silverlight 3 Beta development has probably checked out all of the core items in the release: Silverlight 3 SDK, Silverlight 3 Tools for Visual Studio 2008, Blend 3 Preview, Silverlight Control Toolkit (March 2009 version).  There have been several other releases that are related to Silverlight 3 you may have missed and are a little less obvious if you are new to Silverlight development.  This blog post deals with the items that are a little less obvious but important to know about.  Not all of these downloads are targeted for Silverlight 3; however, they should work with Silverlight 3 Beta.

"There have been a ton of tools released

with Silverlight 3.  Did you miss any of them?"

Data Access

Silverlight includes several different ways to consume data (most of them being via services).  There have been three new updates to the data service frameworks available for Silverlight released recently:

  • .NET RIA Services - This is a new n-tier design framework released during the MIX 2009 Conference.  This framework allows you to factor more of the work into the service tier for business logic, validation, errors, querying, etc.  This framework is new to the Silverlight 3 Beta.
  • ADO.NET Data Services 1.5 CTP1 - This is a preview version of the upcoming update to ADO.NET Data Services which provides client and server enhancements for Silverlight developers who create service applications.  It is very similar to .NET RIA Services (In fact, many people think these are the same; however, these are DIFFERENT frameworks)
  • WCF REST Starter Kit Preview 2 - Yet another data access framework from Microsoft.  This framework targets WCF and applies REST architectual patterns for service access.  In my opinion, WCF with REST gives you the most flexibility and control when creating data aware applications with Silverlight.  Using interceptors, you can control every aspect of message headers, creation, caching across the channel stack.  The WCF REST Starter Kit will be included with .NET 4.0/Visual Studio 2010.
  • IdeaBlade DevForce - This is a 3rd party framework that works along the same lines as ADO.NET Data Services and .NET RIA Services.  They have some additional tools that take away some of the hassle of developing data access layers with Silverlight.  However, they are not FREE and they are a 3rd party framework.  They do have positive reviews.  The biggest difference between them and WCF REST, ADO.NET Data Services 1.5 and RIA .NET Services is that their product is out now and ready to be used.  If you want a Line of Business framework that is ready for production, give them a look. 
  • IdeaBlade web site

  

Architectural Pattern Frameworks

 

Silverlight is a plug-in that allows you to do a mix of web/winforms development.  However, its similarities lend itself to the same UI patterns that are well documented in WPF.  Furthermore, Silverlight as a plug-in needs to be hosted in a web environment.  Architecting the data flow from the host to the plug-in is also important.  This is where the MVVM and MVC architecture patterns apply.

  • ASP.NET MVC 1.0 - If you are working on the web, you have to host your Silverlight application somewhere.  ASP.NET MVC 1.0 allows you to build Model-View-Controller architected applications inside ASP.NET.  If you are implementing REST access or URL routing navigation inside your Silverlight application, ASP.NET MVC will wrap like a glove around your Silverlight XAP files.
  • Composite Application Guidance (also known as Prism v2) - This is a composite framework for Silverlight and WPF applications.  Microsoft provides guidance for enterprise development using the MVVM pattern and implement Commanding for Silverlight. This framework also includes a complete StockTrader example.
  • Microsoft Azure (March 2009 CTP) - Visual Studio 2008 Tools have been updated if you want to write applications in the "Microsoft Cloud".  Mesh Enabled Web Applications allow you to use Silverlight as the front-end for Microsoft data services.

  

Media Streaming with IIS 7.0

 

Silverlight 3 enhances the multimedia experience by providing true 720p HD streaming in full screen, hardware accelerated video processing and smooth streaming.  Many of these features were pioneered during the 2008 Olympics broadcast in NBC.  Microsoft has made this technology available to anyone who wants to host a Silverlight experience using IIS 7.0

  • IIS Media Services - Allows IIS 7.0 to be turned into a web server that can stream HD quality Silverlight media streams with smooth streaming technology that powered the NBC Olympics 2008 Site.
  • UX Media Simulator - This is a media player that allows you to graphically tune and visualize what happens when your Internet bandwith drops and Silverlight smooth streaming kicks in.  Pretty good tool to use to debug your content if smooth streaming is important to you.

 

Additional Tools

 

Silverlight's unique ability to run on the client while hosted on the web has provided it with many interesting capabilities that were previously hard to achieve.  Here are some tools that make our lives easier for developing in Silverlight:

  

Add-Ons and Code Examples

 

Microsoft has made a lot of the features really extensible in Silverlight 3.  Microsoft showed off many features in Silverlight 3 that can extend the features provided.

  • Expression Web SuperPreview for Internet Explorer - This tool allows you to test/debug your applications in IE 6, 7 and 8.  It is very cool and a must for any online compatibility testing with IE.  Most Silverlight applications remain web hosted so this applies to Silverlight as well.
  • Expression Blend 3 Sample Behaviors - Expression Blend 3 includes something called behaviors.  This gives designers the ability to drag and drop and add "triggers/events" to the design objects and have them "behave" in certain ways.  During MIX 2009, Microsoft showed off some real cool behaviors like adding physics to object by simply dragging and dropping it on top of a control.
  • Silverlight 3 Pixel Shaders - Silverlight 3 now supports Pixel Shader 2.0.  This allows you to write very interesting and powerful screen manipulation using HLSL.  For example, some of the nice Windows Aero Effects in Vista are done using pixel shaders.  There will no doubt be a CodePlex project created for Silverlight Pixel Shaders.  For now, many of the existing WPF pixel shaders can be made to work in Silverlight 3.
  • Slidentity Silverlight 3 Application - Slidentity is a cool Silverlight 3 Beta application that shows off many of the new features.  It is an end to end example with source code. 

As you can see, there has been a lot of stuff released around Silverlight 3 that is well beyond the "core release".  It can be very easy to get lost with the amount of tools/frameworks/apps out there.  If I have missed any obvious ones, please e-mail me and I will add it to the list.

kick it on DotNetKicks.com
Posted: Mar 23 2009, 16:26 by Bart Czernicki | Comments (1) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: .net | Silverlight | Silverlight 3
Tags:
Social Bookmarks: E-mail | Kick it! | DZone it! | del.icio.us

Silverlight 3 Release Date (RTW) Surprise

Update 07/08/2009: Silverlight 3 RTW has been released.  Please visit my blog post here for all the download links:

http://silverlighthack.com/post/2009/07/09/Silverlight-3-Relase-and-Download-Links.aspx

Update 05/28/2009: Scott Guthrie during his online talk yesterday mentioned that Silverlight 3 is close to being finished up and will be released "soon".  I remember when he mentioned that during Silverlight 2 Beta 2/RC0 and Silverlight 2 RTW was out within a few weeks.  The release is REAL close now!  Expression Blend 3 is also getting some updates in RTW.  Also note the July 10, 2009 invitation to talk about Silverlight 3...http://arstechnica.com/microsoft/news/2009/05/silverlight-3-and-expression-studio-3-launching-july-10.ars

Silverlight 3 Beta 1 was released last week during the MIX 2009 conference.  This version of Silverlight includes many enhancements that many developers want to incorporate into their RIA projects now.  The first question that comes to mind to many architectes or development decision makers is, when is the framework going to be released so they can plan their product development schedule.  Unfrotunately, during the conference, Microsoft did not provide clear guidance on when to expect Silverlight 3 RTW.  This article tries to gauge when Silverlight 3 will be released and why.

Based on the public knowledge available Microsoft released a few days ago, we can deduce when Silverlight 3 will be released.  What does it mean when we talk about the "Silverlight 3 release date"?

"Silverlight 3 is now much more than just

simply installing the SDK and the runtime."

At its core, the "Silverlight 3 release" includes several key dependent tools and technologies that need to be released together:

As you can see, this list has grown from when Silverlight 1.0 or 2.0  was released.  When Silverlight 1.0 was released, only Blend, the SDK and the tools were released.  Furthermore, the list of tools will no doubt grow when mobile support is added to the Silverlight runtime.  With all of these dependencies, it obviously will take longer for a Silverlight release and that has to be considered when predicting when the release will happen.

Past Silverlight Release Cycles

Let's take a look at the past release cycles of Silverlight 1.0 and Silverlight 2.0 of the major betas and releases:

Silverlight 1.0 (about 2 years between first public alpha/beta -> RTM/RTW)

  • WPF /E (several betas internal and external in 2006)
  • Silverlight 1.0 Beta (March 2007)
  • Silverlight 1.0 RC1 (July 2007)
  • Silverlight 1.0 RTW (September 2007)

Silverlight 2.0 (about 1.5 years between first public alpha/beta -> RTM/RTW)

  • Silverlight 1.1 Alpha (March 2007)
  • Silverlight 2.0 Beta 1 (March 2008)
  • Silverlight 2.0 Beta 2 (June 2008)
  • Silverlight 2.0 RC1 (October 2008)
  • Silverlight 2.0 RTW (October 2008)

As you can see, both Silverlight 1 and Silverlight 2 have had pretty long development cycles between public betas to when they were finally released.  If I were a betting man based on the past information, I would bet that Silverlight 3 RTW would be a long way away (at least 5-6 months away).  Furthermore, Silverlight 1.0 has had three "beta" releases and Silverlight 2 had four "beta" releases.  I even posted my thoughts on this in the Silverlight forums, based on my assumption that Silverlight 3 would be out around when VS 2010 is released later this year.

Silverlight 3 Release Date Hints

After watching some more of the videos from MIX 2009, more information has come out to make my assumption of a release in the 6-9 month timeframe incorrect.

PowerPoint Slide from MIX 2009 - Deep Dive into Microsoft Silverlight Graphics

From the slide above, we can see that Microsoft is actually planning a release in the Summer of 2009!  That would mean it would be about a 3-6 month release cycle from the first beta to RTW.  This is pretty surprising when comparing it to the Silverlight 1 and Silverlight 2 release cycles which were over 18 months.  This information was reiterated in a Scott Guthrie interview recently that only one beta of Silverlight 3 was planned.

 

Possible reasons for a shorter release cycle

Based on the information above, we can safely assume that Microsoft is going to deliver Silverlight 3 in one of the quickest release cycles for Silverlight.  How is Microsoft accomplishing this?  I can only speculate (based on public information), but I think it has to do with a few key reasons:

  • Silverlight 3 is like .NET 3.0 as Silverlight 2 is to .NET 2.0.  .NET 3.0 added WCF, WPF, WF and Cardspace to .NET 2.0; however, the core framework did not change.  Silverlight 2 uses .NET 3.5/Visual Studio 2008 and Silverlight 3 does the same.  I think that Silverlight 3 essentially builds upon the CLR with additional assemblies and doesn't change the core of Silverlight 2 much (I could be dead wrong here).
  • Silverlight Mobile is conspicuously missing from Silverlight 3.  Silverlight Mobile was demo'ed way back in April 2007.  Microsoft showed off Silverlight 2 on mobile devices in October 2008.  Silverlight 3 obviously does not include any mobile support.  I think Microsoft cut this feature out as they re-thought their mobile strategy focusing it towards Windows 7 Mobile (out in 2010).  Cutting this major feature out allowed Microsoft to push up the date by several months.
  • Silverlight 3 is essentially going to have tool support both in Visual Studio 2008 and Visual Studio 2010.  Visual Studio 2010 will add a rich designer for Silverlight 3 where developers will be able to interact with the XAML/designer much like they are able to now with Blend.  However, this support is NOT being added into Visual Studio 2008 (even though in Scott Guthrie's Silverlight 3 glimpse in November 2008 it looked like it would be added to VS2008).  So what?  I think that the Silverlight 3 could come in parts and all of the tools won't be released until the end of 2009.  We got another hint of that with Expression Blend 3 Beta not having all of the features being present (i.e., Sketchflow).  For example, .NET RIA Services might not be released RTW with Silverlight 3 in the Summer of 2009.
  • Silverlight 3 is a key part to Microsoft's UI strategy and it really catches up to a majority of Adobe's Flash/Flex features.  Silverlight still has some features missing that Flash/Flex technology has (i.e., printing, microphone, web cam.)  However, Silverlight 3 adds and builds upon several key features that Flash/Flex simply still don't have on their radar (line of business framework, enterprise integration, multithreading).  The Silverlight 3 feature set will roughly equate to the Flash/Flex feature set.
What about Visual Studio 2010

Update note:  Visual Studio 2010 Beta 1 public release is "in a matter of months now" according to Mark Wilson (http://videos.visitmix.com/MIX09/T73M).  Maybe VS 2010 Beta 1 will be released when Silverlight 3 RTW is released in the summer?  Remember Silverlight 3 is NOT dependent on VS 2010 and will work in VS 2008 and VS 2010.  Microsoft very well might release Silverlight 3 in the summer.  VS 2010 support and add-ons such as .NET RIA Services might come later.

In conculsion, it is a pleasant surprise that Microsoft is planning on releasing Silverlight 3 in the Summer of 2009.  This would make Silverlight 3 have the shortest release cycle out of all of the previous Silverlight releases.  This release packs a lot of features and has excellent tool additions which can benefit many RIA developers.  However, I think that Microsoft may have dropped certain features (i.e., mobile support) from the release.  Furthermore, the full Silverlight 3 developer experience may not be fully realized until Visual Studio 2010 is released.  This might hurt the release in the long run.  Personally, I am excited about the early Silverlight 3 release date. The early date allows me to start architecting on the new framework with confidence that my application will not be waiting for months on Microsoft for Silverlight 3 RTW.

 

 

kick it on DotNetKicks.com
Posted: Mar 22 2009, 12:13 by Bart Czernicki | Comments (10) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Silverlight | Silverlight 3
Tags:
Social Bookmarks: E-mail | Kick it! | DZone it! | del.icio.us

Beginning Silverlight 2 From Novice to Professsional - Book Review

Quick Summary

Pros:

  • Excellent book for anyone getting into Silverlight 2
  • Detailed step-by-step exercises cover the core of Silverlight
  • Code is simple and easy to follow.  Does not introduce unecessary syntax sugar/advanced techniques that could confuse a beginner reader
  • Well organized.  This resource is a perfect example why a Silverlight novice should bye a book and not try to read from blog articles (which can contain misleading information)
  • Code exmamples work (I did not try all of them).  The ones I tried work spot on.
  • Delivers what it promises: a very good introduction to the core foundation of Silverlight 2 that can be built upon in future training or resources
Cons:

  • Does not cover some basic steps that could confuse Silverlight novices
    • A chapter dedicated to installing the Silverlight 2 SDK, plug-in, Control Toolkit and Expression Blend 2 SP1 together would have been welcome
    • "Introduction to Expression Blend" chapter completely fails to mention that SP1 is required for Silverlight 2 development. Having this critical piece of information missing from the resource is completely inexcusable as it will make the exercises unusable.
  • Does not provide much "resource value".  Once the reader has consumed the core information, only several chapters are worthy of several re-reads.
  • Truly for beginners only.  If you have done some WPF development or have done some basic prototyping with Silverlight, this book is not for you.
Detailed Chapter Overview
Chapter 1 - Welcome to Silverlight 2
This chapter introduces Silverlight 2 to the reader.  The introduction is short and to the point and explains what Silverlight is and what other analogous technologies are out there.  Not much to say about this chapter other than it is a good introduction.
Chapter 2 - Introduction to Visual Studio 2008
My least favorite chapter in the book. It feels completely out of place. This chapter introduces Visual Studio 2008 and goes over some key new features inside Visual Studio 2008: JavaScript intellisense, Multi-Targeting Support and Transparent Intellisense Mode (These features are not used throughout the book).  The chapter introduces us with the first exercise "Building Your First Silverlight Application".  The exercise is very detailed (includes screen shots in key areas) and to the point.  If you are at a book store and considering this book, focus on the exercise starting on Page 29 as it is very indicative of type of exercises you will see in the book. This chapter feels like it belongs as an appendix resource.  I would have rather seen this chapter replaced with a chapter on installing Silverlight 2 SDK, Visual Studio 2008, Expression Blend 2 SP1 together.
Chapter 3 - Layout Management in Silverlight
This chapter is very good on explaining how layout management works in Silverlight.  It introduces the main controls that govern layer control: canvas, stackpanel and grid.  There are plenty of exercises with screen shots that describe what each one does. The layout management topic is absolutely essential in order to be able to understand how Silverlight design works.  The location of this chapter in regard to the other chapters is perfect.  Developers that are not coming from a WPF/RIA background will find this chapter very informative and valuable in understating how Silverlight applications should be designed.
Chapter 4 - Silverlight Form Controls
This chapter introduces some of the base controls that make up the Silverlight 2 runtime.  The former part of the chapter introduces the syntax, properties and events associated with controls.  The latter part deals with some exercise dealing with several controls.  This chapter is very similar to Chapter 3 in that it is very well positioned in the book and the exercises do a very good job in conveying the necessary information.
Chapter 5 - Data Binding and Silverlight List Controls
This part of the resource introduces how binding works in Silverlight and then gives some detailed examples using the DataGrid/List controls.  Binding is a critical component of data-driven applications and how their information is consumed by the UI controls.  The binding component of this chapter is very well put together.  It introduces the concept and gives the reader just enough information for them to "be dangerous".  Binding in Silverlight has many facets to it and can be complex. This chapter doesn't try to overwhelm the reader with all of that information.  Having said that, if you are familiar with WPF binding, this part of the chapter will be nothing new (WPF data binding is signifigantly more complex than Silverlight's model).
The latter part of the chapter deals with consuming the data via binding inside a DataGrid and a List control.  The exercises show the reader the basics of consuming the data and presenting it in a nice way to the end user.  This part is very well done and one of the strengths of the book.
Chapter 6 - Data Access and Networking
This chapter talks about a very important concept in Silverlight of being able to request data from outside storage.  Silverlight cannot consume data directly from a database; therefore, understanding the network stack is essential for a Silverlight beginner.  This chapter covers two essential types of network communication in Silverlight: services and sockets.  Examples of both are provided in the book.  They are good examples; however, they are geared more for the beginner.  You would not want to follow these techniques in a real-world scenario; however, this does not fault the book in any way as it is meant as a novice introduction.
Chapter 7 - Local Storage in Silverlight
This is probably the most "fun" chapter for the reader as it covers the topic of local storage very well.  Furthermore, at this point in the book, the reader is finally presented with a well-crafted Silverlight exercises that shows off the power of Silverlight.  I really like the way the author presented the chapter and then introduces an exercise that builds on itself.  Isolated Storage is another one of those concepts that makes Silverlight unique and not just another fancy Web 2.0 technology.  It is a very powerful tool and the exercise presented in the chapter reinforces this very well.
Chapter 8 - Introduction to Expression Blend
This chapter is all about the design tool arm of Silverlight: Expression Blend 2 SP1.  The chapter starts off by speaking to the necessity of having a design tool because of Silverlight's rich UI.  My problem with this chapter (and the book as a whole) is that it doesn't provide all the information on Blend.  For Silverlight 2 development, Blend 2 SP1 is required.  Otherwise, your XAML design will simply not work.  This omission is completely inexcusable.  Furthermore, some links and overview of Expression Studio would have been nice.  This is a very frequent hiccup to developers new to Silverlight as they get confused by what Expression is.
The core of this chapter essentially introduces the tool and all its parts.  Even though I am critical of some of the omissions I listed above, the information here is very good for the beginner to understand where to find the design tools and how Blend is organized spacially in panels/toolboxes.
Chapter 9 - Styling in Silverlight
This is another fantastic chapter in this book, which is finally getting into some "meaty" parts of Silverlight.  This chapter covers the topic of styling.  The author does a real good job of introducing styling from inline properties, user control styles to application styles via XAML and Blend.  The author goes over a key part of styling that other blog articles constantly miss, which is the styling hierarchy and how it is applied to the control.  The concepts are presented with examples and screen shots like other chapters; however, this is where the layout of the book shines as it conveys a not so easy topic with ease.
Chapter 10 - Transformations and Animation
This part of the resource covers animations which are a core component of the Silverlight framework.  This chapter is very solid; however, the novice reader absolutely must try the examples provided to fully comprehend the information.  To no fault of the book, the different animations and transformations available in Silverlight are much easier appreciated online rather than the book.  On a website you can clearly see what the animation/transformation is supposed to do.
Chapter 11 - Custom Controls
The last chapter in this book covers custom controls and why/how you would want to write them.  This chapter is definitely the most complex part of the book and it is rightfully located as the last chapter.   The chapter introduces the best practice model (Parts & States) that Microsoft recommends in creating custom Silverlight controls.  Furthermore, dependency properties are explained and why they are key in custom controls.  The latter part of the chapter covers an example of creating a custom button following the best practice of creating custom controls.  This was one of my favorite chapters; however, I am not sure it fits well into an intro book for Silverlight.  One could make the argument that this chapter could have been replaced with a chapter exclusively on the Silverlight Control Toolkit or Silverlight's rich media capabilities (which is suprisingly missing from the book completely).
Summary
Robert Lair's Beginning Silverlight 2 book is an excellent resource for developers that want to get learn Silverlight 2.  The book is laid out very well chronologically and each section is clear and includes step by step examples and screen shots.  The code examples are written in C# using concise and simple syntax, which allows the reader to focus on understanding the new concepts rather than trying to understand syntactic sugar.  One of my presonal tests for using a book rather than online material is how much material does it offer beyond online resources (which are largely free).  Robert's book does that very well in that regard as trying to find all of the core Silverlight knowledge in one place without having a lot of misinformation is hard.   However, the book is missing a section on installing a Silverlight development with all the tools and I think that would be very valuable for Silverlight novices.  If find that many developers new to Silverlight are suprised how many tools are out there from the obvious ones like Blend to the less prevelant ones like Expression Web or Media Encoder.  This book delivers an intro to Silverlight spot on.  However, it does this almost too well as anyone familiar with WPF/Flash won't get too much out of this as a resource.  In conclusion, I would definitely recommend this book to any developer that wants to invest in the future and get their head around the core foundation of Silverlight.
This book can be purchased here on Amazon.

 
kick it on DotNetKicks.com
Posted: Feb 07 2009, 11:11 by Bart Czernicki | Comments (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Book | Silverlight
Tags:
Social Bookmarks: E-mail | Kick it! | DZone it! | del.icio.us