Wednesday, January 6, 2010

Heading to CES 2010 in Las Vegas – In-flight Thoughts

Heading to CES 2010 in Las Vegas – In-flight Thoughts


Heading to CES 2010 in Las Vegas – In-flight Thoughts

Posted: 06 Jan 2010 11:03 AM PST

As I write this post I'm sitting on a plane heading to Las Vegas. This is my second year in a row going to CES after taking a break for a number of years. Last year the mood heading into CES was grim, and the bad news just kept coming in daily. Now a...( read more )...(read more)

Help me decide what to focus on for thenext 6 months.

Posted: 06 Jan 2010 07:23 AM PST

Please take this poll ! Read More......(read more)

iMeta Agility & Silverlight

Posted: 06 Jan 2010 02:33 AM PST

Just a little plug for a video I made just before Xmas with the guys from iMeta , a UK company that's built a scrum tool called iMeta Agility with Silverlight. The picture's hyperlinked to their video on Channel 9 – click to take a look and, also, try...( read more )...(read more)

Silverlight HVP Proof Of Concept Released!

Posted: 05 Jan 2010 09:13 PM PST

  I'm incredibly proud to say that we were able to release the Silverlight HVP proof of concept alpha release on time, at 12:05 am Wednesday January 6, 2010 (GMT-5).  As noted in our release schedule this is the first of a series of releases...( read more )...(read more)

Street Fighter Style UI Compositing With Prism

Posted: 05 Jan 2010 07:29 PM PST

If you're into Silverlight or WPF, then you've undoubtedly heard the nonstop clamoring over Composite Application Guidance for WPF and Silverlight - aka Prism. I have a list of things in Evernote that I'd love to write about Prism, but I figured I would...( read more )...(read more)

Angled headers for DataGrid columns…not just angled text…

Posted: 05 Jan 2010 04:04 PM PST

My last post demonstrated one way that you could angle the text in a DataGrid column header. I received a comment asking for how to angle the entire headers, along the lines of what you can do very easily with Excel. Here's an example from Excel: My friend...( read more )...(read more)

Proposed WCF RIA Services Sessions for MIX10

Posted: 05 Jan 2010 07:26 PM PST

Earlier today Microsoft opened voting for the MIX10 Open Call entries. I am happy to see that at least eleven of the submissions mention WCF RIA Services. Even if you are not attending MIX10 it is still important that everyone posts as the sessions will Read More......(read more)

DIA based Stack Walking

Posted: 05 Jan 2010 12:48 PM PST

Hello, I am Manish Vasani, an SDET on the VC++ compiler backend team. In this series of posts, I will talk about call stacks and how to use the DIA SDK for implementing a stack walking client that builds a call stack. If you are interested in knowing how debuggers build the call stack or want to write an application that dumps the call stack for an executing process, you may want to continue reading further.

In this post I'll start with a brief introduction on stack walking, discuss the DIA APIs for implementing it, and then walkthrough a code sample for a DIA based stack walker. Those who are familiar with stack walking would know that apart from the DIA SDK, there are two other commonly used stack walking APIs: StackWalk64 (found in DbgHelp) and RtlVirtualUnwind (found in kernel32.lib). I'll touch upon these two APIs at the end of the post.

 

Introduction:

When the Operating system executes a process, it calls into the program's entry point (or the starting function) and allocates a set of resources to the process. Some of these resources such as stack memory and register context are allocated per thread basis. Every new function call in the thread is allocated a part of this stack memory and has a new register context. A stack frame or an activation record is essentially this runtime state information for an active function call. Typical attributes associated with a stack frame are:

1)      Function associated with the frame

2)      Module (binary) associated with the frame

3)      Return address

4)      Amount of stack memory allocated for arguments and locals for the function

5)      Base pointer (BP) for referencing the arguments passed to the function call

6)      Base pointer (BP) for referencing the local variables in the function (most of the time this is same as 5)

7)      Program counter or the Instruction Pointer for currently executing instruction (IP)

8)      Stack Pointer (SP)

9)      Other Register context

A sequence of active stack frames in an executing thread is generally referred to as a call stack. Call stacks help developers to debug runtime program errors and also denote the program state at a particular execution point. The process of building this call stack is called stack walking. Stack walking clients (such as debuggers) use the stack frame attributes to retrieve the values of function arguments, locals, etc.

 

