<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <channel>
  <title>.NET Developers Blog</title>
  <link>http://www.enderminh.com/netdev/</link>
  <description>An aggregated blog of .NET developers.</description>
  <language>en-us</language>
  <item>
   <title><![CDATA[SUS or WSUS 70-291? Can anyone tell me if ... (1477 views)]]></title>
   <link>http://www.ms-faqs.com/content/18/7/en/sus-or-wsus-70_291-can-anyone-tell-me-if-the-291-exam-questions-relate-to-the-old-redundant-sus-or-the-new-wsus-or-will-i-have-to-cover-both-to-be-safe.html</link>
   <description><![CDATA[[1.] SUS or WSUS 70-291?
Can anyone tell me if the 291 exam questions relate to the old redundant SUS or the new WSUS or will I have to cover both to be safe? (1477 views)]]></description>
   <dc:creator>Amanda</dc:creator>
   <dc:date>3/21/2010 1:01:26 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Spark IT 2010]]></title>
   <link>http://aspadvice.com/blogs/joydip/archive/2010/03/21/Spark-IT-2010.aspx</link>
   <description><![CDATA[Hello Friends, I just came back from the prestigious Spark IT 2010 event at Bangalore. It was a great time meeting so many reputed personalities there. I was also one of the speakers and I delivered two sessions - one on the new features in C# 4.0 and...(<a href="http://aspadvice.com/blogs/joydip/archive/2010/03/21/Spark-IT-2010.aspx">read more</a>)<img src="http://aspadvice.com/aggbug.aspx?PostID=61765" width="1" height="1">]]></description>
   <dc:creator>Joydip Kanjilal</dc:creator>
   <dc:date>3/21/2010 12:29:31 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Copying A Slide From One Presentation To Another]]></title>
   <link>http://geekswithblogs.net/tmurphy/archive/2010/03/20/copying-a-slide-from-one-presentation-to-another.aspx</link>
   <description><![CDATA[<p>There are many ways to generate a PowerPoint presentation using Open XML.  The first way is to build it by hand strictly using the SDK.  Alternately you can modify a copy of a base presentation in place.  The third approach to generate a presentation is to build a new presentation from the parts of an existing presentation by copying slides as needed.  This post will focus on the third option.</p>  <p>In order to make this solution a little more elegant I am going to create a VSTO add-in as I did in my previous post.  This one is going to insert Tags to identify slides instead of NonVisualDrawingProperties which I used to identify charts, tables and images.  The code itself is fairly short.</p>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">SlideNameForm dialog = <span style="color: #0000ff">new</span> SlideNameForm();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">Selection selection = Globals.ThisAddIn.Application.ActiveWindow.Selection;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">if</span>(dialog.ShowDialog() == DialogResult.OK)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">{</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    selection.SlideRange.Tags.Add(dialog.slideName,dialog.slideName);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre>
<!--CRLF--></div>
</div>
<!--CRLF-->

<p>Zeyad Rajabi has a good post <a href="http://blogs.msdn.com/brian_jones/archive/2009/03/05/how-to-assemble-multiple-powerpoint-decks.aspx">here</a> on combining slides from two presentations.  The example he gives is great if you are doing a straight merge.  But what if you want to use your source file as almost a supermarket where you pick and chose slides and may even insert them repeatedly?  The following code uses the tags we created in the previous step to pick a particular slide an copy it to a destination file.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">using</span> (PresentationDocument newDocument = PresentationDocument.Open(OutputFileText.Text,<span style="color: #0000ff">true</span>))</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">{</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    PresentationDocument templateDocument = PresentationDocument.Open(FileNameText.Text, <span style="color: #0000ff">false</span>);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    uniqueId = GetMaxIdFromChild(newDocument.PresentationPart.Presentation.SlideMasterIdList);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">uint</span> maxId = GetMaxIdFromChild(newDocument.PresentationPart.Presentation.SlideIdList);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    SlidePart oldPart = GetSlidePartByTagName(templateDocument, SlideToCopyText.Text);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    SlidePart newPart = newDocument.PresentationPart.AddPart&lt;SlidePart&gt;(oldPart, <span style="color: #006080">"sourceId1"</span>);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    SlideMasterPart newMasterPart = newDocument.PresentationPart.AddPart(newPart.SlideLayoutPart.SlideMasterPart);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    SlideIdList idList = newDocument.PresentationPart.Presentation.SlideIdList;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">// create new slide ID</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    maxId++;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    SlideId newId = <span style="color: #0000ff">new</span> SlideId();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    newId.Id = maxId;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    newId.RelationshipId = <span style="color: #006080">"sourceId1"</span>;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    idList.Append(newId);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">// Create new master slide ID</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    uniqueId++;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    SlideMasterId newMasterId = <span style="color: #0000ff">new</span> SlideMasterId();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    newMasterId.Id = uniqueId;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    newMasterId.RelationshipId = newDocument.PresentationPart.GetIdOfPart(newMasterPart);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    newDocument.PresentationPart.Presentation.SlideMasterIdList.Append(newMasterId);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">// change slide layout ID</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    FixSlideLayoutIds(newDocument.PresentationPart);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #008000">//newPart.Slide.Save();</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    newDocument.PresentationPart.Presentation.Save();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre>
<!--CRLF--></div>
</div>

<p>The GetMaxIDFromChild and FixSlideLayoutID methods are barrowed from Zeyad’s article.  The GetSlidePartByTagName method is listed below.  It is really one LINQ query that finds SlideParts with child Tags that have the requested Name.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">private</span> SlidePart GetSlidePartByTagName(PresentationDocument templateDocument, <span style="color: #0000ff">string</span> tagName)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">{</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">    <span style="color: #0000ff">return</span> (from p <span style="color: #0000ff">in</span> templateDocument.PresentationPart.SlideParts</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            <span style="color: #0000ff">where</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                p.UserDefinedTagsParts.First().TagList.Descendants</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                    &lt;DocumentFormat.OpenXml.Presentation.Tag&gt;().First().Name ==</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">                tagName.ToUpper()</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">            select p).First();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre>
<!--CRLF--></div>
</div>

<p>This is what really makes the difference from what Zeyad posted.  The most powerful thing you can have when generating documents from templates is a consistent way of naming items to be manipulated.  I will be show more approaches like this in upcoming posts.</p>

<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bc98459b-79b0-4492-b98f-338a0a694774" class="wlWriterEditableSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/Office+Open+XML" rel="tag">Office Open XML</a>,<a href="http://del.icio.us/popular/Presentation" rel="tag">Presentation</a>,<a href="http://del.icio.us/popular/PowerPoint" rel="tag">PowerPoint</a>,<a href="http://del.icio.us/popular/VSTO" rel="tag">VSTO</a>,<a href="http://del.icio.us/popular/TagList" rel="tag">TagList</a></div><p><a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138633"><img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138633" border="0"/></a></p><iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;PageID=31016&amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No>
<script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Browser=NETSCAPE4&amp;NoCache=True&PageID=31016&amp;SiteID=1"></script>
<noscript><a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Click&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" target="_blank">
<img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" width="1" height="1" border="0"  alt=""></a>
</noscript>
</iframe>
<img src="http://geekswithblogs.net/tmurphy/aggbug/138633.aspx" width="1" height="1" />]]></description>
   <dc:creator>Tim Murphy</dc:creator>
   <dc:date>3/20/2010 3:33:19 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Associating your MentionNotifier subscriptions with OAuth]]></title>
   <link>http://geekswithblogs.net/thibbard/archive/2010/03/20/associating-your-mentionnotifier-subscriptions-with-oauth.aspx</link>
   <description><![CDATA[<p><a href="http://geekswithblogs.net/images/geekswithblogs_net/thibbard/WindowsLiveWriter/AssociatingyourMentionNotifiersubscripti_A182/logo%5B1%5D_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="logo[1]" border="0" alt="logo[1]" src="http://geekswithblogs.net/images/geekswithblogs_net/thibbard/WindowsLiveWriter/AssociatingyourMentionNotifiersubscripti_A182/logo%5B1%5D_thumb.png" width="204" height="164" /></a> </p>  <p>We recently added <a href="http://apiwiki.twitter.com/OAuth-FAQ" target="_blank">OAuth</a> to <a href="http://software.engraph.com/managementionnotifier/" target="_blank">MentionNotifier</a> so that users can quickly view and edit their subscriptions without needed an additional login.  This is enabled by default for new users, but existing users will need to do the following steps to associate their subscriptions with OAuth:</p>  <p>1)  Go to <a href="http://software.engraph.com/ManageMentionNotifier">http://software.engraph.com/ManageMentionNotifier</a></p>  <p>2)  Click “Sign in with Twitter”</p>  <p>3)  Verify that your twittername and email are correct</p>  <p>4)  Click "Associate with OAuth"</p>  <p>This will also allow you to reply to notification emails and MentionNotifier will tweet on your behalf.  This is made possible by <a href="http://twitter.com/sidepop" target="_blank">@sidePop</a> written by <a href="http://twitter.com/ferventcoder" target="_blank">@ferventcoder</a></p>  <p>Note that the reply by email is new and buggy, so make sure that what was tweeted is correct and as expected.</p>  <p>If you run into any issues, sent me a reply to <a href="http://twitter.com/timhibbard" target="_blank">@timhibbard</a>.</p>  <p>You can also join the <a href="http://www.facebook.com/pages/Mention-Notifier/160456928794?ref=ts" target="_blank">MentionNotifier fan page on facebook,</a> or follow <a href="http://twitter.com/mentionnotifier" target="_blank">@MentionNotifier</a> on twitter.</p><p><a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138627"><img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138627" border="0"/></a></p><iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;PageID=31016&amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No>
<script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Browser=NETSCAPE4&amp;NoCache=True&PageID=31016&amp;SiteID=1"></script>
<noscript><a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Click&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" target="_blank">
<img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" width="1" height="1" border="0"  alt=""></a>
</noscript>
</iframe>
<img src="http://geekswithblogs.net/thibbard/aggbug/138627.aspx" width="1" height="1" />]]></description>
   <dc:creator>Tim Hibbard</dc:creator>
   <dc:date>3/20/2010 10:30:04 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[A Week of DNN – March 19, 2010]]></title>
   <link>http://weblogs.asp.net/rchartier/archive/2010/03/19/a-week-of-dnn-march-19-2010.aspx</link>
   <description><![CDATA[<p><a href="http://dotnetnuke.codeplex.com/releases/">DotNetNuke 5.3.0 Released!</a></p>  <h3>New Features</h3>  <ul>   <li><b>Templated User Profiles</b> - User profile pages are now publicly viewable, and layout is controlled by the Admin. </li>    <li><b>Photo field in User Profile </b>- Users can upload a photo to their profile.&#160; We also added support for User Specific data storage.&#160; </li>    <li><b>User Messaging</b> - Users can send direct messages to other system users.&#160; This also includes an out-of-the-box asynchronous, provider based, message platform.&#160; You will see more of this in future releases. </li>    <li><b>Search Engine Sitemap Provider</b> - The sitemap now allows module admins to plug in sitemap logic for individual modules. </li>    <li><b>Taxonomy Manager</b> - Administrators can create flat or hierarchical taxonomies that can be shared and used across modules.&#160; Supporting SEO and Social features at the core is an important piece for DotNetNuke moving forward. </li> </ul>  <p>(Last Minute Update: <a href="http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryId/2537/DotNetNuke-5-3-1-Version-now-entering-QA.aspx">5.3.1 will be released with some last minute updates early next week</a>) </p>  <p><a href="http://visapoint.eu.com/2010/03/dotnetnuke-as-a-scalable-content-management-system-cms/">DotNetNuke as a Scalable Content management System (CMS)</a></p>  <p><a href="http://software.newsm8.com/power-reliability-feature-richness-dotnetnuke-an-open-source-framework">Power, Reliability &amp; Feature Richness – DotNetNuke an Open Source Framework</a></p>  <p><a href="http://lab212.com/logos-seo-websites-lab212-com/how-to-search-engine-optimize-dotnetnuke/">How to Search Engine Optimize dotnetnuke</a></p>  <p><a href="http://hanser.us/GH_blog/?p=1364">dotnetnuke Training Video – Setting DNN Security</a></p>  <p><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/264c4070-9ebd-46b0-a492-33e3590da294">DotNetNuke Module Template [CS] (Free)</a> </p>  <p><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/88db423f-b715-445c-a1f8-97217048d5eb">XsltDb - DotNetNuke XSLT module with database and ajax support (Free)</a></p>  <p>Create a non-Award Winning DotNetNuke Skin (<a href="http://www.ralphwilliams.com/Home/tabid/55/EntryId/25/Create-a-non-Award-Winning-DotNetNuke-Skin-pt-1.aspx">part 1</a>, <a href="http://www.ralphwilliams.com/Home/tabid/55/EntryId/26/Create-a-non-Award-Winning-DotNetNuke-Skin-pt-2.aspx">part 2</a>, <a href="http://ralphwilliams.com/Home/tabid/55/EntryId/27/Create-a-non-Award-Winning-DotNetNuke-Skin-pt-3.aspx">part 3</a>)</p>  <p><a href="http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryId/2534/Test-Driven-example-module-nearly-refactored-to-Web-Forms-MVP.aspx">Test Driven example module nearly refactored to Web Forms MVP</a></p>  <p><a href="http://www.dnnui.com/Modules/AjaxSearch/AjaxSearchDemo.aspx">Ajax Search v1.0.0 Released! (Live Demo)</a></p>  <p><a href="http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/112/threadid/113630/scope/posts/Default.aspx">Tutorials: Backup DNN, Restore DNN, Move DNN from Backup (By Mitchel Sellers)</a></p>  <p><a href="http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/112/threadid/355987/scope/posts/Default.aspx">A tag cloud based on the new 5.3 Taxonomy</a></p>  <p><a href="http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/112/threadid/355653/scope/posts/Default.aspx">Engage: Tell-a-Friend 1.1 released (FREE module)</a>&#160; </p>  <p>549 DotNetNuke Videos: DNN Creative Magazine Issue 54 Out Now&#160; <a href="http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/112/threadid/355615/scope/posts/Default.aspx">http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/112/threadid/355615/scope/posts/Default.aspx</a></p><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7390091" width="1" height="1">]]></description>
   <dc:creator>Rob Chartier</dc:creator>
   <dc:date>3/19/2010 6:17:12 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[IIS, CIFS and UNC content were it's access web.configs in sub-folders.  Here is how to turn off.]]></title>
   <link>http://weblogs.asp.net/steveschofield/archive/2010/03/19/iis-cifs-and-unc-content-were-it-s-access-web-configs-in-sub-folders-here-is-how-to-turn-off.aspx</link>
   <description><![CDATA[<P mce_keep="true">Here is another thread on CIFS issues and potential workarounds</P>
<P mce_keep="true"><A href="http://forums.iis.net/p/1166043/1937926.aspx">http://forums.iis.net/p/1166043/1937926.aspx</A></P><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7389979" width="1" height="1">]]></description>
   <dc:creator>Steve Schofield</dc:creator>
   <dc:date>3/19/2010 3:37:15 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Code excavations, wishful invocations, perimeters and domain specific unit test frameworks]]></title>
   <link>http://feedproxy.google.com/~r/Iserializable/~3/TQpxQ48uiCk/code-excavations-wishful-invocations-perimeters-and-domain-specific-unit-test-frameworks.aspx</link>
   <description><![CDATA[<p>One of the talks I did at <a href="http://qconlondon.com">QCON London</a> was about a subject that I’ve come across fairly recently , when I was building <a href="http://cthru.codeplex.com">SilverUnit</a> – a “pure” unit test framework for silverlight objects that depend on the silverlight runtime to run.</p>  <p>It is the concept of “cogs in the machine” – when your piece of code needs to run inside a host framework or runtime that you have little or no control over for testability related matters. Examples of such cogs and machines can be: </p>  <ul>   <li>your custom control running inside silverlight runtime in the browser </li>    <li>your plug-in running inside an IDE </li>    <li>your activity running inside a windows workflow </li>    <li>your code running inside a java EE bean </li>    <li>your code inheriting from a COM+ (enterprise services) component </li>    <li>etc.. </li> </ul>  <p>Not all of these are necessarily testability problems. The main testability problem usually comes when your code actually inherits form something inside the system.</p>  <p>For example. one of the biggest problems with testing objects like silverlight controls is <em>the way</em> they depend on the silverlight runtime – they don’t implement some silverlight interface, they don’t just call external static methods against the framework runtime that surrounds them – they actually <em>inherit</em> parts of the framework: they all inherit (in this case) from the silverlight <em>DependencyObject</em></p>  <h3>Wrapping it up?</h3>  <p>An <em>inheritance dependency</em> is uniquely challenging to bring under test, because “classic” methods such as wrapping the object under test with a framework wrapper will not work, and the only way to do manually is to create <em>parallel testable objects</em> that get delegated with all the possible actions from the dependencies.&#160;&#160;&#160; </p>  <p>In silverlight’s case, that would mean creating your own custom logic class that would be called directly from controls that inherit from silverlight, and would be tested independently of these controls. The pro side is that you get the benefit of understanding the “contract” and the “roles” your system plays against your logic, but unfortunately, more often than not, it can be very tedious to create, and may sometimes feel unnecessary or like code duplication.</p>  <h2>About perimeters</h2>  <p>A <em>perimeter</em> is that invisible line that your draw around your pieces of logic during a test, that separate the code under test from any dependencies that it uses. Most of the time, a test perimeter around an object will be the list of <em>seams</em> (dependencies that can be replaced such as interfaces, virtual methods etc.) that are actually replaced for that test or for all the tests.</p>  <h2>Role based perimeters</h2>  <p>In the case of creating a wrapper around an object – one really creates a “role based” perimeter around the logic that is being tested – that wrapper takes on roles that are required by the code under test, and also communicates with the host system to implement those roles and provide any inputs to the logic under test.</p>  <p>in the image below – we have the code we want to test represented as a star. No perimeter is drawn yet (we haven’t wrapped it up in anything yet).</p>  <p><a href="http://weblogs.asp.net/blogs/rosherove/image_50FFAFD7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/rosherove/image_thumb_6E918AD6.png" width="433" height="212" /></a> </p>  <p>in the image below is what happens when you wrap your logic with a role based wrapper – you get a role based perimeter anywhere your code interacts with the system:</p>  <p><a href="http://weblogs.asp.net/blogs/rosherove/image_05705C53.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/rosherove/image_thumb_62CC1DD7.png" width="492" height="213" /></a> </p>  <p>There’s another way to bring that code under test – using isolation frameworks like typemock, rhino mocks and MOQ (but if your code inherits from the system, Typemock might be the only way to isolate the code from the system interaction.</p>  <p>&#160;</p>  <h2>Ad-Hoc Isolation perimeters</h2>  <p>the image below shows what I call <em>ad-hoc</em> perimeter that might be vastly different between different tests:</p>  <p><a href="http://weblogs.asp.net/blogs/rosherove/image_75346E8C.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/rosherove/image_thumb_3757D710.png" width="511" height="219" /></a> </p>  <p>This perimeter’s surface is much smaller, because for that specific test, that is all the “change” that is required to the host system behavior.</p>  <p>&#160;</p>  <p>The third way of isolating the code from the host system is the main “meat” of this post: </p>  <h2>Subterranean perimeters</h2>  <p>Subterranean perimeters are Deep rooted perimeters&#160; - “always on” seams that that can lie very deep in the heart of the host system where they are fully invisible even to the test itself, not just to the code under test.</p>  <p>Because they lie deep inside a system you can’t control, the only way I’ve found to control them is with runtime (not compile time) interception of method calls on the system. One way to get such abilities is by using Aspect oriented frameworks – for example, in SilverUnit, I’ve used the <a href="http://cthru.codeplex.com">CThru AOP framework</a> based on Typemock hooks and CLR profilers to intercept such system level method calls and effectively turn them into seams that lie deep down at the heart of the silverlight runtime.</p>  <p>the image below depicts an example of what such a perimeter could look like:</p>  <p><a href="http://weblogs.asp.net/blogs/rosherove/image_70220B10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/rosherove/image_thumb_4DE9FF8A.png" width="509" height="222" /></a> </p>  <p>As you can see, the actual seams can be very far away form the actual code under test, and as you’ll discover, that’s actually a very good thing.</p>  <p>Here is only a partial list of examples of such deep rooted seams :</p>  <ul>   <li>disabling the constructor of a base class <em>five levels below</em> the code under test (this.base.base.base.base) </li>    <li>faking static methods of a type that’s being called several levels down the stack: method x() calls y() calls z() calls SomeType.StaticMethod()&#160; </li>    <li>Replacing an async mechanism with a synchronous one (replacing all timers with your own timer behavior that always Ticks immediately upon calls to “start()” on the same caller thread for example) </li>    <li>Replacing event mechanisms with your own event mechanism (to allow “firing” system events) </li>    <li>Changing the way the system saves information with your own saving behavior (in silverunit, I replaced all Dependency Property set and get with calls to an in memory value store instead of using the one built into silverlight which threw exceptions without a browser) </li> </ul>  <p>several questions could jump in:</p>  <ul>   <li>How do you know what to fake? (how do you discover the perimeter?) </li>    <li>How do you fake it? </li>    <li>Wouldn’t this be problematic&#160; - to fake something you don’t own? it might change in the future </li> </ul>  <p>How do you discover the perimeter to fake?</p>  <p>To discover a perimeter all you have to do is start with a <em>wishful invocation</em>. a <em>wishful invocation</em> is the act of trying to invoke a method (or even just create an instance ) of an object using “regular” test code. You invoke the thing that you’d like to do in a real unit test, to see what happens:</p>  <ul>   <li>Can I even create an instance of this object without getting an exception? </li>    <li>Can I invoke this method on that instance without getting an exception? </li>    <li>Can I verify that some call into the system happened? </li> </ul>  <p>You make the invocation, get an exception (because there is a dependency) and look at the stack trace. choose a location in the stack trace and disable it. Then try the invocation again. if you don’t get an exception the perimeter is good for that invocation, so you can move to trying out other methods on that object.</p>  <p>in a future post I will show the process using CThru, and how you end up with something close to a domain specific test framework after you’re done creating the perimeter you need.</p><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7389607" width="1" height="1"><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iserializable?a=TQpxQ48uiCk:EKf4BG0zTCQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Iserializable?a=TQpxQ48uiCk:EKf4BG0zTCQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Iserializable?a=TQpxQ48uiCk:EKf4BG0zTCQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iserializable?i=TQpxQ48uiCk:EKf4BG0zTCQ:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iserializable/~4/TQpxQ48uiCk" height="1" width="1"/>]]></description>
   <dc:creator>Roy Osherove</dc:creator>
   <dc:date>3/19/2010 10:57:25 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[How to Backup a SQL Express Database]]></title>
   <link>http://feedproxy.google.com/~r/codecapers/~3/3R-mnSfPxkM/post.aspx</link>
   <description><![CDATA[<p><a href="http://www.codecapers.com/image.axd?picture=bigstockphoto_Hard_Disk_On_Fire_3005619sm.jpg"><img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bigstockphoto_Hard_Disk_On_Fire_3005619sm" border="0" alt="bigstockphoto_Hard_Disk_On_Fire_3005619sm" align="right" src="http://www.codecapers.com/image.axd?picture=bigstockphoto_Hard_Disk_On_Fire_3005619sm_thumb.jpg" width="167" height="240" /></a> There are a lot of programs that ship with SQL Express databases. For example, when you install development tools like Visual Studio or SharePoint it is common practice to bundle it with an express version of SQL Server. </p>  <p>Most of the time when SQL Express is bundled with an application it is done with the intention that you are going to be using it for development purposes only. However, once a SQL instance is installed on a workstation people will start using it for other reasons. Before you know it, a critical application will be running on your SQL Express instance. The major problem with SQL Express is that it has no SQL Agent which is used to schedule jobs like a full backup. However, you need to backup your mission critical database on a regular basis! In order to address this problem, I have developed this handy batch file that you can use:</p>  <pre class="brush: xml;">@echo off
SET BACKUP_DIR=D:\Backups
SET SERVER=localhost

for /f &quot;tokens=2&quot; %%d in ('echo %date%') do (
   for /f &quot;tokens=1-3 delims=/&quot; %%j in ('echo %%d') do (
      set month=%%j
      set day=%%k
      set year=%%l
   )
)
set /a day=%day%-1
if %day% lss 10 (
   set day=0%day%
)
set year=%year:~2,3%
set mydate=%month%%day%%year%
for /f &quot;tokens=1-2 delims=: &quot; %%a in ('time /t') do set XTime=%%a%%b

sqlcmd -S %SERVER% -d master -Q &quot;exec sp_msforeachdb 'BACKUP DATABASE [?] TO DISK=''%BACKUP_DIR%\?.Full.%mydate%.%XTIME%.bak'''</pre>

<p>
  <br /><strong>Note:</strong> Before you run this program you will probably want to change the BACKUP_DIR and the SERVER parameters. In addition, if you are using SQL Authentication instead of windows you may want to specify the -U (login) and -P (password) switches for the sqlcmd.</p>

<p>To make this process run on a regular basis you can schedule a job via the windows scheduler. Just make sure that if you run this job on a regular frequency job everyday that you develop a routine which can purge the expired backups. <a href="http://blogs.technet.com/heyscriptingguy/archive/2006/11/17/how-can-i-delete-all-the-bak-files-in-a-folder-that-are-more-than-7-days-old.aspx" target="_blank">Here is a script</a> that I found on the <a href="http://blogs.technet.com/heyscriptingguy" target="_blank">Hey, Scripting Guy! Blog</a> which will take care of that problem. </p>

<p>Finally, if you are running this on a SQL 2000 environment then you will probably need to use the osql command instead of sqlcmd. osql was replaced with sqlcmd starting with SQL 2005. </p>
<p><a href="http://feedads.g.doubleclick.net/~a/TZqyMCt7u-d9i2t4o1MaA_FAdtE/0/da"><img src="http://feedads.g.doubleclick.net/~a/TZqyMCt7u-d9i2t4o1MaA_FAdtE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TZqyMCt7u-d9i2t4o1MaA_FAdtE/1/da"><img src="http://feedads.g.doubleclick.net/~a/TZqyMCt7u-d9i2t4o1MaA_FAdtE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecapers?a=3R-mnSfPxkM:46EIuVyZF5c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecapers?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecapers?a=3R-mnSfPxkM:46EIuVyZF5c:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/codecapers?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecapers?a=3R-mnSfPxkM:46EIuVyZF5c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecapers?i=3R-mnSfPxkM:46EIuVyZF5c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecapers?a=3R-mnSfPxkM:46EIuVyZF5c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecapers?i=3R-mnSfPxkM:46EIuVyZF5c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecapers?a=3R-mnSfPxkM:46EIuVyZF5c:G79ilh31hkQ"><img src="http://feeds.feedburner.com/~ff/codecapers?d=G79ilh31hkQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecapers/~4/3R-mnSfPxkM" height="1" width="1"/>]]></description>
   <dc:creator>Michael Ceranski</dc:creator>
   <dc:date>3/19/2010 9:14:17 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[JavaScript function to Redirects parent of IFrame to specified URL]]></title>
   <link>http://geekswithblogs.net/mnf/archive/2010/03/19/javascript-function-to-redirects-parent-of-iframe-to-specified-url.aspx</link>
   <description><![CDATA[<p><span class="Apple-style-span" style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'Times New Roman'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-family: Verdana; font-size: 13px">    /// &lt;summary&gt;<br />
   /// Redirects parent of IFrame to specified URL<br />
   /// If current page doesn't have parent, redirect itself<br />
   /// &lt;/summary&gt;<br />
   /// &lt;param name="page"&gt;&lt;/param&gt;<br />
   /// &lt;param name="url"&gt;&lt;/param&gt;<br />
   public static void NavigateParentToUrl(Page page, string url)<br />
   {<br />
    String script = @"<br />
try<br />
{<br />
var sUrl='" + url + @"';<br />
if (self.parent.frames.length != 0)<br />
    self.parent.location=sUrl;<br />
else<br />
  self.location = sUrl;<br />
}<br />
catch (Exception) {}<br />
";<br />
    page.ClientScript.RegisterStartupScript(TypeForClientScript(), MethodBase.GetCurrentMethod().Name, script, true);<br />
   }<br />
   /// &lt;summary&gt;</span></span></p><p><a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138611"><img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138611" border="0"/></a></p><iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;PageID=31016&amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No>
<script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Browser=NETSCAPE4&amp;NoCache=True&PageID=31016&amp;SiteID=1"></script>
<noscript><a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Click&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" target="_blank">
<img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" width="1" height="1" border="0"  alt=""></a>
</noscript>
</iframe>
<img src="http://geekswithblogs.net/mnf/aggbug/138611.aspx" width="1" height="1" />]]></description>
   <dc:creator>Michael Freidgeim</dc:creator>
   <dc:date>3/19/2010 4:37:37 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Getting Started with Employee Info Starter Kit (v4.0.0)]]></title>
   <link>http://geekswithblogs.net/joycsharp/archive/2010/03/19/getting-started-with-employee-info-starter-kit-v4.0.0.aspx</link>
   <description><![CDATA[<p><font size="2">The new release of Employee Info Starter Kit contains lots of exciting features available in Visual Studio 2010 and .NET 4.0. To get started with the new version, you will need less than 5 minutes.</font></p>  <h4>Minimum System Requirements</h4>  <p><font size="2">Before getting started, please make sure you have installed Visual Studio 2010 RC (or higher) and Sql Server 2005 Express edition (or higher installed on your machine.</font></p>  <h4>Running the Starter Kit for First Time</h4>  <p><font size="2">1. Download the starter kit 4.0.0 version form </font><a href="http://eisk.codeplex.com/releases/view/42206#DownloadId=111599"><font size="2">here</font></a><font size="2"> and extract it.</font></p>  <p><font size="2">2. Go to &lt;extraction folder&gt;\Source\Eisk.Solution and click the solution file</font></p>  <p><font size="2">3. From the solution explorer, right click the “Eisk.Web” web site project node and select “Set as Startup Project” and hit Ctrl + F5</font></p>  <p><font size="2"><a href="http://weblogs.asp.net/blogs/ashraful/ScreenHunter_05Mar.1916.39_5768B891.gif"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ScreenHunter_05 Mar. 19 16.39" border="0" alt="ScreenHunter_05 Mar. 19 16.39" src="http://weblogs.asp.net/blogs/ashraful/ScreenHunter_05Mar.1916.39_thumb_34C47A16.gif" width="450" height="484" /></a> </font></p>  <p><font size="2">4. You will be prompted to install database, just follow the instruction. </font></p>  <p><font size="2">That’s it! You are ready to use this starter kit.</font></p>  <p><a href="http://weblogs.asp.net/blogs/ashraful/image_193F7813.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/ashraful/image_thumb_5613F9E5.png" width="244" height="142" /></a> </p>  <h4>Running the Tests</h4>  <p><font size="2">Employee Info Starter Kit contains a infrastructure for Integration and Unit Testing, by utilizing cool test tools in Visual Studio 2010. Once you complete the steps, mentioned above, take a minute to run the test cases on the fly.</font></p>  <p><font size="2">1. From the solution explorer, to go “Solution Items\e-i-s-k-2010.vsmdi” and click it. You will see the available Tests in the Visual Studio Test Lists. Select all, except the “Load Tests” node (since Load Tests takes a bit time)</font></p>  <p><font size="2">2. Click “Run Checked Tests” control from the upper left corner.</font></p>  <p><a href="http://weblogs.asp.net/blogs/ashraful/ScreenHunter_07Mar.1916.41_5EB45271.gif"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ScreenHunter_07 Mar. 19 16.41" border="0" alt="ScreenHunter_07 Mar. 19 16.41" src="http://weblogs.asp.net/blogs/ashraful/ScreenHunter_07Mar.1916.41_thumb_29C74D34.gif" width="644" height="271" /></a> </p>  <p><font size="2">You will see the tests running and finally the status of the tests, which indicates the current health of you application from different scenarios.</font></p>  <p><a href="http://weblogs.asp.net/blogs/ashraful/ScreenHunter_08Mar.1916.44_07230EB9.gif"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ScreenHunter_08 Mar. 19 16.44" border="0" alt="ScreenHunter_08 Mar. 19 16.44" src="http://weblogs.asp.net/blogs/ashraful/ScreenHunter_08Mar.1916.44_thumb_6B9E0CB5.gif" width="251" height="484" /></a> </p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:edad2e1e-f1bc-4eaa-8682-53c7c6e9e71b" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/asp.net" rel="tag">asp.net</a>,<a href="http://technorati.com/tags/architecture" rel="tag">architecture</a>,<a href="http://technorati.com/tags/starter+kit" rel="tag">starter kit</a>,<a href="http://technorati.com/tags/employee+info+starter+kit" rel="tag">employee info starter kit</a>,<a href="http://technorati.com/tags/visual+studio+2010" rel="tag">visual studio 2010</a>,<a href="http://technorati.com/tags/.net+4.0" rel="tag">.net 4.0</a>,<a href="http://technorati.com/tags/entity+framework" rel="tag">entity framework</a></div><p><a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138607"><img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138607" border="0"/></a></p><iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;PageID=31016&amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No>
<script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Browser=NETSCAPE4&amp;NoCache=True&PageID=31016&amp;SiteID=1"></script>
<noscript><a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Click&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" target="_blank">
<img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" width="1" height="1" border="0"  alt=""></a>
</noscript>
</iframe>
<img src="http://geekswithblogs.net/joycsharp/aggbug/138607.aspx" width="1" height="1" />]]></description>
   <dc:creator>Mohammad Ashraful Alam</dc:creator>
   <dc:date>3/19/2010 3:48:53 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Proxying and parallelizing processes]]></title>
   <link>http://feedproxy.google.com/~r/bugsquash/~3/lpG-41nVroE/proxying-and-parallelizing-processes.html</link>
   <description><![CDATA[<p>Some code just flat out refuses to run multi-threaded. Like <a href="http://geckofx.org">GeckoFX</a>. It's a great project, and I found it to be much more reliable than WebBrowser (aka IE), but it just <a href="http://geckofx.org/viewtopic.php?pid=3180">won't run multi-threaded</a> (or at least me and several other people haven't figured out how)</p>  <p>I had to write some CPU-intensive, non-interactive code involving GeckoFX, so parallelization was a must. Well, when multi-threading won't fly, multi-processing (as in launching code on a separate process instead of a separate thread) can be a viable alternative. This does complicate RPC a bit but we can tuck this under a <a href="http://www.castleproject.org/dynamicproxy/index.html">proxy</a> that serializes parameters and then gets the return value through a named pipe:</p> <!-- code formatted by http://manoli.net/csharpformat/ -->  <pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> ProcessInterceptor : IInterceptor {
    ... 

    <span class="kwrd">public</span> <span class="kwrd">void</span> Intercept(IInvocation invocation) {
        var pipename = Guid.NewGuid().ToString();
        var procArgs = <span class="kwrd">new</span> List&lt;<span class="kwrd">string</span>&gt; {
            Quote(invocation.TargetType.AssemblyQualifiedName),
            Quote(invocation.MethodInvocationTarget.Name),
            pipename,
        };
        procArgs.AddRange(invocation.Arguments.Select(a =&gt; Serialize(a)));
        var proc = <span class="kwrd">new</span> Process {
            StartInfo = {
                FileName = <span class="str">&quot;runner.exe&quot;</span>,
                Arguments = String.Join(<span class="str">&quot; &quot;</span>, procArgs.ToArray()),
                UseShellExecute = <span class="kwrd">false</span>,
                CreateNoWindow = <span class="kwrd">true</span>,
            }
        };
        <span class="kwrd">using</span> (var pipe = <span class="kwrd">new</span> NamedPipeServerStream(pipename, PipeDirection.In)) {
            proc.Start();
            pipe.WaitForConnection();
            var r = bf.Deserialize(pipe);
            r = r.GetType().GetProperty(<span class="str">&quot;Value&quot;</span>).GetValue(r, <span class="kwrd">null</span>);
            proc.WaitForExit();
            <span class="kwrd">if</span> (proc.ExitCode == 0) {
                invocation.ReturnValue = r;
            } <span class="kwrd">else</span> {
                var ex = (Exception) r;
                <span class="kwrd">throw</span> <span class="kwrd">new</span> Exception(<span class="str">&quot;Error in external process&quot;</span>, ex);
            }
        }
    }
}</pre>

<p>And that &quot;runner.exe&quot; thing is the host, just a console app that is responsible for deserializing parameters, calling the method, managing exceptions and then send back the return value (if any):</p>
<!-- code formatted by http://manoli.net/csharpformat/ -->

<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> Runner { 
    ... 
    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">int</span> Main(<span class="kwrd">string</span>[] args) { 
        var pipename = args[2]; 
        <span class="kwrd">using</span> (var pipe = <span class="kwrd">new</span> NamedPipeClientStream(<span class="str">&quot;.&quot;</span>, pipename, PipeDirection.Out)) { 
            pipe.Connect(); 
            <span class="kwrd">try</span> { 
                var type = Type.GetType(args[0]); 
                var method = type.GetMethod(args[1]); 
                var instance = Activator.CreateInstance(type); 
                var parameters = args.Skip(3).Select(p =&gt; lf.Deserialize(p)).ToArray(); 
                var returnValue = method.Invoke(instance, parameters); 
                bf.Serialize(pipe, <span class="kwrd">new</span> Result { Value = returnValue }); 
                <span class="kwrd">return</span> 0; 
            } <span class="kwrd">catch</span> (Exception e) { 
                bf.Serialize(pipe, <span class="kwrd">new</span> Result { Value = e }); 
                <span class="kwrd">return</span> 1; 
            } 
        } 
    } 
}</pre>

<p>And now we can parallelize. Here's a silly example (can't post the actual GeckoFX process, it's proprietary stuff):</p>
<!-- code formatted by http://manoli.net/csharpformat/ -->

<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> TargetCode { 
    <span class="kwrd">public</span> <span class="kwrd">virtual</span> <span class="kwrd">int</span> Add(<span class="kwrd">int</span> a, <span class="kwrd">int</span> b) { 
        <span class="kwrd">return</span> a + b; 
    } 
}

[Test] 
<span class="kwrd">public</span> <span class="kwrd">void</span> Parallel() { 
    var generator = <span class="kwrd">new</span> ProxyGenerator(); 
    var t = generator.CreateClassProxy&lt;TargetCode&gt;(<span class="kwrd">new</span> ProcessInterceptor()); 
    var r = Enumerable.Range(0, 100).AsParallel().Sum(i =&gt; t.Add(i, i)); 
    Assert.AreEqual(9900, r); 
}</pre>

<p>This will launch a separate process for each iteration. On a dual-core CPU, the <a href="http://msdn.microsoft.com/en-us/library/dd460717(VS.100).aspx">Task Parallel Library</a> will launch by default at most two threads to run in parallel, so you would have at most two runner.exe instances running at the same time, thus achieving multi-process parallelism.</p>

<p>Now this is not a general solution, it worked for my specific usecase but it has several caveats:</p>

<ul>
  <li>Doesn't support generic or overloaded methods (it shouldn't be hard to implement) </li>

  <li>Target code must be interceptable (virtual, non-sealed, etc) </li>

  <li>Target code must have parameterless constructor (it shouldn't be hard to lift this restriction)</li>

  <li>Method parameters are passed through command-line so they can't be very long. (it shouldn't be hard to lift this restriction)</li>

  <li>Target code should be practically stand-alone since the host won't have the same app.config as it parent, nor any other previous initialization, etc.</li>

  <li>The target code should be sufficiently long-running to justify the overhead of proxying, reflection, serialization and process launching. </li>
