Monday, 9 November 2009

When Visual Studio Insists on Starting Two Copies of Your Application

Some months back I had a nasty problem where every time I tried to run my Silverlight web application two copies of the browser would start up. The only way to stop this happening was to run the application in Release instead of Debug mode, which isn't really an acceptable solution when you're writing new code and need to step through it.


The problem started occurring just after I'd installed an extremely buggy Silverlight control suite from a 3rd party vendor (no names or I'll be accused of just wanting to 'pick a fight' or being 'uncivilised'! ;-)), so I put it down to the 'cost' of using these particular controls.


It turns out I was wrong (that'll teach me!). I didn't think any more about it since the problem finally went away when I repaved my PC with Windows 7, but a couple of days ago Microsoft's Jeff Handley hit the same problem and asked if anybody else had experienced it.


Earlier today he tweeted that it looks like the problem is caused by installing Windows Live Toolbar, and now that I come to think of it I DID install the toolbar around the same time I installed the 3rd party controls. And I didn't bother to reinstall the toolbar when I repaved my PC with Windows 7.


No doubt Jeff will be publishing some more details on his blog when he's dug a bit more into it, but I thought it worth posting about the issue here, because when I hit it Google certainly wasn't my friend. Good to get to the bottom of the issue, and hopefully there'll be a fix soon.

Saturday, 7 November 2009

3rd Party Vendor Controls (and why I've finally given up on Telerik)

Tweeting up a Storm


Those who follow me on Twitter will have seen me posting a lot of exasperated tweets about the quality of Telerik's Controls for Silverlight suite earlier this week, when the company released the latest version of their control suite (their third and final release for 2009) with lots of hooplah on their blogs, main web site and various employee Twitter feeds.


In some ways it was probably unfair to pick on Telerik, when other vendors seem to be even worse (especially when it comes to support), and an interesting Twitter debate on not just Telerik, but the whole area of vendor controls, followed. The unanimous concensus was 'Just stay away from third party vendor controls', which is a really depressing thing to have to report.


This blog entry was originally an indecently long rant about my experiences with ASP.NET controls from Infragistics and Silverlight controls from Telerik, concluding that neither had been anywhere near fit for purpose.


When a few people tweeted that they were in agreement and saying 3rd party vendor controls should be avoided, two received a response from an Infragistics employee calling them 'whiners', and saying the company had tens of thousands of satisfied customers. I resisted the temptation to ask if the employee had spoken to each and every one of them to prove they were 'satisfied' and to provide their contact information so I could check with them myself ;-)


But 'whining' doesn't achieve anything, and the original version of this post, which summarised a pile of problems with just the handful of the Telerik controls for Silverlight I'd looked at, was too detailed to be of any value to anyone other than make me feel better by venting.


It's time to move on and do what so many other developers have recommended I do. Ignore 3rd party controls (or at least the ASP.NET and Silverlight ones) and just write my own. It will result in a lot less stress, wasted time and frustration and much happier clients, even if initially it looks like too much time and effort to undertake.


In the meantime to anyone thinking 3rd party controls are fit for purpose I'd say spend just an hour looking at the demo code and the documentation the different vendors supply by looking at an evaluation version. Ideally try just a few basic customisations - you might be surprised at what you find (or don't find!) Also look at the vendor forums to see (a) how many people are actually using that vendor's controls (b) how many problems people are having. If a vendor doesn't allow access to the forums that purchasers use then you've got a pretty strong clue as to what customers are saying about the quality of what they've bought!


Peace!

Sunday, 27 September 2009

PRISM Documentation: The 'Missing' Table of Contents

