<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:a10="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Developmentor Instructor's Blog Posts</title>
    <description />
    <lastBuildDate>Fri, 10 Feb 2012 12:28:59 -0600</lastBuildDate>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DevelopmentorInstructors" /><feedburner:info uri="developmentorinstructors" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/X8Dv5lN9hx8/WebAppsVsWebServices302sAnd401sAreNotAlwaysGoodFriends.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/WebAppsVsWebServices302sAnd401sAreNotAlwaysGoodFriends.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Web Apps vs Web Services: 302s and 401s are not always good Friends</title>
      <description>&lt;p&gt;
It is not very uncommon to have web sites that have web UX and services content. The
UX part maybe uses WS-Federation (or some other redirect based mechanism). That means
whenever an authorization error occurs (401 status code), this is picked by the corresponding
redirect module and turned into a redirect (302) to the login page. All is good.
&lt;/p&gt;
&lt;p&gt;
But in services, when you emit a 401, you typically want that status code to travel
back to the client agent, so it can do error handling. These two approaches conflict.
&lt;/p&gt;
&lt;p&gt;
If you think (like me) that you should separate UX and services into separate apps,
you don’t need to read on. Just do it ;)
&lt;/p&gt;
&lt;p&gt;
If you need to mix both mechanisms in a single app – here’s how I solved it for a
project.
&lt;/p&gt;
&lt;p&gt;
I sub classed the redirect module – this was in my case the WIF WS-Federation HTTP
module and modified the &lt;em&gt;OnAuthorizationFailed&lt;/em&gt; method. In there I check for
a special &lt;em&gt;HttpContext&lt;/em&gt; item, and if that is present, I suppress the redirect.
Otherwise everything works as normal:
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;class&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ServiceAwareWSFederationAuthenticationModule&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WSFederationAuthenticationModule&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; OnAuthorizationFailed(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthorizationFailedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;base&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.OnAuthorizationFailed(e);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; isService
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Current.Items[&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AdvertiseWcfInHttpPipelineBehavior&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.DefaultLabel];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (isService
!= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.RedirectToIdentityProvider
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
Now the question is, how do you smuggle that value into the &lt;em&gt;HttpContext&lt;/em&gt;.
If it is a MVC based web service, that’s easy of course. In the case of WCF, one approach
that worked for me was to set it in a service behavior (dispatch message inspector
to be exact):
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; BeforeSendReply(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Message&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; reply, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; correlationState)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Current
!= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Current.Items[DefaultLabel]
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=6ec33e60-68cc-4acc-991b-dedfade31ec0" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=X8Dv5lN9hx8:5t2wEUCJMfw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=X8Dv5lN9hx8:5t2wEUCJMfw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=X8Dv5lN9hx8:5t2wEUCJMfw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=X8Dv5lN9hx8:5t2wEUCJMfw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=X8Dv5lN9hx8:5t2wEUCJMfw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=X8Dv5lN9hx8:5t2wEUCJMfw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=X8Dv5lN9hx8:5t2wEUCJMfw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=X8Dv5lN9hx8:5t2wEUCJMfw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/X8Dv5lN9hx8" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 10 Feb 2012 12:28:59 -0600</pubDate>
      <a10:updated>2012-02-10T12:28:59-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/WebAppsVsWebServices302sAnd401sAreNotAlwaysGoodFriends.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/KK5zH-HyJvk/ReplacingASPNETFormsAuthenticationWithWIFSessionAuthenticationForTheBetter.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/ReplacingASPNETFormsAuthenticationWithWIFSessionAuthenticationForTheBetter.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Replacing ASP.NET Forms Authentication with WIF Session Authentication (for the better)</title>
      <description>&lt;p&gt;
ASP.NET Forms Authentication and WIF Session Authentication (which has *nothing* to
do with ASP.NET sessions) are very similar. Both inspect incoming requests for a special
cookie that contains identity information, if that cookie is present it gets validated
and if that is successful, the identity information is made available to the application
via &lt;em&gt;HttpContext.User/Thread.CurrentPrincipal&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
The main difference between the two is the identity to cookie serialization engine
that sits below. Whereas ForsmAuth can only store the name of the user and an additional &lt;em&gt;UserData&lt;/em&gt; string.
It is limited to a single cookie and hardcoded to protection via the machine key.
&lt;/p&gt;
&lt;p&gt;
WIF session authentication in turn has these additional features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Can serialize a complete &lt;em&gt;ClaimsPrincipal&lt;/em&gt; (including claims) to the cookie(s).&lt;/li&gt;
&lt;li&gt;
Has a cookie overflow mechanism when data gets too big. In total it can create up
to 8 cookies (á 4 KB) per domain (not that I would recommend round tripping that much
data).&lt;/li&gt;
&lt;li&gt;
Supports server side caching (which is an extensible mechanism).&lt;/li&gt;
&lt;li&gt;
Has an extensible mechanism for protection (DPAPI by default, RSA as an option for
web farms, and machine key based protection is coming in .NET 4.5)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So in other words – session authentication is the superior technology, and if done
cleverly enough you can replace FormsAuth without any changes to your application
code. The only features missing is the redirect mechanism to a login page and an easy
to use API to set authentication cookies. But that’s easy to add ;)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FormsSessionAuthenticationModule&lt;br&gt;
&lt;/strong&gt;This module is a sub class of the standard WIF session module, adding the
following features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Handling EndRequest to do the redirect on 401s to the login page configured for FormsAuth.&lt;/li&gt;
&lt;li&gt;
Reads the FormsAuth cookie name, cookie domain, timeout and require SSL settings to
configure the module accordingly.&lt;/li&gt;
&lt;li&gt;
Implements sliding expiration if configured for FormsAuth. It also uses the same algorithm
as FormsAuth to calculate when the cookie needs renewal.&lt;/li&gt;
&lt;li&gt;
Implements caching of the principal on the server side (aka session mode) if configured
in an AppSetting.&lt;/li&gt;
&lt;li&gt;
Supports claims transformation via a &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
As you can see, the whole module is designed to easily replace the FormsAuth mechanism.
Simply set the authentication mode to &lt;em&gt;None&lt;/em&gt; and register the module. In the
spirit of the &lt;em&gt;FormsAuthentication&lt;/em&gt; class, there is also now a &lt;em&gt;SessionAuthentication&lt;/em&gt; class
with the same methods and signatures (e.g. &lt;em&gt;SetAuthCookie&lt;/em&gt; and &lt;em&gt;SignOut&lt;/em&gt;).
The rest of your application code should not be affected.
&lt;/p&gt;
&lt;p&gt;
In addition the session module looks for a HttpContext item called “NoRedirect”. If
that exists, the redirect to the login page will *not* happen, instead the 401 is
passed back to the client. Very useful if you are implementing services or web APIs
where you want the actual status code to be preserved. A corresponding &lt;em&gt;UnauthorizedResult&lt;/em&gt; is
provided that gives you easy access to the context item.
&lt;/p&gt;
&lt;p&gt;
The &lt;a href="http://www.leastprivilege.com/content/binary/FormsSessionAuthentication.zip" target="_blank"&gt;download&lt;/a&gt; contains
a sample app, the module and an inspector for session cookies and tokens. Let’s hope
that in .NET 4.5 such a module comes out of the box.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=9ecfcb16-781a-4c22-993a-ab3d757a0905" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=KK5zH-HyJvk:1zSJfQF7QqM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=KK5zH-HyJvk:1zSJfQF7QqM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=KK5zH-HyJvk:1zSJfQF7QqM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=KK5zH-HyJvk:1zSJfQF7QqM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=KK5zH-HyJvk:1zSJfQF7QqM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=KK5zH-HyJvk:1zSJfQF7QqM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=KK5zH-HyJvk:1zSJfQF7QqM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=KK5zH-HyJvk:1zSJfQF7QqM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/KK5zH-HyJvk" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 09 Feb 2012 15:14:54 -0600</pubDate>
      <a10:updated>2012-02-09T15:14:54-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/ReplacingASPNETFormsAuthenticationWithWIFSessionAuthenticationForTheBetter.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/GfSpqvb9mkQ/windows-workflow-foundation-3-types-marked-obsolete-in-net-4-5.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/02/09/windows-workflow-foundation-3-types-marked-obsolete-in-net-4-5.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: Windows Workflow Foundation 3 Types Marked Obsolete in .NET 4.5</title>
      <description>&lt;p&gt;People have been wondering for a while what the future of WF3 was since the release of WF4. So far both workflow stacks have coexisted in .NET 4 and there has been no official statement about the future of the older WF3 stack. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;That has just changed!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The workflow team at Microsoft has just announced that they are marking the WF3 stack as deprecated with the next release of the .NET framework, .NET 4.5. &lt;/p&gt;  &lt;p&gt;Of course the types are still there but you will get compile time&amp;#160; warnings for using them and you can expect the classes to be dropped some time in the future.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Warning BC40000: X is obsolete: ‘WF 3 types are deprecated. Please use WF 4 instead.’”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So if you are sill using WF3 this is a good moment to invest the time and start learning Wf4.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can read the official announcement &lt;a href="http://blogs.msdn.com/b/workflowteam/archive/2012/02/08/deprecatingwf3.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805828" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GfSpqvb9mkQ:XUmxF6APPXo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GfSpqvb9mkQ:XUmxF6APPXo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=GfSpqvb9mkQ:XUmxF6APPXo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GfSpqvb9mkQ:XUmxF6APPXo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=GfSpqvb9mkQ:XUmxF6APPXo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GfSpqvb9mkQ:XUmxF6APPXo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GfSpqvb9mkQ:XUmxF6APPXo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=GfSpqvb9mkQ:XUmxF6APPXo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/GfSpqvb9mkQ" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 09 Feb 2012 07:42:18 -0600</pubDate>
      <a10:updated>2012-02-09T07:42:18-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/02/09/windows-workflow-foundation-3-types-marked-obsolete-in-net-4-5.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/nKkeSIfd2fQ/controlling-when-the-value-is-updated-with-knockout-js.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/02/08/controlling-when-the-value-is-updated-with-knockout-js.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: Controlling when the value is updated with Knockout.js</title>
      <description>&lt;p&gt;In the previous blog post about &lt;a href="http://knockoutjs.com/"&gt;Knockout.js&lt;/a&gt; I showed why and how to get started with Knockout.js. And I explained that the reason I really like Knockout.js is that it is a very familiar way of working with its MVVM style.&lt;/p&gt;  &lt;p&gt;I created a small demo where we could update the first and last name of a person and the ViewModel would combine the two and display the concatenated parts as the complete name. This worked just fine as soon as I started using observables except for one thing. Whenever I start typing the full name isn’t updated until the &amp;lt;input&amp;gt; control losses focus.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/7750.image_5F00_578727C6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3173.image_5F00_thumb_5F00_5A6C66AC.png" width="279" height="256" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Quite often this will be good enough as the resulting value isn’t used right away but there are cases, like here, where it is and we want more frequent updates.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The value binding&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As it turns out the &lt;a href="http://knockoutjs.com/documentation/value-binding.html"&gt;value data binding&lt;/a&gt; has an additional option, the valueUpdate, that controls when the value, and therefor the computed observable full name is updated. By adding that to the data-bind expression we can get real time updates. There are several options but for these real time scenarios using the value of &lt;strong&gt;afterkeydown&lt;/strong&gt; works best.&lt;/p&gt;  &lt;p&gt;The markup now looks like this:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;fieldset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;legend&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Enter person&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;legend&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        First name:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: firstName, valueUpdate: &amp;#39;afterkeydown&amp;#39;&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        last name:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: lastName, valueUpdate: &amp;#39;afterkeydown&amp;#39;&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        Full name: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;span&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text: fullName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;span&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;fieldset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The JavaScript is unchanged and looks like this:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;$(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; viewModel = {};&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    viewModel.firstName = ko.observable(&lt;span style="color:#006080;"&gt;&amp;quot;Maurice&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    viewModel.lastName = ko.observable(&lt;span style="color:#006080;"&gt;&amp;quot;de Beijer&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    viewModel.fullName = ko.computed(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; viewModel.firstName() + &lt;span style="color:#006080;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + viewModel.lastName();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    ko.applyBindings(viewModel);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;});&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;With this change the full name is updated with each character entered.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3056.image_5F00_318151A3.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/7446.image_5F00_thumb_5F00_1CAF5923.png" width="279" height="255" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Sweet &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3833.wlEmoticon_2D00_smile_5F00_08B5C68D.png" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;
  &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805681" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=nKkeSIfd2fQ:MtDstyoz8O0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=nKkeSIfd2fQ:MtDstyoz8O0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=nKkeSIfd2fQ:MtDstyoz8O0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=nKkeSIfd2fQ:MtDstyoz8O0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=nKkeSIfd2fQ:MtDstyoz8O0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=nKkeSIfd2fQ:MtDstyoz8O0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=nKkeSIfd2fQ:MtDstyoz8O0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=nKkeSIfd2fQ:MtDstyoz8O0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/nKkeSIfd2fQ" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 08 Feb 2012 04:02:00 -0600</pubDate>
      <a10:updated>2012-02-08T04:02:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/02/08/controlling-when-the-value-is-updated-with-knockout-js.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/SSm5E3Wdv8g/how-to-get-started-with-knockout-js.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/02/06/how-to-get-started-with-knockout-js.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: How to get started with Knockout.js</title>
      <description>&lt;p&gt;Once you get into doing more client side JavaScript code with business applications and REST services you are going to run into the question of how to construct the client side HTML required to show the data to the users. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using jQuery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Assuming most people are going to be using &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; on the client you might start with some jQuery code to generate HTML.&lt;/p&gt;  &lt;p&gt;Your code might look something like this&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;$(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    $(&lt;span style="color:#006080;"&gt;&amp;quot;#btn&amp;quot;&lt;/span&gt;).click(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        $.getJSON(&lt;span style="color:#006080;"&gt;&amp;quot;/services/books&amp;quot;&lt;/span&gt;).then(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (books) {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            $.each(books, &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                $(&lt;span style="color:#006080;"&gt;&amp;quot;&amp;lt;li&amp;gt;&amp;quot;&lt;/span&gt;).text(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Title + &lt;span style="color:#006080;"&gt;&amp;quot; by &amp;quot;&lt;/span&gt; + &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Author).appendTo(&lt;span style="color:#006080;"&gt;&amp;quot;#books&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;});&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The code isn’t very complicated but then we are only showing a simple bit of text. And in all likelihood the actual HTML that needs to be generated will be quite a bit more complex. And the code increases as least as much, but often much more, in complexity.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using templates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next step people tend to take is using templates. There are lots of different templating libraries out there with more coming but in this example I am using the &lt;a href="http://ejohn.org/blog/javascript-micro-templating/"&gt;JavaScript Micro-Templating&lt;/a&gt; function John Resig wrote. If you are looking for others take a look at &lt;a href="http://documentcloud.github.com/underscore/"&gt;Underscore.js&lt;/a&gt; or &lt;a href="http://borismoore.github.com/jsrender/demos/index.html"&gt;JsRender&lt;/a&gt;/&lt;a href="https://github.com/BorisMoore/jsviews"&gt;JsViews&lt;/a&gt; (still in preview at the moment). Specially &lt;a href="http://documentcloud.github.com/underscore/"&gt;Underscore.js&lt;/a&gt; is a nice library to look at because all the additional functions in there.&lt;/p&gt;

&lt;p&gt;Using templates we separate the code from the template to generate the required HTML. The code is easier to understand. &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;$(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    $(&lt;span style="color:#006080;"&gt;&amp;quot;#btn&amp;quot;&lt;/span&gt;).click(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        $.getJSON(&lt;span style="color:#006080;"&gt;&amp;quot;/services/books&amp;quot;&lt;/span&gt;).then(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; (books) {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; html = tmpl(&lt;span style="color:#006080;"&gt;&amp;quot;books_tmpl&amp;quot;&lt;/span&gt;, { books: books });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            $(&lt;span style="color:#006080;"&gt;&amp;quot;#books&amp;quot;&lt;/span&gt;).html(html);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;});&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;However this comes at a cost as we also need a template and that is a mixture of markup and expressions. The expressions syntax varies depending on the templating engine, in this case it’s &lt;strong&gt;&lt;em&gt;&amp;lt;%= JavaScript Expression %&amp;gt;. &lt;/em&gt;&lt;/strong&gt;Not hard to use but it is another bit of executing code that has to be maintained.&lt;/p&gt;



&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;lt;script type=&lt;span style="color:#006080;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt; id=&lt;span style="color:#006080;"&gt;&amp;quot;books_tmpl&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;  &amp;lt;% &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; ( &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; books.length; i++ ) { &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; book = books[i];%&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &amp;lt;li&amp;gt;&amp;lt;a href=&lt;span style="color:#006080;"&gt;&amp;quot;/services/books/&amp;lt;%=book.Id%&amp;gt;&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;%=book.Title%&amp;gt; by &amp;lt;%=book.Author%&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;  &amp;lt;% } %&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;br /&gt;As you can see the template is actually embedded as a &amp;lt;script&amp;gt; block. Not a requirement as it is just a string but an easy way to do so. It does however mean that you have to handcraft the HTML with no designer or IntelliSense support.



&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Knockout.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As soon as we start using &lt;a href="http://knockoutjs.com/"&gt;Knockout.js&lt;/a&gt; this become somewhat more like Silverlight/WPF. Not that it is exactly the same but it uses the same MVVM pattern and data binding that Silverlight developers are used to. Something I really like &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5873.wlEmoticon_2D00_smile_5F00_322BDF61.png" /&gt;. Now Knockout.js is my no means the only way to do this, just as with templates there are plenty of other options like &lt;a href="http://documentcloud.github.com/backbone/"&gt;Backbone&lt;/a&gt; or &lt;a href="http://javascriptmvc.com/"&gt;JavaScriptMVC&lt;/a&gt; for example. See &lt;a href="http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/"&gt;this&lt;/a&gt; blog post for a longer list of alternatives.&lt;/p&gt;

&lt;p&gt;Personally I really like the MVVM and binding style Knockout.js uses.&lt;/p&gt;

&lt;p&gt;Instead of splitting the HTML into a static and a dynamically generated part with Knockout.js you embed data binding expressions in your HTML. Notice the data-bind attributes in the following HTML snippet. They indicate data binding syntax. The first two data bind the value property of the &amp;lt;input&amp;gt; control to the firstName and lastName from the ViewModel. The third data binds the text in the &amp;lt;span&amp;gt; against the fullName of the ViewModel.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;fieldset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;legend&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Enter person&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;legend&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        First name:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: firstName&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        last name:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;value: lastName&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        Full name: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;span&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;data-bind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text: fullName&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;span&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;p&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;fieldset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;So what does the view model look like? It can be a real simple JavaScript object. In fact the following would work. It would be less than perfect thou and we can do better.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; viewModel = {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    firstName: &lt;span style="color:#006080;"&gt;&amp;quot;Maurice&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    lastName: &lt;span style="color:#006080;"&gt;&amp;quot;de Beijer&amp;quot;&lt;/span&gt;,&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    fullName: &lt;span style="color:#006080;"&gt;&amp;quot;Maurice de Beijer&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;};&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;A better way is to use the Knockout functionality and define the data fields using observables. By using Observables we can observer changes being made. And by defining the fullName as a computed observable we can have the &amp;lt;span&amp;gt; with the fullName dynamically update. A much better ViewModel:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; viewModel = {};&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;viewModel.firstName = ko.observable(&lt;span style="color:#006080;"&gt;&amp;quot;Maurice&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;viewModel.lastName = ko.observable(&lt;span style="color:#006080;"&gt;&amp;quot;de Beijer&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;viewModel.fullName = ko.computed(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; viewModel.firstName() + &lt;span style="color:#006080;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + viewModel.lastName();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;});&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Of course we still need to tell Knockout to use the ViewModel and that takes all of one line:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;ko.applyBindings(viewModel);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;So the complete JavaScript in my page is now:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;$(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; viewModel = {};&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    viewModel.firstName = ko.observable(&lt;span style="color:#006080;"&gt;&amp;quot;Maurice&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    viewModel.lastName = ko.observable(&lt;span style="color:#006080;"&gt;&amp;quot;de Beijer&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    viewModel.fullName = ko.computed(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; () {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; viewModel.firstName() + &lt;span style="color:#006080;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + viewModel.lastName();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    });&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    ko.applyBindings(viewModel);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;});&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And the nice thing is that updating the first name automatically updates the fullName &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5873.wlEmoticon_2D00_smile_5F00_322BDF61.png" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/0385.image_5F00_23150087.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5618.image_5F00_thumb_5F00_0F1B6DF1.png" width="303" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This is just the first baby steps using Knockout.js as it is far more capable than just this. In fact we can data bind against arrays of data and create nice list etc. The &lt;a href="http://knockoutjs.com/"&gt;Knockout.js&lt;/a&gt; site has some nice &lt;a href="http://learn.knockoutjs.com/"&gt;tutorials&lt;/a&gt; that will help you get started.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt; 
  &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805626" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SSm5E3Wdv8g:m9OULEg_y1E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SSm5E3Wdv8g:m9OULEg_y1E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=SSm5E3Wdv8g:m9OULEg_y1E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SSm5E3Wdv8g:m9OULEg_y1E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=SSm5E3Wdv8g:m9OULEg_y1E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SSm5E3Wdv8g:m9OULEg_y1E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SSm5E3Wdv8g:m9OULEg_y1E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=SSm5E3Wdv8g:m9OULEg_y1E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/SSm5E3Wdv8g" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 06 Feb 2012 03:31:00 -0600</pubDate>
      <a10:updated>2012-02-06T03:31:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/02/06/how-to-get-started-with-knockout-js.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/yqDrJsJ6nHs/MixingFormsAndTokenAuthenticationInASingleASPNETApplicationTheDetails.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplicationTheDetails.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Mixing Forms and Token Authentication in a single ASP.NET Application (the Details)</title>
      <description>&lt;p&gt;
The scenario described in my &lt;a href="http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx" target="_blank"&gt;last&lt;/a&gt; post
works because of the design around HTTP modules in ASP.NET. Authentication related
modules (like Forms authentication and WIF WS-Fed/Sessions) typically subscribe to
three events in the pipeline – &lt;em&gt;AuthenticateRequest/PostAuthenticateRequest&lt;/em&gt; for
pre-processing and &lt;em&gt;EndRequest&lt;/em&gt; for post-processing (like making redirects
to a login page).
&lt;/p&gt;
&lt;p&gt;
In the pre-processing stage it is the modules’ job to determine the identity of the
client based on incoming HTTP details (like a header, cookie, form post) and set &lt;em&gt;HttpContext.User&lt;/em&gt; and &lt;em&gt;Thread.CurrentPrincipal&lt;/em&gt;.
The actual page (in the &lt;em&gt;ExecuteHandler&lt;/em&gt; event) “sees” the identity that the
last module has set.
&lt;/p&gt;
&lt;p&gt;
So in our case there are three modules in effect:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
FormsAuthenticationModule (AuthenticateRequest, EndRequest) 
&lt;li&gt;
WSFederationAuthenticationModule (AuthenticateRequest, PostAuthenticateRequest, EndRequest) 
&lt;li&gt;
SessionAuthenticationModule (AuthenticateRequest, PostAuthenticateRequest)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So let’s have a look at the different scenario we have when mixing Forms auth and
WS-Federation.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Anoymous request to unprotected resource&lt;br&gt;
&lt;/strong&gt;This is the easiest case. Since there is no WIF session cookie or a FormsAuth
cookie, these modules do nothing. The WSFed module creates an anonymous &lt;em&gt;ClaimsPrincipal&lt;/em&gt; and
calls the registered &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt; (if any) to transform it.
The result (by default an anonymous &lt;em&gt;ClaimsPrincipal&lt;/em&gt;) gets set.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif1.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Anonymous request to FormsAuth protected resource&lt;br&gt;
&lt;/strong&gt;This is the scenario where an anonymous user tries to access a FormsAuth
protected resource for the first time. The principal is anonymous and before the page
gets rendered, the &lt;em&gt;Authorize&lt;/em&gt; attribute kicks in. The attribute determines
that the user needs authentication and therefor sets a 401 status code and ends the
request. Now execution jumps to the EndRequest event, where the FormsAuth module takes
over. The module then converts the 401 to a redirect (302) to the forms login page.
&lt;/p&gt;
&lt;p&gt;
If authentication is successful, the login page sets the FormsAuth cookie.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif2.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FormsAuth authenticated request to a FormsAuth protected resource&lt;br&gt;
&lt;/strong&gt;Now a FormsAuth cookie is present, which gets validated by the FormsAuth
module. This cookie gets turned into a &lt;em&gt;GenericPrincipal/FormsIdentity&lt;/em&gt; combination.
The WS-Fed module turns the principal into a &lt;em&gt;ClaimsPrincipal&lt;/em&gt; and calls the
registered &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;. The outcome of that gets set on the
context.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif3.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Anonymous request to STS protected resource&lt;br&gt;
&lt;/strong&gt;This time the anonymous user tries to access an STS protected resource (a
controller decorated with the &lt;em&gt;RequireTokenAuthentication&lt;/em&gt; attribute). The
attribute determines that the user needs STS authentication by checking the authentication
type on the current principal. If this is not &lt;em&gt;Federation&lt;/em&gt;, the redirect to
the STS will be made.
&lt;/p&gt;
&lt;p&gt;
After successful authentication at the STS, the STS posts the token back to the application
(using WS-Federation syntax).
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif4.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Postback from STS authentication&lt;br&gt;
&lt;/strong&gt;After the postback, the WS-Fed module finds the token response and validates
the contained token. If successful, the token gets transformed by the &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;,
and the outcome is a) stored in a session cookie, and b) set on the context.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif5.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;STS authenticated request to an STS protected resource&lt;br&gt;
&lt;/strong&gt;This time the WIF Session authentication module kicks in because it can find
the previously issued session cookie. The module re-hydrates the ClaimsPrincipal from
the cookie and sets it.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif6.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FormsAuth and STS authenticated request to a protected resource&lt;br&gt;
&lt;/strong&gt;This is kind of an odd case – e.g. the user first authenticated using Forms
and after that using the STS. This time the FormsAuth module does its work, and then
afterwards the session module stomps over the context with the session principal.
In other words, the STS identity wins.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/formsAuthWif7.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What about roles?&lt;br&gt;
&lt;/strong&gt;A common way to set roles in ASP.NET is to use the role manager feature.
There is a corresponding HTTP module for that (&lt;em&gt;RoleManagerModule&lt;/em&gt;) that handles &lt;em&gt;PostAuthenticateRequest&lt;/em&gt;.
Does this collide with the above combinations?
&lt;/p&gt;
&lt;p&gt;
No it doesn’t! When the WS-Fed module turns existing principals into a &lt;em&gt;ClaimsPrincipal&lt;/em&gt; (like
it did with the &lt;em&gt;FormsIdentity&lt;/em&gt;), it also checks for &lt;em&gt;RolePrincipal&lt;/em&gt; (which
is the principal type created by role manager), and turns the roles in role claims.
Nice!
&lt;/p&gt;
&lt;p&gt;
But as you can see in the last scenario above, this might result in unnecessary work,
so I would rather recommend consolidating all role work (and other claims transformations)
into the &lt;em&gt;ClaimsAuthenticationManager&lt;/em&gt;. In there you can check for the authentication
type of the incoming principal and act accordingly.
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=44dbdcdd-3f5c-4d45-aba3-b429d09a0c00" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=yqDrJsJ6nHs:T2YYqEy_pTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=yqDrJsJ6nHs:T2YYqEy_pTo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=yqDrJsJ6nHs:T2YYqEy_pTo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=yqDrJsJ6nHs:T2YYqEy_pTo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=yqDrJsJ6nHs:T2YYqEy_pTo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=yqDrJsJ6nHs:T2YYqEy_pTo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=yqDrJsJ6nHs:T2YYqEy_pTo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=yqDrJsJ6nHs:T2YYqEy_pTo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/yqDrJsJ6nHs" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 02 Feb 2012 01:47:52 -0600</pubDate>
      <a10:updated>2012-02-02T01:47:52-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplicationTheDetails.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/gbVxi9oV_hw/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Mixing Forms and Token Authentication in a single ASP.NET Application</title>
      <description>&lt;p&gt;
I recently had the task to find out how to mix ASP.NET Forms Authentication with WIF’s
WS-Federation. The FormsAuth app did already exist, and a new sub-directory of this
application should use ADFS for authentication. Minimum changes to the existing application
code would be a plus ;)
&lt;/p&gt;
&lt;p&gt;
Since the application is using ASP.NET MVC this was quite easy to accomplish – WebForms
would be a little harder, but still doable. I will discuss the MVC solution here.
&lt;/p&gt;
&lt;p&gt;
To solve this problem, I made the following changes to the standard MVC internet application
template:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Added WIF’s &lt;em&gt;WSFederationAuthenticationModule&lt;/em&gt; and &lt;em&gt;SessionAuthenticationModule&lt;/em&gt; to
the modules section. 
&lt;li&gt;
Add a WIF configuration section to configure the trust with ADFS. 
&lt;li&gt;
Added a new authorization attribute. This attribute will go on controller that demand
ADFS (or STS in general) authentication.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The attribute logic is quite simple – it checks for authenticated users – and additionally
that the authentication type is set to &lt;em&gt;Federation&lt;/em&gt;. If that’s the case all
is good, if not, the redirect to the STS will be triggered.
&lt;/p&gt;
&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 11.3pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RequireTokenAuthenticationAttribute&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthorizeAttribute&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; AuthorizeCore(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContextBase&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; httpContext)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; (httpContext.User.Identity.IsAuthenticated
&amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; httpContext.User.Identity.AuthenticationType.Equals(&lt;br&gt;
WIF.&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthenticationTypes&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Federation, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;StringComparison&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.OrdinalIgnoreCase))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; HandleUnauthorizedRequest(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;AuthorizationContext&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; filterContext)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
do the redirect to the STS&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; message
= &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;FederatedAuthentication&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.WSFederationAuthenticationModule.CreateSignInRequest(&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"passive"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, 
&lt;br&gt;
filterContext.HttpContext.Request.RawUrl, 
&lt;br&gt;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 11.3pt"&gt;&lt;font color="#000000"&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filterContext.Result = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RedirectResult&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(message.RequestUrl);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
That’s it ;) If you want to know why this works (and a possible gotcha) – read my
next post.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=b9eea158-2df2-4db9-a7cd-9d0d61e163bc" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=gbVxi9oV_hw:Mk0QzrITxss:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=gbVxi9oV_hw:Mk0QzrITxss:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=gbVxi9oV_hw:Mk0QzrITxss:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=gbVxi9oV_hw:Mk0QzrITxss:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=gbVxi9oV_hw:Mk0QzrITxss:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=gbVxi9oV_hw:Mk0QzrITxss:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=gbVxi9oV_hw:Mk0QzrITxss:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=gbVxi9oV_hw:Mk0QzrITxss:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/gbVxi9oV_hw" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 01 Feb 2012 23:08:38 -0600</pubDate>
      <a10:updated>2012-02-01T23:08:38-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/MixingFormsAndTokenAuthenticationInASingleASPNETApplication.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/SRjIMBJSX-o/</link>
      <a10:author>
        <a10:name>Tony Sneed</a10:name>
        <a10:uri>http://blog.tonysneed.com/2012/01/31/2011-recap/</a10:uri>
      </a10:author>
      <title>Tony Sneed: 2011 Recap</title>
      <description>After a rather long break from blogging, it’s time for me to jump back in!&amp;#160; I thought I would start by taking a look back at 2011 and recapping some of my experiences, with a sneak peek at blogging topics &amp;#8230; &lt;a href="http://blog.tonysneed.com/2012/01/31/2011-recap/"&gt;Continue reading &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.tonysneed.com&amp;amp;blog=14038854&amp;amp;post=397&amp;amp;subd=tonysneed&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SRjIMBJSX-o:PhmlH3p4hyw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SRjIMBJSX-o:PhmlH3p4hyw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=SRjIMBJSX-o:PhmlH3p4hyw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SRjIMBJSX-o:PhmlH3p4hyw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=SRjIMBJSX-o:PhmlH3p4hyw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SRjIMBJSX-o:PhmlH3p4hyw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=SRjIMBJSX-o:PhmlH3p4hyw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=SRjIMBJSX-o:PhmlH3p4hyw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/SRjIMBJSX-o" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 31 Jan 2012 13:15:00 -0600</pubDate>
      <a10:updated>2012-01-31T13:15:00-06:00</a10:updated>
    <feedburner:origLink>http://blog.tonysneed.com/2012/01/31/2011-recap/</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/r6Ksw9_cwj8/</link>
      <a10:author>
        <a10:name>Pinku Surana</a10:name>
        <a10:uri>http://surana.wordpress.com/2012/01/30/youre-throwing-money-away/</a10:uri>
      </a10:author>
      <title>Pinku Surana: You’re throwing money away!</title>
      <description>I am for the first time seriously considering making a bid on a home. Coincidentally, two seemingly intelligent women chattering next to me at lunch today agreed that when renting “you are throwing money away”, whereas buying a house means you will (somehow) get that money back. It’s bizarre that most people don’t understand the [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=surana.wordpress.com&amp;amp;blog=1937801&amp;amp;post=325&amp;amp;subd=surana&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=r6Ksw9_cwj8:19oPW2COt5c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=r6Ksw9_cwj8:19oPW2COt5c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=r6Ksw9_cwj8:19oPW2COt5c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=r6Ksw9_cwj8:19oPW2COt5c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=r6Ksw9_cwj8:19oPW2COt5c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=r6Ksw9_cwj8:19oPW2COt5c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=r6Ksw9_cwj8:19oPW2COt5c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=r6Ksw9_cwj8:19oPW2COt5c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/r6Ksw9_cwj8" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 30 Jan 2012 21:40:19 -0600</pubDate>
      <a10:updated>2012-01-30T21:40:19-06:00</a10:updated>
    <feedburner:origLink>http://surana.wordpress.com/2012/01/30/youre-throwing-money-away/</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/43x0s1I9pBE/</link>
      <a10:author>
        <a10:name>Jason Diamond</a10:name>
        <a10:uri>http://jason.diamond.name/weblog/2012/01/30/websocket-webinar-demo-code/</a10:uri>
      </a10:author>
      <title>Jason Diamond: WebSocket Webinar Demo Code</title>
      <description>Thanks to those who attended today&amp;#8217;s webinar. The demo code is located here until it (and the recording) get uploaded to the DM website later this week. Feel free to email with questions!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=43x0s1I9pBE:SOz9Vb__9Z4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=43x0s1I9pBE:SOz9Vb__9Z4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=43x0s1I9pBE:SOz9Vb__9Z4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=43x0s1I9pBE:SOz9Vb__9Z4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=43x0s1I9pBE:SOz9Vb__9Z4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=43x0s1I9pBE:SOz9Vb__9Z4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=43x0s1I9pBE:SOz9Vb__9Z4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=43x0s1I9pBE:SOz9Vb__9Z4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/43x0s1I9pBE" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 30 Jan 2012 14:08:01 -0600</pubDate>
      <a10:updated>2012-01-30T14:08:01-06:00</a10:updated>
    <feedburner:origLink>http://jason.diamond.name/weblog/2012/01/30/websocket-webinar-demo-code/</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/vdFQYQJMz3M/</link>
      <a10:author>
        <a10:name>Pinku Surana</a10:name>
        <a10:uri>http://surana.wordpress.com/2012/01/28/pypy-is-fast/</a10:uri>
      </a10:author>
      <title>Pinku Surana: PyPy is fast</title>
      <description>I wrote a small Python program that maintains a heap. It took 20 minutes to process a very large data file with Python 2.7. On a whim I tried PyPy. It finished the task in 1 minute. That’s 20X faster without making any changes to my code. Why isn’t everyone using PyPy?&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=surana.wordpress.com&amp;amp;blog=1937801&amp;amp;post=323&amp;amp;subd=surana&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vdFQYQJMz3M:7PTpe5i15qs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vdFQYQJMz3M:7PTpe5i15qs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=vdFQYQJMz3M:7PTpe5i15qs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vdFQYQJMz3M:7PTpe5i15qs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=vdFQYQJMz3M:7PTpe5i15qs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vdFQYQJMz3M:7PTpe5i15qs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vdFQYQJMz3M:7PTpe5i15qs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=vdFQYQJMz3M:7PTpe5i15qs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/vdFQYQJMz3M" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 27 Jan 2012 23:05:15 -0600</pubDate>
      <a10:updated>2012-01-27T23:05:15-06:00</a10:updated>
    <feedburner:origLink>http://surana.wordpress.com/2012/01/28/pypy-is-fast/</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/1tDOtkQxKqM/creating-namers.html</link>
      <a10:author>
        <a10:name>Llewellyn Falco</a10:name>
        <a10:uri>http://blog.approvaltests.com/2012/01/creating-namers.html</a10:uri>
      </a10:author>
      <title>Llewellyn Falco: Creating Namers</title>
      <description>If your current testing framework is not supported, you can create your own namer to allow you to use it.&lt;br /&gt;&lt;a href="http://approvaltests.svn.sourceforge.net/viewvc/approvaltests/trunk/projects/ApprovalTests/DotNetApprovals/ApprovalTests/Namers/UnitTestFrameworks/NUnitStackTraceParser.cs?revision=345&amp;amp;view=markup"&gt;Check out this namer &lt;/a&gt;for ideas how to make your own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1959052963816936322-6136193469671454556?l=blog.approvaltests.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1tDOtkQxKqM:pFvc0ItQ9DQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1tDOtkQxKqM:pFvc0ItQ9DQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=1tDOtkQxKqM:pFvc0ItQ9DQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1tDOtkQxKqM:pFvc0ItQ9DQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=1tDOtkQxKqM:pFvc0ItQ9DQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1tDOtkQxKqM:pFvc0ItQ9DQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1tDOtkQxKqM:pFvc0ItQ9DQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=1tDOtkQxKqM:pFvc0ItQ9DQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/1tDOtkQxKqM" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 27 Jan 2012 19:35:00 -0600</pubDate>
      <a10:updated>2012-01-27T19:35:00-06:00</a10:updated>
    <feedburner:origLink>http://blog.approvaltests.com/2012/01/creating-namers.html</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/ueYQ0g6jjIQ/dotned-podcast-koen-zwikstra-over-silverlight-5-en-de-toekomst-van-silverlight.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/27/dotned-podcast-koen-zwikstra-over-silverlight-5-en-de-toekomst-van-silverlight.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: DotNed Podcast: Koen Zwikstra over Silverlight 5 en de toekomst van Silverlight</title>
      <description>&lt;p&gt;Er is weer een &lt;a href="http://dotned.nl/PodCasts.aspx?id=23"&gt;nieuwe DotNed podcast&lt;/a&gt; online. In deze podcast spreekt Maurice de Beijer met Koen Zwikstra over de recente Silverlight 5 release en hoe de toekomst er voor Silverlight ontwikkelaars uitziet. Verder vertelt hij over Silverlight Spy een runtime inspector waarmee je willekeurige Silverlight applicaties kan inspecteren. Hij kondigt ook nog even aan dat hij druk bezig is met een Spy voor Metro applicaties op Windows 8.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blog: &lt;a href="http://firstfloorsoftware.com/blog/"&gt;http://firstfloorsoftware.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;First Floor Software: &lt;a href="http://firstfloorsoftware.com/"&gt;http://firstfloorsoftware.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Silverlight Spy: &lt;a href="http://firstfloorsoftware.com/silverlightspy/"&gt;http://firstfloorsoftware.com/silverlightspy/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Balder - 3D engine for Silverlight: &lt;a href="http://balder.codeplex.com/"&gt;http://balder.codeplex.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;enjoy!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805308" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ueYQ0g6jjIQ:u-hy_yPdnLc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ueYQ0g6jjIQ:u-hy_yPdnLc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ueYQ0g6jjIQ:u-hy_yPdnLc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ueYQ0g6jjIQ:u-hy_yPdnLc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ueYQ0g6jjIQ:u-hy_yPdnLc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ueYQ0g6jjIQ:u-hy_yPdnLc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ueYQ0g6jjIQ:u-hy_yPdnLc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ueYQ0g6jjIQ:u-hy_yPdnLc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/ueYQ0g6jjIQ" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 27 Jan 2012 04:39:00 -0600</pubDate>
      <a10:updated>2012-01-27T04:39:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/27/dotned-podcast-koen-zwikstra-over-silverlight-5-en-de-toekomst-van-silverlight.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/fQruX-KVkBA/ThinktectureIdentityServerAzureEditionRC.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/ThinktectureIdentityServerAzureEditionRC.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Thinktecture IdentityServer Azure Edition RC</title>
      <description>&lt;p&gt;
I found some time over the holidays to finalize the Azure edition of IdentityServer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://identityserver.codeplex.com/releases/view/81206"&gt;http://identityserver.codeplex.com/releases/view/81206&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The biggest difference to the on-premise version (and earlier Azure betas) is, that
by default IdSrv now uses Azure Storage for all data storage (configuration &amp;amp;
user data). This means that there is no need anymore for SQL Azure (which is still
supported out of the box – just not the default anymore).
&lt;/p&gt;
&lt;p&gt;
The download includes a readme file with setup instructions. In a nutshell:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Create a new hosted service and upload your certificates&lt;/li&gt;
&lt;li&gt;
Modify the service configuration file in the download to your needs (signing cert,
connection strings to storage…)&lt;/li&gt;
&lt;li&gt;
Deploy the package via the portal or other tools&lt;/li&gt;
&lt;li&gt;
Use the new Powershell scripts to add users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you encounter any problem, please give me feedback.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=801bbb3f-65a7-4f5d-9e02-38a0515d63a6" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=fQruX-KVkBA:O7Y2ljT-KLY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=fQruX-KVkBA:O7Y2ljT-KLY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=fQruX-KVkBA:O7Y2ljT-KLY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=fQruX-KVkBA:O7Y2ljT-KLY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=fQruX-KVkBA:O7Y2ljT-KLY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=fQruX-KVkBA:O7Y2ljT-KLY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=fQruX-KVkBA:O7Y2ljT-KLY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=fQruX-KVkBA:O7Y2ljT-KLY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/fQruX-KVkBA" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 27 Jan 2012 03:20:37 -0600</pubDate>
      <a10:updated>2012-01-27T03:20:37-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/ThinktectureIdentityServerAzureEditionRC.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/26P9YGlG4l4/TypeSafeIncludeExtensionMethodForEntityFramework.aspx</link>
      <a10:author>
        <a10:name>Mark Blomsma</a10:name>
        <a10:uri>http://www.develop-one.net/blog/2012/01/24/TypeSafeIncludeExtensionMethodForEntityFramework.aspx</a10:uri>
      </a10:author>
      <title>Mark Blomsma: Type-Safe Include extension method for Entity Framework</title>
      <description>&lt;p&gt;
If you’re interested in the Include method in a LINQ to Entities queries to be type-safe,
then Joe Ferner has the answer for you in this post: Type-Safe Entity Framework Include: &lt;a title="http://www.nearinfinity.com/blogs/joe_ferner/type-safe_entity_framework_inc.html" href="http://www.nearinfinity.com/blogs/joe_ferner/type-safe_entity_framework_inc.html"&gt;http://www.nearinfinity.com/blogs/joe_ferner/type-safe_entity_framework_inc.html&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=26P9YGlG4l4:_-y5uqhbkKk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=26P9YGlG4l4:_-y5uqhbkKk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=26P9YGlG4l4:_-y5uqhbkKk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=26P9YGlG4l4:_-y5uqhbkKk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=26P9YGlG4l4:_-y5uqhbkKk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=26P9YGlG4l4:_-y5uqhbkKk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=26P9YGlG4l4:_-y5uqhbkKk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=26P9YGlG4l4:_-y5uqhbkKk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/26P9YGlG4l4" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 24 Jan 2012 14:47:02 -0600</pubDate>
      <a10:updated>2012-01-24T14:47:02-06:00</a10:updated>
    <feedburner:origLink>http://www.develop-one.net/blog/2012/01/24/TypeSafeIncludeExtensionMethodForEntityFramework.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/BP34dFA9YWo/deploying-sqlserverce-with-an-asp-net-mvc-application.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/24/deploying-sqlserverce-with-an-asp-net-mvc-application.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: Deploying SqlServerCe with an ASP.NET MVC application</title>
      <description>&lt;p&gt;Using Entity Framework Code First together with SqlServerCe is a great way to work with small databases in ASP.NET MVC applications. I have several web applications running on shared hosting sites where SqlServerCe is the database engine under the hood. Deploying is also quite easy. I typically use the build in Publish Web option which works great over FTP.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5126.image_5F00_79B0C62F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5672.image_5F00_thumb_5F00_1E61DDA7.png" width="211" height="276" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When using SqlServerCe you have to make sure you add the deployable dependencies. Forgetting those results in pretty clear error messages.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/6114.image_5F00_0E7298E3.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/2330.image_5F00_thumb_5F00_456C771C.png" width="248" height="115" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;However once that is done I always run into another issue. When a page actually tries to use SqlServerCe I will see a security exception:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The solution is simple enough. Go to whatever security portal your provider is using, mine is using Plesk, and make sure the user that is actually running the web site has the required read/write privileges to work with the Bin folder. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/6433.image_5F00_11C40ABE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/4341.image_5F00_thumb_5F00_3608EF40.png" width="432" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805203" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=BP34dFA9YWo:YO4xMs6kOfM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=BP34dFA9YWo:YO4xMs6kOfM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=BP34dFA9YWo:YO4xMs6kOfM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=BP34dFA9YWo:YO4xMs6kOfM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=BP34dFA9YWo:YO4xMs6kOfM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=BP34dFA9YWo:YO4xMs6kOfM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=BP34dFA9YWo:YO4xMs6kOfM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=BP34dFA9YWo:YO4xMs6kOfM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/BP34dFA9YWo" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 24 Jan 2012 04:50:00 -0600</pubDate>
      <a10:updated>2012-01-24T04:50:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/24/deploying-sqlserverce-with-an-asp-net-mvc-application.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/zgNjFN0UkaY/ScreencastBuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx</link>
      <a10:author>
        <a10:name>Michael Kennedy</a10:name>
        <a10:uri>http://feedproxy.google.com/~r/MichaelCKennedysWeblog/~3/L2EbJ2A3Sic/ScreencastBuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx</a10:uri>
      </a10:author>
      <title>Michael Kennedy: Screencast: Building ASP.NET MVC Forms with Razor (ASP.NET MVC Foundations Series)</title>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;[note: This screencast has been adapted

from my &lt;a href="2012/01/20/BuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx"&gt;earlier

blog post&lt;/a&gt;.]&lt;br&gt;&lt;div&gt;&lt;br&gt;

In this ASP.NET MVC Foundations screencast, we’re going to look at building an ASP.NET

MVC page which allows users to create and edit objects in our domain. We’ll cover

just the basics of using HTML helpers to map model properties to our HTML form and

Model Binding to convert our HTML form back into our rich domain object.&lt;br&gt;&lt;br&gt;

We’ll start with a very basic store website which has read-only data and we'll add

the ability to create and edit products in our store. Be sure to watch in HD mode

for a crisp screen.&lt;br&gt;&lt;/div&gt;&lt;br&gt;

       

&lt;iframe src="http://www.youtube.com/embed/2AWVs7SzOXM" allowfullscreen="" width="480" frameborder="0" height="360"&gt;&lt;/iframe&gt;&lt;img width="0" height="0" src="http://www.michaelckennedy.net/blog/aggbug.ashx?id=a678de65-63b0-419b-a921-03a40cd4b643"&gt;&lt;/img&gt;&lt;br&gt;&lt;hr&gt;&lt;/hr&gt;

All content copyright Michael C. Kennedy. All information, source code, and especially

tools are provided as is and on a "use at your own risk" basis.&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=L2EbJ2A3Sic:UStucrIJa98:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=L2EbJ2A3Sic:UStucrIJa98:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=L2EbJ2A3Sic:UStucrIJa98:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=L2EbJ2A3Sic:UStucrIJa98:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=L2EbJ2A3Sic:UStucrIJa98:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MichaelCKennedysWeblog/~4/L2EbJ2A3Sic" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=zgNjFN0UkaY:fETbF7mvUpU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=zgNjFN0UkaY:fETbF7mvUpU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=zgNjFN0UkaY:fETbF7mvUpU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=zgNjFN0UkaY:fETbF7mvUpU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=zgNjFN0UkaY:fETbF7mvUpU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=zgNjFN0UkaY:fETbF7mvUpU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=zgNjFN0UkaY:fETbF7mvUpU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=zgNjFN0UkaY:fETbF7mvUpU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/zgNjFN0UkaY" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 23 Jan 2012 16:45:53 -0600</pubDate>
      <a10:updated>2012-01-23T16:45:53-06:00</a10:updated>
    <feedburner:origLink>http://feedproxy.google.com/~r/MichaelCKennedysWeblog/~3/L2EbJ2A3Sic/ScreencastBuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/WhU48tah8pI/html5-internet-explorer-and-automatic-updates.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/23/html5-internet-explorer-and-automatic-updates.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: HTML5, Internet Explorer and automatic updates</title>
      <description>&lt;p&gt;One of the problems with HTML5, or development at the cutting edge of the web, has always the need to support a large number of different browsers. Depending on who you ask the numbers will vary slightly but is usually boils down to Internet Explorer being the biggest and Chrome and FireFox each taking quite a big chunk of the stats and the remainder of the browsers filling up the gaps.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/2018.image_5F00_3AC6C4BE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/7178.image_5F00_thumb_5F00_7DE21D1E.png" width="381" height="188" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So that means that any public facing website should at the very least support the three major browsers, not to bad right?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Turns out that live isn’t quite as good as that. With Chrome and FireFox most users are at or close to the last revision of the browser but with Internet Explorer this isn’t the case. In fact as the chart below shows the majority is still using IE8 with IE9 only accounting for a little over a third of all IE users.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/8475.image_5F00_30D1AD86.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/8400.image_5F00_thumb_5F00_0D550921.png" width="398" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So what the big difference?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are 2 reasons. &lt;/p&gt;  &lt;p&gt;First of all IE9 is only available on Windows Vista and Windows 7 and it turns out there is still a substantial number of people using Windows XP. For all those users Internet Explorer 8 is the latest version of the browser they can use. And that is not going to change when Internet Explorer 10 ships. However that number of XP users isn’t that large.&lt;/p&gt;  &lt;p&gt;The second and more important reason is that Microsoft doesn’t automatically update Internet Explorer when a newer version is available. You can download it if you want to but if you don’t explicitly do so nothing happens. And by contrast all recent versions of FireFox and Chrome are self updating, so whenever a new version is available it is downloaded without any explicit user action. The benefit is that with both Chrome and FireFox a web developer wanting to do cutting edge HTML5 stuff can be pretty confident that a user has an up to date browser. Well except with Internet explorer that is &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/6862.wlEmoticon_2D00_sadsmile_5F00_6F937E61.png" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Microsoft has seen the update light&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Fortunately that won’t be a problem much longer. Recently Microsoft has &lt;a href="http://windowsteamblog.com/ie/b/ie/archive/2011/12/15/ie-to-start-automatic-upgrades-across-windows-xp-windows-vista-and-windows-7.aspx"&gt;announced&lt;/a&gt; that it will start auto updating Internet Explorer using Windows Update. So no longer are we dependent on users going in and manually doing an update, instead if they don’t take any action they will be automatically upgraded to the last possible version of IE. This means that we should soon see at leas two thirds of all IE users use IE9, and more important for HTML5 developers, a more compliant browser with a much faster JavaScript engine. &lt;/p&gt;  &lt;p&gt;Of course IE9 still isn’t perfect because it supports less HTML5 features than both Chrome and FireFox but the fact that the JavaScript engine is much faster makes it much easier when using polyfills to insert missing pieces. And the fast JavaScript engine and more compliant rendering engine is great news for all web developers &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3582.wlEmoticon_2D00_smile_5F00_63FDC122.png" /&gt;&lt;/p&gt;  &lt;p&gt;And the this update will mean that adoption of IE10 will be a lot faster when it ships later this year.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The auto update doesn’t start worldwide right away. At first it will start in Australia and Brazil only. But when that is done they plan on doing so in more countries around the world.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A big step forwards for Microsoft and a huge step forward for HTML5 developers all over the world &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/0435.wlEmoticon_2D00_openmouthedsmile_5F00_7C8D5E72.png" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805153" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=WhU48tah8pI:CON2UjBJX9Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=WhU48tah8pI:CON2UjBJX9Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=WhU48tah8pI:CON2UjBJX9Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=WhU48tah8pI:CON2UjBJX9Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=WhU48tah8pI:CON2UjBJX9Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=WhU48tah8pI:CON2UjBJX9Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=WhU48tah8pI:CON2UjBJX9Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=WhU48tah8pI:CON2UjBJX9Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/WhU48tah8pI" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 23 Jan 2012 04:24:00 -0600</pubDate>
      <a10:updated>2012-01-23T04:24:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/23/html5-internet-explorer-and-automatic-updates.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/D0DMMg2lJCA/BuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx</link>
      <a10:author>
        <a10:name>Michael Kennedy</a10:name>
        <a10:uri>http://feedproxy.google.com/~r/MichaelCKennedysWeblog/~3/VWSNY73iIXI/BuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx</a10:uri>
      </a10:author>
      <title>Michael Kennedy: Building ASP.NET MVC Forms with Razor (ASP.NET MVC Foundations Series)</title>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;

        &lt;div style="font-size: 1.25em; line-height: 1.5em;"&gt;

          &lt;p&gt;

          &lt;/p&gt;

[&lt;b&gt;Update&lt;/b&gt;: Want to &lt;a href="http://www.michaelckennedy.net/blog/2012/01/23/ScreencastBuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx"&gt;watch

this as a &lt;b&gt;screencast &lt;/b&gt;&lt;/a&gt;rather than article? &lt;a href="http://www.michaelckennedy.net/blog/2012/01/23/ScreencastBuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx"&gt;Look

here&lt;/a&gt;...]&lt;br&gt;&lt;br&gt;

In this ASP.NET MVC Foundations article, we’re going to look at building an ASP.NET

MVC page which allows users to create and edit objects in our domain. We’ll cover

just the basics of using &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.aspx"&gt;HTML

helpers &lt;/a&gt;to map model properties to our HTML form and &lt;a href="http://msdn.microsoft.com/en-us/library/dd410405.aspx"&gt;Model

Binding&lt;/a&gt; to convert our HTML form back into our rich domain object.&lt;br&gt;&lt;br&gt;

We’ll start with a very basic store website (downloads here: &lt;a href="http://www.michaelckennedy.net/downloads/samples/BasicMvcForms_starter.zip"&gt;BasicMvcForms_starter.zip&lt;/a&gt; and &lt;a href="http://www.michaelckennedy.net/downloads/samples/BasicMvcForms_final.zip"&gt;BasicMvcForms_final.zip&lt;/a&gt;)which

has a database and some basic products already listed:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product1.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Notice that we have five products. There links to edit and create products. Currently,

they don’t do much:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product2.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;&lt;b id="internal-source-marker_0.45168341998942196" style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; font-weight: normal; "&gt;&lt;span style="font-size: 15px; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;First

we’ll need to add action methods. That’s easy enough. Here’s the create code:&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product4.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

And similarly, the edit code:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product5.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Now that we have action methods for edit and create, we’ll need the corresponding

views. Use the Visual Studio tooling to create two empty views as follows:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product2.5.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

In the resulting dialog, choose strongly-typed with Product and an empty view without

referencing the scripts (we do this globally already). In practice, you might choose

“edit” and “create” to help jump-start the Razor code. In this example, we’ll do that

from scratch so empty is what we want.&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product3.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Now our links to edit and create products work. However they don’t have any content

in their views. We’ll use the &lt;b&gt;HTML Helper &lt;/b&gt;methods to convert our product into

forms ready for the editing.&lt;br&gt;&lt;br&gt;

It all starts with &lt;b&gt;Html.BeginForm&lt;/b&gt;(). We’ll define a form using this MVC convention

and helper method as follows:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product6.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Next, we use the Model property of the view and the HTML helper methods to define

the input fields. Note that we’re using &lt;b&gt;Html.TextBoxFor&lt;/b&gt;() and &lt;b&gt;Html.LabelFor&lt;/b&gt;()

to create the fields. Our &lt;b&gt;Featured &lt;/b&gt;property is a Boolean, so we’ll use &lt;b&gt;Html.CheckBoxFor&lt;/b&gt;()

on that one.&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product7.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Once we flesh out the other properties, we’ll be finished with the create view. And

it turns out the edit view is identical. There are tricks to share them across actions

(e.g. PartialViews) but for our simple example, we’ll just copy / paste between the

two views.&lt;br&gt;&lt;br&gt;

Last thing we need is a submit button to submit the form.&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product8.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Now we should have a nice usable form to create products (or edit them if you copy

&amp;amp; pasted that view). Here’s the edit view:&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product9.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

The final step is to capture the form data on the controller methods and update the

database. This is where it gets interesting. 

&lt;br&gt;&lt;br&gt;

We will define a second method for each action (create &amp;amp; edit) which accept the

post. We do not want our “show the form to start editing” code to mix with the “save

the data and move on” code. We’ll achieve this separation using two attributes &lt;b&gt;HttpGet &lt;/b&gt;&amp;amp; &lt;b&gt;HttpPost.&lt;br&gt;&lt;br&gt;&lt;/b&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product10.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Notice the original Create method has the GET attribute. This displays the form to

begin creating a product. The second one is more interesting. It adds the product

to the DB and returns to the product list. It also only accepts POST requests. Notice

that it accepts a Product parameter which is populated using model binding by ASP.NET

MVC.&lt;br&gt;&lt;br&gt;&lt;i&gt;&lt;b&gt;Learn this pattern!&lt;/b&gt;&lt;/i&gt; It’s super common in MVC. I’ll call it the &lt;b&gt;Get+Post+Redirect &lt;/b&gt;pattern.&lt;br&gt;&lt;br&gt;

1. HttpGet method shows form, returns View().&lt;br&gt;

2. HttpPost method accepts the model (which is populated using model binding)&lt;br&gt;

3. HttpPost method then updates the data and redirects to a new view.&lt;br&gt;&lt;br&gt;

Edit is similar. Often, websites use &lt;a href="http://automapper.codeplex.com/"&gt;AutoMapper&lt;/a&gt; to

do the manual copy / update you see here.&lt;br&gt;&lt;br&gt;&lt;img src="http://www.michaelckennedy.net/Images/BlogPosts/razor-forms/product11.png" alt=""&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;

Now we have a fully functioning store (albeit a simple one). One glaring omision is

validation. We’ll cover that in another post.&lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br&gt;&lt;br&gt;

To wrap up, we took a basic MVC website and went through these steps:&lt;br&gt;&lt;br&gt;

- Added edit and create methods&lt;br&gt;

- The new methods returned the correct model&lt;br&gt;

- Added strongly-typed views for each method&lt;br&gt;

- Used Html.BeginForm() and related Html.XXXXFor() methods to build out the form&lt;br&gt;

- Added a submit button&lt;br&gt;

- Implemented the Get+Post+Redirect pattern in edit and create.&lt;br&gt;

- Took the rest of the day off. :)&lt;br&gt;&lt;br&gt;

Good luck with your websites and happy POSTing.&lt;br&gt;&lt;br&gt;

- Cheers&lt;br&gt;&lt;a href="http://twitter.com/mkennedy"&gt;@mkennedy&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;

        &lt;img width="0" height="0" src="http://www.michaelckennedy.net/blog/aggbug.ashx?id=466c3ea2-3832-417c-b349-5c0e4f758e21"&gt;&lt;/img&gt;

        &lt;br&gt;

        &lt;hr&gt;&lt;/hr&gt;

All content copyright Michael C. Kennedy. All information, source code, and especially

tools are provided as is and on a "use at your own risk" basis.&lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=VWSNY73iIXI:U8stKgMsD-8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=VWSNY73iIXI:U8stKgMsD-8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=VWSNY73iIXI:U8stKgMsD-8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?a=VWSNY73iIXI:U8stKgMsD-8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MichaelCKennedysWeblog?i=VWSNY73iIXI:U8stKgMsD-8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MichaelCKennedysWeblog/~4/VWSNY73iIXI" height="1" width="1"/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=D0DMMg2lJCA:7oN59konWOQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=D0DMMg2lJCA:7oN59konWOQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=D0DMMg2lJCA:7oN59konWOQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=D0DMMg2lJCA:7oN59konWOQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=D0DMMg2lJCA:7oN59konWOQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=D0DMMg2lJCA:7oN59konWOQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=D0DMMg2lJCA:7oN59konWOQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=D0DMMg2lJCA:7oN59konWOQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/D0DMMg2lJCA" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 20 Jan 2012 14:30:04 -0600</pubDate>
      <a10:updated>2012-01-20T14:30:04-06:00</a10:updated>
    <feedburner:origLink>http://feedproxy.google.com/~r/MichaelCKennedysWeblog/~3/VWSNY73iIXI/BuildingASPNETMVCFormsWithRazorASPNETMVCFoundationsSeries.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/DpJ1d50VPuo/getting-started-with-wcf-and-rest-material.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/20/getting-started-with-wcf-and-rest-material.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: Getting Started with WCF and Rest material</title>
      <description>&lt;p&gt;Thanks everyone for joining in with the &lt;a href="http://www.develop.com/"&gt;DevelopMentor&lt;/a&gt; webinar I did last night on &lt;strong&gt;Getting Started with WCF and Rest&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;If you want to take another look at the slides or samples you can download them using the links below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/3913446/Blog/REST_and_the_WCF_Web_API_20120119.pptx"&gt;PowerPoint slides&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/3913446/Blog/WebApiDemo_20120119.zip"&gt;ASP.NET MVC 3 project containing the REST service&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more info about the WCF Web API you can check the &lt;a href="http://wcf.codeplex.com/"&gt;WCF CodePlex site&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1805102" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=DpJ1d50VPuo:lmTWO_g-sTU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=DpJ1d50VPuo:lmTWO_g-sTU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=DpJ1d50VPuo:lmTWO_g-sTU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=DpJ1d50VPuo:lmTWO_g-sTU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=DpJ1d50VPuo:lmTWO_g-sTU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=DpJ1d50VPuo:lmTWO_g-sTU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=DpJ1d50VPuo:lmTWO_g-sTU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=DpJ1d50VPuo:lmTWO_g-sTU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/DpJ1d50VPuo" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 20 Jan 2012 02:24:29 -0600</pubDate>
      <a10:updated>2012-01-20T02:24:29-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/20/getting-started-with-wcf-and-rest-material.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/Fcq5W7VAv_s/developmentor-has-moved.html</link>
      <a10:author>
        <a10:name>Andy Clymer</a10:name>
        <a10:uri>http://andyclymer.blogspot.com/2012/01/developmentor-has-moved.html</a10:uri>
      </a10:author>
      <title>Andy Clymer: Developmentor has moved</title>
      <description>&lt;p&gt;&lt;b&gt;In addition to working hard at RSK myself and Richard are also instructors for Developmtor.&amp;#160; Both of us author and teach a range of courses for them.&amp;#160; This year has seen Developmentor move from Hammersmith to central London, for all of you who are based in and around London they are offering an evening of tech and nibbles to show case the new location.&amp;#160; Details below, hopefully see some of you there. &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Come and see us! On Monday 6th February 2012, 5-7pm &lt;/b&gt;to cement the move to our new London City location in Moorgate, we invite you to our house warming, entertainment provided by &lt;a href="http://www.develop.com/technicalstaff#Richard Blewett"&gt;Richard Blewett&lt;/a&gt; and &lt;a href="http://www.develop.com/technicalstaff#Andrew Clymer"&gt;Andy Clymer&lt;/a&gt;who will be revealing the magic behind the new and exciting C#5 Async and AWait keywords. To register your interest for this free event, please email us &lt;a href="mailto:salesuk@develop.com"&gt;salesuk@develop.com &lt;/a&gt;or call 01242 525108 .&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30604582-8619815669824256673?l=andyclymer.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=Fcq5W7VAv_s:QafOlbppdPc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=Fcq5W7VAv_s:QafOlbppdPc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=Fcq5W7VAv_s:QafOlbppdPc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=Fcq5W7VAv_s:QafOlbppdPc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=Fcq5W7VAv_s:QafOlbppdPc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=Fcq5W7VAv_s:QafOlbppdPc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=Fcq5W7VAv_s:QafOlbppdPc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=Fcq5W7VAv_s:QafOlbppdPc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/Fcq5W7VAv_s" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 Jan 2012 15:24:00 -0600</pubDate>
      <a10:updated>2012-01-17T15:24:00-06:00</a10:updated>
    <feedburner:origLink>http://andyclymer.blogspot.com/2012/01/developmentor-has-moved.html</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/l-U5wNp1_sI/GeneratingAnIndexInTheDatabaseUsingEntityFrameworkCodeFirst.aspx</link>
      <a10:author>
        <a10:name>Mark Blomsma</a10:name>
        <a10:uri>http://www.develop-one.net/blog/2012/01/17/GeneratingAnIndexInTheDatabaseUsingEntityFrameworkCodeFirst.aspx</a10:uri>
      </a10:author>
      <title>Mark Blomsma: Generating an index in the database using Entity Framework Code First</title>
      <description>&lt;p&gt;
If you’re using Entity Framework Code First, then you may want to create an index
on some of your table. The way to do this is to call “Database.ExecuteSqlCommand”
in the “Seed” method of your database initializer. The sample below shows how it is
done (thanks to Rolf for pointing me in the right direction): 
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data.Entity;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel.DataAnnotations;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CodeFirstPlayground&lt;/pre&gt;
&lt;pre class="alt"&gt;{&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;
&lt;pre class="alt"&gt;  {&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main( &lt;span class="kwrd"&gt;string&lt;/span&gt;[]
args )&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;      Database.SetInitializer&amp;lt;CodeFirstSampleModel&amp;gt;( &lt;span class="kwrd"&gt;new&lt;/span&gt; CodeFirstSampleDbInitializer()
);&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;      &lt;span class="kwrd"&gt;using&lt;/span&gt; ( var model = &lt;span class="kwrd"&gt;new&lt;/span&gt; CodeFirstSampleModel()
)&lt;/pre&gt;
&lt;pre class="alt"&gt;      {&lt;/pre&gt;
&lt;pre&gt;        var query = from c &lt;span class="kwrd"&gt;in&lt;/span&gt; model.Customers&lt;/pre&gt;
&lt;pre class="alt"&gt;                    &lt;span class="kwrd"&gt;where&lt;/span&gt; c.Name != &lt;span class="kwrd"&gt;null&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;                    select c;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; ( var item &lt;span class="kwrd"&gt;in&lt;/span&gt; query
)&lt;/pre&gt;
&lt;pre class="alt"&gt;        {&lt;/pre&gt;
&lt;pre&gt;          Console.WriteLine( item.Name );&lt;/pre&gt;
&lt;pre class="alt"&gt;        }&lt;/pre&gt;
&lt;pre&gt;      }&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;      Console.ReadLine();&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CodeFirstSampleModel
: DbContext&lt;/pre&gt;
&lt;pre&gt;  {&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; CodeFirstSampleModel()&lt;/pre&gt;
&lt;pre&gt;      : &lt;span class="kwrd"&gt;base&lt;/span&gt;( &lt;span class="str"&gt;&amp;quot;CodeFirstSampleDB&amp;quot;&lt;/span&gt; )&lt;/pre&gt;
&lt;pre class="alt"&gt;    {&lt;/pre&gt;
&lt;pre&gt;      Customers = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Set&amp;lt;Customer&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;    }&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DbSet&amp;lt;Customer&amp;gt; Customers
{ get; set; }&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CodeFirstSampleDbInitializer
: DropCreateDatabaseAlways&amp;lt;CodeFirstSampleModel&amp;gt;&lt;/pre&gt;
&lt;pre&gt;  {&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Seed(
CodeFirstSampleModel context )&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;      context.Database.ExecuteSqlCommand( &lt;span class="str"&gt;&amp;quot;CREATE
INDEX IX_Customer_Name ON Customers (Name) &amp;quot;&lt;/span&gt; );&lt;/pre&gt;
&lt;pre&gt;      &lt;/pre&gt;
&lt;pre class="alt"&gt;      Customer c = &lt;span class="kwrd"&gt;new&lt;/span&gt; Customer()&lt;/pre&gt;
&lt;pre&gt;      {&lt;/pre&gt;
&lt;pre class="alt"&gt;        Name = &lt;span class="str"&gt;&amp;quot;Mark&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;        LastOrder = DateTime.Now&lt;/pre&gt;
&lt;pre class="alt"&gt;      };&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;      context.Customers.Add( c );&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;base&lt;/span&gt;.Seed( context );&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Customer&lt;/pre&gt;
&lt;pre class="alt"&gt;  {&lt;/pre&gt;
&lt;pre&gt;    [Key]&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Id
{ get; set; }&lt;/pre&gt;
&lt;pre&gt;    [Required]&lt;/pre&gt;
&lt;pre class="alt"&gt;    [MaxLength( 50, ErrorMessage = &lt;span class="str"&gt;&amp;quot;Customer
name must be 50 characters or less.&amp;quot;&lt;/span&gt; )]&lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name {
get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;    &lt;/pre&gt;
&lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime? LastOrder { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=l-U5wNp1_sI:W6n27n3SGaQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=l-U5wNp1_sI:W6n27n3SGaQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=l-U5wNp1_sI:W6n27n3SGaQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=l-U5wNp1_sI:W6n27n3SGaQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=l-U5wNp1_sI:W6n27n3SGaQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=l-U5wNp1_sI:W6n27n3SGaQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=l-U5wNp1_sI:W6n27n3SGaQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=l-U5wNp1_sI:W6n27n3SGaQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/l-U5wNp1_sI" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 Jan 2012 11:24:40 -0600</pubDate>
      <a10:updated>2012-01-17T11:24:40-06:00</a10:updated>
    <feedburner:origLink>http://www.develop-one.net/blog/2012/01/17/GeneratingAnIndexInTheDatabaseUsingEntityFrameworkCodeFirst.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/GGoA1TnKhrg/PermaLink,guid,c45cebe0-f3b4-4c0b-8f98-0c31a068a17b.aspx</link>
      <a10:author>
        <a10:name>Richard Blewett</a10:name>
        <a10:uri>http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,c45cebe0-f3b4-4c0b-8f98-0c31a068a17b.aspx</a10:uri>
      </a10:author>
      <title>Richard Blewett: DevelopMentor Moorgate Office Launch</title>
      <description>&lt;p&gt;
To celebrate &lt;a href="http://www.develop.com/"&gt;DevelopMentor’s&lt;/a&gt; move to offices
at 120 Moorgate in London, myself and &lt;a href="http://www.rocksolidknowledge.com/Blog.mvc/ViewBlog?blogName=Andy%20Clymer"&gt;Andy
Clymer&lt;/a&gt; are presenting an evening of C# 5 Async. The next version of the C# language
has built-in support for async processing. We’ll show you how it improves over the
previous models and how it works under the covers.
&lt;/p&gt;
&lt;p&gt;
This event is on Monday the 6th February from 5-7 and is free to attend, just register
with the DevelopMentor office on 01242 525 108 or email &lt;a href="mailto:salesuk@develop.com"&gt;salesuk@develop.com&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.dotnetconsult.co.uk/weblog2/aggbug.ashx?id=c45cebe0-f3b4-4c0b-8f98-0c31a068a17b" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GGoA1TnKhrg:99Dt4w98tfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GGoA1TnKhrg:99Dt4w98tfs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=GGoA1TnKhrg:99Dt4w98tfs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GGoA1TnKhrg:99Dt4w98tfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=GGoA1TnKhrg:99Dt4w98tfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GGoA1TnKhrg:99Dt4w98tfs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=GGoA1TnKhrg:99Dt4w98tfs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=GGoA1TnKhrg:99Dt4w98tfs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/GGoA1TnKhrg" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 Jan 2012 02:18:38 -0600</pubDate>
      <a10:updated>2012-01-17T02:18:38-06:00</a10:updated>
    <feedburner:origLink>http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,c45cebe0-f3b4-4c0b-8f98-0c31a068a17b.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/rL3bhnkLneI/GoogleAppsAndIdentityServer.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/GoogleAppsAndIdentityServer.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Google Apps and IdentityServer</title>
      <description>&lt;p&gt;
&lt;a href="http://www.huggill.com/2012/01/12/setting-up-google-apps-single-sign-on-sso-with-adfs-2-0-and-a-custom-sts-such-as-identityserver/?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=setting-up-google-apps-single-sign-on-sso-with-adfs-2-0-and-a-custom-sts-such-as-identityserver&amp;amp;utm_source=twitterfeed&amp;amp;utm_medium=twitter" target="_blank"&gt;nice!&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=5795e8dd-807e-4ae2-be39-c459b36e4405" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rL3bhnkLneI:0uXnqDOWcfQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rL3bhnkLneI:0uXnqDOWcfQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rL3bhnkLneI:0uXnqDOWcfQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rL3bhnkLneI:0uXnqDOWcfQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rL3bhnkLneI:0uXnqDOWcfQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rL3bhnkLneI:0uXnqDOWcfQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rL3bhnkLneI:0uXnqDOWcfQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rL3bhnkLneI:0uXnqDOWcfQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/rL3bhnkLneI" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 16 Jan 2012 02:15:17 -0600</pubDate>
      <a10:updated>2012-01-16T02:15:17-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/GoogleAppsAndIdentityServer.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/jOo1oGPszRE/code-smarter-with-design-patterns.html</link>
      <a10:author>
        <a10:name>Andy Clymer</a10:name>
        <a10:uri>http://andyclymer.blogspot.com/2012/01/code-smarter-with-design-patterns.html</a10:uri>
      </a10:author>
      <title>Andy Clymer: Code smarter with Design Patterns</title>
      <description>&lt;p&gt;Just finished updating the Code Smarter with Design Patterns for &lt;a href="http://www.develop.com"&gt;Developmentor&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;The course traditionally has focused on GoF design patterns, in this release I have added MVC and Repository pattern, to round off the offering.&lt;/p&gt;  &lt;p&gt;Both these patterns build upon the GoF patterns discussed earlier in the course, and show how the basic GoF patterns are often compounded to produce elegant solutions.&lt;/p&gt;  &lt;p&gt;Other enhancements include addition of Prototype and Builder patterns, and a general upgrade to the latest features offered by the .NET framework.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;To learn more click &lt;a href="http://www.develop.com/training-course/net-design-patterns"&gt;here&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30604582-4677896670895261384?l=andyclymer.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jOo1oGPszRE:iUv8AdRkzYQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jOo1oGPszRE:iUv8AdRkzYQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=jOo1oGPszRE:iUv8AdRkzYQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jOo1oGPszRE:iUv8AdRkzYQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=jOo1oGPszRE:iUv8AdRkzYQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jOo1oGPszRE:iUv8AdRkzYQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jOo1oGPszRE:iUv8AdRkzYQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=jOo1oGPszRE:iUv8AdRkzYQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/jOo1oGPszRE" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 12 Jan 2012 16:47:00 -0600</pubDate>
      <a10:updated>2012-01-12T16:47:00-06:00</a10:updated>
    <feedburner:origLink>http://andyclymer.blogspot.com/2012/01/code-smarter-with-design-patterns.html</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/wEEUhy0KTBk/wat-doe-ik-met-html5-op-de-microsoft-techdays-2012.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/12/wat-doe-ik-met-html5-op-de-microsoft-techdays-2012.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: Wat doe ik met HTML5 op de Microsoft TechDays 2012?</title>
      <description>&lt;p&gt;Uiteraard ben ik ook dit jaar weer aanwezig op de &lt;a href="http://www.techdays.nl/?ocid=aff-n-we-loc--DEV40909&amp;amp;WT.mc_id=aff-n-we-loc--DEV40909"&gt;Microsoft TechDays 2012&lt;/a&gt;. Voor degene die het gemist hebben de TechDays zijn dit jaar van 15 t/m 17 februari in Den Haag.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ik doe dit jaar twee sessies:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Op vrijdag middag doe ik een sessie over het maken van een &lt;a href="http://www.techdays.nl/AgendaDetail.aspx?cid=2303&amp;amp;ocid=aff-n-we-loc--DEV40909&amp;amp;WT.mc_id=aff-n-we-loc--DEV40909"&gt;HTML5 client voor REST services&lt;/a&gt;.      &lt;br /&gt;Het maken van een REST service is pas deel een van een oplossing. Nadat deze er is moet er meestal ook een grafische interface voor gemaakt worden. En in de huidige tijd, waar het ondersteunen van diverse devices steeds belangrijker wordt, komt het maar al te vaak voor dat deze gebruikers interface in HTML geschreven wordt. Helaas blijken de verschillende browsers maar al te vaak voor extra problemen te zorgen die het leven van de ontwikkelaar een stuk moeilijker maken. In deze sessie laat Maurice de Beijer zien hoe je effectief de verschillende problemen waar je als ontwikkelaar tegenaan loopt kan oplossen.&lt;/li&gt;    &lt;li&gt;Op donderdag avond tijdens de &lt;a href="http://www.techdays.nl/AgendaOverzicht.aspx?agenda=Geeknight&amp;amp;ocid=aff-n-we-loc--DEV40909&amp;amp;WT.mc_id=aff-n-we-loc--DEV40909"&gt;Geek Night&lt;/a&gt; doe ik mijn populaire HTML5 sessie nog een keer.      &lt;br /&gt;Maar uiteraard moet dat tijdens de Geek Night wel een beetje anders dus het wordt een sessie met een twist &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3010.wlEmoticon_2D00_winkingsmile_5F00_0BB5A4D6.png" /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Tot daar!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;    &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1804680" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wEEUhy0KTBk:yQZSLWfkTOI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wEEUhy0KTBk:yQZSLWfkTOI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=wEEUhy0KTBk:yQZSLWfkTOI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wEEUhy0KTBk:yQZSLWfkTOI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=wEEUhy0KTBk:yQZSLWfkTOI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wEEUhy0KTBk:yQZSLWfkTOI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wEEUhy0KTBk:yQZSLWfkTOI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=wEEUhy0KTBk:yQZSLWfkTOI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/wEEUhy0KTBk" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 12 Jan 2012 16:24:24 -0600</pubDate>
      <a10:updated>2012-01-12T16:24:24-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/12/wat-doe-ik-met-html5-op-de-microsoft-techdays-2012.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/9oJ1BUQG6p8/html5-presentatie-slides-en-demo.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/06/html5-presentatie-slides-en-demo.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: HTML5 Presentatie slides en demo</title>
      <description>&lt;p align="left"&gt;De &lt;a href="http://dl.dropbox.com/u/3913446/Blog/HTML5_20120105.pptx"&gt;PowerPoint slides&lt;/a&gt; en de &lt;a href="http://dl.dropbox.com/u/3913446/Blog/HTML5Demo_20120105.zip"&gt;demo code&lt;/a&gt; van mijn HTML5 presentatie van gisteravond zijn nu beschikbaar.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;Voor de liefhebbers ook online via &lt;a href="http://www.slideshare.net"&gt;SlideShare&lt;/a&gt;.&lt;/p&gt;  &lt;div style="width:425px;" id="__ss_10839783"&gt;&lt;strong style="margin:12px 0px 4px;display:block;"&gt;&lt;a title="HTML5 Overview" href="http://www.slideshare.net/mauricedb/html5-overview-10839783" target="_blank"&gt;HTML5 Overview&lt;/a&gt;&lt;/strong&gt; &lt;iframe height="355" src="http://www.slideshare.net/slideshow/embed_code/10839783" frameborder="0" width="425" scrolling="no"&gt;&lt;/iframe&gt;    &lt;div style="padding-bottom:12px;padding-left:0px;padding-right:0px;padding-top:5px;"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mauricedb" target="_blank"&gt;Maurice Beijer&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Met dank aan &lt;a href="http://4dotnet.nl/"&gt;4DotNet&lt;/a&gt; die de sponsor was van deze bijeenkomst.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1804440" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=9oJ1BUQG6p8:9xGMDQeMz0U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=9oJ1BUQG6p8:9xGMDQeMz0U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=9oJ1BUQG6p8:9xGMDQeMz0U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=9oJ1BUQG6p8:9xGMDQeMz0U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=9oJ1BUQG6p8:9xGMDQeMz0U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=9oJ1BUQG6p8:9xGMDQeMz0U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=9oJ1BUQG6p8:9xGMDQeMz0U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=9oJ1BUQG6p8:9xGMDQeMz0U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/9oJ1BUQG6p8" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 06 Jan 2012 06:31:46 -0600</pubDate>
      <a10:updated>2012-01-06T06:31:46-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/06/html5-presentatie-slides-en-demo.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/5GI6y9wSI-s/SharePointUGMaine.aspx</link>
      <a10:author>
        <a10:name>Mark Blomsma</a10:name>
        <a10:uri>http://www.develop-one.net/blog/2012/01/04/SharePointUGMaine.aspx</a10:uri>
      </a10:author>
      <title>Mark Blomsma: SharePoint UG Maine</title>
      <description>&lt;p&gt;
Just a quick service announcement: 
&lt;/p&gt;
&lt;p&gt;
Winxnet, in Portland, has started hosting the first Maine based SharePoint User Group. 
&lt;/p&gt;
&lt;p&gt;
For more information visit: &lt;a href="http://www.winxnet.com/spugme"&gt;www.winxnet.com/spugme&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=5GI6y9wSI-s:jK6hKNDi4LM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=5GI6y9wSI-s:jK6hKNDi4LM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=5GI6y9wSI-s:jK6hKNDi4LM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=5GI6y9wSI-s:jK6hKNDi4LM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=5GI6y9wSI-s:jK6hKNDi4LM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=5GI6y9wSI-s:jK6hKNDi4LM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=5GI6y9wSI-s:jK6hKNDi4LM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=5GI6y9wSI-s:jK6hKNDi4LM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/5GI6y9wSI-s" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 04 Jan 2012 04:55:41 -0600</pubDate>
      <a10:updated>2012-01-04T04:55:41-06:00</a10:updated>
    <feedburner:origLink>http://www.develop-one.net/blog/2012/01/04/SharePointUGMaine.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/wYNW1Vxq61k/dotned-podcast-freena-eijffinger-over-autisme-en-de-surface.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/04/dotned-podcast-freena-eijffinger-over-autisme-en-de-surface.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: DotNed podcast: Freena Eijffinger over Autisme en de Surface</title>
      <description>&lt;p&gt;In &lt;a href="http://www.dotned.nl/PodCasts.aspx?id=22"&gt;deze podcast&lt;/a&gt; spreekt Maurice de Beijer met Freena Eijffinger over autisme en hoe Freena de Microsoft Surface tafel gebruikt om autisme te diagnotiseren bij kinderen.&lt;/p&gt;  &lt;p&gt;Met dank aan onze sponsor: &lt;a href="http://www.red-gate.com/"&gt;Red-Gate, ingeniously simple tools&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Autitouch: &lt;a href="http://www.autitouch.com/"&gt;http://www.autitouch.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Freena: &lt;a href="http://www.freena.nl/"&gt;http://www.freena.nl/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Hart van Nederland: &lt;a href="http://www.hartvannederland.nl/nederland/2011/autisme-snel-vastgesteld-door-game/"&gt;http://www.hartvannederland.nl/nederland/2011/autisme-snel-vastgesteld-door-game/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;BizSpark: &lt;a href="http://www.microsoft.com/bizspark/"&gt;http://www.microsoft.com/bizspark/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;DotNetEvents&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1804361" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wYNW1Vxq61k:5H8elSRxdVs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wYNW1Vxq61k:5H8elSRxdVs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=wYNW1Vxq61k:5H8elSRxdVs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wYNW1Vxq61k:5H8elSRxdVs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=wYNW1Vxq61k:5H8elSRxdVs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wYNW1Vxq61k:5H8elSRxdVs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=wYNW1Vxq61k:5H8elSRxdVs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=wYNW1Vxq61k:5H8elSRxdVs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/wYNW1Vxq61k" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 04 Jan 2012 04:47:00 -0600</pubDate>
      <a10:updated>2012-01-04T04:47:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2012/01/04/dotned-podcast-freena-eijffinger-over-autisme-en-de-surface.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/iRikrJPuE0Y/MicrosoftMostValuableProfessional2012.aspx</link>
      <a10:author>
        <a10:name>Mark Blomsma</a10:name>
        <a10:uri>http://www.develop-one.net/blog/2012/01/02/MicrosoftMostValuableProfessional2012.aspx</a10:uri>
      </a10:author>
      <title>Mark Blomsma: Microsoft Most Valuable Professional 2012</title>
      <description>&lt;p&gt;
&lt;a href="http://www.develop-one.net/blog/content/binary/Windows-Live-Writer/Microsoft-Most-Valuable-Professional-201_5C0D/mvp-logo_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mvp-logo" border="0" alt="mvp-logo" align="right" src="http://www.develop-one.net/blog/content/binary/Windows-Live-Writer/Microsoft-Most-Valuable-Professional-201_5C0D/mvp-logo_thumb.png" width="157" height="244" /&gt;&lt;/a&gt;I’m
honored to have been awarded the Microsoft Most Valuable Professional 2012 Award for
contributions in the Visual C# technical communities. I’m honored to be counted amongst
the 228 people world wide to receive this award. 
&lt;/p&gt;
&lt;p&gt;
“At Microsoft, we believe that technical communities enhance people’s lives and the
industry’s success because independent experts, like you, help others extract greater
value from products and technologies through the free and objective exchange of knowledge.
As a Microsoft MVP, you are part of a highly select group of experts that represent
technology’s best and brightest who share a deep commitment to community and a willingness
to help others.” 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; - Heather Kostes
&lt;/p&gt;
&lt;p&gt;
Thank you Microsoft and thank you Heather! I’m looking forward to organizing more
events again this year for the &lt;a href="http://www.maine-devnet.org" target="_blank"&gt;Maine
Developer Network&lt;/a&gt; and hanging out with the &lt;a href="http://www.bangordevelopers.com" target="_blank"&gt;Bangor
Area .NET Developers&lt;/a&gt; and I’m looking forward to Maine Code Camp #3 and also to
meeting my fellow MVPs and product groups in Seattle at the MVP Summit 2012. 
&lt;/p&gt;
&lt;p&gt;
- Mark
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iRikrJPuE0Y:wsFOAKNahLo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iRikrJPuE0Y:wsFOAKNahLo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iRikrJPuE0Y:wsFOAKNahLo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iRikrJPuE0Y:wsFOAKNahLo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iRikrJPuE0Y:wsFOAKNahLo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iRikrJPuE0Y:wsFOAKNahLo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iRikrJPuE0Y:wsFOAKNahLo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iRikrJPuE0Y:wsFOAKNahLo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/iRikrJPuE0Y" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 02 Jan 2012 05:47:23 -0600</pubDate>
      <a10:updated>2012-01-02T05:47:23-06:00</a10:updated>
    <feedburner:origLink>http://www.develop-one.net/blog/2012/01/02/MicrosoftMostValuableProfessional2012.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/4Vee67_mf00/using-reporters-in-approval-tests.html</link>
      <a10:author>
        <a10:name>Llewellyn Falco</a10:name>
        <a10:uri>http://blog.approvaltests.com/2011/12/using-reporters-in-approval-tests.html</a10:uri>
      </a10:author>
      <title>Llewellyn Falco: Using Reporters in Approval Tests</title>
      <description>Today I pushed new versions of ApprovalTests for both C# and Java to SourceForge.&amp;nbsp; Updates include new capabilities around the Reporters feature set for ApprovalTests. These enhancements were driven by feature requests from&amp;nbsp; Peik Aschan(@peikas).&amp;nbsp; He and I pair-programmed remotely (he lives in Finland) to extend ApprovalTests per his ‘asks’.&amp;nbsp; If you are using ApprovalTests and have an idea for a feature, please ping me via twitter @LlewellynFalco and I’ll pair with you to code up your idea as well.&lt;br /&gt;&lt;h3&gt;Why Use Reporters?&lt;/h3&gt;I assume that you have tried out Reporters if you are reading this blog, however, just to get us started, I’ll remind you that a Reporter is called when an ApprovalTest fails.&amp;nbsp; The three reasons for using different types of reporters are as below.&lt;br /&gt;&lt;h4&gt;Visualizing Results&lt;/h4&gt;The output of a failed&amp;nbsp; ApprovalTest can range from simple (a text file) to complex (*.png, *.html, *.mp3, etc…)&amp;nbsp; If you get a *.html file, then you do not usually want to see the ‘page source’ output, rather you can usually more easily view (and approve) a HTML-rendered view.&amp;nbsp; Because of this, you might want to decorate your class or method with &lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;[UseReporter(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(FileLauncherReporter))]&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://lh3.ggpht.com/-7Ltz0nHgemo/Tv-bsRNSp0I/AAAAAAAAAhc/SjkW_m9XMsg/s1600-h/image%25255B2%25255D.png"&gt;&lt;img alt="image" border="0" height="103" src="http://lh3.ggpht.com/--IzG4OKw6yo/Tv-bshExJDI/AAAAAAAAAhk/pnFkY6Q92ZY/image_thumb.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Comparing Results&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course, not only do ApprovalTests Reporters tell you the results, but also the results can help you determine what has changed since they last passed.&amp;nbsp; While the screenshot above will help you to understand what the web page LOOKS like, it won’t help you to figure out why the test is no longer passing.&amp;nbsp; To get more granular information, you may want to use a different Reporter, such as the DiffReporter.&amp;nbsp; Output is shown below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;[UseReporter(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DiffReporter))]&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-q14UIUd2ThQ/Tv-bs36-AMI/AAAAAAAAAhs/h0KO7ZTBY9A/s1600-h/image%25255B7%25255D.png"&gt;&lt;img alt="image" border="0" height="99" src="http://lh4.ggpht.com/-yixJXoSNZkE/Tv-butoWdEI/AAAAAAAAAh0/KR9ubeEi-IE/image_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="604" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Approving the Results&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The last reason to use a particular Reporter is to make the ability for you to approve the dersired output of the test easier.&amp;nbsp; The DiffReporter is most often used for this, because you can just right click in your particular differencing tool (TortoiseMerge is shown above, BeyondCompare, WinMerge or KDiff can also be used) and approve the output ‘approve whole file’.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;In this release of ApprovalTests, I’ve added a new reporter to increase the flexibility of approving.&amp;nbsp; That reporter is called the ClipboardReporter and here is how it works.&amp;nbsp; Rather than launching the output in any tool, this reporter creates the command-line output needed so that you can move the results file to the approved file quickly.&amp;nbsp; It automatically adds this command to your clipboard:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;[UseReporter(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(ClipboardReporter))]&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/-4wKy9EgTK4U/Tv-buzVbZYI/AAAAAAAAAh8/muRiUPksGL0/s1600-h/image%25255B11%25255D.png"&gt;&lt;img alt="image" border="0" height="106" src="http://lh6.ggpht.com/-hQJHS_k9SzM/Tv-bvOjyH-I/AAAAAAAAAiE/r3AAzldV4A4/image_thumb%25255B5%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="504" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Simply open a command prompt and past the contents of the clipboard in to the command prompt window to approve the file.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3&gt;How to use Reporters&lt;/h3&gt;&lt;br /&gt;In the release, we have added the ability to decorate an assembly (C# only), class or method with multiple reporters.&amp;nbsp; This is easy to do, just add the reporters of interest to the level, separated by commas.&amp;nbsp; The current list of reporters is as follows:&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellpadding="2" cellspacing="0" style="width: 490px;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td valign="top" width="200"&gt;C# Reporters&lt;/td&gt;  &lt;td valign="top" width="288"&gt;Java Reporters&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td valign="top" width="200"&gt;BeyondCompareReporter.cs&lt;br /&gt;ClipboardReporter.cs&lt;br /&gt;DiffReporter.cs&lt;br /&gt;FileLauncherReporter.cs&lt;br /&gt;ImageReporter.cs&lt;br /&gt;MsTestReporter.cs&lt;br /&gt;MultiReporter.cs&lt;br /&gt;NotepadLauncher.cs&lt;br /&gt;NUnitReporter.cs&lt;br /&gt;QuietReporter.cs&lt;br /&gt;WinMergeReporter.cs&lt;/td&gt;&lt;td valign="top" width="288"&gt;ClipboardReporter.java&lt;br /&gt;DiffReporter.java&lt;br /&gt;EnvironmentAwareReporter.java&lt;br /&gt;ExecutableQueryFailure.java&lt;br /&gt;FileLauncherReporter.java&lt;br /&gt;FirstWorkingReporterChain.java&lt;br /&gt;GenericDiffReporter.java&lt;br /&gt;ImageDiffReporter.java&lt;br /&gt;ImageWebReporter.java&lt;br /&gt;JunitReporter.java&lt;br /&gt;MultiReporter.java&lt;br /&gt;NotePadLancher.java&lt;br /&gt;QuietReporter.java&lt;br /&gt;TextWebReporter.java&lt;br /&gt;TortoiseDiffReporter.java&lt;br /&gt;WinMergeReporter.java&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Here is the code example for the scenario described above, i.e. both HTML (browser) and Diff (source comparison) using Tortoise Diff.&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; font-family: consolas, 'Courier New', courier, monospace; font-size: x-small; white-space: pre;"&gt;&lt;span class="lnum"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; font-family: consolas, 'Courier New', courier, monospace; font-size: x-small; white-space: pre;"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; ApprovalTests.Reporters;&lt;/span&gt;&lt;br /&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd" style="color: blue;"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd" style="color: blue;"&gt;namespace&lt;/span&gt; ApprovalTests.Tests.Html&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   5:  &lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   6:  &lt;/span&gt;    [TestFixture]&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   7:  &lt;/span&gt;    [UseReporter(&lt;span class="kwrd" style="color: blue;"&gt;typeof&lt;/span&gt;(DiffReporter), &lt;span class="kwrd" style="color: blue;"&gt;typeof&lt;/span&gt;(FileLauncherReporter))]&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd" style="color: blue;"&gt;public&lt;/span&gt; &lt;span class="kwrd" style="color: blue;"&gt;class&lt;/span&gt; HtmlTest&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;   9:  &lt;/span&gt;    {&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  10:  &lt;/span&gt;        [Test]&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd" style="color: blue;"&gt;public&lt;/span&gt; &lt;span class="kwrd" style="color: blue;"&gt;static&lt;/span&gt; &lt;span class="kwrd" style="color: blue;"&gt;void&lt;/span&gt; TestHtml()&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  12:  &lt;/span&gt;        {&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  13:  &lt;/span&gt;            Approvals.ApproveHtml(&lt;span class="str" style="color: #006080;"&gt;"&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;div style='font-family:Broadway;font-size:18'&amp;gt; Web Page from ApprovalTests&amp;lt;/div&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  14:  &lt;/span&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: #f4f4f4; white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  15:  &lt;/span&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;div class="csharpcode" style="background-color: white; color: black; font-family: consolas, 'Courier New', courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="lnum" style="color: #606060;"&gt;  16:  &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;/div&gt;I have found that using the right Reporter or Reporters at the right time in the testing cycle has made me more productive.  Let me know how it works for you.&lt;br /&gt;Happy testing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1959052963816936322-8422881313979951710?l=blog.approvaltests.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4Vee67_mf00:zvHEAVQj_W8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4Vee67_mf00:zvHEAVQj_W8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=4Vee67_mf00:zvHEAVQj_W8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4Vee67_mf00:zvHEAVQj_W8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=4Vee67_mf00:zvHEAVQj_W8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4Vee67_mf00:zvHEAVQj_W8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4Vee67_mf00:zvHEAVQj_W8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=4Vee67_mf00:zvHEAVQj_W8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/4Vee67_mf00" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 31 Dec 2011 17:33:00 -0600</pubDate>
      <a10:updated>2011-12-31T17:33:00-06:00</a10:updated>
    <feedburner:origLink>http://blog.approvaltests.com/2011/12/using-reporters-in-approval-tests.html</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/pQ_gZXIz8ZY/Troopers2012.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/Troopers2012.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Troopers 2012</title>
      <description>&lt;p&gt;
My last advice for 2011:
&lt;/p&gt;
&lt;p&gt;
Get a ticket for &lt;a href="http://www.troopers.de/" target="_blank"&gt;Troopers 2012&lt;/a&gt; before
it is sold out.
&lt;/p&gt;
&lt;p&gt;
If you like to learn about IPv6, Android, iOS, SAP or cloud security (and much more)
– that’s the place to be!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=f3b8ca61-3dcd-4b4a-b67c-3c92f791db38" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=pQ_gZXIz8ZY:2jlfPU5onR8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=pQ_gZXIz8ZY:2jlfPU5onR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=pQ_gZXIz8ZY:2jlfPU5onR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=pQ_gZXIz8ZY:2jlfPU5onR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=pQ_gZXIz8ZY:2jlfPU5onR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=pQ_gZXIz8ZY:2jlfPU5onR8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=pQ_gZXIz8ZY:2jlfPU5onR8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=pQ_gZXIz8ZY:2jlfPU5onR8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/pQ_gZXIz8ZY" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 31 Dec 2011 05:25:48 -0600</pubDate>
      <a10:updated>2011-12-31T05:25:48-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/Troopers2012.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/rIkCLW_SxNs/</link>
      <a10:author>
        <a10:name>Pinku Surana</a10:name>
        <a10:uri>http://surana.wordpress.com/2011/12/30/weather-prediction-error/</a10:uri>
      </a10:author>
      <title>Pinku Surana: Weather Prediction Error</title>
      <description>I wrote a Python script to download the 1 through 5 day predictions for the weather in the top 50 American cities from the Weather Underground. I’ve got almost 2 years of data now. Here are the RMSE for predictions for all cities. I believe the RMSE for all cities is 2.24, 2.89, 3.68, 4.29, [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=surana.wordpress.com&amp;amp;blog=1937801&amp;amp;post=321&amp;amp;subd=surana&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rIkCLW_SxNs:_GlzCfdfo-k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rIkCLW_SxNs:_GlzCfdfo-k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rIkCLW_SxNs:_GlzCfdfo-k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rIkCLW_SxNs:_GlzCfdfo-k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rIkCLW_SxNs:_GlzCfdfo-k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rIkCLW_SxNs:_GlzCfdfo-k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rIkCLW_SxNs:_GlzCfdfo-k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rIkCLW_SxNs:_GlzCfdfo-k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/rIkCLW_SxNs" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 30 Dec 2011 14:20:35 -0600</pubDate>
      <a10:updated>2011-12-30T14:20:35-06:00</a10:updated>
    <feedburner:origLink>http://surana.wordpress.com/2011/12/30/weather-prediction-error/</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/dhuND5Cpo-A/HowToDiscoverWhatFontWasUsed.aspx</link>
      <a10:author>
        <a10:name>Mark Blomsma</a10:name>
        <a10:uri>http://www.develop-one.net/blog/2011/12/26/HowToDiscoverWhatFontWasUsed.aspx</a10:uri>
      </a10:author>
      <title>Mark Blomsma: How to discover what font was used</title>
      <description>&lt;p&gt;
Sometimes you’re working on a website and you get some images with text in them, but
no one remembers what fonts was used in the image. No fear! There is a website call
“What The Font” that will take your picture and tell you what font was used: &lt;a title="http://new.myfonts.com/WhatTheFont/" href="http://new.myfonts.com/WhatTheFont/"&gt;http://new.myfonts.com/WhatTheFont/&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dhuND5Cpo-A:RbzmEP7zDF4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dhuND5Cpo-A:RbzmEP7zDF4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=dhuND5Cpo-A:RbzmEP7zDF4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dhuND5Cpo-A:RbzmEP7zDF4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=dhuND5Cpo-A:RbzmEP7zDF4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dhuND5Cpo-A:RbzmEP7zDF4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dhuND5Cpo-A:RbzmEP7zDF4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=dhuND5Cpo-A:RbzmEP7zDF4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/dhuND5Cpo-A" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 26 Dec 2011 06:34:25 -0600</pubDate>
      <a10:updated>2011-12-26T06:34:25-06:00</a10:updated>
    <feedburner:origLink>http://www.develop-one.net/blog/2011/12/26/HowToDiscoverWhatFontWasUsed.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/8-tvcDDtb8U/techdays-wildcast-sessies.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/23/techdays-wildcast-sessies.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: TechDays wildcast sessies</title>
      <description>&lt;p&gt;De &lt;a href="http://www.techdays.nl/"&gt;TechDays&lt;/a&gt;, zie &lt;a href="http://twitter.com/#!/search/%23TechDaysNL"&gt;#TechDaysNL&lt;/a&gt;, komen er alweer snel aan. Maar net zoals vorig jaar zijn er ook dit jaar weer een aantal wildcard sessies die afhankelijk van de stemmen al dan niet op het programma komen.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.techdays.nl/images/techdayslogo.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Ga dus snel naar de &lt;a href="http://www.techdays.nl/WildCardSessies.aspx"&gt;lijst&lt;/a&gt; en stem op je favoriete sessie!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;www.TheProblemSolver.nl &lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803983" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=8-tvcDDtb8U:TvCnaTJu3Yc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=8-tvcDDtb8U:TvCnaTJu3Yc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=8-tvcDDtb8U:TvCnaTJu3Yc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=8-tvcDDtb8U:TvCnaTJu3Yc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=8-tvcDDtb8U:TvCnaTJu3Yc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=8-tvcDDtb8U:TvCnaTJu3Yc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=8-tvcDDtb8U:TvCnaTJu3Yc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=8-tvcDDtb8U:TvCnaTJu3Yc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/8-tvcDDtb8U" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 23 Dec 2011 04:34:00 -0600</pubDate>
      <a10:updated>2011-12-23T04:34:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/23/techdays-wildcast-sessies.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/jy5fEWRXZXM/ACSForFreeLsquotilDecember2012.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/ACSForFreeLsquotilDecember2012.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: ACS for free &amp;lsquo;til December 2012</title>
      <description>&lt;p&gt;
see here: 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/b/windowsazure/archive/2011/12/20/important-announcements-regarding-the-access-control-service.aspx"&gt;http://blogs.msdn.com/b/windowsazure/archive/2011/12/20/important-announcements-regarding-the-access-control-service.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=bd4b0649-031a-42f9-a27c-c8e0198e0d64" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jy5fEWRXZXM:91f7UidqLMY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jy5fEWRXZXM:91f7UidqLMY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=jy5fEWRXZXM:91f7UidqLMY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jy5fEWRXZXM:91f7UidqLMY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=jy5fEWRXZXM:91f7UidqLMY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jy5fEWRXZXM:91f7UidqLMY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=jy5fEWRXZXM:91f7UidqLMY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=jy5fEWRXZXM:91f7UidqLMY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/jy5fEWRXZXM" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 21 Dec 2011 03:43:16 -0600</pubDate>
      <a10:updated>2011-12-21T03:43:16-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/ACSForFreeLsquotilDecember2012.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/2RZa6B9DJZM/WalkthroughForSettingUpIdentityServerV10.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/WalkthroughForSettingUpIdentityServerV10.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Walkthrough for setting up IdentityServer v1.0</title>
      <description>&lt;p&gt;
Claudio Sanchez did it again! thanks!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://claudioasanchez.blogspot.com/2011/12/walk-though-of-provisioning-identity.html"&gt;http://claudioasanchez.blogspot.com/2011/12/walk-though-of-provisioning-identity.html&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d32b1509-ff6a-4ed0-85ee-ec2bd4eeb4b7" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=2RZa6B9DJZM:I3fm3mYLb1s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=2RZa6B9DJZM:I3fm3mYLb1s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=2RZa6B9DJZM:I3fm3mYLb1s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=2RZa6B9DJZM:I3fm3mYLb1s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=2RZa6B9DJZM:I3fm3mYLb1s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=2RZa6B9DJZM:I3fm3mYLb1s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=2RZa6B9DJZM:I3fm3mYLb1s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=2RZa6B9DJZM:I3fm3mYLb1s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/2RZa6B9DJZM" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 21 Dec 2011 03:16:00 -0600</pubDate>
      <a10:updated>2011-12-21T03:16:00-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/WalkthroughForSettingUpIdentityServerV10.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/B6HMis1-0So/dotned-podcast-bart-de-smet-over-rx-deel-2-van-2.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/20/dotned-podcast-bart-de-smet-over-rx-deel-2-van-2.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: #DotNed podcast: Bart De Smet over RX (Deel 2 van 2)</title>
      <description>&lt;p&gt;In deze podcast spreekt Maurice de Beijer met Bart De Smet over het RX framework. Bart werkt bij Microsoft aan de RX librray en verteld hoe deze ontwikkeling oorspronkelijk is begonnen als een onderdeel van een veel groter cloud programmability project.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotned.nl/PodCasts.aspx?id=21"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;TheProblemSolver&lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803835" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=B6HMis1-0So:qtNyHy_HAfE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=B6HMis1-0So:qtNyHy_HAfE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=B6HMis1-0So:qtNyHy_HAfE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=B6HMis1-0So:qtNyHy_HAfE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=B6HMis1-0So:qtNyHy_HAfE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=B6HMis1-0So:qtNyHy_HAfE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=B6HMis1-0So:qtNyHy_HAfE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=B6HMis1-0So:qtNyHy_HAfE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/B6HMis1-0So" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 20 Dec 2011 04:28:00 -0600</pubDate>
      <a10:updated>2011-12-20T04:28:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/20/dotned-podcast-bart-de-smet-over-rx-deel-2-van-2.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/TXjZeX1l7uQ/</link>
      <a10:author>
        <a10:name>Pinku Surana</a10:name>
        <a10:uri>http://surana.wordpress.com/2011/12/16/upgrading-ubuntu-to-11-10/</a10:uri>
      </a10:author>
      <title>Pinku Surana: Upgrading Ubuntu to 11.10</title>
      <description>I run various versions of Ubuntu within VMware. Every single time I let it do a full upgrade to a new version it fails. This time an upgrade from 11.04 to 11.10 failed to reboot. Here’s the problem and solution. This is my first look at Ubuntu’s Unity. Generally I don’t care about the desktop [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=surana.wordpress.com&amp;amp;blog=1937801&amp;amp;post=318&amp;amp;subd=surana&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=TXjZeX1l7uQ:SmjCuemUUEA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=TXjZeX1l7uQ:SmjCuemUUEA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=TXjZeX1l7uQ:SmjCuemUUEA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=TXjZeX1l7uQ:SmjCuemUUEA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=TXjZeX1l7uQ:SmjCuemUUEA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=TXjZeX1l7uQ:SmjCuemUUEA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=TXjZeX1l7uQ:SmjCuemUUEA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=TXjZeX1l7uQ:SmjCuemUUEA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/TXjZeX1l7uQ" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 16 Dec 2011 11:56:57 -0600</pubDate>
      <a10:updated>2011-12-16T11:56:57-06:00</a10:updated>
    <feedburner:origLink>http://surana.wordpress.com/2011/12/16/upgrading-ubuntu-to-11-10/</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/4gqDxOZJ728/html5-sessie-bij-4dotnet-in-utrecht.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/15/html5-sessie-bij-4dotnet-in-utrecht.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: HTML5 sessie bij 4DotNet in Utrecht</title>
      <description>&lt;p&gt;&lt;img style="display:inline;float:left;" align="left" src="http://www.w3.org/html/logo/downloads/HTML5_Logo_128.png" alt="" /&gt;Op donderdag 5 januari 2012 beginnen we het nieuwe jaar met een herhaling van de sessie van Maurice de Beijer over HTML5. Deze avond wordt gehost door &lt;a href="http://www.4dotnet.nl/"&gt;4dotnet&lt;/a&gt; en zal plaats vinden in Utrecht.&lt;/p&gt;  &lt;p&gt;Er wordt al tijden veel over de nieuwe HTML5 standaard gesproken. Maar wanneer kan je als ontwikkelaar nu eigenlijk met HTML5 aan de slag? En als je het kan gaan gebruiken wat heeft het eigenlijk allemaal te bieden? Hoe zit het met al die oudere browsers die mensen misschien nog gebruiken? En dan hebben we natuurlijk nog de vraag wat ik moet doen als ik tussen Silverlight en HTML5 moet kiezen voor een nieuwe applicatie?&lt;/p&gt;  &lt;p&gt;In deze sessie geeft Maurice de Beijer antwoord op deze vragen. Hij laat onder meer diverse nieuwe HTML5 onderdelen zien als local storage, web sockets, achtergrondtaken en nieuwe elementen zoals de video tag en het canvas. Daarnaast zal hij laten zien hoe je kan omgaan met browsers die de verschillende nieuwe HTML5 onderdelen nog niet ondersteunen.&lt;/p&gt;  &lt;p&gt;HTML5 is niet alleen belangrijk als web-taal, maar ook in de nieuwste versie van Windows zal het maken van applicaties op de Windows Runtime met HTML5 een belangrijke optie worden. Dus als je webontwikkelaar bent, als je XAML ontwikkelaar bent en je wilt de ‘concurrentie’ in de gaten houden, of je wilt gewoon op de hoogte blijven van de laatste technieken: hier moet je bij zijn!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Je kan je &lt;a href="http://www.dotned.nl/register/42/html5-bij-4dotnet-door-maurice-de-beijer-in-utrecht.aspx"&gt;hier&lt;/a&gt; inschrijven.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;www.TheProblemSolver.nl &lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803648" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4gqDxOZJ728:TjhHrd0BwHM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4gqDxOZJ728:TjhHrd0BwHM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=4gqDxOZJ728:TjhHrd0BwHM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4gqDxOZJ728:TjhHrd0BwHM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=4gqDxOZJ728:TjhHrd0BwHM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4gqDxOZJ728:TjhHrd0BwHM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=4gqDxOZJ728:TjhHrd0BwHM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=4gqDxOZJ728:TjhHrd0BwHM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/4gqDxOZJ728" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 15 Dec 2011 05:03:00 -0600</pubDate>
      <a10:updated>2011-12-15T05:03:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/15/html5-sessie-bij-4dotnet-in-utrecht.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/rSU1a9FUeXs/html5-video.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/13/html5-video.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: HTML5 Video</title>
      <description>&lt;p&gt;Video has always been a difficult thing on the web. With HTML5 supporting the &amp;lt;video&amp;gt; element that should become a lot easier right? After all you just add a video element, set the source and you are good to go right?&lt;/p&gt;  &lt;p&gt;If you create a page like this:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;HTML5 Video demo&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            video&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                height: 200px;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                width: 400px;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;video&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;poster&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://images.apple.com/html5/showcase/video/images/tron_legacy.jpg&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.apple.com/105/media/us/html5/showcase/2011/demos/apple-html5-demo-tron-us_848x352.webm&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#ff0000;"&gt;controls&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#ff0000;"&gt;autoplay&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                   HTML5 Video element not supported                                    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;video&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And run it in Google Chrome its start playing just like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/6622.image_5F00_2779482C.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/1777.image_5F00_thumb_5F00_3EE3D690.png" width="481" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple enough right?&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;However when I open the page in Internet Exporer 9 or FireFox we get this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/8321.image3_5F00_7A73BF83.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/4073.image3_5F00_thumb_5F00_1F615A30.png" width="458" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video element loads the movie poster but it doesn’t start playing.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And on Safari or an older version of IE we get:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3252.image6_5F00_0E4D0680.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/8081.image6_5F00_thumb_5F00_45B317AE.png" width="498" height="224" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Turns out that on Windows Safari doesn’t support the HTML5 &amp;lt;video&amp;gt; element and wants users to install and use Quicktime instead. And that even though according to &lt;a href="http://caniuse.com/#search=video"&gt;CanIUse.com&lt;/a&gt; the video element is supported on the current version of Safari I am running &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3730.wlEmoticon_2D00_sadsmile_5F00_2F10C967.png" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what gives?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem with IE9 and FireFox not playing the movie has to do with video formats. While there is an HTML5 definition of the &amp;lt;video&amp;gt; there is no definition of the video source stream. It is left up to the bowser vendors to decide on the supported standard and implement these. And as the vendors can’t agree on a standard we as developers are basically stuck with having to provide multiple video streams with different encodings &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3730.wlEmoticon_2D00_sadsmile_5F00_2F10C967.png" /&gt; Not nice but that is politics for you. There is a good table on &lt;a href="http://en.wikipedia.org/wiki/HTML5_video#Table"&gt;Wikipedia&lt;/a&gt; describing the formats supported in each browser. But the simple story is we need to supply at least 2 formats, for example H264 and WebM.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to fix this we can supply multiple &amp;lt;source&amp;gt; elements and let the browser pick the appropriate format.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;HTML5 Video demo&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            video&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                height: 200px;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                width: 400px;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;video&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;poster&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://images.apple.com/html5/showcase/video/images/tron_legacy.jpg&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#ff0000;"&gt;controls&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#ff0000;"&gt;autoplay&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;source&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.apple.com/105/media/us/html5/showcase/2011/demos/apple-html5-demo-tron-us_848x352.webm&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                       &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;video/webm; codecs=&amp;quot;vp8, vorbis&amp;quot;&amp;#39;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;source&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://movies.apple.com/media/us/html5/showcase/2011/demos/apple-html5-demo-tron-us_848x352.m4v&amp;quot;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                       &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;video/mp4; codecs=&amp;quot;avc1.42E01E, mp4a.40.2&amp;quot;&amp;#39;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;                       HTML5 Video element not supported                                    &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;video&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;You can try the effect for yourself &lt;a href="http://dl.dropbox.com/u/3913446/Blog/Video_20111208.htm"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One more hurdle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So in IE9 and Chrome this works just fine but in FireFox we still don’t get to see the video. This is strange as FireFox is supposed to be able to display WebM videos, what gives?&lt;/p&gt;

&lt;p&gt;The problem is in the way the video stream is served from the web. The video stream is returned with an HTTP header:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt; Content-Type:&amp;#160;&amp;#160;&amp;#160; text/plain; charset=UTF-8 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and it turns out FireFox is a bit picky about the Content-Type. It really wants it to be &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Content-Type: video/webm &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;for it to work. Not a problem if you control the server but in this case I don’t so I can’t fix the problem.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HTML5 video is nice but it certainly isn’t as nice as I hoped when I first started looking at it. But having to encode everything twice isn’t that bad so I guess I can live with the it &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/0412.wlEmoticon_2D00_smile_5F00_3C76DC6D.png" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;www.TheProblemSolver.nl &lt;/a&gt; 
  &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803516" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rSU1a9FUeXs:MgY2ss90T8U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rSU1a9FUeXs:MgY2ss90T8U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rSU1a9FUeXs:MgY2ss90T8U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rSU1a9FUeXs:MgY2ss90T8U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rSU1a9FUeXs:MgY2ss90T8U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rSU1a9FUeXs:MgY2ss90T8U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=rSU1a9FUeXs:MgY2ss90T8U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=rSU1a9FUeXs:MgY2ss90T8U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/rSU1a9FUeXs" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 13 Dec 2011 05:05:00 -0600</pubDate>
      <a10:updated>2011-12-13T05:05:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/13/html5-video.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/1SrO1g0FDno/Silverlight5Release.aspx</link>
      <a10:author>
        <a10:name>Mark Blomsma</a10:name>
        <a10:uri>http://www.develop-one.net/blog/2011/12/12/Silverlight5Release.aspx</a10:uri>
      </a10:author>
      <title>Mark Blomsma: Silverlight 5 release</title>
      <description>&lt;p&gt;
Silverlight 5 got released this weekend and can be downloaded here: &lt;a title="http://www.silverlight.net/downloads" href="http://www.silverlight.net/downloads"&gt;http://www.silverlight.net/downloads&lt;/a&gt;.
&lt;/p&gt;
&lt;h4&gt;Summary of the features
&lt;/h4&gt;
&lt;p&gt;
(from the Silverlight 5 download package)
&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;Improved media support &lt;a name="business"&gt;&lt;/a&gt;&lt;/b&gt;
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Low Latency Audio Playback 
&lt;/li&gt;
&lt;li&gt;
Variable Speed Playback 
&lt;/li&gt;
&lt;li&gt;
H/W Decode of H.264 media 
&lt;/li&gt;
&lt;li&gt;
DRM Key Rotation/LiveTV Playback 
&lt;/li&gt;
&lt;li&gt;
Application-Restricted Media&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Improved Text support
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Text Tracking &amp;amp; Leading 
&lt;/li&gt;
&lt;li&gt;
Linked Text Containers 
&lt;/li&gt;
&lt;li&gt;
OpenType and Pixel Snapped Text 
&lt;/li&gt;
&lt;li&gt;
Postscript vector printing 
&lt;/li&gt;
&lt;li&gt;
Performance improvements for Block Layout Engine&lt;strong&gt;. 
&lt;br /&gt;
&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&lt;b&gt;Building next-generation business applications&lt;/b&gt;
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
PivotViewer 
&lt;/li&gt;
&lt;li&gt;
ClickCount 
&lt;/li&gt;
&lt;li&gt;
Listbox/ComboBox type-ahead text searching 
&lt;/li&gt;
&lt;li&gt;
Ancestor RelativeSource Binding 
&lt;/li&gt;
&lt;li&gt;
Implicit DataTemplates 
&lt;/li&gt;
&lt;li&gt;
DataContextChanged event 
&lt;/li&gt;
&lt;li&gt;
Added PropertyChanged to the UpdateSourceTrigger enum 
&lt;/li&gt;
&lt;li&gt;
Save File and Open File Dialog 
&lt;/li&gt;
&lt;li&gt;
Databinding Debugging 
&lt;/li&gt;
&lt;li&gt;
Custom Markup Extensions 
&lt;/li&gt;
&lt;li&gt;
Binding on Style Setters&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Silverlight 5 performance improvements
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a name="graphics"&gt;&lt;/a&gt;Parser Performance Improvements 
&lt;/li&gt;
&lt;li&gt;
Network Latency Improvements 
&lt;/li&gt;
&lt;li&gt;
H/W accelerated rendering in IE9 windowless mode 
&lt;/li&gt;
&lt;li&gt;
Multicore JIT 
&lt;/li&gt;
&lt;li&gt;
&lt;i&gt;64-&lt;/i&gt;bit browser support&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Graphics improvements
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Improved Graphics stack 
&lt;/li&gt;
&lt;li&gt;
3D&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;&amp;quot;Trusted Application&amp;quot; model
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Multiple window support 
&lt;/li&gt;
&lt;li&gt;
Full-Trust in-browser 
&lt;/li&gt;
&lt;li&gt;
In-browser HTML support 
&lt;/li&gt;
&lt;li&gt;
Unrestricted File System Access 
&lt;/li&gt;
&lt;li&gt;
P/Invoke support&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Tools improvements
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
Visual Studio Team Test support&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1SrO1g0FDno:bt4l4Mlxaxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1SrO1g0FDno:bt4l4Mlxaxw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=1SrO1g0FDno:bt4l4Mlxaxw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1SrO1g0FDno:bt4l4Mlxaxw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=1SrO1g0FDno:bt4l4Mlxaxw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1SrO1g0FDno:bt4l4Mlxaxw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=1SrO1g0FDno:bt4l4Mlxaxw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=1SrO1g0FDno:bt4l4Mlxaxw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/1SrO1g0FDno" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 12 Dec 2011 08:36:09 -0600</pubDate>
      <a10:updated>2011-12-12T08:36:09-06:00</a10:updated>
    <feedburner:origLink>http://www.develop-one.net/blog/2011/12/12/Silverlight5Release.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/JM8qqNR6qIQ/ClaimsGuidendash2ndEditionPDF.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/ClaimsGuidendash2ndEditionPDF.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Claims Guide&amp;ndash;2nd Edition PDF</title>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://tinyurl.com/claimsguide2"&gt;http://tinyurl.com/claimsguide2&lt;/a&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=107895d8-884d-4b04-8944-ccb5767abdf1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=JM8qqNR6qIQ:o1ltbE5XQ7I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=JM8qqNR6qIQ:o1ltbE5XQ7I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=JM8qqNR6qIQ:o1ltbE5XQ7I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=JM8qqNR6qIQ:o1ltbE5XQ7I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=JM8qqNR6qIQ:o1ltbE5XQ7I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=JM8qqNR6qIQ:o1ltbE5XQ7I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=JM8qqNR6qIQ:o1ltbE5XQ7I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=JM8qqNR6qIQ:o1ltbE5XQ7I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/JM8qqNR6qIQ" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 11 Dec 2011 22:48:49 -0600</pubDate>
      <a10:updated>2011-12-11T22:48:49-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/ClaimsGuidendash2ndEditionPDF.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/sBg5euPH8u4/html5-google-chrome-frame-and-older-browsers.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/08/html5-google-chrome-frame-and-older-browsers.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: HTML5, Google Chrome Frame and older browsers</title>
      <description>&lt;p&gt;Consider the following problem:&lt;/p&gt;  &lt;p&gt;You might be tempted to start working with HTML5 features in your web applications but you have to support older bowsers.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So for many HTML5 features there are polyfills available that will let you make older browsers like Internet Explorer 7 or 8 work with the newer API. See a possible list of HTML5 polyfills &lt;a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills"&gt;here&lt;/a&gt;. However a number of these is JavaScript based and while that works in older browsers their JavaScript engine is often quite slow as well making it hard to work with. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;But how about just upgrading the complete browser?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Seems to make far more sense right? Except upgrading from IE8 to IE9 isn’t possible in all cases. One big showstopper can be people still running Windows XP because IE9 requires Windows VISTA as a minimum.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So we can upgrade to another browsers like FireFox or Chrome which has far better HTML5 support. While that technically works it causes headaches as it means people must switch browsers. And worse you might also have to support some site that only works well in IE forcing the users to switch between multiple browsers. Not a problem for techies, I do it all the time, but not much fun for the average end user.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So it turns out there is a great solution out there called &lt;/strong&gt;&lt;a href="http://www.google.com/chromeframe?quickenable=true"&gt;&lt;strong&gt;Google Chrome Frame&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Users can install Google Chrome Frame in their machine and by default it does nothing noticeable. Only when a specific HTML meta tag &lt;strong&gt;X-UA-Compatible&lt;/strong&gt; is added to the head section does the plugin start working. And then it intercepts the response and starts rendering it using Google Chrome Frame instead. However this is done inside the Internet Explorer window so the user has no clue he or she has just switched to Google Chrome Frame. And just like magic all the cool new HTML5 features supported in Chrome will work in what appears to be IE.&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;meta&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;http-equiv&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;X-UA-Compatible&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;chrome=1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A simple example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I try to new up a WebSocket object in IE9 I get the following error. 
  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/6327.image_5F00_402E8443.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/6204.image_5F00_thumb_5F00_24A98240.png" width="712" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And with a simple addition of the HTML header the sample starts working. Notice that as far as the end user is concerned he is still using IE9, no changes there whatsoever.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/7651.image_5F00_293F8CFA.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/4807.image_5F00_thumb_5F00_78C90883.png" width="749" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Pretty cool right &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/0284.wlEmoticon_2D00_openmouthedsmile_5F00_0F3BA70B.png" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;And the good thing is that by default Google Chrome Frame is self updating just like Google Chrome so you know that once installed the plugin will always be up to date.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detecting Google Chrome Frame&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to detect if Chrome Frame is installed ahead of time you can look at the User-Agent header the browser sends to the server. If installed and active Chrome Frame will add &lt;strong&gt;chromeframe/X.X.X.X&lt;/strong&gt; where the X.X.X.X is the version number to the User-Agent string.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So why just add it to a single page?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enabling Chrome Frame for al pages in a website is easy, just add the following to your web.config&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.webServer&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;httpProtocol&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customHeaders&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;X-UA-Compatible&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;chrome=1&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customHeaders&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;httpProtocol&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.webServer&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;You can read the Google Chrome Frame FAQ with lots of extra bits of information &lt;a href="http://www.chromium.org/developers/how-tos/chrome-frame-getting-started/chrome-frame-faq"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;www.TheProblemSolver.nl &lt;/a&gt; 
  &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803322" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=sBg5euPH8u4:m4lgZkD21Sg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=sBg5euPH8u4:m4lgZkD21Sg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=sBg5euPH8u4:m4lgZkD21Sg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=sBg5euPH8u4:m4lgZkD21Sg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=sBg5euPH8u4:m4lgZkD21Sg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=sBg5euPH8u4:m4lgZkD21Sg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=sBg5euPH8u4:m4lgZkD21Sg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=sBg5euPH8u4:m4lgZkD21Sg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/sBg5euPH8u4" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 08 Dec 2011 05:04:00 -0600</pubDate>
      <a10:updated>2011-12-08T05:04:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/08/html5-google-chrome-frame-and-older-browsers.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/iOiH-54gCEc/dotned-podcast-bart-de-smet-over-rx-deel-1-van-2.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/07/dotned-podcast-bart-de-smet-over-rx-deel-1-van-2.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: #DotNed podcast: Bart De Smet over RX (Deel 1 van 2)</title>
      <description>&lt;p&gt;In deze podcast spreekt Maurice de Beijer met Bart De Smet over het RX framework. Bart werkt bij Microsoft aan de RX librray en verteld hoe deze ontwikkeling oorspronkelijk is begonnen als een onderdeel van een veel groter cloud programmability project.&lt;/p&gt;  &lt;p&gt;Links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Blog: &lt;a href="http://community.bartdesmet.net/blogs/bart/Default.aspx"&gt;http://community.bartdesmet.net/blogs/bart/Default.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;The Reactive Extensions (Rx): &lt;a href="http://msdn.microsoft.com/en-us/data/gg577609"&gt;http://msdn.microsoft.com/en-us/data/gg577609&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Channel9: &lt;a href="http://channel9.msdn.com/tags/Rx/"&gt;http://channel9.msdn.com/tags/Rx/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;101 Rx Samples: &lt;a href="http://rxwiki.wikidot.com/101samples"&gt;http://rxwiki.wikidot.com/101samples&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Forum: &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/rx/threads"&gt;http://social.msdn.microsoft.com/Forums/en-US/rx/threads&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;www.TheProblemSolver.nl &lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803320" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iOiH-54gCEc:OZ7kRScYWCA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iOiH-54gCEc:OZ7kRScYWCA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iOiH-54gCEc:OZ7kRScYWCA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iOiH-54gCEc:OZ7kRScYWCA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iOiH-54gCEc:OZ7kRScYWCA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iOiH-54gCEc:OZ7kRScYWCA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iOiH-54gCEc:OZ7kRScYWCA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iOiH-54gCEc:OZ7kRScYWCA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/iOiH-54gCEc" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 07 Dec 2011 06:12:53 -0600</pubDate>
      <a10:updated>2011-12-07T06:12:53-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/07/dotned-podcast-bart-de-smet-over-rx-deel-1-van-2.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/ZAhfWxhDvk0/SmallAndFixedBugInIdentityServerV10.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/SmallAndFixedBugInIdentityServerV10.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Small (and fixed) Bug in IdentityServer v1.0</title>
      <description>&lt;p&gt;
It was brought to my attention that fedutil does not work anymore with IdSrv v1 metadata.
And I can confirm that.
&lt;/p&gt;
&lt;p&gt;
The reason for this bug is my recent change to the &lt;em&gt;XmlWriter&lt;/em&gt; factory methods
which have a different default behavior when it comes to encoding.
&lt;/p&gt;
&lt;p&gt;
Since there were only 20 downloads so far – I fixed the bug in-place (shame on me).
So when you are one of the early adopters and run into this problem – just re-download
IdSrv ;)
&lt;/p&gt;
&lt;p&gt;
HTH
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=c6c33046-9ea4-4751-93d3-cf39a60e8949" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ZAhfWxhDvk0:arBi-52lB_E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ZAhfWxhDvk0:arBi-52lB_E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ZAhfWxhDvk0:arBi-52lB_E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ZAhfWxhDvk0:arBi-52lB_E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ZAhfWxhDvk0:arBi-52lB_E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ZAhfWxhDvk0:arBi-52lB_E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ZAhfWxhDvk0:arBi-52lB_E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ZAhfWxhDvk0:arBi-52lB_E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/ZAhfWxhDvk0" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 07 Dec 2011 02:10:24 -0600</pubDate>
      <a10:updated>2011-12-07T02:10:24-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/SmallAndFixedBugInIdentityServerV10.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/ozSw8_bU0uA/ThinktectureIdentityServerV10.aspx</link>
      <a10:author>
        <a10:name>Dominick Baier</a10:name>
        <a10:uri>http://www.leastprivilege.com/ThinktectureIdentityServerV10.aspx</a10:uri>
      </a10:author>
      <title>Dominick Baier: Thinktecture IdentityServer v1.0</title>
      <description>&lt;p&gt;
Yeah – it is finally done. I just uploaded the v1 bits to &lt;a href="http://identityserver.codeplex.com" target="_blank"&gt;Codeplex&lt;/a&gt; and
the &lt;a href="https://identity.thinktecture.com/idsrv/docs/" target="_blank"&gt;documentation&lt;/a&gt; to
our server. Here’s the official blurb…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thinktecture.com" target="_blank"&gt;Thinktecture&lt;/a&gt; IdentityServer
is an open source security token service based on Microsoft .NET, ASP.NET MVC, WCF
and WIF.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;High level features&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Multiple protocols support (WS-Trust, WS-Federation, OAuth2, WRAP, JSNotify, HTTP
GET)&lt;/li&gt;
&lt;li&gt;
Multiple token support (SAML 1.1/2.0, SWT)&lt;/li&gt;
&lt;li&gt;
Out of the box integration with ASP.NET membership, roles and profile&lt;/li&gt;
&lt;li&gt;
Support for username/password and client certificates authentication&lt;/li&gt;
&lt;li&gt;
Support for WS-Federation metadata&lt;/li&gt;
&lt;li&gt;
Support for WS-Trust identity delegation&lt;/li&gt;
&lt;li&gt;
Extensibility points to customize configuration and user management handling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="http://www.leastprivilege.com/content/binary/idsrv_arch.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Disclaimer&lt;br&gt;
&lt;/strong&gt;I did thorough testing of all features of IdentityServer - but keep in mind
that this is an open source project and I am the only architect, developer and tester
on the team.&lt;br&gt;
IdentityServer also lacks many of the enterprise-level features like configuration
services, proxy support, operations integration etc.&lt;br&gt;
I only recommend using IdentityServer if you also understand how it works (to be able
to support it). I am offering consulting to help you with customization and lock down
- contact me.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://identityserver.codeplex.com" target="_blank"&gt;Download&lt;/a&gt;. &lt;a href="https://identity.thinktecture.com/idsrv/docs/" target="_blank"&gt;Documentation&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Up next is v1 of the Azure version. Have fun!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.leastprivilege.com/aggbug.ashx?id=d15a278b-6de4-488f-b9ed-6c9a70b5b8dc" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ozSw8_bU0uA:yXq3nj6FcH8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ozSw8_bU0uA:yXq3nj6FcH8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ozSw8_bU0uA:yXq3nj6FcH8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ozSw8_bU0uA:yXq3nj6FcH8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ozSw8_bU0uA:yXq3nj6FcH8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ozSw8_bU0uA:yXq3nj6FcH8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=ozSw8_bU0uA:yXq3nj6FcH8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=ozSw8_bU0uA:yXq3nj6FcH8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/ozSw8_bU0uA" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 06 Dec 2011 12:14:20 -0600</pubDate>
      <a10:updated>2011-12-06T12:14:20-06:00</a10:updated>
    <feedburner:origLink>http://www.leastprivilege.com/ThinktectureIdentityServerV10.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/dRvRPzHpmd4/html-5-in-een-vogelvlucht.aspx</link>
      <a10:author>
        <a10:name>Maurice de Beijer</a10:name>
        <a10:uri>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/01/html-5-in-een-vogelvlucht.aspx</a10:uri>
      </a10:author>
      <title>Maurice de Beijer: HTML5 in een vogelvlucht</title>
      <description>&lt;p&gt;De PowerPoint presentaties van mijn HTML 5 in een vogelvlucht sessie bij Achmea is &lt;a href="http://dl.dropbox.com/u/3913446/Blog/HTML_5_in_een_vogelvlucht_20111130.pptx"&gt;hier&lt;/a&gt; te downloaden en de demo code &lt;a href="http://dl.dropbox.com/u/3913446/Blog/Html5Demo_20111130.zip"&gt;hier&lt;/a&gt;. De presentatie is ook op SlideShare te vinden.&lt;/p&gt;
&lt;div id="__ss_10395251" style="width:425px;"&gt;&lt;strong&gt;&lt;a target="_blank" href="http://www.slideshare.net/mauricedb/html-5-in-een-vogelvlucht" title="HTML 5 in een vogelvlucht (Dutch)"&gt;HTML 5 in een vogelvlucht (Dutch)&lt;/a&gt;&lt;/strong&gt; &lt;iframe scrolling="no" width="425" frameborder="0" src="http://www.slideshare.net/slideshow/embed_code/10395251" height="355"&gt;&lt;/iframe&gt;
&lt;div style="padding-bottom:12px;padding-left:0px;padding-right:0px;padding-top:5px;"&gt;View more &lt;a target="_blank" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a target="_blank" href="http://www.slideshare.net/mauricedb"&gt;Maurice Beijer&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.theproblemsolver.nl/"&gt;www.TheProblemSolver.nl &lt;/a&gt;   &lt;br /&gt;&lt;a href="http://www.dotnetevents.nl/"&gt;www.dotnetevents.nl&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1803098" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dRvRPzHpmd4:IN1m0XyV_Rs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dRvRPzHpmd4:IN1m0XyV_Rs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=dRvRPzHpmd4:IN1m0XyV_Rs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dRvRPzHpmd4:IN1m0XyV_Rs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=dRvRPzHpmd4:IN1m0XyV_Rs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dRvRPzHpmd4:IN1m0XyV_Rs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=dRvRPzHpmd4:IN1m0XyV_Rs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=dRvRPzHpmd4:IN1m0XyV_Rs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/dRvRPzHpmd4" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 01 Dec 2011 05:07:00 -0600</pubDate>
      <a10:updated>2011-12-01T05:07:00-06:00</a10:updated>
    <feedburner:origLink>http://msmvps.com/blogs/theproblemsolver/archive/2011/12/01/html-5-in-een-vogelvlucht.aspx</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/vho4avvBQZo/devweek-2012.html</link>
      <a10:author>
        <a10:name>Andy Clymer</a10:name>
        <a10:uri>http://andyclymer.blogspot.com/2011/11/devweek-2012.html</a10:uri>
      </a10:author>
      <title>Andy Clymer: Devweek 2012</title>
      <description>&lt;p&gt;RSK guys will be speaking at &lt;a href="http://www.devweek.com/"&gt;DevWeek&lt;/a&gt; this year, and as usual we will be talking about a large range of cutting edge topics, including&lt;/p&gt;  &lt;p&gt;Our fluffy cuddly colouring in guy Dave Wheeler will be doing a huge number of sessions on Windows 8 Metro including the Keynote to get you all fired up, but don’t think they will be all soft, one session includes a COM primer for all those youngsters who didn’t take their COM apprentiship.&lt;/p&gt;  &lt;p&gt;Rich will be covering topics from Whats New in WCF 4.5, and the ever cool Reactive Framework, and a deep dive into the GC, something all developers should have intimate knowledge of.&lt;/p&gt;  &lt;p&gt;Andy will be covering the new async functionality of C#5, highlighting how you now write both ui and server side code to consume and enable the use of these new wonderful keywords, and doing a whole day of threading as a pre con on Monday&lt;/p&gt;  &lt;p&gt;Kevin will be presenting a day of building MVC applications, along with a session on unit testing.&amp;#160; &lt;/p&gt;  &lt;p&gt;During the breaks Dr Rock Man will also be there to try and solve your specific technical problems or just happy to hear you rant about the code base you have just inherited. &lt;/p&gt;  &lt;p&gt;In total we will be presenting a total 19 sessions, plus pre and post conference sessions.&amp;#160; Hopefully see you &lt;a href="http://www.devweek.com/"&gt;there&lt;/a&gt; with what should be a fun pact week..&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30604582-6712137806207404786?l=andyclymer.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vho4avvBQZo:QdHZzb9cQyA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vho4avvBQZo:QdHZzb9cQyA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=vho4avvBQZo:QdHZzb9cQyA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vho4avvBQZo:QdHZzb9cQyA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=vho4avvBQZo:QdHZzb9cQyA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vho4avvBQZo:QdHZzb9cQyA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=vho4avvBQZo:QdHZzb9cQyA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=vho4avvBQZo:QdHZzb9cQyA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/vho4avvBQZo" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 24 Nov 2011 04:01:00 -0600</pubDate>
      <a10:updated>2011-11-24T04:01:00-06:00</a10:updated>
    <feedburner:origLink>http://andyclymer.blogspot.com/2011/11/devweek-2012.html</feedburner:origLink></item>
    <item>
      <link>http://feedproxy.google.com/~r/DevelopmentorInstructors/~3/iY0pKR3hlnQ/</link>
      <a10:author>
        <a10:name>Pinku Surana</a10:name>
        <a10:uri>http://surana.wordpress.com/2011/11/23/high-performance-counters/</a10:uri>
      </a10:author>
      <title>Pinku Surana: High Performance Counters</title>
      <description>There doesn’t appear to be a high performance concurrent counter available in the .NET framework. I timed various simple implementations on my Core 2 Duo laptop: A single thread can increment a static field 1.5 billion times in 4 seconds. Two threads that update a static field runs slightly slower than 4 seconds probably due [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=surana.wordpress.com&amp;amp;blog=1937801&amp;amp;post=315&amp;amp;subd=surana&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iY0pKR3hlnQ:oYM87Ysl2Tg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iY0pKR3hlnQ:oYM87Ysl2Tg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iY0pKR3hlnQ:oYM87Ysl2Tg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iY0pKR3hlnQ:oYM87Ysl2Tg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iY0pKR3hlnQ:oYM87Ysl2Tg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iY0pKR3hlnQ:oYM87Ysl2Tg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?a=iY0pKR3hlnQ:oYM87Ysl2Tg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DevelopmentorInstructors?i=iY0pKR3hlnQ:oYM87Ysl2Tg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopmentorInstructors/~4/iY0pKR3hlnQ" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 23 Nov 2011 10:58:29 -0600</pubDate>
      <a10:updated>2011-11-23T10:58:29-06:00</a10:updated>
    <feedburner:origLink>http://surana.wordpress.com/2011/11/23/high-performance-counters/</feedburner:origLink></item>
  </channel>
</rss>