DIA APIs for Stack walking:

The primary functionality of the DIA SDK is to provide access to the debug information in PDB files. Apart from that, the DIA SDK also provides a set of interfaces  that can be used to implement a platform independent stack walker. These are:

1)      IDiaStackWalker: This is the primary initialization interface for the DIA stack walker.

2)      IDiaEnumStackFrames: This is the stack frame enumerator interface that exposes the primary API to perform a stack walk to the next frame.

3)      IDiaStackFrame: This interface represents a stack frame and exposes attributes of the stack frame.

4)      IDiaStackWalkHelper: This is a helper interface for the DIA stack walker. To understand its primary purpose, let us briefly mention the two primary types of inputs required by the stack walker:

                              i.      Run-time entities: This includes the runtime aspects such as thread's register context, properties of loaded image files such as LOADED_IMAGE, executable binary (or module) corresponding to a given virtual address, etc.

                             ii.      Compile-time generated entities: This includes the PDB records that provide static attributes for frames such as memory allocated for locals/arguments, whether the function corresponding to the frame contains SEH/C++ EH, the unwind program to execute to walk to the next frame, etc.

DIA stack walker uses other DIA interfaces to read the compile time generated entities, i.e. PDB records. It delegates fetching the runtime entities to the DIA clients. The primary reason for this being that DIA doesn't maintain the runtime state information for the process. For example, a given virtual address in process' address space might belong to any one of the modules (executable binaries) loaded in the process. Each module would have a different pdb file and hence a different DIA session to read the pdb. DIA isn't aware about the loaded modules for the process and hence expects its clients to provide this mapping. Most DIA stack walker clients, such as debuggers, already need to fetch and store this runtime information. Hence, it is logical to expect the clients to provide this information to DIA through the implementation of this helper interface.

 

Code Sample Walkthrough:

I will first give the class design for the DIA based stack walker sample and then walk you through its execution flow.

Class design:

1)      MyDiaStackWalker: This is the primary DIA stack walker class. It maintains a handle to the initialization interface (IDiaStackWalker) and the stack frame enumerator (IDiaEnumStackFrames). It also contains few helper methods for other DIA operations.

2)      MyDiaStackWalkHelper: This class implements the IDiaStackWalkHelper interface. I will discuss each of its method in detail later on.

3)      Debugger: This is a Debugger class with a simple debugging engine. It launches the specified executable with debugging enabled and dumps the call stack at every debug break event in the executable. (Debug break events could be trigged by use of __debugbreak() intrinsic in your source code).

4)      ContextManager: This class manages the register context associated with the current stack frame of the current debuggee thread (debuggee is the process being debugged)

5)      ModuleManager: This class maintains the list of modules (executable binaries) loaded in the process along with their attributes.

Execution Flow:

1)      Initialization:

The first step in the application is to initialize the DIA stack walker. This is done through the IDiaStackWalker interface. IDiaStackWalker provides two platform specific APIs for initializing the DIA client: getEnumFrames (for x86) and getEnumFrames2 (for x64 and ia64 platforms). Each of these APIs take a pointer to the class that implements IDiaStackWalkHelper (MyDiaStackWalkHelper) and returns the stack frame enumerator (IDiaEnumStackFrames). You may refer to the method "MyDiaStackWalker::Initialize" in MyDiaStackWalker.cpp to see the initialization logic.

 

2)      Walking the stack:

After the initialization, we launch the specified executable under the debugger. On hitting a debug break event, we initialize the register context and loaded modules for the debuggee. Than we call "MyDiaStackWalker::WalkCallStack" method to walk the call stack and retrieve attributes such as module name, function name, Instruction pointer (IP), etc. for each stack frame:

// method to walk all the stack frames in the call stack