For some reason (several actually!) PRISM is largely being ignored by many Silverlight developers. In my talk on PRISM (which I'm repeating at the next meeting of the Silverlight User Group this coming Tuesday - more information here) I talk about the documentation, and the fact that it seems to prejudice people against PRISM, when in fact it's an excellent resource. I talk about the fact there are two ways of looking at it.


PRISM Documentation - half full or half empty?

The 'glass half empty' crowd see how much documentation there is (assuming they can even find it - it's pretty much hidden in a totally inappropriate chm file format by default) and panics that there just isn't enough time to read and understand all this stuff when their Silverlight application needed writing yesterday, and dismiss PRISM as a result.


The 'glass half full' view usually discover the pdf version and realise they're getting a really good full-colour 300+ pdf electronic book with lots of useful advice and guidance for free. For more information on how to get the pdf version see the excellent Downloading and Building PRISM Guide from the folks at Sparkling Client.


One disappointment of the pdf version is that, unlike the traditional e-book, when printed out it doesn't contain a good table of contents. This makes treating it like a book, and finding a specific 'How to', or getting even a basic idea of what's covered in the 'book', is a bit of a nightmare.


I use the documentation a lot, so to avoid wasting time thumbing through my dog-eared copy when I want to look-up something specific, I've put together the 'missing' table of contents as a pdf, which you can download by clicking on the image below. I've taken the liberty of changing some of the "Composite Application Library' headings to instead read 'PRISM' as I think PRISM is pretty schizophrenic with regards to its identity (and think 'Composite Application Library' is too much of a meaningless mouthful). Let me know if I've missed anything!


Download PRISM Table of Contents..

Sunday, 20 September 2009

My SketchFlow Comments: Christian Schorman of the Blend Team Responds

On Friday I posted a quick report on my impressions of the Silverlight Firestarter event, which included my expressing surprise at what appeared to be a fundamental shift in the way SketchFlow was being promoted.


Christian Schormann from the Blend team sent a detailed response to those comments, which I am happy to reproduce below. Unfortunately it is not obvious from this blog that you can easily comment to a blog entry by clicking on the "0 comments" (hidden) hyperlink at the end of a given blog entry (blame Google for the UX, me for the fact I haven't customised things from the basic templates they provide!), which is why I received the email rather than a comment directly on the blog itself.


In any event I think it makes more sense to post this response as a separate blog entry, rather than as a somewhat hidden comment to the original blog entry


"Hi Ian,

I wanted to respond to a few questions regarding SketchFlow you brought up on your blog. I am part of the Expression Blend team, where I am responsible for product design and strategy.


You write:

"One thing that did alarm me somewhat, was the seeming step-back by Microsoft from the whole 'Sketch your application and then make it real - don't throw all that hard work prototyping away' story. Suddenly the story was that we should be re-using assets used in SketchFlow applications and not turning 'sketch' controls into 'real' controls as documented in the Blend 'Help' feature. Given that most of these assets are produced in Adobe Photoshop and other tools outside of Blend it kind of begged the question 'So the real advantage of SketchFlow over Balsamiq is...what exactly?'."


Let me comment on the last point first.

Balsamiq creates static mockups of UI. It does so very fast and with minimal learning effort.


SketchFlow is meant to make it more cost effective to create, explore, evolve and communicate deep dynamic prototypes. In SketchFlow, designers can model high-level flow and composition (from a product design perspective) of a user experience. They can use animation to illustrate their design intent. They can model and experiment with states and state transitions. Using sample data and behaviors, they can create compelling prototypes of serious interactivity. With the SketchFlow player and feedback tools, other stakeholders in the process can evaluate prototypes effectively. SketchFlow thus has a very different goal than Balsamiq. SketchFlow certainly can be used to simply create static mockups, but it is much more special for prototyping dynamic interactivity.


We believe that both mockups and dynamic prototypes have their place in the design process – they are complementary. They are often not created by the same people, and they are usually artifacts of different stages in the design process.


Regarding prototype re-use, I don’t think our story has ever changed. We believe that the whole point of a prototyping process is to quickly generate and explore a multitude of ideas. Often, it is a good idea to not over-invest in such explorative prototypes, and to avoid getting attached to any given prototype: the longer one stays with a given idea, the harder it is to discard it when it fails. Introducing architectural or production constraints into the prototyping process too early risks reducing the productivity and effectiveness of prototyping. Also see Bill Buxton’s book on Sketching User Experiences for more on this argument.


Our general advice therefore is that in strict idea generation / verification scenarios, it is often better to not plan on re-using a prototype as the blue pause for an application. This is not an advice based on technical criteria or limitations of tool or platform, just a recommendation from a design process perspective.


However, we also recognize that SketchFlow is used in scenarios that are more RAD-style development than prototyping. Also, there are applications where the structure of a prototype naturally is similar enough for re-use in production. Because we know that there are certainly valuable cases for re-using prototypes as part of a production-oriented scenario, we enable conversion of prototypes into navigation applications. The process is currently not automatic, but it is feasible and documented in the manual.


In summary, our message is that if you want to prototype efficiently, we recommend that you focus on the design problem at hand, rather than trying to build architecture (or even think about architectural concerns) as part of the prototyping process. However, this decision is of course entirely up to you.


Should you, at the end of the design process, decide that either the prototype as a whole or individual assets are useful in production, we enable this re-use. It is a decision in the hands of a designer, based on the goals and complexity factors of the prototyping work actually undertaken. The tool enables re-use of projects and assets, but we believe it is not always a wise choice to expect to do so.


You also comment that most assets are created in Photoshop et al. There is of course no doubt about the prominence of Photoshop et al, but in many cases these assets undergo significant pre-processing . Visuals often need to be packaged into control templates, equipped with transitions, animations and behaviors, before they can be used efficiently. And there are many assets (for example UserControls or resource dictionaries) that are even more entirely “native”. In this sense we see a lot of asset re-use that would not easily be possible with pure artwork.


Finally, you write regarding a conversion problem with the metrics of the SketchControls. I will look into this – I have not heard about this so far. In practice, we have not heard that from many users, but then again, many SketchFlow users do not spend much time getting their layout to be very precise – SketchStyles are generally meant (and used) in the first place to convey the notion that the visual design (and the exact layout, as part of it) is just a sketch, and precision of layout is somewhat antithetical to this. That said, I still agree that the metrics should match, so I will look into the issue.


Christian Schorman"

Friday, 18 September 2009

Silverlight Firestarter and a few other bits and pieces

This is going to be a very hasty blog post because it's being written in my lunch hour. Why? Because I desperately need a break from trying to convert a complex Silverlight 'storyboard' application to use a separately developed .NET RIA Services prototype application whilst also introducing the use of PRISM modules and regions usng MVVM inside the Silverlight 3 navigation framework using .NET RIA Services!


And there in that opening paragraph you perhaps have a clue as to why folks aren't rushing to jump on board the 'Silverlight in the Enterprise' bandwagon, and didn't seem to be rushing into this 'Silverlight Firestarter' event the way you'd expect given the very high profile speaker list (at least if the lack of much real activity on the pre-advertised Twitter #slfs stream was anything to go by).


Microsoft's 'silo' approach to Silverlight architectural guidance/marketing/development really doesn't help and I haven't even added MEF into the mix yet. This, and the whole Microsoft 'La! La! La! Can't hear you!' approach whenever someone mentions the 'Blend' or 'Sketchflow' words and how all this 'architectural' stuff is intended to fit together will no doubt be the subject of a future rant - sorry I mean 'blog entry' ;-)


So (see how I'm trying to embrace the whole Microsoft employee thing there!) Silverlight Firestarter was Microsoft's annual day-long event featuring all the big Silverlight rock stars (Scott Guthrie, Tim Heuer, Brad Abrams, Adam Kinney) and held at Microsoft HQ in Redmond. This year it was streamed live to us mere mortals outside Redmond between around 5pm and 1am this morning.


After an initial experience that looked like this was going to be another over-hyped seethelight.com fiasco all over again (no international users could access the live stream because someone had hard-coded an assumption that we were all running Windows in US date format mode into the Silverlight streaming application!) - things went very smoothly and the quality of the video and audio of the speakers, if not the blurry, pretty indecipherable code walkthroughs and laptop screen captures, were excellent :-) As was the support on the #slfs Twitter stream. The folks behind this event have every right to pat themselves on the back for an excellent inaugral event and I'm sure future events will be even better!


If you were wanting a whole day of 'overview' material of the various Silverlight bits and pieces including Blend and .NET RIA Services the speakers all did great jobs and the download videos, planned to be available in a week's time here are 'must see's and will be a great way of getting 'the big picture' around a lot of this new stuff.


The event was, in many ways, much like the excellent WPF Training course recently held at Heathrow: Touted as an 'introductory' course, the event was swamped (these words are all relative!) with those of us who regard ourselves as well beyond the introductory level these things are aimed at, attracted by the high-profile speakers in the hope that some as-yet-unrevealed gems will emerge from the paucity of information that's available to help us with our 'real world' problems, or at least give us an opportunity to get long-simmering issues and questions answered. As a result, if the associated Twitter stream is any indication, the event was really very much a case of 'preaching to the converted' rather than one bringing new folks on board, which is nobody's fault, but somewhat disappointing if, as some of us believe, Silverlight is going to take over the world at some point!


On the plus side, the Twitter stream was pretty lively (with comments, if not number of different people) and fun. On the downside the event itself was, for the most part, pretty much the same old canned 'not real world' demo's most of us have seen several times now, albeit slickly presented and delivered.


New information was almost non-existent, despite promises that it would be casually added in (the old 'Oh! I ran out of time!' excuse is getting so lame now :-P) and the Q&A session was, for me, a huge disappointment because instead of addressing the (admittedly more complex) issues some of us were trying to raise we got stuff like 'How do I become a Silverlight MVP?', 'How do I get to talk on the main stage at MIX?' or 'Ask the MVP lead who her favourite Silverlight MVP is'? (no! really!). Honestly I expect this sort of 'Me! Me! Me!' nonsense at mainstream fan events like Comic Con, but not at a technical developer event. We have truly entered a world where 'the cult of celebrity' is taking over everything - even our everyday developer work lives :-(


So, for the record, here are the main bullet point items I 'learnt' during the long 8 hour event:



  • Scott Guthrie (VP, .NET Development Division) claimed Microsoft are "on track to having Silverlight installed on 50% of all machines within the next couple of months". Others are already treating this remark with some cynicism and demanding to know the source of the data Microsoft keeps touting, as for me ... well everyone knows how cynical I am! I'd like to believe it's really true, but...

  • Brad Abrams promoted (and Karl Schifflet gave us an excellent overview of) New XAML PowerTools for Visual Studio 2008 with Silverlight and RIA Services support which will be made available this Sunday. Karl heads up the “Cider” (XAML Visual Designer) team.

  • The Silverlight Toolkit (containing open source Silverlight controls) now has a shiny demo site for all controls complete with "View XAML" and "View code" functionality.

  • .NET RIA Services RTM ship date is still "early next year" but Microsoft are not prepared to commit to any firmer date than that at this stage.


One thing that did alarm me somewhat, was the seeming step-back by Microsoft from the whole 'Sketch your application and then make it real - don't throw all that hard work prototyping away' story. Suddenly the story was that we should be re-using assets used in SketchFlow applications and not turning 'sketch' controls into 'real' controls as documented in the Blend 'Help' feature. Given that most of these assets are produced in Adobe Photoshop and other tools outside of Blend it kind of begged the question 'So the real advantage of SketchFlow over Balsamiq is...what exactly?'.


In truth for Enterprise apps I don't see reusing SketchFlow as an option anyway (no MVVM, PRISM, .NET RIA and all that other stuff that's really likely to be needed) but it seemed odd for Microsoft to so publicly step away from what had been the initial message, and one that is very easy to sell and promote as unique. Since I tweeted about this I've had a response to the effect that this was just a sensible bit of guidance based around concentrating on the real benefits of wireframe prototyping ("We enable conversion but caution that having reuse in mind might cause you to lose the quick & dirty mindset"), but even so...


Interestingly one of the questions asked on the Twitter stream that didn't get asked (for very obvious reasons - there goes my cynicism again!) was why the 'sketch' styles were different from 'real' styles to the extent that if you DID do the conversion of a Sketchflow application from using 'sketch' styles to 'real' ones your hard-fought work in layout would get totally screwed! Eeek! Who knew?! I suspect Microsoft aren't being totally honest with us in this rush to over-sell SketchFlow as the panacea to all designer problems (which gets them to actually use Blend instead of ruddy 'Always used it. Not budging!' DreamWeaver). I need to find time to investigate how serious a problem this reported 'change of layout' problem is!


Outside of the event itself, several other bits of interesting news occurred. Most exciting was the news that John Papa has joined Microsoft. Almost single-handedly John's blog has been trying to make sense of how the hell anybody's supposed to build a Silverlight application that uses MVVM and PRISM and works with Blend too - so his move to Microsoft will hopefully help resolve the paucity of any real official information around this whole problematic area.


And just after the event First Floor Software announced they had documentation for their 'must have' Silverlight Spy 3 tool. You can download it here and it will be automatically included in an updated release of the installation msi coming soon. To put it bluntly, if you don't have this tool then I don't think you have the right to refer to yourself as a Silverlight developer :-P


Apologies for the lack of links to people and blogs in this post: lunchtime has been slightly longer than intended and I need to get back to my PRISM/SL3 Navigation/.NET RIA Services integration exercise!

Thursday, 20 August 2009

A Couple of Issues Discovered While Playing with .NET RIA Services

Installing Windows 7 (which is a breath of fresh air after the nightmare I've had with Vista) and reinstalling all my software on different PCs probably wasn't my best idea given that I had a talk, which needed research, looming. As a result of the best part of a week rebuilding a ton of PCs, I left playing with .NET RIA Services (currently a July 2009 Preview with a 'use at your own risk' 'Go Live' license) much too late (Note to self: You ALWAYS underestimate how long it will take to prep a presentation. Take note!)


The talk, which I gave last night, was An Introduction to PRISM and .NET RIA Services at Vista Squad, which has just renamed itself to "Edge UG" - Die Vista die! ;-) For those who missed it - don't worry - it wasn't one of my best efforts, and although folks were kind about it afterwards and tweeted nice things, the reality is the complexity levels of different sections were too at variance with each other and because I was running out of time I skipped an important initial .NET RIA Services demo which then made the demo I did give confusing as hell, mainly because I skipped about too much (not literally - stop making your own jokes up at the back there!)


Bad preparation aside, when I was researching .NET RIA Services I hit a couple of problems in the most basic demo's almost immediately :-(


The first problem was that the generated proxy code class for Silverlight which the .NET RIA Services produce as part of the Server project build process wasn't being recognised by my Silverlight code that needed to use it. I was getting errors whenever I tried to reference the client-side Proxy classes, or even just add a 'using' statement for the generated class namespace.


After a couple of hours banging my head against a brick wall (this stuff had been working fine on another PC, I just hadn't twigged that the other PC was configured with different software!) I raised a question in the lively .NET RIA Services support forums and thanks to help from Colin Blair discovered the problem was down to my having installed JetBrains Resharper.


It seems that Resharper and .NET RIA Services don't play well together, although in this case I think Resharper is doing what you'd expect it to do (the generated classes aren't included as part of the project and only show up when you click on 'Show hidden files' - so why should Resharper recognise they're there just because some clever hackery is going on within Visual Studio?). There are reports this might be fixed in Resharper version 5 but in the meantime including the file in the project gets you up and running.

Build failure screenshot when Resharper is installed


The other issue I hit was to do with using a System.ComponentModel.DataAnnotations reference to resolve the [Key] attribute required on my POCO properties that I wanted to bind to in my Silverlight-generated class. It turns out that .NET RIA Services installs a newer version of the DataAnnotations class (version 99!) but I was referencing the original 3.5 version. Doh!


DataAnnotations dll version numbers (Add Reference dialog)

Hopefully this blog post will alert others. I found a few folks with the 'cannot resolve Key attribute' DataAnnotations problem when I did a Bing search, but never any responses on what the cause might be. Big thanks to Colin for diagnosing the issues almost immediately.

Wednesday, 5 August 2009

Monthly Catch Up

Yikes! It's been over a month since my last post. Alas most of my blogging these days seems to be in the form of micro-blogging via Twitter


The Silverlight project I've been working on finally launched last week (hope to have the URL for the public version to show any day now) and I'm in that strange limbo-land known as being 'between contracts'. It's nice to actually have some time to catch up and reflect on the work done over the last 3 months. Bizarrely my first week off seems to have been even more hectic than when I was working full-time!


There's been the usual user group meetings - UK Azure User Group, Silverlight User Group and VistaSquad, with me recording/editing video for all of them over the last 3 weeks (I would particularly recommend watching the video of Bert Craven talking about Easyjet's vision for improving their customers' airport user experience and how they're using Azure to achieve this).


The last few weeks saw the official UK launch of Silverlight 3 and Expression Studio 3 and the latest weekend-packed ALT.NET Conference. This latter event saw announcements about the launch of several new ALT.NET initiatives such as The ALT.NET Society and The Alternative Network Group. It all feels a bit like a Monty Python-esque 'People's Liberation Front of Judea' vs 'Judean People's Liberation Front' situation is developing - let's hope not!


The UK Silverlight Launch event was good fun (with free champagne and canapes too) and it was good to network with folks who've worked with Silverlight, and to see some good customer demo's. But the launch felt like a bit of a missed opportunity to me because the audience seemed to mainly comprise knowledgeable geeks, where the launch talks were more geared towards 'overview' material. I felt that the real target audience for the launch should have been journalists from computer design magazines and professional bloggers rather than the group of developers it appeared to be (and of course, by saying this, I'm admitting I probably shouldn't have been invited there myself :-(). You can see video's of all the talks at the launch event here or of course there's my own video of the one-hour 'reprise' of the event for the Silverlight User Group here


Microsoft have got Silverlight BRANDING so right. Everyone's aware of it, where nobody outside the Microsoft dev world seems to know what WPF is! So it's frustrating that they don't seem able to follow through on the MARKETING side of things.


The initial version of the official US Silverlight 3 launch site SeeTheLight.com, was pre-advertised with a countdown clock and much hoop-la about how great it was going to be. The eventual launch was a calamatous affair, with the Silverlight implementation being so bad it was taken down within hours and replaced with an HTML version that's still there a month later.


It's frustrating for those of us who love the technology, but keep seeing these 'shoot yourselves in the foot' scenarios happening around us! And even the Microsoft developers don't seem convinced about the technology either. At the ALT.NET Conference, in a session on 'The Future of Web Technologies' Silverlight was dismissed VERY quickly, with a brash (and seemingly inaccurate) 'Office 2010 isn't using it which says all you need to know about Microsoft's confidence in it'.


There's a lot of work needs doing to get developers behind the technology and even pointing out statements from the likes of Scott Guthrie about its long-term strategic future, the evolution of products like .NET RIA Services, MEF for Silverlight, XBox support, iPhone support through MonoTouch etc isn't getting people past the perception that 'Its just a weaker version of Flash that's on far fewer desktops and not worth the time looking at because Microsoft will probably abandon it'. There's a lot of work to be done in changing people's attitudes!


If I felt the UK launch for Silverlight was a bit of a missed opportunity, I had no such reservations about the ALT.NET UK Conference 2009. It was a total blast from start to finish. Kicking off with ALT.NET Beers and some lively 'Park Bench' sessions with the infamous SerialSeb holding court, the weekend got off to a good start. I missed most of the Open Space Coding day (but looking forward to attending the Azure-themed one in Birmingham later this month) but by all accounts people got a lot out of it. And then there was the Open Space conference itself. Lots of lively debate and discussion. I thought this event was even better than the last one although the inability to stream the sessions (my HP Dv2 laptop refused to connect to Conchango's wireless router, even though my iPhone had no such problems) was frustrating. Kudos to Alan Dean, Ian Cooper, Ben Hall, Serial Seb, Michelle Flynn and all the generous sponsors for all their hard work in putting together such a great event.


On the 19th August I'm giving an introductory talk on PRISM and RIA .NET Services for VistaSquad. As of yesterday, there were apparently only 7 places left so if you want to come along you need to be quick. You can reserve a place here


Tonight sees what will probably be the first of many Tesco TJAM developer events, with Tesco allowing sign-up for use of their API and presenting ideas from customers about what they'd like to see implemented. Should be fun!


In the meantime, I'm busy redesigning/re-implementing the company web site which is suffering badly from 'The Cobbler's Childrens' Shoes' syndrome (ie it's crap because I've had no time to sort it out when paying work keeps distracting me!) I shall be using Silverlight 3 and PRISM of course, and it's a good excuse to catch up on all the Silverlight 3 activity now that the Silverlight 2 project I've been working on has been (pretty effortlessly) migrated to Silverlight 3.


I'm still waiting for the good Silverlight 3 books to appear. Since my last blog entry, strongly criticising Introducing Silverlight 3, only one new title has been published. Apress have released Accelerated Silverlight 3 and it's a huge disappointment. If I'd checked who the author was (the same author as wrote Silverlight in the Enterprise - never have so many words at such high cost been used to say so little) I'd have realised what I was letting myself in for. Although the book's cover and back page talk all the time about 'Silverlight 3' as soon as you read the actual content the talk is only of 'Silverlight 3 beta' and 'Expression Studio 3 Preview'. The book was out-of-date even before its publication date, and its dry, 'let's just cut and paste MSDN content' style isn't going to turn anybody on to Silverlight. If you're looking for a Silverlight 3 book and need one today, my recommendation would be to get the 'early access' chapters from either Hello! Silverlight 3, Essential Silverlight 3 or Silverlight 3 In Action.