PETA and AIS just completed a great Silverlight 2 application for the Animal Testing Breaks Hearts campaign.
Almost exactly two years ago, in time for the 7/7/7 Live Earth event, AIS created the first Silverlight managed code application ever to go live. It was a carbon offset calculator written for Conservation International using Silverlight 1.1alpha. AIS’s RIA practice, Silverlight itself, and the tools like Blend, have all grown since then.
Two years later, and we’re again working with a non-profit on a socially conscious application. This time, the cause is animal testing rather than environmental conservation, and the technology is the final version of Silverlight 2 rather than an early alpha preview of the technology
For this application, PETA supplied all the comps in Adobe Illustrator format and AIS converted the assets into Silverlight. Tad Van Fleet took the heart images and others and imported them into Blend 3 using the new Illustrator import function, and created the appropriate Xaml. A team consisting of Jim Jackson, Tad Van Fleet and Tom Snider with contractual work and a little oversight from me, put together the complete application, including the database, WCF services, server-side image generation for embedding, and of course the Silverlight client - all in just two calendar weeks.
The target audience for the application is 14 to 22 year olds; the graphics reflect a playful approach that will appeal to that group.
The application enables the guest to email the heart to friends, and post it on facebook or myspace.
Sign the petition (requires Silverlight 2 or higher)
AIS was contacted about this and had our first call with the client on Thursday 6/11. Work started on Monday the 15th. As to be expected, the overall design went through some pretty significant iterations over the duration of the project. The client was able to use what they were most comfortable with (Illustrator) and AIS worked in Blend and Visual Studio to use those assets. While not the ideal “designers all use Blend” workflow we often hear about, this approach is both practical and reflects the reality of these types of projects.
With more time, there’s of course more than we’d have done (a custom pre-loader tops my list), but the team did an amazing job getting this out so quickly.
The site went leave earlier this week. We have a performance tweak to get out, but otherwise it’s all wrapped up. Congratulations to the AIS and PETA on a job well done!
One reason I’ve been so quiet over the past couple months, is I have been scrambling to update Chad Campbell and John Stockton’s excellent Manning Silverlight 2 in Action book to Silverlight 3, under the title Silverlight in Action 2nd Edition (the Amazon info is out of date), to be released this fall.
I’ve done a little restructuring (but not a ton) in the process, and have also been covering as many new Silverlight 3 goodies as I can, as well as a couple extras like ViewModel and .NET RIA Services.
I just finished writing the section about UI Element binding in Silverlight 3, and thought I’d share some of the pre-edited version with you all, since the example here solves something I’m often asked to do in Silverlight applications. Enjoy!
As a reminder, Manning Early Access Program (MEAP) members will be getting chapters of the book in the next couple days, with a much larger release of content just after Silverlight 3 goes live. If you’re looking to get an edge up on Silverlight 3, I’d definitely recommend joining MEAP.
7.2.3 Binding to a UI element
Binding one or more properties of a UI Element to values on an entity, ViewModel or business object is certainly a compelling use of binding. Sometimes, though, you want to use binding for things we wouldn't traditionally consider "data", things within the user interface. You may want to bind the height of two controls together so that they resize equally, or perhaps you want to bind three sliders to the x, y, and z-axis rotations respectively of a plane (see chapter n for more information on 3d rotation in Silverlight). Rather than binding to gather input or display data to the user, you're binding to avoid writing extra plumbing code.
Let's say that you want to display a count of characters entered into a TextBox in real-time. Something like the figure below.