void MyDiaStackWalker::WalkCallStack()

  wprintf(L"\nWalking call stack...\n");

  IDiaSymbol *pFuncSym = NULL;   

  DWORD count = 0;

  BSTR szFunctionName;

  ULONGLONG ip = 0;

 

  do {

    // Get IP for current stack frame

    pContextManager->get_currentIP(&ip);

    if (!ip) {

      break;

    }

    // Get module for stack frame

    Module *pModule = pModuleManager->FindModuleByVA(ip);

    // Get DIA function symbol for stack frame

    pMyDiaStackWalkHelper->symbolForVA(ip, &pFuncSym);

    // Display stack frame attributes

    if (pFuncSym == NULL) {

      // function symbol could be null if symbols for the module were not loaded.

      // just dump the IP for the stack frame

      wprintf(L"Stack Frame %d: '%ws!%#x()'\n", ++count, pModule->name, ip);

      continue;

    }

    if (pFuncSym->get_name(&szFunctionName) == S_OK) {

      wprintf(L"Stack Frame %d: '%ws!%ws'\n", ++count, pModule->name, szFunctionName);

      SysFreeString(szFunctionName);

    }

    pFuncSym->Release();

    pFuncSym = NULL;

    // Walk to next stack frame

  } while (WalkStackFrame() == S_OK);

}

 

"WalkCallStack" method calls into "WalkStackFrame" to walk each stack frame. WalkStackFrame uses the stack frame enumerator API (IDiaEnumStackFrames::Next) to do the stack walk to next frame. Following snippet shows this:

// MyDiaStackWalker.cpp

// method to walk to the next stack frame

HRESULT MyDiaStackWalker::WalkStackFrame(IDiaStackFrame **ppStackFrame)

{

  IFVERBOSE {

    wprintf(L"MyDiaStackWalker::WalkStackFrame\n");

  }

 

  ULONG celtFetched = 0

  IDiaStackFrame *pStackFrame = NULL;

 

  // walk to the next stack frame

  HRESULT hr = pEnumFrames->Next(1, &pStackFrame, &celtFetched);

 

  if (celtFetched == 1 && hr == S_OK) {

    if (ppStackFrame != NULL) {

      *ppStackFrame = pStackFrame;

    }

    else {

      pStackFrame->Release();

    }

  }

  return hr;

}

 

3)      DIA callbacks into MyDiaStackWalkHelper during stack walk:

When we walk the stack frame using the IDiaEnumStackFrames::Next, DIA makes a few callbacks into MyDiaStackWalkHelper. Let me discuss each of the methods of this class to explain its purpose:

1.        Method to read process memory from debuggee's address space (MyDiaStackWalkHelper::readMemory): DIA can't read into debuggee's address space, hence it expects the client to do implement this API. I call into the ReadProcessMemory Windows API for its implementation.

 

2.       Methods to get/set debuggee register context (MyDiaStackWalkHelper::get_registerValue and put_registerValue):

                                                      i.      get_registerValue: This callback API is used by DIA to fetch the register values for the current stack frame. Prior to the WalkCallStack invocation, I use the GetThreadContext Windows API, for fetching the current thread's register context (see "ContextManager::InitializeRegisterContext" in ContextManager.cpp). Register IDs used by DIA are defined in cvconst.h that is available in the DIA SDK.

 

                                                    ii.      put_registerValue: This callback API is used by DIA to update the register values. DIA makes a few callbacks into put_registerValue at the end of every stack walk invocation (i.e. IDiaEnumStackFrames::Next) to update the register context to the next stack frame. Note that the IDiaStackFrame object returned by IDiaEnumStackFrames::Next corresponds to the stack frame that we walked past (i.e. it corresponds to the top stack frame on the first invocation of next, while the callbacks into IDiaStackWalkHelper::put_registerValue correspond to the second stack frame)

Also, note that a call to IDiaEnumStackFrames::Reset to reset the stackwalker resets only the internal DIA stack frame enumerator. Clients should reinitialize the register context (using GetThreadContext) between a call to IDiaEnumStackFrames::Reset and subsequent IDiaEnumStackFrames::Next.

 

3.       Methods to map a virtual address (VA) to some entity:

                                                         i.            Methods to map a given VA to unwind data (MyDiaStackWalkHelper::frameForVA and  MyDiaStackWalkHelper::pDataForVA): Before getting into the specifics of these APIs, let me provide a brief description about the format of unwind data for different platforms.

