<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

<channel rdf:about="http://bradwilson.typepad.com/blog/">
<title>Brad Wilson</title>
<link>http://bradwilson.typepad.com/blog/</link>
<description>Technologist. Agile Evangelist. Poker Player. Amateur Neologist. Metalhead. Fire Child.</description>
<dc:language>en-US</dc:language>
<dc:creator />
<dc:date>2012-01-25T08:39:08-08:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.typepad.com/" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2012/01/xunit19.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/12/best-music-of-2011.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/11/win8-dp-on-samsung-series-7-slate.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/09/making-hyper-v-internal-network-private.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/09/prototype-xunitnet-visual-studio-11-unit-testing-plugin.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/08/full-throttle-tdd.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/08/professional-aspnet-mvc-3.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/06/the-testable-object-pattern.html" />
<rdf:li rdf:resource="http://bradwilson.typepad.com/blog/2011/02/advanced-aspnet-mvc-3-presentation.html" />
</rdf:Seq>
</items>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rdf+xml" href="http://feeds.feedburner.com/BradWilson" /><feedburner:info uri="bradwilson" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>47.677471</geo:lat><geo:long>-122.121383</geo:long><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FBradWilson" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBradWilson" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FBradWilson" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/BradWilson" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FBradWilson" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FBradWilson" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBradWilson" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare></channel>