</ul>

<p>Full code is <a href="http://code.google.com/p/mausch/source/browse/trunk/ProcessProxy">here</a>.</p>  <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8643857899806162280-8392725436889686556?l=bugsquash.blogspot.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/TGYwYGBtKCIu5OEObMDiarGymUA/0/da"><img src="http://feedads.g.doubleclick.net/~a/TGYwYGBtKCIu5OEObMDiarGymUA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TGYwYGBtKCIu5OEObMDiarGymUA/1/da"><img src="http://feedads.g.doubleclick.net/~a/TGYwYGBtKCIu5OEObMDiarGymUA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/bugsquash/~4/lpG-41nVroE" height="1" width="1"/>]]></description>
   <dc:creator>Mauricio Scheffer</dc:creator>
   <dc:date>3/18/2010 10:37:49 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Book review: User Stories Applied: For Agile Software Development by Mike Cohn]]></title>
   <link>http://feedproxy.google.com/~r/TheDynamicProgrammer/~3/trPiOTwSwM4/BookReviewUserStoriesAppliedForAgileSoftwareDevelopmentByMikeCohn.aspx</link>
   <description><![CDATA[<body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I pick up <a href="http://is.gd/aO7t2" target="_blank">the book</a> with a lot of
interesting an enthusiasm. My goals were to learn techniques and proper ways to write
down user stories, improve my estimation techniques and been able to apply some of
those techniques back at work.
</p>
        <p>
The book delivers in it’s promise. Some of the things I hope to use at work are the
story writing workshops and user role modelling.
</p>
        <p>
User role modelling was one of the most interesting techniques for me. I also enjoyed
the guidance for writing good user stories. 
</p>
        <p>
Mike Cohn takes a very pragmatic approach to some issues usually very controversial
in the agile community, like using sticky notes or software to write stories. I particulary
liked that.
</p>
        <p>
I was a bit disappointed with the third part of the book but I think that depends
on the background of the reader. The catalogue of Story smells is a must read though.
</p>
        <p>
The last part of the book is an example that walk us on how to come up with the user
roles, write the stories, estimate them, create a release plan and acceptance tests.
If you are working in an agile team and have some input on the writing of stories
I will recommend that read this book.
</p>
        <img width="0" height="0" src="http://blog.dynamicprogrammer.com/aggbug.ashx?id=0f23082e-a680-4f6f-a02d-cb0f569c1d85"></img>
      </body>
<p><a href="http://feedads.g.doubleclick.net/~a/L8u4IFoOiVp09JjzgeuNpq8m6C0/0/da"><img src="http://feedads.g.doubleclick.net/~a/L8u4IFoOiVp09JjzgeuNpq8m6C0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/L8u4IFoOiVp09JjzgeuNpq8m6C0/1/da"><img src="http://feedads.g.doubleclick.net/~a/L8u4IFoOiVp09JjzgeuNpq8m6C0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/TheDynamicProgrammer/~4/trPiOTwSwM4" height="1" width="1"/>]]></description>
   <dc:creator>Hernan Garcia</dc:creator>
   <dc:date>3/18/2010 9:01:03 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Parallelism in .NET – Part 15, Making Tasks Run: The TaskScheduler]]></title>
   <link>http://feedproxy.google.com/~r/ReedCopsey/~3/q4KzxNmFSI8/</link>
   <description><![CDATA[In my introduction to the Task class, I specifically made mention that the Task class does not directly provide it’s own execution.&#160; In addition, I made a strong point that the Task class itself is not directly related to threads or multithreading.&#160; Rather, the Task class is used to implement our decomposition of tasks.&#160; 
Once [...]]]></description>
   <dc:creator>Reed Copsey, Jr.</dc:creator>
   <dc:date>3/18/2010 6:52:28 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Welcome to stateofidleness]]></title>
   <link>http://stateofidleness.com/?p=23</link>
   <description><![CDATA[]]></description>
   <dc:creator>Steve</dc:creator>
   <dc:date>3/18/2010 4:47:16 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[dotTrace 4.0 Puts on a Fine Performance]]></title>
   <link>http://blogs.jetbrains.com/dotnet/2010/03/dottrace-40-puts-on-a-fine-performance/</link>
   <description><![CDATA[Front seats at the ballet: $200
Front seats at the ball game: $100
Quickly spotting bottlenecks in your .NET application: priceless
There are some performances money can buy. For everything else, there&#8217;s dotTrace 4.0 Performance.
Jokes aside, here’s what dotTrace 4.0 Performance, currently in Beta, brings to the table.
Support for:

Visual Studio 2005, 2008, and 2010
.NET Compact Framework 3.5
.NET Framework [...]]]></description>
   <dc:creator>JetBrains, Inc.</dc:creator>
   <dc:date>3/18/2010 3:05:28 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Agile testing in finance: London, mid July]]></title>
   <link>http://gojko.net/2010/03/18/agile-testing-in-finance-london-mid-july/</link>
   <description><![CDATA[I&#8217;m putting together a mini-conference on agile testing in finance in London in July. What would you like to see or learn at such an event?
]]></description>
   <dc:creator>gojko</dc:creator>
   <dc:date>3/18/2010 1:25:05 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Personal | Going For A Long Drive]]></title>
   <link>http://geekswithblogs.net/jjulian/archive/2010/03/18/138598.aspx</link>
   <description><![CDATA[<p><img src="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/PastedGraphic1.stgODvXEtmBj.jpg" alt="PastedGraphic1.stgODvXEtmBj.jpg" width="219" height="199" /></p><p>This weekend, we were planning on going to Mt. Rushmore, but with the weather the way it is, we decided to head south instead.  So what are we going to do?  A tour of different restaurants on the show Diners, Drive-ins, and Dives.  Not very original I know since there are web sites and iPhone apps dedicated to locating the establishments, but it definitely sounds like it could be some fun.  We are going to leave KC tonight and go through St. Louis, Memphis, Little Rock, Dallas, Oklahoma City, and back to KC.  The kiddos are excited and we have plenty of movies, coloring books, etc in the car for the trip.  This will be the first time we will get to use our turn around seats in the mini-van with our pull out table.  </p><p>I will have my laptop and phone if anything goes wrong with the site while I am gone and John will be back in KC as well.  I hope to pushing some photos and reviews of the restaurants as we travel.  </p>

Related Tags: <a href="http://technorati.com/tag/blogging" rel="tag">blogging</a>, <a href="http://technorati.com/tag/Diners, Drive-ins, and Dives" rel="tag">Diners, Drive-ins, and Dives</a>, <a href="http://technorati.com/tag/Vacation" rel="tag">Vacation</a><p><a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138598"><img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&u=138598" border="0"/></a></p><iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;PageID=31016&amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No>
<script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Browser=NETSCAPE4&amp;NoCache=True&PageID=31016&amp;SiteID=1"></script>
<noscript><a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Click&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" target="_blank">
<img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;Task=Get&amp;Mode=HTML&amp;SiteID=1&amp;PageID=31016" width="1" height="1" border="0"  alt=""></a>
</noscript>
</iframe>
<img src="http://geekswithblogs.net/jjulian/aggbug/138598.aspx" width="1" height="1" />]]></description>
   <dc:creator>Jeff Julian</dc:creator>
   <dc:date>3/18/2010 11:31:13 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[My first Windows Phone 7 App: Getting SharePoint Content]]></title>
   <link>http://weblogs.asp.net/jan/archive/2010/03/17/my-first-windows-phone-7-app-getting-sharepoint-content.aspx</link>
   <description><![CDATA[<P>Earlier this week at the <A href="http://live.visitmix.com/" mce_href="http://live.visitmix.com">Mix10 conference</A>, Microsoft announced the developer story of the Windows Phone 7 Series. As expected, it’s all about Silverlight! For all the details I highly recommend to watch the recorded keynotes (<A href="http://live.visitmix.com/MIX10/Sessions/KEY01" mce_href="http://live.visitmix.com/MIX10/Sessions/KEY01">day 1</A>, <A href="http://live.visitmix.com/MIX10/Sessions/KEY02" mce_href="http://live.visitmix.com/MIX10/Sessions/KEY02">day 2</A>).</P>
<P>Tonight I could resist trying to build my very first Windows Phone 7 application; the traditional Hello World thingy. Because the developer tools (Visual Studio 2010 and the free Visual Studio 2010 Express) have pretty nice templates, that wasn’t much of a challenge. So I tried to build something real: an application that can display SharePoint 2010 content, for example items from an announcements list. I head to work my way around some limitations because both SharePoint 2010 and the developer tools are still in beta and CTP, but finally I got it working! Because of the many workarounds, the code is not yet ready for publication, but I’ve created a small screencast so you can see the result. To be continued! :-)</P>
<P>
<OBJECT width=640 height=480><PARAM NAME="allowfullscreen" VALUE="true"><PARAM NAME="allowscriptaccess" VALUE="always"><PARAM NAME="movie" VALUE="http://vimeo.com/moogaloop.swf?clip_id=10244318&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1">
<embed src="http://vimeo.com/moogaloop.swf?clip_id=10244318&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480"></embed></OBJECT>
<P><A href="http://vimeo.com/10244318">Windows Phone 7 POC: Getting SharePoint Data</A> from <A href="http://vimeo.com/user996044">Jan Tielens</A> on <A href="http://vimeo.com/">Vimeo</A>.</P><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7387013" width="1" height="1">]]></description>
   <dc:creator>Jan Tielens</dc:creator>
   <dc:date>3/17/2010 3:56:11 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[MIX 2010 Covert Operations Day 4]]></title>
   <link>http://feedproxy.google.com/~r/LooselyCoupledHumanCodeFactory/~3/IV7pt3GnN2E/post.aspx</link>
   <description><![CDATA[<p>The Microsoft Azure Cloud is looking pretty solid compared to just a few months ago.&#160; The storage mechanisms in the cloud now are blobs, drives, tables, and queues.&#160; Also, not to forget, is SQL Azure.&#160; I won?t dive too much into that, as most will know what SQL Server is, and SQL Azure is pretty much just a hosted SQL Server instance.</p>  <p>The blobs are generally geared toward holding binary type data, images and those types of things.&#160; The tables are huge key value type stores.&#160; The drives are VHD, which are virtual hard drives.&#160; The queues are just queues used for workflow and also to store messages back and forth in a queue.</p>  <p>These methods are accessible via REST, which makes application development against the storage services extremely easy.&#160; This is a big plus point as REST services are a preferred way to connect and interact with data storage.&#160; It also sets up <a href="http://www.microsoft.com/silverlight" target="_blank">Silverlight</a> as a prime framework to utilize services.</p>  <p>Day 4 I pretty much dedicated to reviewing these cloud services and finishing up work related development.&#160; With that, I'm wrapping up my MIX 2010 blog coverage.&#160; Now back to your regularly scheduled programming.</p><div class="socialBookmarksContainer"><a rel="nofollow" href="http://digg.com/submit/?url=http://adronbhall.com/blogs/technology__software_development/post/2010/03/17/MIX-2010-Covert-Operations-Day-4.aspx" target="_blank" title="Digg It!"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /></a><a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://adronbhall.com/blogs/technology__software_development/post/2010/03/17/MIX-2010-Covert-Operations-Day-4.aspx&amp;title=MIX 2010 Covert Operations Day 4" target="_blank" title="DZone It!"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /></a><a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://adronbhall.com/blogs/technology__software_development/post/2010/03/17/MIX-2010-Covert-Operations-Day-4.aspx" target="_blank" title="StumbleUpon"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /></a><a rel="nofollow" href="http://technorati.com/ping?url=http://adronbhall.com/blogs/technology__software_development/" target="_blank" title="Technorati"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /></a><a rel="nofollow" href="http://reddit.com/submit?url=http://adronbhall.com/blogs/technology__software_development/post/2010/03/17/MIX-2010-Covert-Operations-Day-4.aspx&amp;title=MIX 2010 Covert Operations Day 4" target="_blank" title="Reddit"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /></a><a rel="nofollow" href="http://del.icio.us/post?url=http://adronbhall.com/blogs/technology__software_development/post/2010/03/17/MIX-2010-Covert-Operations-Day-4.aspx&amp;title=MIX 2010 Covert Operations Day 4" target="_blank" title="Del.icio.us"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /></a><a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://adronbhall.com/blogs/technology__software_development/post/2010/03/17/MIX-2010-Covert-Operations-Day-4.aspx" target="_blank"title="NewsVine"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /></a><a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /></a><a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"><img src="/blogs/technology__software_development/themes/darkblog/images/socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /></a></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?i=IV7pt3GnN2E:vg6kuDBsGxY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?i=IV7pt3GnN2E:vg6kuDBsGxY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?i=IV7pt3GnN2E:vg6kuDBsGxY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:KwTdNBX3Jqk"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?i=IV7pt3GnN2E:vg6kuDBsGxY:KwTdNBX3Jqk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?i=IV7pt3GnN2E:vg6kuDBsGxY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?a=IV7pt3GnN2E:vg6kuDBsGxY:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/LooselyCoupledHumanCodeFactory?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/LooselyCoupledHumanCodeFactory/~4/IV7pt3GnN2E" height="1" width="1"/>]]></description>
   <dc:creator>Adron Hall</dc:creator>
   <dc:date>3/17/2010 3:30:18 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Adrenaline Junkies and Template Zombies]]></title>
   <link>http://freekleemhuis.com/2010/03/17/adrenaline-junkies-and-template-zombies/</link>
   <description><![CDATA[I&#8217;ve followed Tom DeMarco and Tim Lister ever since I read Peopleware, a great book about building great software teams. When a new book by these authors (and a few others) came out last year, I ordered it straight away. It&#8217;s called Adrenaline Junkies and Template Zombies, and it&#8217;s a great list of patterns of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=freekleemhuis.com&blog=2670743&post=404&subd=freekleemhuis&ref=&feed=1" />]]></description>
   <dc:creator>Freek Leemhuis</dc:creator>
   <dc:date>3/17/2010 1:50:24 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[MIX10 – Windows 7 Series Phone Architecture]]></title>
   <link>http://feedproxy.google.com/~r/RyanRinaldi/~3/TVq7HqSKZY4/</link>
   <description><![CDATA[<p>Rearchitected from the ground up</p>  <ul>   <li>Hardware Architecture</li>    <ul>     <li>Capacitive touch – 4 or more contact points</li>      <li>Sensors </li>      <ul>       <li>GPS</li>        <li>Accelerometers</li>        <li>Compass</li>        <li>Light</li>        <li>Proxmity</li>     </ul>      <li>Camera</li>      <li>Multimedia</li>      <li>Memory</li>      <li>GPU</li>      <li>CPU</li>      <li>Only 2 resolutions</li>   </ul>    <li>Software Architecture</li>    <ul>     <li>Built on WinCE</li>      <li>MS is writing almost all of the device drivers instead of OEM</li>      <li>App updating, Licensing built in</li>      <li>New UI model</li>      <ul>       <li>Shell frame</li>        <li>Direct3D</li>     </ul>      <li>XBox LIVE, Bing, Location, Push notifications</li>      <li>Apps all built on CLR (no unmanaged code)</li>      <li>Silverlight, XNA, HTMl/JavaScript</li>      <li>Frameworks built for you to access all phone features</li>   </ul>    <li>App Model</li>    <ul>     <li>What is an app?</li>      <ul>       <li>Uniquely identifiable and servicable product packaged as XAP</li>     </ul>      <li>Application deployment</li>      <ul>       <li>Windows phone marketplace</li>     </ul>      <li>Application license</li>      <ul>       <li>Crypto-verifable object issued to grant rights to the applications</li>     </ul>      <li>Phone only installs .xap pakcages signed by marketplace</li>      <li>phone handles all aspects of .xap installation based on manifest</li>      <ul>       <li>you cannot make arbitrary changes to the phone during install</li>     </ul>      <li>Users control install, update and uninstall, while the marketplace controls revocation</li>      <li>Phone only runs apps that have a valid marketplace license</li>      <li>Apps are sandboxed into separate security accounts while installed and at runtime</li>      <li>Resource allocation policy keeps the foreground app responsive</li>      <li>Resource management policy ensures the user can always use Start to run an app.</li>      <li>App hosting</li>      <ul>       <li>Each app executes inside an isolated, least-privileged host process</li>        <li>all app code is transparent and CLS-verifiable</li>        <li>Frameworks enable app code to interact with app model, UI model, phone functionality</li>     </ul>      <li>Frameworks</li>      <ul>       <li>CLR</li>        <li>Silverlight </li>        <li>Device &amp; phone</li>        <li>Cloud</li>     </ul>   </ul>    <li>UI Model</li>    <ul>     <li>Concepts</li>      <ul>       <li>Application – UI and logic for functionality exposed through pages</li>        <li>Page&#160; a single screen of user interaction elements</li>        <li>Session – An ordered workflow of user interactions spanning applications</li>     </ul>      <li>UI metaphor – Web</li>      <li>Sessions can be paged out when inactive.</li>      <li>Page State – Contains data that describes an instance of a page, analogous to browser cookie</li>      <ul>       <li>Allows the phone to discard all UI info when app is inactive</li>        <li>Rehydrates page ui based on Page State info</li>     </ul>      <li>Graphics composition</li>      <ul>       <li>Each page gets it’s own layer on top of the Direct3D&#160; surface</li>     </ul>   </ul>    <li>Cloud Integration Services</li>    <ul>     <li>built-in user experiences and APIs</li>      <li>Familar APIs for interactingwith existing web 2.0 services</li>      <li>Rich support for incorporating custom web services</li>      <li>Location Service</li>      <ul>       <li>support for consuming GPS, AGPS and Wi-Fi based location</li>        <li>reverse geo-coding</li>     </ul>      <li>Push notification service</li>      <ul>       <li>Managed APIs for notification-driven interaction</li>        <li>When battery is low the service may shut down</li>        <li>This is not guaranteed message delivery.</li>        <li>Based on the state of the phone, message could be delayed, batched, or dropped.</li>     </ul>      <li>Gamer Services APIs</li>   </ul> </ul>
<p><a href="http://feedads.g.doubleclick.net/~a/GV2UvfU3P4T_L_meUvVQx8sPsuI/0/da"><img src="http://feedads.g.doubleclick.net/~a/GV2UvfU3P4T_L_meUvVQx8sPsuI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GV2UvfU3P4T_L_meUvVQx8sPsuI/1/da"><img src="http://feedads.g.doubleclick.net/~a/GV2UvfU3P4T_L_meUvVQx8sPsuI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=TVq7HqSKZY4:wctV1axW1b4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=TVq7HqSKZY4:wctV1axW1b4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/RyanRinaldi?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/RyanRinaldi?a=TVq7HqSKZY4:wctV1axW1b4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/RyanRinaldi?i=TVq7HqSKZY4:wctV1axW1b4:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></description>
   <dc:creator>Ryan Rinaldi</dc:creator>
   <dc:date>3/17/2010 10:21:04 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Mercurial Conversion from Team Foundation Server]]></title>
   <link>http://weblogs.asp.net/mhawley/archive/2010/03/17/mercurial-conversion-from-team-foundation-server.aspx</link>
   <description><![CDATA[<div style="background-image: url(http://www.eworldui.net/images/blog/twitter.png); padding-bottom: 0px; padding-left: 35px; width: 95%; background-repeat: no-repeat; background-position: left center; height: 32px; padding-top: 5px">   <div style="padding-bottom: 0px; margin: 0px; padding-left: 0.25em; padding-right: 0px; height: 22px; padding-top: 0.25em" class="info"><em>I’m using Twitter. Follow me <a href="http://www.twitter.com/matthawley">@matthawley</a></em> </div> </div>  <p>One of my many (almost) daily tasks when working on the <a href="http://www.codeplex.com/">CodePlex</a> platform since releasing Mercurial as a supported version control system, is converting projects from Team Foundation Server (TFS) to Mercurial. I'm happy to say that of all the conversions I have done since mid-January, the success rate of migrating full source history is about 95%. To get to this success point, I have had to learn and refine several techniques utilizing a few different tools… (<a href="http://blog.eworldui.net/post/2010/03/16/Mercurial-Conversion-from-Team-Foundation-Server.aspx">read more</a>)</p> <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.eworldui.net%2fpost%2f2010%2f03%2f16%2fMercurial-Conversion-from-Team-Foundation-Server.aspx"><img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.eworldui.net%2fpost%2f2010%2f03%2f16%2fMercurial-Conversion-from-Team-Foundation-Server.aspx" /></a><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7386709" width="1" height="1">]]></description>
   <dc:creator>Matt Hawley</dc:creator>
   <dc:date>3/17/2010 10:08:32 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Some Notes On SQL Saturday #44]]></title>
   <link>http://dbalink.wordpress.com/2010/03/16/some-notes-on-sql-saturday-44/</link>
   <description><![CDATA[Few weeks after we officially announced SQLSaturday#44, a couple of event sponsors have signed up so far. 2 or 3 have signed up as swag sponsors (books and software). There are only 5 weeks to go before the event.  This means we need an aggressive campaign to attract more event sponsors. In order for us to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dbalink.wordpress.com&blog=2487604&post=1207&subd=dbalink&ref=&feed=1" />]]></description>
   <dc:creator>Marlon Ribunal</dc:creator>
   <dc:date>3/16/2010 4:10:29 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Announcing Sesame Data Browser]]></title>
   <link>http://weblogs.asp.net/fmarguerie/archive/2010/03/17/announcing-sesame-data-browser.aspx</link>
   <description><![CDATA[<p>At the occasion of <a href="http://live.visitmix.com" mce_href="http://live.visitmix.com">MIX10</a>, which is currently taking place in Las Vegas, I'd like to announce <a href="http://metasapiens.com/sesame/data-browser" mce_href="http://metasapiens.com/sesame/data-browser">Sesame Data Browser</a>.<br>Sesame will be a suite of tools for dealing with data, and Sesame Data Browser will be the first tool from that suite.</p><p><img src="http://madgeek.com/dotnetweblogs/images/SesameLogo350.png" title="Sesame Logo, Data, your way" alt="Sesame Logo, Data, your way" mce_src="http://madgeek.com/dotnetweblogs/images/SesameLogo350.png" border="0" height="160" hspace="1" vspace="1" width="339"><br></p><p>Today, during the second MIX10 keynote, Microsoft demonstrated how they are pushing hard to get <a href="http://odata.org" mce_href="http://odata.org">OData</a> adopted. If you don't know about OData, you can visit the just revamped dedicated website: <a href="http://odata.org" mce_href="http://odata.org">http://odata.org</a>. There you'll find about the OData protocol, which allows you to publish and consume data on the web, the OData SDK (with client libraries for .NET, Java, Javascript, PHP, iPhone, and more), a list of OData producers, and a list of OData consumers.<br>This is where <a href="http://metasapiens.com/sesame/data-browser" mce_href="http://metasapiens.com/sesame/data-browser">Sesame Data Browser</a> comes into play. It's one of the tools you can use today to consume OData.</p><p><img src="http://madgeek.com/dotnetweblogs/images/" mce_src="http://madgeek.com/dotnetweblogs/images/"><a href="http://metasapiens.com/sesame/data-browser" mce_href="http://metasapiens.com/sesame/data-browser"><img src="http://madgeek.com/dotnetweblogs/images/Sesame%20OData%20Browser.png" title="OData Browser" alt="OData Browser" mce_src="http://madgeek.com/dotnetweblogs/images/Sesame OData Browser.png" border="0" height="454" hspace="1" vspace="1" width="636"></a></p><p>I'll let you <a href="http://metasapiens.com/sesame/data-browser" mce_href="http://metasapiens.com/sesame/data-browser">have a look</a>, but be aware that this is just a preview and many additional features are coming soon.<br>Sesame Data Browser is part of a bigger picture than just OData that will take shape over the coming months. Sesame is a project I've been working on for many months now, so what you see now is just a start :-)</p><p>I hope you'll enjoy what you see. <a href="http://weblogs.asp.net/fmarguerie/contact.aspx" mce_href="http://weblogs.asp.net/fmarguerie/contact.aspx">Let me know what you think</a>.<br></p><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7385712" width="1" height="1">]]></description>
   <dc:creator>Fabrice Marguerie</dc:creator>
   <dc:date>3/16/2010 3:53:40 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Exciting product releases (and one disappointing thing) with Mix10]]></title>
   <link>http://weblogs.asp.net/jeff/archive/2010/03/16/exciting-product-releases-and-one-disappointing-thing-with-mix10.aspx</link>
   <description><![CDATA[<p>Sadly, I'm not at Mix this year, for the first time in a few years. It's a little harder to go if you work for Microsoft, oddly enough. And then there's this little guy next to me, who at ten days old really needs his daddy to be around! But oh, the excitement of what Microsoft has in store!<br></p><p> It's great to finally see all of these major releases coming together for Microsoft developer products. There is a great deal of excitement among people internally no matter where you work, because there is so much cool stuff in the pipe. In case you live under a rock...</p><ul><li>Visual Studio 2010 - Great to see all of the positive feedback on the Twitter and what not. I've been using it on one of my home products for awhile, and I really like it. The newer nightly builds of ReSharper also seem to be gaining speed in quality as well. I like the new debugging features, and the text readability is not imagined. Love it.</li><li>Silverlight 4 - I've been running a couple of minor SL3 apps on my personal sites for awhile now, and I'm thrilled with the platform. With a couple of key concepts down, .NET folk like you and me can do some stellar things with this, and if you're a Mac nerd (like me), it's all kinds of awesome to be able to build stuff for it without the agony of Objective-C and X Code.</li><li>Windows Phone 7 Series - A few weeks ago you got to see the shiny new UI that went beyond the icon grid, and now you've got the developer story as well. That I can adapt my existing Silverlight apps with minimal effort to work on the phone is pretty powerful. Millions of .NET devs just because phone developers, using the tools they already know. How great is that?</li><li>ASP.NET MVC2 - The final bits shipped last week, and there was much rejoicing. I love this framework because of the testability and the real ability to get to the true mechanics of HTTP. The other cool thing is the speed at which the framework has evolved. v2 in less than a year is pretty "un-Microsoft" in a lot of eyes.</li></ul>The video of keynotes and sessions is starting to appear on <a href="http://live.visitmix.com/videos" target="_blank" mce_href="http://live.visitmix.com/videos">the Mix site</a>, but for reasons I can't understand, they're WMV downloads. For real? Not that helpful for Mac folk. Why wouldn't they be using a Silverlight player?<br><br>In any case, the thing that continues to motivate me is that getting what you imagine on to the Internet gets easier every year. This is not a new revelation for me. I've only been at Microsoft for four months, but I've felt this way for years. I'm thrilled to be a part of it.<br><img src="http://weblogs.asp.net/aggbug.aspx?PostID=7385691" width="1" height="1">]]></description>
   <dc:creator>Jeff Putz</dc:creator>
   <dc:date>3/16/2010 2:54:20 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[San Francisco DotNetNuke User's Group]]></title>
   <link>http://weblogs.asp.net/christoc/archive/2010/03/16/san-francisco-dotnetnuke-user-s-group.aspx</link>
   <description><![CDATA[If you are anywhere in the San Francisco Bay or Silicon Valley area this post is for you. Others are welcome, but you might find the drive a little long depending on where you are. On 3/23/2010 we are going to be holding our first DotNetNuke User’s Group...(<a href="http://weblogs.asp.net/christoc/archive/2010/03/16/san-francisco-dotnetnuke-user-s-group.aspx">read more</a>)<img src="http://weblogs.asp.net/aggbug.aspx?PostID=7385458" width="1" height="1">]]></description>
   <dc:creator>Chris Hammond</dc:creator>
   <dc:date>3/16/2010 12:16:35 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Mix10 Keynote: Jetzt zu haben]]></title>
   <link>http://www.die.de/blog/PermaLink.aspx?guid=fa957739-e65a-4b02-a3d9-5db113436967</link>
   <description><![CDATA[<p>
   <a href="http://live.visitmix.com/MIX10/Sessions/KEY01">Mix 10 Keynote 1 on demand</a>.
   (Der "echte" Anfang scheint zu fehlen, los gehts bei Minute 30...)
</p>
<img width="0" height="0" src="http://www.die.de/blog/aggbug.ashx?id=fa957739-e65a-4b02-a3d9-5db113436967" />
<br />
<hr />
This weblog is sponsored by <a href="http://www.die.de">D.I.E. CAD und Statik Software
GmbH</a>. ]]></description>
   <dc:creator>thomas woelfer</dc:creator>
   <dc:date>3/16/2010 10:58:30 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Visual Studio 2010 and .NET Framework 4 Release Candidate]]></title>
   <link>http://feedproxy.google.com/~r/SamGentile/~3/pY52HPQlKSE/</link>
   <description><![CDATA[<p>is live at <a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx">http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx</a>&nbsp;for MSSDN subscribers and public tomorrow. More in an upcoming New and Notable.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/SamGentile?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/SamGentile?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/SamGentile?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/SamGentile?d=63t7Ie-LG7Y" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/SamGentile?i=pY52HPQlKSE:CscTuD7b_ag:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/SamGentile?i=pY52HPQlKSE:CscTuD7b_ag:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/SamGentile?i=pY52HPQlKSE:CscTuD7b_ag:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/SamGentile?a=pY52HPQlKSE:CscTuD7b_ag:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/SamGentile?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/SamGentile/~4/pY52HPQlKSE" height="1" width="1"/>]]></description>
   <dc:creator>Sam Gentile</dc:creator>
   <dc:date>3/16/2010 9:31:14 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Doing asynchronous distributed request/response service calls without WCF]]></title>
   <link>http://weblogs.asp.net/ralfw/archive/2010/03/15/doing-asynchronous-distributed-request-response-service-calls-without-wcf.aspx</link>
   <description><![CDATA[In my previous blog post I hopefully was able to demonstrate how low the entry barrier is to asynchronous remote communication. It´s as easy as hosting a service like this &#160;&#160; 10 &#160; using ( var serverSpace = new CcrSpace ().ConfigureAsHost...(<a href="http://weblogs.asp.net/ralfw/archive/2010/03/15/doing-asynchronous-distributed-request-response-service-calls-without-wcf.aspx">read more</a>)<img src="http://weblogs.asp.net/aggbug.aspx?PostID=7384174" width="1" height="1">]]></description>
   <dc:creator>Ralfs Sudelb&#252;cher</dc:creator>
   <dc:date>3/15/2010 11:24:33 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[Amethyst Flash IDE Edges Towards Final Beta]]></title>
   <link>http://www.sapphiresteel.com/Amethyst-Flash-IDE-Edges-Towards</link>
   <description><![CDATA[New features in the latest 'edge' release of Amethyst include a built-in 'project publish' (FTP) capability, 'platform' support in build configurations and an expression evaluator which lets you test out ActionScript expressions (in addition to simple variables) in the watch and immediate windows. The expression evaluator will be further enhanced in our next release. There have also been numerous bug-fixes and improvements to IntelliSense, refactoring and (...)]]></description>
   <dc:creator>Huw Collingbourne</dc:creator>
   <dc:date>3/15/2010 6:13:07 AM</dc:date>
  </item>
  <item>
   <title><![CDATA[70-290 study notes: Shared Folder and NTFS Permissions]]></title>
   <link>http://www.microsoftkit.com/70-290-study-notes-shared-folder-ntfs-permissions/</link>
   <description><![CDATA[Long time ago ,we post mcsa 70-290 notes on managing groups .Today ,My friends experiencing this MCSE  Server 2003 exam have organized his notes on shared Folder and NTFS permissions  to help the candidates to MCSA/MCSE have a better understand of the syllabus or exam notes .Although there are full of 70-290 braindumps [...]]]></description>
   <dc:creator>arshly</dc:creator>
   <dc:date>3/14/2010 9:44:57 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[NET Framework 3.5 & NET Framework 4.0]]></title>
   <link>http://rndinfo.com/dot-net-microsoft-developer-india.html</link>
   <description><![CDATA[The .NET Framework is an integral Windows component that supports building and running the next generation of applications and XML Web services. The .NET Framework is hearty of development now & tomorrow for business applications.<br />
<br />

  Our dot.net consultant hides technical complexity & ensures deliver of better application. Radix has started development on net framework 4.0 to influence best technology for client projects.<br />
<br />

 Explore technical verticals of Radix consulting & development services from following sections.<br />]]></description>
   <dc:creator>Anand Patel</dc:creator>
   <dc:date>3/14/2010 9:42:35 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Career Change]]></title>
   <link>http://feedproxy.google.com/~r/JustSayinMoreWords/~3/HfrYvbPG9mA/</link>
   <description><![CDATA[I can vividly remember the moment I read about Twilio on TechCrunch. I had the same feeling about what I could accomplish using it as I did the first time I tried wifi, or made a call from a cell phone. Suddenly all sorts of ideas/features/applications that weren&#8217;t previously possible suddenly were. I&#8217;ve followed them [...]]]></description>
   <dc:creator>John Sheehan</dc:creator>
   <dc:date>3/14/2010 8:53:42 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[Visual Studios 2010]]></title>
   <link>http://dink.no-ip.info/Blog/post/Visual-Studios-2010.aspx</link>
   <description><![CDATA[<p>Well here we go again another version of Visual Studios and another learning curve.&#160; I’m starting to see the release dates being posted as of the writing of this entry however there is still no downloadable final version to be had yet.&#160;&#160; Somehow Microsoft did not let the final release slip out to the pirates this time. </p>  <p>I’ve been just skimming the surface on the new functionality with a couple of video postings on <a href="http://www.learnvisualstudio.net/">learn visual studios dot net</a> .&#160; From what I’ve seen it appears that the new studio additions have to do with additions that where made to <strong>dot net framework 4.0</strong> and most of this has to do with the finalized Ajax that is included in the <strong>dot net framework 4.0 </strong>release. </p>  <p>Additionally there is the documentation/Reporting functionality of Agile or CMMI that got it’s start with team suite 2008. </p>  <p>I’ll be looking for a good Ajax project to do a screen cast of here in the near future.&#160; The post have been a little far an few between here. I’ve been a little busy with life and little less with dinking around programming. </p>]]></description>
   <dc:creator>Donald Hughes</dc:creator>
   <dc:date>3/14/2010 1:25:01 PM</dc:date>
  </item>
  <item>
   <title><![CDATA[How to: Create computed/custom properties for sample data in Blend/Sketchflow]]></title>
   <link>http://blog.ondrejsv.com/post/How-to-Create-computedcustom-properties-for-sample-data-in-BlendSketchflow.aspx</link>
   <description><![CDATA[<p>I blogged about sample data in Microsoft Blend/SketchFlow <a href="http://blog.ondrejsv.com/post/How-to-Create-a-new-format-for-sample-data-in-BlendSketchFlow.aspx">previously</a>. SketchFlow is a great tool for rapidly building interactive screen prototypes. Sample data feature helps you to create plausible screen mocks quickly. I want to emphasize words <em>interactive prototypes</em>. Yes, user can click here and there and sees the entire “application flow”. Previously we mocked screens in HTML, had them rendered and sent this to our customers as a package full of JPEGs. Almost as a rule we had small disputes with customers who were arguing that they just cannot “grasp the application” from JPEGs. Now we can just publish a Silverlight prototype to our server and customers browse it throughout.</p>  <p>Hopefully I don’t need to note that logically connected screens should play together. Having double clicked a record in a datagrid on one screen and being redirected to another screen showing detailed information on this only record, data in fields should be the same (or related) to the record I clicked on the first screen. If you use sample data, it means that you should bind the first and second screen against the very same data source.</p>  <p>One problem I encountered is managing data derived from other fields in sample collection. Let’s say I have a customers collection with usual data like first name, last name and birth date. The first screen shows this list but I want to have only one column for customer name showing first and last name concatenated. I need them separated in my collection because the second “customer detail” screen would show them in separate text boxes. I could create a new string field and manually type in the full name but I am lazy to do such work and frankly have <a href="http://en.wikipedia.org/wiki/Database_normalization">personal objections</a> to do so. I prefer the way the full name field just computes itself. That way I can modify either name and full name updates automatically.</p>  <p><a href="http://blog.ondrejsv.com/image.axd?picture=image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_12.png" width="572" height="211" /></a> </p>  <p>Double clicking on the Natasha row would bring me to the second screen with separate fields:</p>  <p><a href="http://blog.ondrejsv.com/image.axd?picture=image_13.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_13.png" width="402" height="179" /></a> </p>  <p>Fortunately, this task is not difficult. Your sample data collections are stored as XML files inside the <em>SampleData</em> folder in the XXXScreens project. For each such XML file, Blend generates a corresponding C# file with two ordinary class, one representing the collection and one the collection item (named Item):</p>  <p><a href="http://blog.ondrejsv.com/image.axd?picture=image_14.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_14.png" width="244" height="229" /></a> </p>  <p></p>  <pre><div class="code"><span class="kwrd">public</span> <span class="kwrd">class</span> Employees : System.ComponentModel.INotifyPropertyChanged
{
    <span class="kwrd">public</span> <span class="kwrd">event</span> System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> OnPropertyChanged(<span class="kwrd">string</span> propertyName)
    {
        <span class="kwrd">if</span> (<span class="kwrd">this</span>.PropertyChanged != <span class="kwrd">null</span>)
        {
            <span class="kwrd">this</span>.PropertyChanged(<span class="kwrd">this</span>, <span class="kwrd">new</span> System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }

    <span class="kwrd">public</span> Employees()
    {
        <span class="kwrd">try</span>
        {
            System.Uri resourceUri = <span class="kwrd">new</span> System.Uri(&quot;/SilverlightPrototype_Derived.Screens;component/SampleData/Employees/Employees.xaml&quot;, System.UriKind.Relative);
            <span class="kwrd">if</span> (System.Windows.Application.GetResourceStream(resourceUri) != <span class="kwrd">null</span>)
            {
                System.Windows.Application.LoadComponent(<span class="kwrd">this</span>, resourceUri);
            }
        }
        <span class="kwrd">catch</span> (System.Exception)
        {
        }
    }

    <span class="kwrd">private</span> ItemCollection _Collection = <span class="kwrd">new</span> ItemCollection();

    <span class="kwrd">public</span> ItemCollection Collection
    {
        get
        {
            <span class="kwrd">return</span> <span class="kwrd">this</span>._Collection;
        }
    }
}

<span class="kwrd">public</span> <span class="kwrd">class</span> Item : System.ComponentModel.INotifyPropertyChanged
{
    <span class="kwrd">public</span> <span class="kwrd">event</span> System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> OnPropertyChanged(<span class="kwrd">string</span> propertyName)
    {
        <span class="kwrd">if</span> (<span class="kwrd">this</span>.PropertyChanged != <span class="kwrd">null</span>)
        {
            <span class="kwrd">this</span>.PropertyChanged(<span class="kwrd">this</span>, <span class="kwrd">new</span> System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }

    <span class="kwrd">private</span> <span class="kwrd">string</span> _LastName = <span class="kwrd">string</span>.Empty;

    <span class="kwrd">public</span> <span class="kwrd">string</span> LastName
    {
        get
        {
            <span class="kwrd">return</span> <span class="kwrd">this</span>._LastName;
        }

        set
        {
            <span class="kwrd">if</span> (<span class="kwrd">this</span>._LastName != <span class="kwrd">value</span>)
            {
                <span class="kwrd">this</span>._LastName = <span class="kwrd">value</span>;
                <span class="kwrd">this</span>.OnPropertyChanged(&quot;LastName&quot;);
            }
        }
    }

    <span class="kwrd">private</span> <span class="kwrd">string</span> _FirstName = <span class="kwrd">string</span>.Empty;

    <span class="kwrd">public</span> <span class="kwrd">string</span> FirstName
    {
        get
        {
            <span class="kwrd">return</span> <span class="kwrd">this</span>._FirstName;
        }

        set
        {
            <span class="kwrd">if</span> (<span class="kwrd">this</span>._FirstName != <span class="kwrd">value</span>)
            {
                <span class="kwrd">this</span>._FirstName = <span class="kwrd">value</span>;
                <span class="kwrd">this</span>.OnPropertyChanged(&quot;FirstName&quot;);
            }
        }
    }
}</div></pre>

<p>Pretty boring code. If only the Item class would be generated with the partial directive, we could add our own class with the FullName computed property.</p>

<p>Let’s start some hacking then. Close Blend, start your favorite text editor and open the file C:\Program Files\Microsoft Expression\Blend 3\Templates\en\SampleDataCode.cs. This is the template Blend uses for generating C# code from the sample data XML source file.</p>

<p>Change line 43 from:</p>

<pre><div class="code"><span class="kwrd">public</span> <span class="kwrd">class</span> COMPOSITE_TYPE : System.ComponentModel.INotifyPropertyChanged //CompositeTypeHeader - BEGIN</div></pre>

<p>to:</p>

<pre><div class="code"><span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> COMPOSITE_TYPE : System.ComponentModel.INotifyPropertyChanged //CompositeTypeHeader - BEGIN</div></pre>

<p>Now start Blend again, open your project, force Blend to regenerate the code file (by adding a new property and removing it immediately). If you open the sample data code file, you can notice that the Item class now has the partial keyword!</p>

<p>Add a new class, change the namespace to exactly math the one in the original code file and write your own partial class, like mine:</p>

<pre><div class="code"><span class="kwrd">namespace</span> Expression.Blend.SampleData.Employees
{
    <span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> Item
    {
        <span class="kwrd">public</span> <span class="kwrd">string</span> FullName
        {
            get
            {
                <span class="kwrd">return</span> <span class="kwrd">string</span>.Format(&quot;{0} {1}&quot;, FirstName, LastName);
            }
        }
    }
}</div></pre>

<p>Job done! I may create a new bound column to my datagrid:</p>

<pre><div class="code"><span class="kwrd">&lt;</span><span class="html">data:DataGridTextColumn</span> <span class="attr">Header</span><span class="kwrd">="Full Name"</span> <span class="attr">Binding</span><span class="kwrd">="{Binding FullName}"</span><span class="kwrd">/&gt;</span></div></pre>

<p>Note: Blend may not recognize your new properties, so you may need to write your bound fields in XAML yourself, not in the Blend UI.</p>

<p></p>

<p><a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://blog.ondrejsv.com/post/How-to-Create-computedcustom-properties-for-sample-data-in-BlendSketchflow.aspx&amp;title=How to: Create computed/custom properties for sample data in Blend/Sketchflow">
                    <img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blog.ondrejsv.com/post/How-to-Create-computedcustom-properties-for-sample-data-in-BlendSketchflow.aspx" border="0" alt="kick it on DotNetKicks.com" />
                  </a></p>]]></description>
   <dc:creator>Ondrej Svacina</dc:creator>
   <dc:date>3/14/2010 12:53:24 PM</dc:date>
  </item>
 </channel>
</rss>