x86 and x64 platforms have different ABI conventions which lead to the stack unwind information lying in different formats in different files for these architectures. x64 ABI requires the functions to setup their prolog and epilog in a standard way, so that a stack unwind can be performed from any given point in the function by just looking at function's unwind data (pdata/xdata) from the image file. You may refer to articles about Exception Handling (x64) and x64 Unwind information for more details.

x86 platform doesn't have this requirement of setting up the prolog/epilog in a standard manner. Hence, in order to perform a successful stack unwind from any given IP, the compiler tracks and emits additional unwind information in the PDB. This information is recorded inside the Frame Data PDB records. DIA exposes these records through the IDiaFrameData interface. We will discuss the details about IDiaFrameData and how to use it along with IDiaStackWalkFrame to walk the Frame Data records in a follow up post.

As you might have guessed by now, pDataForVA method is specific to x64 and ia64 platforms. This method parses the pdata section in the image file to find the matching pdata entry for the given VA. Structure of the mapped pdata entry that is expected by DIA is quite identical to the _IMAGE_RUNTIME_FUNCTION_ENTRY structure, except that addresses in _IMAGE_RUNTIME_FUNCTION_ENTRY structure are relative to the base virtual address of the image file, while the addresses in our custom defined IMAGE_RUNTIME_FUNCTION_ENTRY_VA structure are absolute virtual addresses (i.e. with base address relocations applied):

// ModuleManager.h

struct IMAGE_RUNTIME_FUNCTION_ENTRY_VA

{

                ULONGLONG BeginAddress;

                ULONGLONG EndAddress;

                ULONGLONG UnwindInfoAddress; 

};

 

frameForVA is an x86 specific method to fetch the Frame Data record for a given virtual address. MyDiaStackWalkHelper::frameForVA does the following mapping: given VA -> module -> pdb -> DIA session for the pdb -> frameByVA.

 

                                                       ii.            Method to map a given VA to the base virtual address of the image (exe or dll) file (MyDiaStackWalkHelper::imageForVA): I use the GetModuleInformation API to obtain the MODULEINFO structure which contains the base address for the module (see "ModuleManager::InitializeModules" in ModuleManager.cpp)

 

                                                      iii.            Method to map a given VA to DIA symbol ("MyDiaStackWalkHelper::symbolForVA"): I first map the VA to an appropriate DIA session and use IDiaEnumSymbolsByAddr::symbolByVA API to fetch the matching DIA symbol.

 

4.       Methods to search for return address on the stack (MyDiaStackWalkHelper::searchForReturnAddress and MyDiaStackWalkHelper::searchForReturnAddressStart): DIA will make these callbacks when walking an x86 FPO stack frame. I return E_NOTIMPL as I do not wish to override the default FPO stack search done by DIA.

Code Sample:

You can download the stack walking sample from the Visual C++ Sample page. Usage of the sample:

Ø  DIA_StackWalk_Sample.exe DIA_StackWalk_Testcase.exe

You may compile the sample with /DVERBOSE to get more descriptive logging. A sample test is also provided.

 

Alternative Stack walking APIs:

Let me talk about the two alternative stack walk APIs that I mentioned at the beginning of the post:

StackWalk64 (DbgHelp API): Similar to the DIA stack walk APIs, StackWalk64 provides a platform independent mechanism for stack walking. If you closely go through all the parameters for this API, you can map them to the corresponding IDiaStackWalkHelper methods. Given that StackWalk64 is identical to DIA stack walk APIs, how do we decide which one to pick over other? I find the following guidelines useful:

1)      If you are already using DbgHelp or are willing to add a dependency to it, than StackWalk64 should be the ideal choice for stack walking. It operates at an abstraction layer above DIA and hence provides a more high level and easy to implement interface for the client.

2)      If you are implementing your own debugger and only want to add the stack walk functionality, than using the DIA stack walker would be a good choice.

3)      If you want to tweak the low level functionality, such as override how default return address search is performed for FPO stack frames, than DIA stack walker would be a good choice.

RtlVirtualUnwind is also a similar stack walk API with identical parameters; except that unlike the above APIs:

1)      It has to be invoked in the same process and

2)      Is designed only for x64 platforms.

 

Conclusion:

Hopefully this post provided you a good overview of how to implement a stack walker client using the DIA SDK.  As always, we welcome your feedback on DIA, and look for part 2 of this series on walking the x86 Frame data records using IDiaFrameData/IDiaStackWalkFrame interfaces.