You could certainly do that in code, but that would be fairly uninteresting code to write, and would need to refer to XAML elements by name, or have event handlers wired in XAML, introducing a dependency on the specific page's code-behind and making it less portable and potentially more brittle. In addition, you'd find yourself doing it enough that you'd either wrap the TextBox in your own CountingCharsTextBox control, or add a helper buddy class or something.
Or, if you prefer a XAML approach, which I hope I've sold you on by now, Silverlight 3 introduced the concept of Element Binding. Element Binding allows you to bind the properties of one FrameworkElement to another FrameworkElement. The usual restrictions apply (target must be a DependencyProperty, source must notify of changes) so you cannot using element binding quite everywhere.
To produce the above TextBox with the automatic count of characters using Element Binding, the markup is pretty straight-forward and entirely self-contained:
<StackPanel Orientation="Vertical" Margin="50">
<TextBlock Text="Tweet (max 140 characters)" />
<TextBox x:Name="tweetText"
MaxLength="140"
Text="Right now I'm writing a book" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Text.Length, ElementName=tweetText}" />
<TextBlock Text="/" />
<TextBlock Text="{Binding MaxLength, ElementName=tweetText}" />
</StackPanel>
</StackPanel>
The above XAML will show a TextBox with a count of characters underneath it. The character count will update in real-time to show the number of characters typed into the TextBox. Note also that the MaxLength displayed under the textbox is actually coming from the TextBox itself (the 140 in the label is not, however). The key item that makes this happen is the ElementName parameter in the binding expression. ElementName is, as it suggests, the name of another element on the XAML page.
It has been many years since I rolled a d10, but this is fun :)
D&D Home Page - What Class Are You? - Build A Character - D&D Compendium
"I am in the arcane, and the arcane is in me."
The sorcerer is the arcane antithesis of the wizard. Wielding raw, barely contained magical power, sorcerers channel bursts and blasts of arcane energy through their bodies. They gain their power not through rigorous study of esoteric tomes, but by harnessing magic in their blood, waiting to be tapped and shaped. If wizards wield magic as fighters wield swords, a sorcerer's magic is the arcing greataxe of a raging barbarian.
You might be a proud dragonborn scion of ancient Arkhosia, calling on the draconic power of your heritage, or perhaps you were bathed in dragon blood as an infant to fill you with that power. You might have been born in a place where planar forces converged in strange eddies, infusing you with chaos, or perhaps you survived implantation of a slaad embryo, which left the taint of chaos upon you.
Magic pulses through your veins, calling on you to give it expression. As it grows ever stronger, will it consume you or transform you into magic incarnate?
Join Frank LaVigne on Wednesday, June 24, 2009 at 7:00 PM for a great BYOL (Bring Your Own Laptop) Hands-on-Lab session.
If you can’t find time to play with the bits at work, or all that pesky summer outdoor stuff is cramping your geek time, this will really help you get your feet wet.
More information here.
I managed to score a trial code for the new Bing service from Microsoft. I was a bit skeptical, but thought I’d give it a try. I really like lots of things that come from Microsoft, but I never cared for Live Search, and the name “Bing” is just, umm, silly. At least it isn’t Windows Live Bing XP 2010 SP3 Crosby Edition or something ;)
I assume the name change came for a number of reasons, not the least of which was to put some distance between the search property and the overall Microsoft brand. This isn’t a bad idea as the Microsoft brand is probably weakest when it comes to web properties.
Of course, the first thing I did was a vanity search. Third link down? Oh Bing, flattery will get you everywhere :)
(no, none of those pictures, including the horse pull, are of me)
Then for grins I typed in a question “what is silverlight?”. The resulting ads were amusing. I think I’ll run right on over to Amazon or ShopZilla and get me some low low prices on Silverlight. Of course, you see these types of ads in every search engine. I did find it interesting that the Silverlight team took out an ad (top ad on the page)