<item rdf:about="http://bradwilson.typepad.com/blog/2012/01/xunit19.html">
<title>Shipped: xUnit.net 1.9</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/05dKF2MD-FY/xunit19.html</link>
<description>On January 2nd, Jim and I shipped xUnit.net 1.9. We updated NuGet with the 1.9 build binaries, and for the first time, we're including the MSBuild runner inside the "xunit" NuGet package. There are a few big new features that...</description>
<content:encoded><![CDATA[<p>On January 2nd, <a href="http://jamesnewkirk.typepad.com/">Jim</a> and I shipped <a href="http://xunit.codeplex.com/releases/view/77573">xUnit.net 1.9</a>. We updated NuGet with the 1.9 build binaries, and for the first time, we're including the MSBuild runner inside the <a href="http://nuget.org/packages/xunit">"xunit" NuGet package</a>.</p>
<p>There are a few big new features that are worth calling out.</p>
<h3>Async Unit Tests</h3>
<p>Late in 2010, the C# team announced a new feature that was coming in C# 5: the "async" and "await" keywords. These keywords allow the developer to consume <a href="http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx">Task</a>-based asynchronous APIs with code that looks linear and procedural, and mimics the code that the developer would write when calling synchronous APIs. In addition, .NET 4.5 is introducing new Task-based async APIs to supplement the existing event-based asynchronous APIs, and new async APIs will only offer Task-based versions.</p>
<p>Before now, unit testing these asynchronous APIs meant resorting to calls like .Wait() and .ContinueWith(), since unit testing frameworks are inherently synchronous by nature. With the release of 1.9, xUnit.net allows you to write asynchronous unit tests by marking your test method with the "async" keyword, and changing the return value from void to Task.</p>
<p>Prior to 1.9, a unit test around an asynchronous API might look something like this:</p>
<pre class="brush:csharp">[Fact]
public void MyAsyncUnitTest()
{
    // ... setup code here ...

    Task task = CallMyAsyncApi(...)
               .ContinueWith(innerTask =&gt;
    {
        var result = innerTask.Result;

        // ... assertions here ...
    }

    task.Wait();
}</pre>
<p>The code gets sufficiently more complex with every additional asynchronous API you add into the mix (for example, calling some async APIs during the setup phase of the unit tests). Adding try/catch logic becomes difficult and/or redundant, as the exception handling logic needs to be duplicated for both the setup code and the ContinueWith handler).</p>
<p>The same unit test can be simplified by using xUnit.net 1.9 (and either the Async CTP, or the pre-release version of .NET 4.5 which includes C# 5):</p>
<pre class="brush:csharp">[Fact]
public async Task MyAsyncUnitTest()
{
    // ... setup code here ...

    var result = await CallMyAsyncApi(...);

    // ... assertions here ...
}</pre>
<p>xUnit.net does the rest of the work. It sees that you're returning a Task and waits for it to complete. Traditional sequential coding mechanics like try/catch/finally and using are much easier to reason about when using async/await, and the compiler takes care of the boilerplate code necessary to ensure that it all works properly.</p> 
<h3>Generic Theories</h3>
<p>One of the most used features in the xUnit.net Extensions project is support for theories. In quick review: Facts are for expressing tests which are invariants; Theories are used for expressing tests that are only necessarily true for a given set of input data. As such, theories are sometimes called "data-driven unit tests", because part of testing a theory is providing sets of conforming data.</p>
<p>The new Generic Theories feature allows the developer to write their theories using the .NET generic method syntax. xUnit.net will attempt to determine the best signature for the generic types of the method based on the provided data, and it makes this decision individually on a data-row by data-row basis. This is most useful for writing unit tests against generic APIs, wherein you want to choose the generic API to call based on the type of the input data.</p>
<p>For example, here is a unit test which is testing a generic get-and-cast behavior of a container:</p>
<pre class="brush:csharp">[Theory]
[InlineData(42)]
[InlineData(21.12)]
[InlineData("Hello, world!")]
public void CastingGetTest&lt;T&gt;(T value)
{
    MyContainer container = new MyContainer();
    container.SetValue("name", value);

    T result = container.Get&lt;T&gt;("name");

    Assert.Equal(value, result);
}</pre>
<p>This generic theory will be called 3 times as expected, and the type of T will be implied based on the value that was provided. We've also updated the output from theories to include any generic types that were used, so if this theory fails, its output method names would be:</p>
<pre class="brush:csharp">CastingGetTest&lt;Int32&gt;(value: 42)
CastingGetTest&lt;Double&gt;(value: 21.12)
CastingGetTest&lt;String&gt;(value: "Hello, world!")</pre>
<p>This highlights another new feature of 1.9 as well: theory names include parameter names in addition to parameter values.</p>
<p>The rules for matching are fairly straightforward:</p>
<ul>
<li>If the generic type has no matching parameters, we use Object</li>
<li>If the generic type has one matching parameter:</li>
<ul>
<li>If the parameter value is non-null, we use value's concrete type</li>
<li>If the parameter value is null, we use Object</li>
</ul>
</li>
<li>If the generic type has two or more matching parameters:</li>
<ul>
<li>If the parameters are the <em><strong>exact same</strong></em> concrete type, we use the concrete type <em>(note that a null value is type-compatible with any reference type, but type-incompatible with any value type)</em></li>
<li>If the parameters are not the exact same concrete type, we use Object</li>
</ul>
</ul>
<p>We could've gone with a more complex matching algorithm, but we wanted the results to be easy to understand and reasonably predictable without stashing away dozens of matching rules in your head.</p>
<p><em>An important note: this support is limited to generic test methods only. xUnit.net does not support generic test classes.</em></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=05dKF2MD-FY:5ioN8jD3vSE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=05dKF2MD-FY:5ioN8jD3vSE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=05dKF2MD-FY:5ioN8jD3vSE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=05dKF2MD-FY:5ioN8jD3vSE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=05dKF2MD-FY:5ioN8jD3vSE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/05dKF2MD-FY" height="1" width="1"/>]]></content:encoded>


<dc:subject>Agile</dc:subject>
<dc:subject>Technical</dc:subject>
<dc:subject>xUnit.net</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2012-01-25T08:39:08-08:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2012/01/xunit19.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/12/best-music-of-2011.html">
<title>Best Music of 2011</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/Ow6Dxx0bJnw/best-music-of-2011.html</link>
<description>Time for the annual "best of" blog post, and this year was packed full of more great music than I can ever remember. I flirted with buying my music only online this year, but have since switched back to CDs,...</description>
<content:encoded><![CDATA[<p>Time for the annual "best of" blog post, and this year was packed full of more great music than I can ever remember.</p>

<p>I flirted with buying my music only online this year, but have since switched back to CDs, so that I can rip everything in lossless. Automatic downconversion to the phone is great, and I can still keep my lossless audio streams for the house, and all it costs is disk space (for my complete music collection, that's roughly 1TB). This is also the year I dumped my Zune Pass, and tried (but failed to be captivated by) Spotify.</p>

<p><em>Previous years: <a href="http://bradwilson.typepad.com/blog/2010/12/best-music-of-2010.html" target="_self">2010</a>,&nbsp;<a href="http://bradwilson.typepad.com/blog/2009/12/music-of-2009.html">2009</a>,&nbsp;<a href="http://bradwilson.typepad.com/blog/2008/12/music-of-2008.html">2008</a>,&nbsp;<a href="http://bradwilson.typepad.com/blog/2007/12/music-of-2007.html">2007</a></em><a href="http://bradwilson.typepad.com/blog/2007/12/music-of-2007.html"></a></p>



<h2>Genre: Alternative</h2>

<h3>R.E.M. — Collapse into Now</h3>

<p>2011 is the year that R.E.M. released its first truly great album in probably a decade... and then promptly broke up. Good jorb, guys.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/SRR1a4LAdNA?rel=0" frameborder="0"></iframe></p>

<h2>Genre: Metal</h2>

<h3>Anthrax — Worship Music</h3>

<p>Against all odds, Anthrax is back, and with Joey back at lead vocals. Worship Music is a great throwback to the classic 'thrax of olden days.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/HvdD3gBmUtQ?rel=0" frameborder="0"></iframe></p>

<h3>Iced Earth — Dystopia</h3>

<p>I had more or less written off Iced Earth as being uninteresting. There was the flirtation with Tim "Ripper" Owens that yielded one great album and a bunch of meh. Then they went back to long-time singer Matt Barlow, but he didn't seem to have the heart, and was gone after one album. Now they've found another (their 5th?) in Stu Block, and his vocal style honestly combines the best of Barlow and Ripper, and the music feels emotionally inspired again. Welcome back, guys!</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/zuwW9IVwZ0U?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Mastodon &mdash; The Hunter</h3>

<p>Mastodon's last album was a mixed bag: some thought it was the best of their career, and some thought it the worst. I definitely found myself in the former camp, and I think The Czar remains some of the best stuff they've ever done. This new album is quite good, though not quite up to the standards of the last album. It feels less progressive and more conventional.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/hwgqenxNUfs?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Megadeth &mdash; Th1rt3en</h3>

<p>Megadeth have always been a more consistent band than Metallica for metal fans (Risk notwithstanding), and their 13th studio album still delivers the fire from the old days.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/qHMUyHZi440?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Symphony X &mdash; Iconoclast</h3>

<p>A new SymX disc is always cause for celebration. Russell Allen has one of the greatest voices in metal (now that Dio is no longer with us), and their symphonic/power metal prowess is, as always, honed to a very fine edge.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/7QtLbXeQkV8?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Within Temptation &mdash; The Unforgiven</h3>

<p>I'm a sucker for concept albums and for female metal singers, so this was a double dose for me. It's a little pop-ish for some metal fans' tastes, but Sharon den Andel is always great to listen, because she tends to have a more reserved style than many other female metal singers. The bonus videos with the album were an excellent treat!</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/qGdzgcDllYE?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h2>Genre: Extreme Metal</h2>

<h3>Amon Amarth &mdash; Surtur Rising</h3>

<p>I'm a latecomer to Amon Amarth (and extreme metal in general), so while others didn't really think much of Twilight of the Thunder Gods, I liked it quite a lot. Surtur Rising is superior in pretty much every important way, and is a regular player even many months after its release.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/YFNc9jrkY4I?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Arch Enemy &mdash; Khaos Legions</h3>

<p>Another refinement in the melodic death metal machinery of Arch Enemy... yes, it's different than the old material, but it's pretty great in its own right.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/l7NgiZv3ncc?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Between the Buried and Me &mdash; The Parallax: Hypersleep Dialogues</h3>

<p>Calling this "just a three song EP" downplays the masterful music that spans nearly 30 minutes, almost long enough to be considered an album were this 20 years ago. Just whets the appetite for the next full length album...</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/MxPVyPXKKhU?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>The Black Dahlia Murder &mdash; Ritual</h3>

<p>There isn't a lot of metal coming out of my home town of Detroit these days, but TBDM more than make up for it with some seriously brutal yet brilliantly melodic metal.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/SEjGbxaunNI?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Fleshgod Apocalypse &mdash; Agony</h3>

<p>I'd never heard of these guys before hanging out on Turntable.fm, so imagine my surprise at the unbelievable combination of technical death metal and orchestral arrangements that awaited me. The talent in this band, especially the drummer, is nearly inhuman.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/D2b6jBoSGNw?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Ghost Brigade &mdash; Until Fear No Longer Defines Us</h3>

<p>Listening to this album Every. Single. Day. 'nuff said.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/6kubmMxykI8?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Insomnium &mdash; One for Sorrow</h3>

<p>Insomnium are yet another one of those quiet, competent ass-kicking melodic death metal bands that doesn't ever quite get the recognition it deserves. Another fine outing!</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/Ns9_A3CKqPM?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Obscura &mdash; Omnivium</h3>

<p>Ever since Metallica started opening their albums with acoustic, classical-inspired snippets, I've had a fondness for the unexpected during those first 60 seconds of the album. Obscura bat it out of the park with this opener!</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/snDfSqcPHWk?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Omnium Gatherum &mdash; New World Shadows</h3>

<p>This is my first album from the Finnish melodic death metal band, but it definitely won't be my last. Soul Journey is probably one of the best melodeath songs of the year.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/42qbzF_ektM?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Opeth &mdash; Heritage</h3>

<p>Mikael disappointed a lot of long-time fans when he announced that Opeth's newest album would not only be all clean vocals, but a rather stark musical departure at that. More inspired by 70's fusion jazz and progressive rock than modern metal, it really hits a sweet spot for me. The whole album is audible candy.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/FxvN_GxgpF8?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Scar Symmetry &mdash; The Unseen Empire</h3>

<p>When Christian left Scar Symmetry, many fans were shocked that they replaced him with not one but two vocalists. Although both can sing and growl, each has their stronger suits. The resulting first album was Dark Matter Dimensions, and most long-time fans thought it was probably the end of old SS. The Unseen Empire proved that they just need to get back on creative track.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/ArELZEYr444?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h2>Genre: Progressive Rock/Metal</h2>

<h3>Andromeda &mdash; Manifest Tyranny</h3>

<p>I've always been a pretty big fan of Andromeda's mix of prog metal and futuristic sounds and topics. This new album definitely steps up the pace quite a bit at times, especially the opening track.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/uiSaakTpZ-o?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Arch/Matheos &mdash; Sympathetic Resonance</h3>

<p>This is probably metal heresy, but there's something very Queensryche-ian about Arch/Matheos, which is to say that it reminds of the glimpse of the greatness that Operation: Mindcrime convinced us Queensryche had inside, but couldn't quite deliver on reliably. Arch/Matheos have no such problems.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/IwcL04CYews?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Dream Theater &mdash; A Dramatic Turn of Events</h3>

<p>With no small amount of irony did Dream Theater choose the name of their latest album. This year saw the band lose one of its founding members (and musical backbone) in Mike Portnoy. DT decided to keep moving forward and hired Mike Mangini, and turned the audition and hiring process into a three part YouTube series. Just as importantly, they created some of the most solid material in more than a decade.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/usPqh66pQaA?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Evergrey &mdash; Glorious Collision</h3>

<p>Evergrey are like the Little Prog Metal Band That Could. They keep soldiering on in undeserved obscurity, turning out album after album of incredibly solid music.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/DQcJuzMwGc0?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Protest the Hero &mdash; Scurrilous</h3>

<p>This is PtH's most commercially acceptable release, which is still a long damn way from what other bands might call "selling out". The undertone of crazy is still here, though.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/vKZ-eKBJ9dw?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Steven Wilson &mdash; Grace for Drowning</h3>

<p>Steven Wilson is the brains behind Porcupine Tree, and a long-time musical collaborator with Mikael and the boys in Opeth. His solo work tends to be more experimental and atmospheric than Porcupine Tree.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/dte3-sSkWic?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>TesseracT &mdash; One</h3>

<p>One of the most refined and unique sounds in progressive metal today, TesseracT were an obvious immediate addiction to me.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/JF_YIiRoRFM?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Textures &mdash; Dualism</h3>

<p>Textures blends a bit of progressive metal, and occasional metalcore and djent tendencies.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/mcIliX_z_7M?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h2>Genre: Soundtrack</h2>

<h3>The Girl With the Dragon Tattoo</h3>

<p>Trent Reznor seems to have diverted his career into soundtracks, and with great success. Last year his big success was The Social Network; this year, he succeeds well with The Girl With the Dragon Tattoo. The opening credits have this quite good cover of Led Zeppelin serving as the audio backdrop.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/ljbBayiWglg?rel=0" frameborder="0" allowfullscreen></iframe></p>

<h3>Tron: Legacy Reconfigured</h3>

<p>Technically, the original soundtrack came out last year with the movie, but there was a remix CD released this year. The most shocking thing about it is how much better it is than the original, which I would've said was one of the best soundtracks released in many years.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/fMd3u5fEouo?rel=0" frameborder="0" allowfullscreen></iframe></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=Ow6Dxx0bJnw:o0R6T8WOMG8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=Ow6Dxx0bJnw:o0R6T8WOMG8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=Ow6Dxx0bJnw:o0R6T8WOMG8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=Ow6Dxx0bJnw:o0R6T8WOMG8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=Ow6Dxx0bJnw:o0R6T8WOMG8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/Ow6Dxx0bJnw" height="1" width="1"/>]]></content:encoded>


<dc:subject>Music</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-12-28T22:49:40-08:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/12/best-music-of-2011.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/11/win8-dp-on-samsung-series-7-slate.html">
<title>Windows 8 Developer Preview on Samsung Series 7 Slate</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/U4qoS7O9JdI/win8-dp-on-samsung-series-7-slate.html</link>
<description>After tweeting a picture of Windows 8 Developer Preview running on my new Samsung Series 7 Slate, a few people asked if I would enumerate the instructions that I used to get it running. The machine is still fairly new...</description>
<content:encoded><![CDATA[<p>After tweeting a&nbsp;<a href="https://twitter.com/?photo_id=1#!/bradwilson/status/138202199682584576/photo/1/large" target="_self">picture of Windows 8 Developer Preview</a> running on my new <a href="http://www.amazon.com/Samsung-XE700T1A-A03US-11-6-Inch-Slate-128/dp/B005OUQ9WO/?tag=dotnetguy-20" target="_self">Samsung Series 7 Slate</a>, a few people asked if I would enumerate the instructions that I used to get it running. The machine is still fairly new to me, but I believe that everything is working, and it was relatively painless to get it all working.</p>
<p>I may amend this blog post as I discover things that might be not quite right, or things that I missed the first time around.</p>
<h3>Obligatory Warning You Will Probably Ignore</h3>
<p><strong>&nbsp;</strong>What you're doing here is erasing a computer. You can screw things up if you do them incorrect. This worked for me, but it may not work for you. If you get stuck, I may not be able to help you, and Samsung may not be super excited about helping you out with a Windows 8 problem. Also, Windows 8 is pre-release software, so expect some occasional bumps in the road.</p>
<h3>Important Links:</h3>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/windows/apps/br229516" target="_self">Windows 8 Developer Preview Download</a></li>
<li><a href="http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/" target="_self">Making a bootable USB thumb drive from the Windows 8 ISO</a></li>
<li><a href="http://www.samsung.com/us/support/downloads/XE700T1A-A03US" target="_self">Samsung Series 7 Slate Software Downloads</a></li>
</ul>
<h3>What You'll Need to Get Started</h3>
<ul>
<li>A bootable USB device to install Windows 8; meaning, either a USB DVD drive or a USB thumb drive. If you want to use the latter, follow the instructions linked above to make the thumb drive properly bootable. You'll want a 4GB+ thumb drive for Windows 8 x64, or a 8GB+ drive if you want to install the version with the development tools, too. Your machine has 4GB of RAM, so don't bother with the x86 (32-bit) verison of Windows 8. Installation from a USB thumb drive is a LOT faster than installation from a DVD (and doesn't waste a blank DVD).</li>
<li>A keyboard and mouse is highly advised for some parts. You can get by without it, but it's... painful. If you're planning to use a USB keyboard, bear in mind that you'll be booting off of a USB drive, so you'll either need a USB hub, or you'll need to use the optional dock to get yourself a 2nd USB port.</li>
</ul>
<h3>Step 0: Update your firmware (before you delete Windows 7!)</h3>
<p>Your machine probably shipped with the latest firmware (mine did), but it's worth verifying that to be sure. A relatively new firmware is necessary to ensure that screen rotation works properly in Windows 8.</p>
<p>Boot into Windows 7. Visit the <a href="http://www.samsung.com/us/support/downloads/XE700T1A-A03US" target="_self">Series 7 Slate Downloads</a> page, click on the Firmware link/tab, and download the firmware updater. Run it to ensure you are on the latest firmware.</p>
<h3>Step 1: Make some machine settings changes</h3>
<p>With the machine in a powered off state, hold the HOME button and then press the POWER button. Continue to hold the HOME button until the machine settings screen is displayed:</p>
<p><img src="http://bradwilson.typepad.com/samsung-series-7-bios.jpg" border="0" alt="" /></p>
<p>Attaching a USB keyboard helps navigation here a lot. If you don't, then you'll need to use the hardware keys to navigate:</p>
<ul>
<li><strong>Rotation Lock</strong>&nbsp;(on the right, below the power button)- Enter</li>
<li><strong>Home</strong>&nbsp;(the only button on the face of the device) - Escape</li>
<li><strong>Volume Up/Down</strong>&nbsp;(on the left, below the USB port) - Move the cursor up/down</li>
<li><strong>Hold Rotation Lock + Volume Up/Down</strong> - Move the cursor left/right</li>
</ul>
<p>The BIOS changes we want to make/verify are all on the Advanced page:</p>
<ul>
<li><strong>CPU Power Saving Mode</strong> : Enabled</li>
<li><strong>Hyperthreading</strong> : Enabled</li>
<li><strong>Execute Disable Bit</strong> : Enabled</li>
<li><strong>Legacy USB Support</strong> : Enabled</li>
<li><strong>UEFI Boot Support</strong> : Enabled</li>
</ul>
<p>There are two additional interesting settings on the Boot page, which you may or may not want to change:</p>
<ul>
<li><strong>TPM Support&nbsp;</strong>: you'll want to Enable this if you want to use Bitlocker to secure the contents of your slate. Some corporate environments (like mine) require that you use Bitlocker, and TPM means you won't have to carry around an extra USB key with Bitlocker booting codes on it.</li>
<li><strong>PXE OPROM&nbsp;</strong>: you'll want to Enable this if you have the optional dock, and you're planning to install Windows via the network, as network booting requires a physical Ethernet connection. This is probably not useful right now with Windows 8, but you may find it useful if you decide to revert back to Windows 7 at some point (assuming you're on a network with network boot support).</li>
</ul>
<p>Navigate to the Exit page, and choose "Save Changes and Reset". But before you do that, read ahead just one more paragraph.</p>
<h3>Step 2: Boot the USB device to install Windows 8</h3>
<p>In Step 1, we held the HOME button to get into the machine settings. This time, when the machine reboots after we save and exit the settings screen, we just want to press and release the HOME button once. In a few seconds, you'll be presented with a boot menu.&nbsp;<em>Don't get anxious and hit it a second time, because you're almost sure to accidentally escape out of the boot menu; trust me, I think I did this 3x before I learned to be a tiny bit more patient. :)</em></p>
<p>The contents of this menu will vary depending on which boot features you've enabled; for me, they were:</p>
<p style="padding-left: 30px;"><strong>P0: SAMSUNG MZMPA128HMFU-00000</strong> (this is your SSD drive)<br /><strong>SMI USB DISK 1100</strong> (this is my 8GB USB stick that I'm planning to boot from)<br /><strong>Realtek PXE B02 D00</strong> (this is the network boot via Ethernet)<br /><strong>Enter Setup</strong> (this will drop you into the machine settings again)&nbsp;</p>
<p>Use the USB keyboard (or the volume up/down keys) to select the boot device, then press Enter (or Rotation Lock) to boot the selected device.</p>
<p>The Windows 8 installation includes enough drivers to do mouse emulation for the slate's touch screen, so I was able to touch my way through the install process. I nuked both the Windows 7 partition and the factory restore partition, because I was confident that I would rather reinstall Windows 7 from scratch anyway. Just bear in mind that your slate didn't come with a Windows 7 DVD (or thumb drive), so unless you have an extra Windows 7 DVD hanging around that's usable for this, you'll want to preserve the factory restore partition. Me, I wanted that extra 20GB back. :)</p>
<p>Since there is no on-screen keyboard, if you want to do any advanced partitioning, you'll basically have to boot with a USB keyboard connected for the installation. Tapping the down arrow on the partition size edit box over and over again gets old REALLY fast. :)</p>
<p>After you've picked your installation partition, the system will do its copy thing and then reboot to finalize the installation. Now Windows 8 is running in full swing, and final settings (like connecting to WiFi and logging in with your Windows Live ID) are touch-friendly operations with on-screen keyboards available.</p>
<p>After your initial logon, you're on the Start Screen. At this point, I'd recommend connecting your Bluetooth keyboard and mouse (if you're using USB, then there's no connection necessary other than just plugging things in). FWIW, the Start Screen is great on this slate, but classic desktop mode can be challenging without a keyboard and mouse. I wouldn't recommend it for anything other than casual usage, and instead limit yourself to the Start Screen (and touch-designed apps) when you don't have a keyboard and mouse.</p>
<p>Alternatively, you can use the provided pen for light mouse-like usage. This slate comes with both a real digitizer as well as touch screen, and it turns off the touch functionality when the pen is nearby, so it's actually quite nice to write with using the provided pen, as you can lean the edge of your hand on the glass to write without triggering any touch operations. Honestly, this is a great slate for people who like to write, and I suspect I'll get a lot more use out of OneNote with this than any previous PC.</p>
<p>Regardless of what kind of precision input device you're using, we're going to make some changes and do some work in classic desktop mode next.</p>
<h3>Step 3: Run Windows Update</h3>
<p>From the Start Screen, swipe in from the right edge, tap Search, and then search for "Windows Update". Tap on the Settings sub-search, and then tap on "Check for updates". This will launch the desktop version of Windows Update. If you're careful with your taps, you might be able to use this app without resorting to a mouse or pen.</p>
<p>Force Windows Update to search for drivers, even if it thinks you're up-to-date. This will end up giving you most of the drivers you're missing. For me, this included nearly 20 updates in total. As is typical with Windows Update, you will probably need to reboot one or more times to get everything updated properly. Continue to install/reboot dance until Windows Update comes up empty.</p>
<h3>Step 4: Run Easy Software Manager</h3>
<p>Head back to the <a href="http://www.samsung.com/us/support/downloads/XE700T1A-A03US" target="_self">Series 7 Slate Downloads</a> page. This time, go to the Software tab and download Easy Software Manager. This is a great tool from Samsung which will probe the PC and its current drivers, and figure out what you still need to install. Here's the trick, though: the app only wants to run in Windows 7. This means you'll need to use Program Compatibility to fool the setup into thinking you're running on Windows 7; in addition, after the program is installed, you'll need to use Program Compatibility on the program itself again to ensure that it thinks its running in Windows 7 mode.</p>
<p>Here, we really need a mouse or pen. To set Program Compatition, right click/pen tap and hold on the executable (or the shortcut), and click Properties. Click on the Compatibility tab, check the box labeled "Run this program in compatibility mode for" and then choose "Windows 7" from the drop-down:</p>
<p><img src="http://bradwilson.typepad.com/samsung-series-7-properties.png" border="0" alt="" /></p>
<p><em>Note that if software manager needs to update itself, you may need to remake these settings changes after the update.</em></p>
<p>Once you've installed and run everything, if the app is working correctly, it will probably sit and think for a good 60ish seconds, trying to decide what devices you have newest drivers for and which ones need updated drivers. Then you can click on the Drivers tab, and then install the drivers one at a time (or use the Install All button).</p>
<h3>Step 5: There is No Step 5</h3>
<p>That's it! I think you'll find that this was a machine that just begs for Windows 8... where I found it to be a little slow and imprecise with Windows 7, I found its performance in Windows 8 to be just plain slick and pleasingly forgiving of my not-entirely-great tapping ability.</p>
<p>Time to enjoy your new Windows 8 slate!</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=U4qoS7O9JdI:6A0zzo7eMeQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=U4qoS7O9JdI:6A0zzo7eMeQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=U4qoS7O9JdI:6A0zzo7eMeQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=U4qoS7O9JdI:6A0zzo7eMeQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=U4qoS7O9JdI:6A0zzo7eMeQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/U4qoS7O9JdI" height="1" width="1"/>]]></content:encoded>


<dc:subject>Technical</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-11-20T16:05:16-08:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/11/win8-dp-on-samsung-series-7-slate.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/09/making-hyper-v-internal-network-private.html">
<title>Making Hyper-V Internal Network Private</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/q9R1dOeqORU/making-hyper-v-internal-network-private.html</link>
<description>Today, I installed Hyper-V on my Windows 8 machine so I could make a VM for a demo I'm giving later this week. I set up the virtual network as an internal network, and then used Windows 8's internal bridging...</description>
<content:encoded><![CDATA[<p>Today, I installed Hyper-V on my Windows 8 machine so I could make a VM for a demo I'm giving later this week. I set up the virtual network as an internal network, and then used Windows 8's internal bridging system to bridge the internal network over to the live WiFi.</p>
<p><b>DISCLAIMER: You're about to mess with registry settings and network settings. You could seriously break things if you do it wrong, and there's no guarantee I've done everything right. Make sure you have a backup before doing anything like this.</b></p>

<p>For the most part, the network just works. The VM gets an IP address from Hyper-V on the private network, and it's able to get out to the public network transparently. The one problem is that the resulting network bridge is labeled as a "public" network. This means that the host could ping the VM, but the VM couldn't ping the host. Since Windows doesn't see any Internet path on the shared network, it marks it public without any option for making it private:</p>
<p><a href="http://www.flickr.com/photos/dotnetguy/6183947950/" title="Hyper-V Public Network by Brad Wilson, on Flickr"><img src="http://farm7.static.flickr.com/6172/6183947950_166a7148c5_o.png" width="650" height="457" alt="Hyper-V Public Network"></a></p>
<p>The key is to <a href="http://msdn.microsoft.com/en-us/library/ff557037.aspx">trick Windows into thinking that the network is a point-to-point network</a> instead of a traditional Ethernet network, so that it will always be considered a private network. To do this, open REGEDIT and navigate to the section of the registry that contains the network drivers:</p>
<pre>HKEY_LOCAL_MACHINE\<br />&nbsp; &nbsp; System\<br />&nbsp; &nbsp; &nbsp; &nbsp; Current Control Set\<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Control\<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Class\<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {4d36e972-e325-11ce-bfc1-08002be10318}</pre>
<p>Inside this key, you'll find a couple dozen keys for various network adapters. You're looking for the key(s) whose DriverDesc value is "Microsoft Virtual Switch Network Adapter". When you find that key, you need to add a new DWORD value named "*NdisDeviceType" with a value of "1", as illustrated below:</p>
<p><a href="http://www.flickr.com/photos/dotnetguy/6183428469/" title="Hyper-V Public Network by Brad Wilson, on Flickr"><img src="http://farm7.static.flickr.com/6173/6183428469_98e54c3e81_o.png" width="650" height="387" alt="Hyper-V Public Network"></a></p>
<p>Once you've done this, then reboot the host PC. Once you've rebooted, the network device will not show up in the Network and Sharing Center any more, since point to point network devices don't show in that list. Now the VM will have a private network with the host, so it will be able to access anything that the host normally permits to go through the private section of the firewall.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=q9R1dOeqORU:KH3ivocdFHI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=q9R1dOeqORU:KH3ivocdFHI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=q9R1dOeqORU:KH3ivocdFHI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=q9R1dOeqORU:KH3ivocdFHI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=q9R1dOeqORU:KH3ivocdFHI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/q9R1dOeqORU" height="1" width="1"/>]]></content:encoded>


<dc:subject>Technical</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-09-25T19:51:01-07:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/09/making-hyper-v-internal-network-private.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/09/prototype-xunitnet-visual-studio-11-unit-testing-plugin.html">
<title>Prototype xUnit.net Visual Studio 11 Unit Testing Plugin</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/0FKJ3X-aPTw/prototype-xunitnet-visual-studio-11-unit-testing-plugin.html</link>
<description>Update: Visual Studio 11 Developer Preview is now available to the public. Earlier this week at the //build/ windows conference, Jason Zander announced the availability of a new "developer-focused" unit test runner in Visual Studio 11. They shipped the first...</description>
<content:encoded><![CDATA[<p><em><b>Update:</b> <a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27543">Visual Studio 11 Developer Preview</a> is now available to the public.</em></p>
<p>Earlier this week at the <a href="http://www.buildwindows.com/" target="_self">//build/ windows</a> conference, <a href="http://blogs.msdn.com/b/jasonz/" target="_self">Jason Zander</a> announced the availability of a new "developer-focused" unit test runner in Visual Studio 11. They shipped the first Developer Preview of Visual Studio 11, and it includes this new unit test runner. <a href="http://www.peterprovost.org/" target="_self">Peter Provost</a> demonstrated the pluggability of this new unit test runner by showing (and writing) tests written in <a href="http://xunit.codeplex.com/" target="_self">xUnit.net</a>. We collaborated with Peter and wrote the prototype runner that he used on stage during his demos.</p>

<p>Today, I put an unsigned VSIX of the prototype unit test runner up for <a href="http://xunit.codeplex.com/releases/view/62840#DownloadId=282191" target="_self">download on CodePlex</a>. This is still rough code, and has one known issue right now, but if you're willing to live on the bleeding edge by running VS 11 Developer Preview, then just step over a little farther with us and run our plugin. :)</p>
<p>The plugin is entirely self contained. After running the VSIX (and restarting Visual Studio, if necessary), the new Unit Test Window feature will light up with your xUnit.net tests. This prototype is driven around binary inspection, not source code inspection, so the unit test window will update whenever you build your project. There should be no other steps necessary: just load any project that has xUnit.net tests in it, build it, and the tests should now be runnable from within Visual Studio. <em>(Make sure to make the unit test window visible by going to View &gt; Other Windows &gt; Unit Test Explorer.)</em></p>
<p>The known issue sometimes manifests itself as one or more error messages in the output window's "Tests" tab, which say:</p>
<p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;">System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. This can happen if the test(s) started a thread but did not stop it. Make sure that all the threads started by the test(s) are stopped before completion.</span></p>
<p>Yes, that's a big scary message, but in my limited testing, it doesn't appear that it should have any impact on the actual running of the tests. I'm currently investigating the cause of the issue, but I wanted to get you all a prototype to play with as soon as possible.</p>
<p>Obviously, this is early code, so we really appreciate your <a href="http://xunit.codeplex.com/discussions" target="_self">feedback</a>,&nbsp;particularly if you find any issues (especially functional and performance issues). The long term plan, once Visual Studio 11 gets a little closer to release, is to offer this plugin via the Extension Gallery. If for some reason you need to uninstall the plugin, you can do it via Visual Studio's Tools &gt; Extension Manager functionality.</p>
<p>Happy testing!</p>
<p><img src="http://bradwilson.typepad.com/xunit-vs11.png" alt="" /><br /><em>xUnit.net running its own unit tests in Visual Studio 11 Developer Preview</em></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=0FKJ3X-aPTw:XMcuF9exdFI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=0FKJ3X-aPTw:XMcuF9exdFI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=0FKJ3X-aPTw:XMcuF9exdFI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=0FKJ3X-aPTw:XMcuF9exdFI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=0FKJ3X-aPTw:XMcuF9exdFI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/0FKJ3X-aPTw" height="1" width="1"/>]]></content:encoded>


<dc:subject>Agile</dc:subject>
<dc:subject>ASP.NET MVC</dc:subject>
<dc:subject>Technical</dc:subject>
<dc:subject>xUnit.net</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-09-16T19:01:17-07:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/09/prototype-xunitnet-visual-studio-11-unit-testing-plugin.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html">
<title>Interface Attributes != Class Attributes</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/9jcdZ22rHMo/interface-attributes-class-attributes.html</link>
<description>On the ASP.NET MVC team, we occasionally get questions about attributes and how they apply from interfaces to classes, like: I have an interface IFoo defined like this: public interface IFoo { [Required] string Name { get; set; } }...</description>
<content:encoded><![CDATA[<p>On the ASP.NET MVC team, we occasionally get questions about attributes and how they apply from interfaces to classes, like:</p>
<blockquote>
<p><em>I have an interface IFoo defined like this:</em></p>
<pre class="brush:csharp">public interface IFoo {
    [Required]
    string Name { get; set; }
}</pre>
<p><em>And I have a model class defined like this:</em></p>
<pre class="brush:csharp">public class ConcreteFoo : IFoo {
    public string Name { get; set; }
}</pre>
<p><em>Why doesn&#39;t the validation attribute from IFoo.Bar apply to ConcreteFoo.Bar?</em></p>
</blockquote>
<p>The difference between base classes and interfaces in the CLR is responsible for this difference.</p>
<p>Base classes are <em>inherited</em>; that is, any methods, properties, etc., present on the base class are also present in the derived class. Interfaces, on the other hand, are <em>implemented</em>; that is, the class is required to provide implementations of the interface methods, properties, etc. Interface implementation can take two forms: implicit and explicit.</p>
<p>Implicit implementation (as seen above) is when a class implements the method/property in question as a public method or property on the class. It&#39;s important to note that this method/property is NOT the same thing as the interface method/property; it merely has the same signature, and thus can be used to implicitly create the implementation of the interface. In reflection terms, the two are distinct and different. Any metadata attached to the interface method or property is not attached to the class method or property, because of this difference.</p>
<p>These are rules set down by the CLR.&#0160;To relate this to MVC, it&#39;s important to understand that MVC&#39;s model binding system works based on the type that was requested. This usually means the concrete type, since the action method parameter for models is usually the concrete type (which MVC can implicitly create) and not the interface type (which MVC cannot). Thus, when MVC uses reflection to find validation attributes, it does so using the concrete type: meaning, the type without the attribute applied to it. Since&#0160;an explicitly implemented interface method/property is private, MVC&#39;s model binder would never see them.</p>
<p>The simple work-around is to convert your model interfaces into abstract classes so that they can inherit the attributes appropriately. If this isn&#39;t feasible, then you will have to resort to putting the attributes on the concrete classes instead of the interfaces.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=9jcdZ22rHMo:SiPNsnOhXfE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=9jcdZ22rHMo:SiPNsnOhXfE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=9jcdZ22rHMo:SiPNsnOhXfE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=9jcdZ22rHMo:SiPNsnOhXfE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=9jcdZ22rHMo:SiPNsnOhXfE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/9jcdZ22rHMo" height="1" width="1"/>]]></content:encoded>


<dc:subject>ASP.NET</dc:subject>
<dc:subject>ASP.NET MVC</dc:subject>
<dc:subject>Technical</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-08-22T11:26:16-07:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/08/full-throttle-tdd.html">
<title>Full Throttle TDD</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/c_JTsWZufhs/full-throttle-tdd.html</link>
<description>I got a chance to sit down (virtually) with Rob Conery and do my TekPub production, which aimed to show what a real-world TDD session might look like. Rob gave me some vague requirements and then set me off to...</description>
<content:encoded><![CDATA[<p><img alt="" border="0" src="http://media.tumblr.com/tumblr_lpzkf3gWlf1qbgo38.png" /></p>
<p>I got a chance to sit down (virtually) with Rob Conery and do my TekPub production, which aimed to show what a real-world TDD session might look like. Rob gave me some vague requirements and then set me off to coding. I know the title says &quot;Full Throttle&quot;, but it feels a little three-quarters-throttle to me, mostly because the business area was new to me, and I (purposefully) didn&#39;t spend much time thinking ahead about the problem. We wanted this to just be a fresh stab in the dark at implementing something that I knew next to nothing about ahead of time. So, if you&#39;re hoping for one of those super-speed katas, then this isn&#39;t quite the video for you.</p>
<p>On the other hand, you do get to see me get thrown a curve-ball in the middle of the process which then causes me to need to re-think some of the implementation. All in all,&#0160;Rob had some <a href="http://wekeroad.com/post/8963638411/creatively-thrashing-with-tdd" target="_self">very nice things to say</a>:</p>
<p style="padding-left: 30px;">The thing that I really, really enjoyed about this episode is that I pushed Brad just enough to remove the “demo veneer” - I gave him a curveball about 30 minutes in where I said “Oh yeah… did I mention that we also do X?” - and he had to adjust.&#0160;</p>
<p style="padding-left: 30px;">When you have a mess of tests that assume one thing, then you have to shift to another - it’s a pain in the ass. But Brad handled it amazingly well - taking the opportunity to push more structure into his testing process, then one by one “transition” his old tests into the new approach.</p>
<p style="padding-left: 30px;">[...]</p>
<p style="padding-left: 30px;">They always say TDD is a “design process” - yet I’ve never seen it used in a truly “design-y” way - like a painter might toss color after color on a canvas until it looks/feel just right. And that’s exactly how it felt watching him.</p>
<p>The <a href="http://tekpub.com/productions/ft_tdd_wilson" target="_self">Full Throttle TDD</a> video is available at <a href="http://tekpub.com/">TekPub</a>, for individual purchase or included with any subscription.</p>
<p><strong>Update:</strong>&#0160;The <a href="http://bradwilson.typepad.com/presentations/BillingSystem.zip" target="_self">source code</a> is available now.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=c_JTsWZufhs:xfgN6KkyEhs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=c_JTsWZufhs:xfgN6KkyEhs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=c_JTsWZufhs:xfgN6KkyEhs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=c_JTsWZufhs:xfgN6KkyEhs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=c_JTsWZufhs:xfgN6KkyEhs:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/c_JTsWZufhs" height="1" width="1"/>]]></content:encoded>


<dc:subject>Agile</dc:subject>
<dc:subject>Technical</dc:subject>
<dc:subject>xUnit.net</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-08-15T17:51:12-07:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/08/full-throttle-tdd.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/08/professional-aspnet-mvc-3.html">
<title>Professional ASP.NET MVC 3</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/GUwGFFXSxQk/professional-aspnet-mvc-3.html</link>
<description>A few months ago, I finished writing part of a book on ASP.NET MVC 3. I was honored to be asked to write the third edition of the book with fellow co-workers Phil Haack and Jon Galloway, and incredibly smart...</description>
<content:encoded><![CDATA[<p>A few months ago, I finished writing part of a book on ASP.NET MVC 3. I was honored to be asked to write the third edition of the book with fellow co-workers <a href="http://haacked.com/">Phil Haack</a> and <a href="http://weblogs.asp.net/jgalloway/">Jon Galloway</a>, and incredibly smart dude <a href="http://odetocode.com/Blogs/scott/">K. Scott Allen</a>. This is very good company to be in for a first-time author. :)</p>
<p>The first edition of this book was written by some very impressive people, and it got terrific reviews. The second edition was mostly the same as the first. We took the feedback from the 2nd edition and decided that potential customers would appreciate it if we re-examined the structure of the book and provide as much new content as possible.</p>
<p>Personally, I was responsible for the chapters on dependency injection, unit testing, and MVC extensibility:</p>
<ul>
<li>The dependency injection chapter covers the basics behind dependency injection, the purpose of the dependency resolver in MVC, singly-registered services vs. multiply-registered services, and the purpose of the controller and view activators.</li>
<li>The unit testing chapter covers the basics of unit testing and Test Driven Development (TDD), examines the default unit tests provided by MVC, and offers real world tips and tricks to help you design your application for testability.</li>
<li>The extensibility chapter covers the extension points for model binding, model metadata, validation, view engines, HTML helpers, Razor helpers, action selectors, action filters, and action results.</li>
</ul>
<p>If you have the old version of this book and you're wondering whether it's worth getting the new one, check out the <a href="http://media.wiley.com/product_data/excerpt/83/11180765/1118076583-7.pdf" target="_self">table of contents</a>. If you're curious what the book looks like in Kindle form, check out the <a href="https://skydrive.live.com/?cid=7B0F64BB4A418697&amp;id=7B0F64BB4A418697!543&amp;sc=documents" target="_self">screenshots</a>&nbsp;<a href="http://twitter.com/#!/vintem12/status/99278176852774913" target="_self">taken from a Kindle 3</a>&nbsp;by&nbsp;<a href="http://twitter.com/vintem12" target="_self">@vintem12</a>.</p>
<p>We hope you enjoy the book and find it useful!</p>
<p><img src="http://media.wiley.com/product_data/coverImage/83/11180765/1118076583.jpg" border="0" alt="" /><br /> <a href="http://www.amazon.com/gp/product/1118076583/ref=as_li_tf_il?ie=UTF8&amp;tag=dotnetguy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=1118076583">Print edition</a>, <a href="http://www.amazon.com/gp/product/B005EHG1TI/ref=as_li_tf_tl?ie=UTF8&amp;tag=dotnetguy-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=B005EHG1TI">Kindle edition</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=GUwGFFXSxQk:dCK6-hXoNeI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=GUwGFFXSxQk:dCK6-hXoNeI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=GUwGFFXSxQk:dCK6-hXoNeI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=GUwGFFXSxQk:dCK6-hXoNeI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=GUwGFFXSxQk:dCK6-hXoNeI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/GUwGFFXSxQk" height="1" width="1"/>]]></content:encoded>


<dc:subject>Agile</dc:subject>
<dc:subject>ASP.NET</dc:subject>
<dc:subject>ASP.NET MVC</dc:subject>
<dc:subject>Technical</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-08-04T19:26:07-07:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/08/professional-aspnet-mvc-3.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/06/the-testable-object-pattern.html">
<title>The "Testable Object" Pattern</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/MfrMrNJwdTk/the-testable-object-pattern.html</link>
<description>This is a republished blog post from 2007. You can tell it's old because the tests were in NUnit instead of xUnit.net. :) I've demonstrated this a few times in presentations, and someone will inevitably ask for more information. Truth...</description>
<content:encoded><![CDATA[<p><i>This is a republished blog post from 2007. You can tell it's old because the tests were in NUnit instead of xUnit.net. :)</i></p>

<p>I've demonstrated this a few times in presentations, and someone will inevitably ask for more information. Truth is, I don't remember when I came up with it, or where I might've been inspired for it. I should say up front that I don't believe in mock object frameworks (because they encourage white-box protocols), and I don't believe in [SetUp] and [TearDown] (because they hide intention and force the use of fields in test fixtures, which should be strongly discouraged).</p>

<p>An example I was giving yesterday was a user editor in Model-View-Presenter style (what Martin Fowler now calls <a href="http://web.archive.org/web/20081012054717/http://www.martinfowler.com/eaaDev/SupervisingPresenter.html">Supervising Presenter</a>). The user editor presenter needed to talk to two things: the view and the user service. We ended up with a presenter with a constructor signature like this:</p>

<pre class="brush:csharp">public class UserEditorPresenter
{
    public UserEditorPresenter(IUserEditorView view,
                               IUserService service)
    [...]
}</pre>

<p>Given my dislike of [SetUp] and [TearDown], that means that each test starts out with code like this:</p>

<pre class="brush:csharp">[Test]
public void MyTest()
{
    StubEditorView view = new StubEditorView();
    StubUserService service = new StubUserService();
    UserEditorPresenter presenter = new UserEditorPresenter(view, service);
}</pre>

<p>Interestingly, we started with just the view, and then later added the user service. When that happened, it meant we had to change all our tests. No fun.</p>

<p>Since I'm averse to [SetUp], I like this alternative instead:</p>

<pre class="brush:csharp">public class TestableUserEditorPresenter : UserEditorPresenter
{
    public StubEditorView View;
    public StubUserService Service;

    private TestableUserEditorPresenter(StubEditorView view,
                                        StubUserService service)
        : base(view, service)
    {
        View = view;
        Service = service;
    }

    public static TestableUserEditorPresenter Create()
    {
        return new TestableUserEditorPresenter(
            new StubEditorView(),
            new StubUserService()
        );
    }
}</pre>

<p>Now the tests become one-liner initialization:</p>

<pre class="brush:csharp">[Test]
public void MyTest()
{
    var presenter = TestableUserEditPresenter.Create();
}</pre>

<p>As the needs of the presenter grow, the tests don't need to be modified. It's easy to follow the Create link in your editor to see exactly what is happening during creation (instead of searching for the SetUp method).</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=MfrMrNJwdTk:DoDYj-dvx-w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=MfrMrNJwdTk:DoDYj-dvx-w:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=MfrMrNJwdTk:DoDYj-dvx-w:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=MfrMrNJwdTk:DoDYj-dvx-w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=MfrMrNJwdTk:DoDYj-dvx-w:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/MfrMrNJwdTk" height="1" width="1"/>]]></content:encoded>


<dc:subject>Agile</dc:subject>
<dc:subject>Technical</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-06-02T15:54:01-07:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/06/the-testable-object-pattern.html</feedburner:origLink></item>
<item rdf:about="http://bradwilson.typepad.com/blog/2011/02/advanced-aspnet-mvc-3-presentation.html">
<title>Advanced ASP.NET MVC 3 Presentation</title>
<link>http://feedproxy.google.com/~r/BradWilson/~3/-8Yb0hJCg1U/advanced-aspnet-mvc-3-presentation.html</link>
<description>I was one of the lucky on-campus people who got to do their mvcConf 2 presentation from the brand new Channel 9 studios, and now the video is online. You can download high quality WMV (for Windows) or MPEG-4 (for...</description>
<content:encoded><![CDATA[<p>I was one of the lucky on-campus people who got to do their mvcConf 2 presentation from the brand new Channel 9 studios, and now the video is online.</p>
<p><object type="application/x-silverlight-2" data="data:application/x-silverlight-2," width="512" height="288"><param name="minRuntimeVersion" value="4.0.50401.0"/><param name="source" value="http://channel9.msdn.com/scripts/Channel9.xap?v=1.3"/><param name="initParams" value="mediaurl=http://files.ch9.ms/ch9/81ff/02c53dbd-4885-4727-8139-9e85015681ff/mvcconfbradwilson.ism/manifest,thumbnail=http://files.ch9.ms/ch9/81ff/02c53dbd-4885-4727-8139-9e85015681ff/mvcconfbradwilson_512_ch9.jpg,deliverymethod=adaptivestreaming,autoplay=false"/></object></p>
<p>You can download high quality <a href="http://files.ch9.ms/ch9/81ff/02c53dbd-4885-4727-8139-9e85015681ff/mvcconfbradwilson_2MB_ch9.wmv">WMV</a> (for Windows) or <a href="http://files.ch9.ms/ch9/81ff/02c53dbd-4885-4727-8139-9e85015681ff/mvcconfbradwilson_high_ch9.mp4">MPEG-4</a> (for OS X/iOS/Linux). Slides are <a href="http://bradwilson.typepad.com/presentations/advanced-mvc-3.pdf">here</a>, and code is <a href="http://bradwilson.typepad.com/presentations/advanced-mvc-3.zip">here</a>.</p>
<p>Enjoy!</p>
<p><b>Update:</b> I've removed the HTML 5 video player and just offered the Silverlight player. Remember to run in full screen so that smooth streaming will run in HD and offer you the best picture quality. If the quality is sub-standard, you may need to download the video with one of the links above for offline viewing.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BradWilson?a=-8Yb0hJCg1U:x0q2TzHagbU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=-8Yb0hJCg1U:x0q2TzHagbU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=-8Yb0hJCg1U:x0q2TzHagbU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/BradWilson?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BradWilson?a=-8Yb0hJCg1U:x0q2TzHagbU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BradWilson?i=-8Yb0hJCg1U:x0q2TzHagbU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BradWilson/~4/-8Yb0hJCg1U" height="1" width="1"/>]]></content:encoded>


<dc:subject>ASP.NET</dc:subject>
<dc:subject>ASP.NET MVC</dc:subject>
<dc:subject>Speaking</dc:subject>
<dc:subject>Technical</dc:subject>

<dc:creator>Brad Wilson</dc:creator>
<dc:date>2011-02-18T07:42:15-08:00</dc:date>
<feedburner:origLink>http://bradwilson.typepad.com/blog/2011/02/advanced-aspnet-mvc-3-presentation.html</feedburner:origLink></item>


</rdf:RDF><!-- ph=1 -->