Please Vote For My Sessions at Mix :)

Posted: 05 Jan 2010 05:13 PM PST

It's shameless, I know. But, please vote for my sessions at Mix :) The voting tool can be accessed here: http://visitmix.com/opencallvote/ Below are titles, descriptions and links to where you can vote for each of my submissions. Votes must be submitted...( read more )...(read more)

Vote for My Sessions at MIX '10

Posted: 05 Jan 2010 11:59 AM PST

URL : http://visitmix.com/opencallvote/?query=Shawn%2... If you would like to hear me blather on at MIX about how to create Silverlight applications, feel free to go visit the MIX site and vote for my sessions. I submitted seven talks so feel free to...( read more )...(read more)

MIX 2010: Voting for sessions has begun (I got two)

Posted: 05 Jan 2010 04:12 PM PST

This year Microsoft decided to have an open call for sessions for the MIX 2010 in Las Vegas. This conference, in case you don't know it yet, is a great 3 days about modern client technologies, such as ASP.NET, Windows Presentation Foundation and of course...( read more )...(read more)

RIA Services and relational data

Posted: 05 Jan 2010 04:02 PM PST

As we've all been guilty, when you see demonstrations of technologies most of the time the data samples show single table solutions. When was the last time you've developed a single-table system? :-) Thought so. In RIA Services demonstrations, most of...( read more )...(read more)

RIA Services and relational data

Posted: 05 Jan 2010 04:02 PM PST

As we've all been guilty, when you see demonstrations of technologies most of the time the data samples show single table solutions. When was the last time you've developed a single-table system? :-) Thought so. In RIA Services demonstrations, most of Read More......(read more)

My Mix10 Sessions – I hope

Posted: 05 Jan 2010 03:15 PM PST

Once again it's almost time for Microsoft's premier conference for anyone involved in the web: Mix. Building upon the success of last year, I am hoping to present again this year. This time though, things are a bit different. I can't just schmooze a bunch...( read more )...(read more)

Silverlight 4 Find: No More Whitelisting Fonts

Posted: 05 Jan 2010 09:36 AM PST

I just found out that in Silverlight 4, the fonts are no longer whitelisted to the ten fonts out of the box. Silverlight will now use any font that it can find on a machine without embedding. For example, in my RIA Services sample, I changed the font...( read more )...(read more)

Tuesday, January 5, 2010

Silverlight 4 Training in Montreal in January

Silverlight 4 Training in Montreal in January


Silverlight 4 Training in Montreal in January

Posted: 05 Jan 2010 11:00 AM PST

Start the Year with a Great Silverlight Training! The Silverlight Tour has a new class in Montreal , and already provide Silverlight 4 content!!! What: Silverlight training When: January 19-22 (4 days) Where: Montreal, Qc Registration (Fr): http://www...( read more )...(read more)

Back by Popular Demand: 30% Off All Microsoft Expression Design Software

Posted: 05 Jan 2009 12:16 PM PST

Receive 30% off all Microsoft Expression version 3 design software (both full and upgrade versions) through the Microsoft Online Store through January 8. (Promotion applies to U.S. only.)

How Do I: Use the Web Protection Library a.k.a Anti-XSS Library?

Posted: 05 Jan 2009 12:16 PM PST

This video shows the additions to the Anti-XSS Library, as the new Web Protection Library (WPL) tool provides protection beyond just XSS vulnerabilities.

Worth A Thousand Words

Posted: 05 Jan 2010 08:46 AM PST

    In responding to a discussion on the HVP, I generated this image, which I think goes some way towards clarifying the recent posts. (Click on image for full size)   The discussion is here As an aside, the best Greeking engine I've found...( read more )...(read more)

Rapidly Evolving Design

Posted: 05 Jan 2010 07:47 AM PST

The problem with using a blog to track a rapidly evolving design, is that blogs don't make for very fluid documents; the unwritten rule is that once posted, you ought not go back and substantially alter a post. Matching Blog Posts to Discussions I do...( read more )...(read more)

Building an Awesome Community Web Site

Posted: 05 Jan 2010 07:49 AM PST