I also did a video search. The in-place video thumbnails are pretty fast and impressive. The thumnailing algorithm pieces together a couple seconds of start footage, some footage from several different spots within the video, and right near the end.
Unfortunately, all the videos are displayed using Flash, even the Silverlight video from my blog. Also, the returned videos didn’t seem to quite line up with the search. This is another common search engine issue as they tend to use text on the page instead of pulling metadata from the video itself. In addition, most folks don’t put that type of metadata in their videos.
Here’s the result of a video search for “pete brown c64”. For some reason, it picked up tons of stuff from Silverlight.net (not sure if it has some affinity algorithm or what as my name doesn’t appear on any of those pages). The video I was actually looking for is all the way down at the bottom right; so at least it did pick it up on the first page of results.
Shopping
Next I tried a shopping query. I typed in simply ‘30” display’ without anything else. I got back a bunch of results as well as some category information on the left.
I clicked on the “electronics” category, and the results list was instantly filtered down to 30” displays and accessories.
I was puzzled by this result:
Now, turns out Amazon is to blame (their catalog is complete crap in some areas):
Changing my query to 30” monitor gave me better results. Well, except for this one:
First, it’s out of place, but I see how it showed up in the results. But then look at the expiration date – again, not Bing’s fault, but it’s good to know I can get cashback on that if I really want, despite test strips that expired a year and a half ago. :)
Programming Search
Next I tried a really simple programming query “what is xaml?”
The results showed me that Bing does in fact have some sort of associative database or link things that have an affinity with one another. Why? Well, this result in my search for Xaml is what clued me in:
The cool thing then is I now know my name has a strong association with Silverlight :)
The other interesting thing in the results is the little “related searches” list on the left.
My search approach for something I know little about usually involves me searching for what I think it is called, then finding certain keywords in the results and then going back and searching on those keywords to try and get a better result set. This related searches bit could save some of that churn.
I then did another programming search “static resource binding” to see what would come up.
I did a side by side query with Bing and Google. The results from both were useful.
But Bing has a nicer preview feature, activated when you hover over the result:
BTW, if you Bing Google, you get this:
I like the “similar to this” on the right. Also interesting that the listing knows that google is a search engine, and therefore shows a little “search the web using…” box under it. Clever.
Travel Information
Next I decided to use their travel search to find flights from Baltimore to Seattle. This is the search page:
It then came back with nicely formatted search results. Sorted by price.
You can click on the link to view flight details for any given result:
Another nice thing is Southwest is included in the results! Southwest is an airline that doesn’t deal with third parties, so it’s nice the results are listed here. I usually have to check them separately. Southwest fares aren’t listed, but you can at least get schedule information. Unfortunately, when you click on the link, you get sent to the base Southwest site and have to enter in all the information again. One nice thing Bing does, though, is pop up a little companion window so you have easy access to what you picked:
You can also click on the right to compare with sponsored sites. The schedule information was directly passed through, and the site just returned results without any additional input from me. Very nice.
There’s a lot more to Bing, including some social/community-oriented stuff I haven’t really touched yet.
Conclusion
I’m cautiously optimistic. Live Search never did it for me. I even did the week of try out and honestly couldn’t make it through. I went back to Google after a couple days. To make a real decision, I’ll need to use Bing for regular daily searches and see how it fares. So far, though, it seems better than Live Search for sure.
I’ll be curious to see how this works with a large load, but I want to just point out that Bing is really really fast. Not only in returning that first set of results, but with the interaction within the results (such as seeing flight details).
So will I switch to Bing? Not sure yet, but I’m definitely more enthusiastic about Bing than I was about Live Search. Looks like the team really went back and tried to do something much more ambitious than just incremental search engine improvements.
Our world-famous DE, Andrew Duthie, (aka the .NET DEvHammer, twitter @devhammer) just pointed out to me that we have a great set of roadshows coming to the area next week (Reston and Richmond). If you want to get the skinny on developing for Windows 7 and IE8, these are can’t-miss sessions.
I’m always impressed with the amount of free, quality training coming out of the local Microsoft field offices.
Of course, like just about everything these guys do, it’s free. Plus, they’re only half a day, so you don’t need to take a fully day away from work. definitely worth the visit.
More info and registration on Andrew’s Blog here.
Join us on May 19 at the Microsoft office in Pittsburgh for a double-dose of Silverlight 3: First we’ll talk about all the great new things coming out with Silverlight 3, then we’ll take a quick lap around the Silverlight 3 Commodore 64 emulator I wrote as a proof of concept.
This is an INETA sponsored event. Join us at Pittsburgh .NET!
Reminder to come join us at Lehigh Valley .NET for an INETA Sponsored Event: A Programmer’s Introduction to Silverlight 2 and 3, with a focus on the basics of two, and all the new interesting things coming out in Silverlight 3.
Lehigh Valley .NET
See you there!
Did you know that the WPF Effects Library on CodePlex has been updated for Silverlight 3? If not, hurry up and check it out:
http://wpffx.codeplex.com
Here’s a Channel 9 video demonstrating the effects (in WPF). Below are two effect screen shots, and one transition screen shot, just taken using Silverlight 3.
Another source of pixel shader HLSL code may be found on Rakesh’s blog here. I’m not sure that any of those work in Silverlight, but it’s worth a try, or is at least good to learn from.
On my effects wish list:
- Inner glow/shadow
- Desaturation (seems to be possible with this codeplex lib, but will need to try)
If you want to learn more about the shader language, type HLSL into your search engine of choice and have at it. There’s a lot out there. Here’s one.
Feel free to ignore this post. I’m toying around with changing the code on my blog to use the syntax highlighting made possible via:
Rather than the rather bloated (and unfriendly to RSS readers) paste from Visual Studio, I thought I’d try this. The “paste from VS” method retained all the colors and formatting from VS, but just made for bloated posts and left RSS readers (most anyway) with a jumbled mess without any line breaks. I need to actually post this live to see if this approach also gets munged in RSS readers.
XAML (using the XML formatting style)
<UserControl x:Class="PeteBrown.SilverlightSoundTest.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ui="clr-namespace:PeteBrown.SilverlightSoundTest.UI">
<Grid x:Name="LayoutRoot" Background="{StaticResource MainBackgroundBrush}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="320" />
<ColumnDefinition Width="320" />
<ColumnDefinition Width="320" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ui:OscillatorEditor x:Name="Oscillator1Editor"
Margin="5 5 0 5"
Grid.Column="0"
Grid.Row="0" />
<ui:OscillatorEditor x:Name="Oscillator2Editor"
Margin="0 5 0 5"
Grid.Column="1"
Grid.Row="0" />
<ui:OscillatorEditor x:Name="Oscillator3Editor"
Margin="0 5 5 5"
Grid.Column="2"
Grid.Row="0" />
<ui:MixerEditor x:Name="MixerEditor"
Margin="5 5 5 5"
Grid.Row="1"
Grid.ColumnSpan="2" />
<MediaElement x:Name="AudioPlayer"
AutoPlay="True" />
</Grid>
C# code (using the C# formatting style)
for (int i = 0; i < MaxWaveforms; i++)
{
double phase = CalculatePhaseWithOffset(state.PhaseOffset, state.Phase[i]);
double sample = (state.MaxAmplitude.Value - (state.MaxAmplitude.Value / Math.PI) * phase) * (int)state.Polarity;
//if (i % 2 != 0)
// sample *= -1;
accumulatedAmplitude += sample;
state.Phase[i] = CheckPhase(state.Phase[i] + ((MathUtility.TwoPI * detune[i]) / _sampleRate.SamplesPerSecond));
//accumulatedAmplitude *= .75; // warning, magic number at work
}
When I first became an MVP in January 2008 there was some questions as to what bucket Silverlight would fit into. After all, it was brand new; the only versions people were using publicly were Silverlight 1 and the Silverlight 1.1 alpha – it would be three more months before Silverlight 2 beta 1 went live, even though the name was changed from 1.1 to 2.0 well before then. At the time, I had access to some early bits through a program and Microsoft, and was just beyond impressed with what I saw coming in Silverlight 2.
The lead at the time wasn’t sure if the competency should be ASP.NET or Client App Development. My strong dislike of html+javascript made me lean away from the asp.net competency. Luckily, we chose correctly and I, and many others, became Client App Dev MVPs with an unofficial focus on Silverlight.
The number of times I have been this excited about a particular software technology is a pretty short list:
- The first time I heard music come from a computer (after school in 7th grade with a C64 in the rather empty computer lab)
- My first time seeing my sprite moving across the screen on a C64 (7th grade in the computer lab during recess. I wish I had saved that graph paper)
- The first time my custom interrupt hooks did something in DOS (on my 286) although I don’t remember what the hook did. :)
- Surface (but at 15k a pop and no way to play with it, that waned)
- When I first had a managed code app running in the browser (Silverlight 1.1 alpha) with graphics and animation (no sprites, though)
There was a pretty big gap there were software development for me just became a bit mundane; it became a job and fell away from my hobbies. Sure, I did a little bit of coding for fun for my web site and for things like Rhino 3d add-ins, but I wasn’t up until 3 every morning pinned to the computer coding away for fun (even if it’s work!). The Silverlight story and my interest in it just keeps getting stronger. It is no exaggeration to say that Silverlight has rekindled my love of software development and UI design.
Back to the MVP story.
Shortly after I was renewed this year, Microsoft introduced a new MVP area and made Silverlight official. Bill Reiss was the first MVP to move to the new Silverlight competency; he’s done a ton of work in Silverlight, especially in the gaming area.
Originally I thought I’d need to wait until January 2010 to move to the new area, but yesterday, I received notification from Justin Angel that I am now a Silverlight MVP!
I’ll miss a little of the breadth that is assumed with Client App Dev competency (after all, it includes WPF, Windows Forms, and in some minds, Surface), but the deeper focus on Silverlight will help me make more of what I do every day.
After all, there’s no C64 MVP so I had to pick another technology that I love :)
Congrats to all the other newly-named Silverlight MVPs, especially Laurent Bugnion, Richard Costall, Page Brooks, Chad Campbell, Jeff Prosise, and Dave Campbell.
I try not to be too much of a fan of a particular technology, but I am of Silverlight. I don’t try to shoehorn everything into Silverlight - I am still a professional software developer after all - but my definition of what technology is suited for is probably a bit broader than most folks’ :)
Thanks again to Marc Schweigert for hosting last night’s DevDinner in Reston.
My blog is at www.irritatedVowel.com/Blog and you can follow me on twitter, or message me on twitter via @pete_brown.
Below are demos I used and links I mentioned or wanted to mention. Tons of good Silverlight links and information below, even for folks who didn’t attend the DevDinner.
Introduction