Some time ago I started playing with the idea of organizing an Open Source project to build a CMS. It generated a lot of interest, but the "expectations" seemed overwhelming to me. NETOOP is not dead, I still plan to build it but I intend to build version one myself (On MVC) and release it as FREE source. In the mean time, I'm planning what content to build for 2010 and have decided to do a collection of projects based on building a great community site. I'm going to write the code and record videos detailing the implementation or the parts. I hope YOU will suggest and discuss features with me here on my blog! I will release the code as FREE/MSPL at different milestones. The "design" that I'm starting with is live at www.MMARingside.org It's...(read more)

Make the TreeView control to be MVVM compliant

Posted: 04 Jan 2010 06:52 PM PST

During a recent work I found some trouble working with the TreeView control in a Model-View-ViewModel scenario. As usually happen, the standard controls are designed to work in an event-driven behavior and this non always marries with a correct MVVM implementation...( read more )...(read more)

ASP.NET 4 SEO Improvements (VS 2010 and .NET 4.0 Series)

Posted: 05 Jan 2010 01:08 AM PST

[In addition to blogging, I am also now using Twitter for quick updates and to share links. Follow me at: twitter.com/scottgu ] This is the thirteenth in a series of blog posts I'm doing on the upcoming VS 2010 and .NET 4 release.  Today's post covers some of the improvements being made around Search Engine Optimization (SEO) with ASP.NET 4. Why SEO? Search engine optimization (SEO) is important for any publically facing web-site.  A large percentage of traffic to sites now comes from search engines, and improving the search relevancy of your site will lead to more user traffic to your site from search engine queries (which can directly or indirectly increase the revenue you make through your site). Measuring the SEO of your website...(read more)

T4MVC 2.6.10: fluent route value API, shorter way to refer to action, and more

Posted: 04 Jan 2010 06:45 PM PST

To get the latest build of T4MVC: Go to T4MVC page on CodePlex   I just posted build 2.6.10.  There were also a few builds in between since I last blogged about 2.6, so this post describes some of those changes (full history here ).   Fluent route value API As you probably know, T4MVC uses a pattern where the route values are encapsulated using a pseudo-call to a controller action, e.g. Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID)) This adds the controller, the action and the method parameters to the route values in a convenient way with no hard coded strings. But in some situation, you may need to add extra values to the route that don't exist in the action method.  Now you can do it as follows...(read more)

Resolving the “TCP error code 10060: A connection attempt failed…” while consuming a web service

Posted: 04 Jan 2010 09:08 PM PST

Recently, one of the queries I had was on "TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond" while consuming a web service over proxy settings. Setting the UseDefaultWebProxy to true didn't help with this error. I had earlier written a post on explicitly setting the proxy in the configuration file for Web Services. The scenario here though was, a WCF Service Client trying to consume the web service. However, the same work around proved helpful. After setting the proxy explicitly, the web service could be consumed by the WCF Client. The proxy setting that you want to add to the config file...(read more)

Monday, January 4, 2010

Help Silverlight win a 2009 Crunchie for Best Technology Achievement

Help Silverlight win a 2009 Crunchie for Best Technology Achievement


Help Silverlight win a 2009 Crunchie for Best Technology Achievement

Posted: 04 Jan 2010 01:20 PM PST

Microsoft Silverlight has been nominated for a 2009 Crunchie award in the category of "Best Technology Achievement" and we need your vote! The 2009 Crunchies Awards, are co-hosted by GigaOm , VentureBeat , and TechCrunch . This annual competition and...( read more )...(read more)

Extending the SLHVP Player to a Platform

Posted: 04 Jan 2010 01:02 PM PST

  This post is part of the Silverlight HyperVideo Platform  documentation   Everything Flows, Nothing Stands Still – Plato Nothing Endures, But Change - Diogenes The past few days have seen quite a flurry of design activity, and I'm quite...( read more )...(read more)

Task Factory Community Edition

Posted: 04 Jan 2010 11:10 AM PST

Task Factory Community Edition is a collection of high performance components for SSIS, including components for data validation. The components make it easier to do many of the common SSIS tough scenarios in seconds, not hours.

January 2010 Silverlight MVPs

Posted: 04 Jan 2010 11:00 AM PST

Happy new year to all! I hope you enjoyed a safe celebration whether that be playing a board game with friends, toasting the new year with some bubbly, throwing things at Ryan Seacrest on TV, or whatever. Each quarter, new MVP (Microsoft Most Valuable...( read more )...(read more)

January 2010 Silverlight MVPs

Posted: 04 Jan 2010 11:00 AM PST

Happy new year to all! I hope you enjoyed a safe celebration whether that be playing a board game with friends, toasting the new year with some bubbly, throwing things at Ryan Seacrest on TV, or whatever. Each quarter, new MVP (Microsoft Most Valuable Read More......(read more)

Silverlight 4 Beta – More on MEF and the PackageCatalog

Posted: 04 Jan 2010 08:37 AM PST

One of the things that I talked about in the screencasts that I made about Silverlight 4 and MEF was the PackageCatalog. By the way – to make any sense of this stuff you need to install Visual Studio 2010 Beta 2 and Silverlight 4 Beta . The PackageCatalog...( read more )...(read more)

Sunday, January 3, 2010

Configuration Files for Silvelright HVP

Configuration Files for Silvelright HVP


Configuration Files for Silvelright HVP

Posted: 03 Jan 2010 11:05 AM PST

This mini-tutorial is part of the Silverlight HyperVideo Project documentation .   Taking Risks One of the great pleasures, and total terrors of documenting this open-source application is that occasionally I have to offer up some half-baked ideas...( read more )...(read more)

Architecting SL4 Apps with RIA Services, MEF and MVVM - Part 4 (of 3)

Posted: 02 Jan 2010 03:52 PM PST

URL : http://wildermuth.com/downloads/riaxboxgames.zip Welcome the part 4 of my three-part series on architecting with RIA Services. In the last part of the series, I thought I was done with the example and some of my readers challenged me to help them...( read more )...(read more)

Silverlight Cream for January 02, 2010 -- #769

Posted: 02 Jan 2010 07:44 PM PST

In this 01022010 Issue: Michael Washington , nmarun , Andrea Boschin , John Papa , Victor Gaudioso , and Jesse Liberty . From SilverlightCream.com : Closed Captioning with Silverlight (using MVVM) Michael Washington explains his 'closed captioning' Silverlight...( read more )...(read more)

Google Chrome beats Apple’s Safari market share

Posted: 02 Jan 2010 06:02 PM PST

More than a year and half ago, I wrote an article here on UXPassion.com saying that we don't need another hero – and I was referring to the Google Chrome browser. Today, after I've noticed news reporting that Chrome has surpassed Apple's Safari market...( read more )...(read more)

[Book review] Essential Silverlight 3

Posted: 02 Jan 2010 05:50 PM PST

I recently finished reading " Essential Silverlight 3 " book from Ashraf Michail (Addison-Wesley). This book provides an incredible level of details on the UI part (graphics, animation, effects, text, media) of Silverlight . "Under the Hood" sections...( read more )...(read more)

Alternate URLs for this blog

Posted: 02 Jan 2010 02:18 PM PST

I had someone a few days ago who couldn't bring up RiaServicesBlog.Net for some strange reason but one of the other URLs worked. There are currently three different URLs that point to this blog: www.riaservicesblog.net www.riaservicesblog.com www.colinblair Read More......(read more)

Saturday, January 2, 2010

ASP.NET 4, ASP.NET MVC, and Silverlight 4 Videos of my Talks in Europe

ASP.NET 4, ASP.NET MVC, and Silverlight 4 Videos of my Talks in Europe


ASP.NET 4, ASP.NET MVC, and Silverlight 4 Videos of my Talks in Europe

Posted: 02 Jan 2010 01:05 PM PST

[ In addition to blogging, I'm also now using Twitter for quick updates and to share links. Follow me at: twitter.com/scottgu ] Hope you all had a great holiday – welcome to 2010! Last month I did a blog post about some of the presentations I did in Europe...( read more )...(read more)

ASP.NET 4, ASP.NET MVC, and Silverlight 4 Videos of my Talks in Europe

Posted: 02 Jan 2010 01:05 PM PST

[ In addition to blogging, I'm also now using Twitter for quick updates and to share links. Follow me at: twitter.com/scottgu ] Hope you all had a great holiday – welcome to 2010! Last month I did a blog post about some of the presentations I did in Europe and posted the slides+demo files from them.  High-quality videos of the talks I did in Sweden were posted two weeks ago on the Channel9 site, so you can also now watch videos of the talks online as well.  The videos use a nice format where you can watch me talking as well as the screen at the same time.  The code is readable when running in full-screen mode. Below are links to the different talks along with the slides+sample files: ASP.NET 4 and VS 2010 Web Development This...(read more)

Death to confirmation dialogs with jquery.undoable

Posted: 01 Jan 2010 10:09 PM PST

Confirmation dialogs were designed by masochists intent on making users of the web miserable. At least that's how I feel when I run into too many of them. And yes, if you take a look at Subtext, you can see I'm a perpetrator. Well no longer! I was managing my Netflix queue recently when I accidentally added a movie I did not intend to add (click on the image for a larger view). Naturally, I clicked on the blue "x" to remove it from the queue and saw this. Notice that there's no confirmation dialog that I'm most likely to ignore questioning my intent requiring me to take yet one more action to remove the movie. No, the movie is removed immediately from my queue just as I requested. I love it when software does what I tell it to do and doesn't...(read more)

Microsoft Silverlight MVP += 1

Posted: 01 Jan 2010 07:11 PM PST

The very first email of the year in my inbox is still a sweet one, announcing that I've got re-awarded Silverlight MVP by Microsoft. This is the 4th year in a row and I am still very honored and excited! In 2009 I had the pleasure to be involved in many...( read more )...(read more)

Friday, January 1, 2010

Opening up Silverlight 4 Navigation: Authentication/Authorization in an INavigationContentLoader

Opening up Silverlight 4 Navigation: Authentication/Authorization in an INavigationContentLoader


Opening up Silverlight 4 Navigation: Authentication/Authorization in an INavigationContentLoader

Posted: 01 Jan 2010 12:01 AM PST

Continuing my series of posts on ways to use INavigationContentLoader (a feature in the Silverlight 4 Beta SDK), in this post, I'll explore another idea for a composable INavigationContentLoader that protects access to your pages based upon the credentials...( read more )...(read more)

TOP 10 UX recommendations for Silverlight Command Link usage

Posted: 31 Dec 2009 10:15 PM PST

After I've explained how to build and design custom control – Command Link for Silverlight, I'm now sharing some best UX practices and guidelines regarding the implementation of the Command Link control. Here is the list of best UX practices for design...( read more )...(read more)

2009 Blogged - Greatest Hits

Posted: 31 Dec 2009 10:08 PM PST

While I (really) unplugged in December of 2009, you can access a nice calendar of all my 2009 posts (as well as other years) at this link . In 2008 I published a Greatest Hits post that I will keep updated, but here's a list of links to the posts I most enjoyed writing this last year. I hope you find some of them useful, and perhaps you missed one or two or you just started reading recently and this 2009 "Greatest Hits" Post will catch you up on the stuff I was thinking about this year. General Geekery Painful Reminder: Focus on Core Competencies (and Back Stuff Up) 10 Awesome Things I Remember About Computers FizzBin - The Technical Support Secret Handshake Paving my machine for a fresh 2009 - First-Pass Must-Haves Low Bandwidth...(read more)

Saving Snapshots to PNG in Silverlight 4 and the WebCam

Posted: 31 Dec 2009 04:23 PM PST

This week I decided to experimenting with a few webcam features and put together an application activates a webcam, allows the user to take snapshots, and save the snapshots to PNG files. I like when demos use MVVM out of the box instead of just throwing...( read more )...(read more)

Windows Azure Platform Training Course

Posted: 31 Dec 2009 03:59 PM PST

Learn how to build applications that use Windows Azure and SQL Azure in this self-paced course of videos, samples and hands-on labs.

Tutorial: Expression Web and WordPress – a Match Made in Coding Heaven

Posted: 31 Dec 2009 03:59 PM PST

Web designers are faced with two major challenges: to create a great-looking and highly functional Web site and to fill that site with useful content so that people visit. Learn how WordPress represents a perfect separation of style and content, leaving you to use the powerful coding and styling features of Expression Web to the fullest to realize your vision on the Web.