The “Hello World” demo with a web services was done on the fly. You can find similar examples at Silverlight.net
For information on Model-View-ViewModel (MVVM), mentioned up front when I discussed best practices for real apps (not just demos) here are some links:
Media
Graphics
Developer Productivity
The Microsoft IVC demo is not yet online, but will be soon. In the mean time, here are examples of charting, including some screenshots of the demo:
Out of Browser
I did the Out of Browser demo from scratch. However, the C64 emulator linked to in the Media section supports out of browser.
Tooling
Other Useful links
Slide Deck
The slide deck is available here. I typically won’t present a canned deck (I only modifed a couple slides and the demos in this one), but this deck is just too good to pass up. It was professionally designed with real designers, not just devs or marketing folks, and it shows. If you want something that goes through all the major new features in Silverlight 3, this is the one.
Thanks again to everyone who attended!
Two weeks back, on the way to speak at the .NET Valley user group up in Wilkes-Barre, PA (on Silverlight 3, of course), I realized I had an uninvited guest, or at least what was left of their home, in my 2005 Honda Pilot.
(As an aside, the user group up there was just great. Jason is a great lead, It was an absolutely beautiful night, and if I could have projected the content up against a wall outside I would have.)
Anyway, my AC/defroster and general air in the front of the car hadn’t been working for a week or two. Air in the center console was working and I had erroneously assumed that one fan served them all. I just figured it was just some leaf litter blocking a duct or something. It wasn’t a huge deal because I don’t drive my pilot much; we take the new Odyssey when we do family things, and I work from home a good chunk of the time.
However, on the way up to PA (a 3-4 hour drive) a pile of mouse nesting material blew out from under the dashboard on the passenger side. Also, when I went to get a napkin from the glove compartment, I realized it had been chewed through.
That weekend, I decided to dismantle the dash and clean it all out. The process was a bit more involved than it needed to be, but interesting never-the-less. I had to remove the glove compartment and a cross-bar, then unbolt the fan housing. I also had to clean out the AC and filter housing and replace the filter. Finally, I gave it all a good dose of lysol and let it run for a few.
He you can see the fan housing. The mouse presumably got in through the grill that is used to recirculate air in the car.
Here’s the blower/fan with the mouse nest in it, and then with it removed. You can see that it was pretty packed.
And here’s the AC/filter housing with some nesting material blown in, as well as the filter I had to replace. BTW, who the heck came up with the idea of putting the filter in a location that requires the removal of the entire glove compartment as well as a metal bar before you can replace it?
Oh, and the little guy (or another one) chewed through the firewall under my hood. Luckily all the wires I can see seem to be fine.
Here’s a diagram of the blower housing, marked up below. I can’t guarantee the mouse got in where I think he did (could also have been with a loose-fitting cowling up top), but he definitely went in and out of that grill to get into the glove compartment and into other areas of the interior of the car.
So it’s all cleaned out. Turns out this is a fairly common problem with the Pilot. I’m likely going to epoxy some metal screen over the recirculation vent on the inside in the hopes of preventing this from happening again. On the plus side, if it does happen again, I know exactly how to clean everything out.
This thread on Easier DIY Cabin Air Filter Replacement helped me out a ton.
Here are the upcoming public events where I’ll be speaking on Silverlight topics:
Tuesday April 21, 2009 12:00pm (TODAY!) | INETA Live Webcast INETA Event Online | A Lap Around Silverlight 3 We’ll do a whirlwind tour of the new features in Silverlight 3, plus the basics of Silverlight 2/3. Bring your Silverlight 3 questions |
Saturday April 25, 2009 | Richmond Code Camp Richmond, VA | Silverlight Adores my C64 – Bringing back the 80s with Silverlight 3 A little bit of nostalgic love from our multi-core high res machines: Learn how Pete ported commodore 64 emulator to Silverlight 3, and how he built a multi-oscillator analog modeling synthesizer using the new Silverlight 3 APIs. Learn about the great new things in Silverlight 3 that make coding fun. |
Wednesday April 29, 2009 6:00pm | Microsoft Developer Dinner Reston, VA | What’s New in Microsoft Silverlight 3 Take a tour of the new features in Silverlight 3 including a dive into some of the new experience oriented features like pixel shaders, perspective 3D, animation enhancements, bitmap APIs and improvements to the media stack. Also hear about new Silverlight base framework additions including updates to the style model, data binding improvements, improved resource handling, improvements to the web services stack and the Silverlight 3 out of browser model. You will see how simple it is to build end-to-end data-intensive Silverlight applications with the new set of features in Silverlight 3 and .NET RIA Services. Silverlight 3 includes a number of new features and controls that greatly simplify data entry & validation. Microsoft .NET RIA Services simplifies the traditional n-tier application pattern by bringing together the ASP.NET and Silverlight platforms. The RIA Services provides a pattern to write application logic that runs on the mid-tier and controls access to data for queries, changes and custom operations. It also provides end-to-end support for common tasks such as data validation, authentication and roles by integrating with Silverlight components on the client and ASP.NET on the mid-tier. |
Monday May 18, 2009 6:30pm | Lehigh Valley .NET User Group INETA Event Center Valley, PA | Introduction to Silverlight Silverlight 2 was released in October 2008, Silverlight 3 Beta 1 was released in March 2009. Come join us as we talk about Microsoft’s hottest new web application development technology. We’ll take a big-picture look at Silverlight 2 and 3, and then dive into some of the cool things you can do with this technology. If you’ve used Silverlight before, you’ll find some new and exciting information here. If you haven’t used it yet, you’ll want to jump right into it after this session. Bring your questions and ideas, and we’ll take this session wherever you want to go. |
Tuesday May 19, 2009 | Pittsburgh.NET User Group INETA Event Pittsburgh, PA | A Double Dose of Silverlight 3 What’s new in Silverlight 3 Silverlight 3 Adores my Commodore 64
|
Saturday May 23, 2009 | NoVA Code Camp Reston, VA | Developing Business Apps with Silverlight 3 Explore building business applications in Silverlight 3 and .NET RIA Services |
(I really need to set up an editable list of some sort on this blog rather than new posts for events)
I’ve officially embarked on writing the second edition of Manning’s Silverlight 2 in Action. The first edition was written by Chad Campbell and John Stockton and is considered by many to be one of the best Silverlight 2 books available.
With Chad taking time to speak more, and John expecting a special delivery of his own, I was asked to write the revision. I’ll be revising it to update to Silverlight 3 (and a few things announced alongside Silverlight 3), and to include material that I think, and you the community thinks, is important.
So, what do you want to see in a Silverlight 3 book? What content would make you say “ok, have to have this book”? What content would make it something you’d recommend to your team?
If you read Silverlight 2 in Action, what did you like? What did you dislike?
If you’re just getting into Silverlight, what do you find to be the hardest things to pick up?
I can’t promise I’ll get every suggestion into the material, but I’ll certainly try. I want to write a book that you all want to read and want to recommend to others getting into Silverlight 3 development.
Comment below and tell me what you want – be brutal, be nice, be verbose or terse – just tell me what works for you. :)