<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Scott Hanselman</title>
    <link>http://www.hanselman.com/blog/</link>
    <description>Scott Hanselman's Thoughts on Programming, Technology, Fatherhood, and Life</description>
    <image>
      <url>http://www.hanselman.com/blog/images/zenicon.jpg</url>
      <title>Scott Hanselman</title>
      <link>http://www.hanselman.com/blog/</link>
    </image>
    <copyright>admin</copyright>
    <lastBuildDate>Fri, 30 Jul 2010 23:03:27 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.7238.742</generator>
    <managingEditor>scott@hanselman.com</managingEditor>
    <webMaster>scott@hanselman.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ScottHanselman" /><feedburner:info uri="scotthanselman" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:emailServiceId>ScottHanselman</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=c7482c21-ed70-4d59-aaa0-35c5293f904b</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=c7482c21-ed70-4d59-aaa0-35c5293f904b</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=c7482c21-ed70-4d59-aaa0-35c5293f904b</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c7482c21-ed70-4d59-aaa0-35c5293f904b</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Dealing with Images with Bad Metadata - Corrupted Color Profiles in WPF</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=c7482c21-ed70-4d59-aaa0-35c5293f904b</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/6M2m6jEfWvQ/DealingWithImagesWithBadMetadataCorruptedColorProfilesInWPF.aspx</link>
      <pubDate>Fri, 30 Jul 2010 23:03:27 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Creating a Twitter client is a really interesting exercise in application development because, amongst many reasons, it's taking input from effectively an infinite number of people and places. Never trust user input, right? Input to your application comes not only in the form of text, but also images. Writing a Twitter client is effectively writing a web browser that only browses one website. Getting a browser stable is hard.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.istartedsomething.com"&gt;Long Zheng&lt;/a&gt;, &lt;a href="http://www.withinwindows.com"&gt;Raphael Rivera&lt;/a&gt; and the &lt;a href="http://www.metrotwit.com/"&gt;MetroTwit&lt;/a&gt; team (MetroTwit is a lovely new Twitter client) have hit an extremely interesting crashing bug. The input comes in the form of a corrupted JPG image from the web.&lt;/p&gt;  &lt;p&gt;Here's &lt;a href="http://www.hanselman.com/blog/images/JPGwithBadColorProfile.jpg"&gt;the bad image&lt;/a&gt;. Looks like a picture some folks speaking on a panel. However, even though this image looks fine, this specific binary version of it has a &lt;strong&gt;corrupted&lt;/strong&gt; &lt;a href="http://www.drycreekphoto.com/Learn/profiles.htm"&gt;Color Profile&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Sometimes folks don't realize that image formats contain lots of metadata that you can't see. Your JPGs may show what camera you used, what lens, what settings, possibly even the geo-coordinates of where you took the picture!&lt;/p&gt;  &lt;p&gt;You can view all this extended information (EXIF) with a number of tools. A great free one is &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;ExifTool by Phil Harvey&lt;/a&gt; at the command line, or a non-command line one like &lt;a href="http://www.exifpro.com/"&gt;ExifPro&lt;/a&gt;. &lt;a href="http://explore.live.com/windows-live-photo-gallery"&gt;Windows Live Photo Gallery&lt;/a&gt; lets you view the data also.&lt;/p&gt;  &lt;p&gt;Here's a snippet of some of the info in this pic:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Device Mfg Desc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : IEC &lt;/font&gt;&lt;font size="2" face="Courier New"&gt;http://www.iec.ch&lt;/font&gt;     &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;Device Model Desc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : IEC 61966-2.1 Default RGB colour space - sRGB      &lt;br /&gt;Viewing Cond Desc&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Reference Viewing Condition in IEC61966-2.1       &lt;br /&gt;Viewing Cond Illuminant&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 19.6445 20.3718 16.8089       &lt;br /&gt;Viewing Cond Surround&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 3.92889 4.07439 3.36179       &lt;br /&gt;Viewing Cond Illuminant Type&amp;#160;&amp;#160;&amp;#160; : D50       &lt;br /&gt;Make&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Leica Camera AG       &lt;br /&gt;Camera Model Name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : M8 Digital Camera       &lt;br /&gt;Software&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Aperture 3.0.2       &lt;br /&gt;Shutter Speed Value&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 1/256       &lt;br /&gt;Exposure Compensation&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0       &lt;br /&gt;Max Aperture Value&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 1.0       &lt;br /&gt;Metering Mode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Center-weighted average       &lt;br /&gt;Light Source&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Flash       &lt;br /&gt;Focal Length&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0.0 mm&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You can extract the image profile (ICC Profile) from an image like this with exiftool:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;exiftool -icc_profile -b foo.jpg &amp;gt; profile.icc&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you're hardcore, you can &lt;a href="http://code.msdn.microsoft.com/wictools"&gt;get the Windows Imaging Component (WIC) Tools&lt;/a&gt; and run WICExplorer. WPF uses WIC to decode images. WICExplorer will report the error with this image as you load it.&lt;/p&gt;  &lt;h3&gt;Loading Images in WPF&lt;/h3&gt;  &lt;p&gt;When you're using WPF (Windows Presentation Foundation) to display an image on Windows, you might do something like this:&lt;/p&gt;  &lt;pre class="brush: xml; toolbar: false; auto-links: false;"&gt;&amp;lt;Image Width=&amp;quot;300&amp;quot; Height=&amp;quot;300&amp;quot; ImageFailed=&amp;quot;Image_ImageFailed&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;Image.Source&amp;gt;&lt;br /&gt;        &amp;lt;BitmapImage UriSource=&amp;quot;http://hanselman.com/blog/images/JPGwithBadColorProfile.jpg&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/Image.Source&amp;gt;&lt;br /&gt;&amp;lt;/Image&amp;gt;&lt;/pre&gt;

&lt;p&gt;Except with this particular image, I'll get an exception the Color Profile (the image metadata) is corrupted. &amp;quot;ArgumentException: Value does not fall within the expected range.&amp;quot; This is a corrupted file.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;at System.Windows.Media.ColorContext.GetColorContextsHelper(GetColorContextsDelegate getColorContexts) 
      &lt;br /&gt;at System.Windows.Media.Imaging.BitmapFrameDecode.get_ColorContexts() 

      &lt;br /&gt;at System.Windows.Media.Imaging.BitmapImage.FinalizeCreation() 

      &lt;br /&gt;at System.Windows.Media.Imaging.BitmapImage.OnDownloadCompleted(Object sender, EventArgs e) 

      &lt;br /&gt;at System.Windows.Media.UniqueEventHelper.InvokeEvents(Object sender, EventArgs args) 

      &lt;br /&gt;at System.Windows.Media.Imaging.LateBoundBitmapDecoder.DownloadCallback(Object arg) 

      &lt;br /&gt;at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 

      &lt;br /&gt;at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If I get this exception, I can try to load the image again and ignore its color profile. Here's how I'd do that in XAML:&lt;/p&gt;

&lt;pre class="brush: xml; toolbar: false; auto-links: false;"&gt;&amp;lt;Image Width=&amp;quot;300&amp;quot; Height=&amp;quot;300&amp;quot; ImageFailed=&amp;quot;Image_ImageFailed&amp;quot;  &amp;gt;&lt;br /&gt;    &amp;lt;Image.Source&amp;gt;&lt;br /&gt;        &amp;lt;BitmapImage CreateOptions=&amp;quot;IgnoreColorProfile&amp;quot; UriSource=&amp;quot;http://hanselman.com/blog/images/JPGwithBadColorProfile.jpg&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/Image.Source&amp;gt;&lt;br /&gt;&amp;lt;/Image&amp;gt;&lt;/pre&gt;

&lt;p&gt;If you're loading from code, you can ignore color profile information by adding the BitmapCreateOptions.IgnoreColorProfile flag to CreateOptions. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;As an aside, &lt;/em&gt;&lt;a href="http://blog.andreweichacker.com/2009/02/reading-and-writing-tags-for-photos-in-wpf/"&gt;&lt;em&gt;Andrew Eichacker has a nice post on how to read all the BitmapMetadata in WPF&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. There's lots in there!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's loading the Bitmap into an image Control called &amp;quot;Foo.&amp;quot;&lt;/p&gt;

&lt;pre class="brush: csharp; toolbar: false; auto-links: false;"&gt;var bi = new BitmapImage();&lt;br /&gt;bi.BeginInit();&lt;br /&gt;    bi.CreateOptions = BitmapCreateOptions.IgnoreColorProfile;&lt;br /&gt;    bi.UriSource = new Uri(&amp;quot;http://hanselman.com/blog/images/JPGwithBadColorProfile.jpg&amp;quot;);&lt;br /&gt;bi.EndInit();&lt;br /&gt;&lt;br /&gt;foo.Source = bi;&lt;/pre&gt;

&lt;p&gt;Knowing about possible corruption is important to be aware of, especially if you're loading arbitrary images from all over the place. If you don't care about color profiles, I'd just ignore them by default in your image loading code. If you are writing an image editor or you care about profiles, I'd catch the exception, let the user know, then load the image again without the profile.&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wU4Nz7ypt7U_BkF8SBt0AOHyXcw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wU4Nz7ypt7U_BkF8SBt0AOHyXcw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wU4Nz7ypt7U_BkF8SBt0AOHyXcw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wU4Nz7ypt7U_BkF8SBt0AOHyXcw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=6M2m6jEfWvQ:z_jekfby7vc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=6M2m6jEfWvQ:z_jekfby7vc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=6M2m6jEfWvQ:z_jekfby7vc:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=6M2m6jEfWvQ:z_jekfby7vc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=6M2m6jEfWvQ:z_jekfby7vc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=6M2m6jEfWvQ:z_jekfby7vc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=6M2m6jEfWvQ:z_jekfby7vc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=6M2m6jEfWvQ:z_jekfby7vc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=6M2m6jEfWvQ:z_jekfby7vc:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/6M2m6jEfWvQ" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=c7482c21-ed70-4d59-aaa0-35c5293f904b</comments>
      <category>Bugs</category>
      <category>Windows Client</category>
      <category>WPF</category>
    <feedburner:origLink>http://www.hanselman.com/blog/DealingWithImagesWithBadMetadataCorruptedColorProfilesInWPF.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=dc679b4c-57f3-4dd2-ab0d-4d0352cca635</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=dc679b4c-57f3-4dd2-ab0d-4d0352cca635</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=dc679b4c-57f3-4dd2-ab0d-4d0352cca635</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=dc679b4c-57f3-4dd2-ab0d-4d0352cca635</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Microsoft "Daily Build" Nerd Dinner - August 4th in Seattle, Redmond</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=dc679b4c-57f3-4dd2-ab0d-4d0352cca635</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/v1PtQGVvSYs/MicrosoftDailyBuildNerdDinnerAugust4thInSeattleRedmond.aspx</link>
      <pubDate>Fri, 30 Jul 2010 22:17:50 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;img style="margin: 0px 0px 0px 10px" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/0e989641768b_F745/iStock_000002684567XSmall_3.jpg" /&gt;Are you in King County/Seattle/Redmond/Bellevue Washington and surrounding areas? Are you a huge &lt;a href="http://en.wikipedia.org/wiki/Nerd"&gt;nerd&lt;/a&gt;? Perhaps a &lt;a href="http://en.wikipedia.org/wiki/Geek"&gt;geek&lt;/a&gt;? No? Maybe a &lt;a href="http://en.wikipedia.org/wiki/Dork"&gt;dork&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Dweeb"&gt;dweeb&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Wonk_%28slang%29"&gt;wonk&lt;/a&gt;. Maybe you're in town for an SDR (Software Design Review) or &lt;a href="http://vslive.com"&gt;VSLive&lt;/a&gt;! Quite possibly you're just a &lt;a href="http://www.urbandictionary.com/define.php?term=normal"&gt;normal person&lt;/a&gt; and a member of the general public.&lt;/p&gt;  &lt;p&gt;We're holding a Nerd Dinner (it's like dinner, except with nerds) next week on &lt;strong&gt;Weds, Aug 4th at &lt;/strong&gt;&lt;a href="http://www.crossroadsbellevue.com/directionshours/index.htm"&gt;&lt;strong&gt;Crossroads Bellevue Mall Food Court&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; at 6pm&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;This one will be different from usual. Why? &lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;It's a &lt;strong&gt;Daily Build Nerd Dinner!&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;We'll have Program Managers and Developers directly from Microsoft who'll bring their laptops with &amp;quot;Daily Builds&amp;quot; of stuff they are working on. Daily Builds mean literally stuff they've built that day that's cool. You'll give them feedback and they'll show you cool new stuff like the Razor View Engine and Visual Studio Tooling.&lt;/p&gt;  &lt;p&gt;If you are a member of the public, &lt;strong&gt;be here!&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Nerd Dinners are for us. All are welcome. Just come on by. We'll be near the Chess Board in the Food Court. Bring your co-workers and your social media friend! &lt;/p&gt;  &lt;p&gt;Please spread the word! RSVP and tweet about this dinner at &lt;a title="http://nrddnr.com/2770" href="http://nrddnr.com/2770"&gt;&lt;strong&gt;http://nrddnr.com/2770&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Add to your calendar now...here's an &lt;a href="http://www.nerddinner.com/Services/iCal/2770"&gt;iCal link for your Outlook or other calendar&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;See you soon!&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tNctqONo3hvLwm_9zxxy9qVwgcY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tNctqONo3hvLwm_9zxxy9qVwgcY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tNctqONo3hvLwm_9zxxy9qVwgcY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tNctqONo3hvLwm_9zxxy9qVwgcY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=v1PtQGVvSYs:7jgeP7PE3fg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=v1PtQGVvSYs:7jgeP7PE3fg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=v1PtQGVvSYs:7jgeP7PE3fg:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=v1PtQGVvSYs:7jgeP7PE3fg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=v1PtQGVvSYs:7jgeP7PE3fg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=v1PtQGVvSYs:7jgeP7PE3fg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=v1PtQGVvSYs:7jgeP7PE3fg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=v1PtQGVvSYs:7jgeP7PE3fg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=v1PtQGVvSYs:7jgeP7PE3fg:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/v1PtQGVvSYs" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=dc679b4c-57f3-4dd2-ab0d-4d0352cca635</comments>
      <category>ASP.NET</category>
      <category>IIS</category>
      <category>NerdDinner</category>
    <feedburner:origLink>http://www.hanselman.com/blog/MicrosoftDailyBuildNerdDinnerAugust4thInSeattleRedmond.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=f0e14144-0126-4a94-88ae-d6dc6154b7b1</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=f0e14144-0126-4a94-88ae-d6dc6154b7b1</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=f0e14144-0126-4a94-88ae-d6dc6154b7b1</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f0e14144-0126-4a94-88ae-d6dc6154b7b1</wfw:commentRss>
      <slash:comments>37</slash:comments>
      <title>Windows Phone 7 - First Impressions</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=f0e14144-0126-4a94-88ae-d6dc6154b7b1</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/2BfmA_7u5lA/WindowsPhone7FirstImpressions.aspx</link>
      <pubDate>Thu, 29 Jul 2010 09:46:33 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/ff380145.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Windows Phone Emulator" border="0" alt="Windows Phone Emulator" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/WindowsPhone7FirstImpressions_796/Windows%20Phone%20Emulator_3.png" width="328" height="587" /&gt;&lt;/a&gt;Disclaimer: I work for Microsoft in &lt;/em&gt;&lt;a href="http://www.msdn.com"&gt;&lt;em&gt;MSDN&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. I don't work for or with the Windows Phone 7 team in any capacity. I do know one guy over there, though. That said, I personally have an iPhone 3G (dead, the kids play Monkey Island on it), a iPhone 3GS (the wife won't use it, it's on a shelf) and an iPhone 4 (my non-work phone). I also have a work Samsung Blackjack (WinMo 6.5). I signed up and paid for a Windows Phone 7 developer account and I have ideas for 3 apps. No one has asked me to blog about the phone, my opinions are my own. Also, this is a developer prototype with whatever build they shipped it with.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;A &lt;a href="http://developer.windowsphone.com/"&gt;Windows Phone 7 developer phone&lt;/a&gt; showed up in the mail today. Inside the battery door it said &amp;quot;MS Asset&amp;quot; so it looks like I won't be able to keep it. Still, it's cool. I pulled the MicroSIM out of my iPhone 4 and shoved it, ungracefully, into the normal-sized SIM slot and while it's not kosher, it totally works. I'll go get an converter/adapter at some point.&lt;/p&gt;  &lt;p&gt;Here's some things I was impressed with:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows Live, Google, Yahoo, and Exchange are all peers. I was able to add my work Exchange account, my own Gmail (Google Apps), my wife's email and Google Calendar, and my Windows Live in less than 5 minutes. I customized the calendar colors as well. &lt;/li&gt;    &lt;li&gt;When I added Windows Live, it automatically figured out I had Xbox and downloaded my Avatar and Achievements. This was particularly cool because I had just won &amp;quot;Limbo&amp;quot; the night before and my little Avatar dude had a Limbo T-shirt on. &lt;/li&gt;    &lt;li&gt;My wife's Zune Pass just worked. Leasing music rocks. I put 6 gigs of music and podcasts on it. &lt;/li&gt;    &lt;li&gt;There's a dedicated camera button (this is apparently in the hardware spec) so one button gets&amp;#160; you a 5 megapixel camera with flash. &lt;/li&gt;    &lt;li&gt;The screen is really clear. I don't know the DPI (maybe 200?) but the typography/fonts aliases really nicely. &lt;/li&gt;    &lt;li&gt;Speech recognition for Bing Search is nice and tiny Excel, Word and PowerPoint are cool. &lt;/li&gt;    &lt;li&gt;Everything is extremely &amp;quot;fluid' and smooth. I was worried when I saw things at Mix 10 stuttering. I didn't see any of that on this hardware. &lt;/li&gt;    &lt;li&gt;The browser doesn't suck at all, actually. This was a pleasant surprise. It's speedy and useful. I wish that when the pages got pinn'ed to the home page that it used the iphone-touch-icon.png or some kind of favicon rather than a thumbnail of the page though. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some things I had trouble with:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I have 568 Windows Live Contacts and &amp;gt;3500 Facebook Contacts, so integrating these was a mistake. It took the phone 20 minutes in the background (I didn't realize it was doing in) to put all my &amp;quot;friends&amp;quot; in a Contact List. That's what I get for not keeping Facebook for just friends. Even then, assuming I had a few hundred &amp;quot;friends&amp;quot; I'm trying to figure out how many &amp;quot;frequently dialed&amp;quot; phone numbers I'd want to keep, vs. internet friends.&amp;#160; How many friends do normal people have on Facebook? I'm still trying to figure out the usage pattern for this. I'm not sure how I can use the People Hub without un-friending 3000 people &lt;/li&gt;    &lt;li&gt;I miss my must-have apps. Hopefully they are listening...      &lt;ul&gt;       &lt;li&gt;FourSquare &lt;/li&gt;        &lt;li&gt;Evernote &lt;/li&gt;        &lt;li&gt;Remember the Milk &lt;/li&gt;        &lt;li&gt;No twitter client yet. This is crippling me. &lt;/li&gt;        &lt;li&gt;Kindle &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The ringtones and alarms are &lt;em&gt;really &lt;/em&gt;ethereal. I need a jangly and jarringly classic old rotary phone alarm. I'll need to figure out custom ringtones. &lt;/li&gt;    &lt;li&gt;No copy-paste. Yet. &lt;/li&gt;    &lt;li&gt;The fine-tuned-hold-the-cursor-to-select gesture currently requires you to hold to select, then move down to move a floating-above-you selection iBar. &lt;/li&gt;    &lt;li&gt;I haven't figured out how to &amp;quot;mount&amp;quot; the phone in Windows Explorer and look at my photos. That said, it appears they automatically show up in My Photos in a folder called &amp;quot;From &amp;lt;My Phone's Name&amp;gt;&amp;quot; and they can optionally be automatically uploaded to the web. There's a lot of &amp;quot;it just works&amp;quot; stuff going on. I'm used to everything being configurable. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It'll take a while to get used to &amp;quot;it just works&amp;quot; from Microsoft. All in all, I'm pleasantly surprised as everything has just worked.&lt;/p&gt;  &lt;p&gt;The wife thought it was cool too, although she wants a hardware keyboard that flips out. Apparently Dell is making one like that. I keep forgetting that the software and the hardware are separate. I am looking forward to seeing what HTC does with this. Those guys are nuts.&lt;/p&gt;  &lt;p&gt;I took a few moments and filmed some guerilla video of me exploring the phone. Again, this is just the build that was mailed to me today, not the final stuff.&lt;/p&gt;  &lt;p&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13727802&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13727802&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://vimeo.com/13727802"&gt;Windows Phone 7 - June 29th - Walkthough of Developer Phone&lt;/a&gt; from &lt;a href="http://vimeo.com/shanselman"&gt;Scott Hanselman&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;In my spare time, I'm going to be working on &lt;a href="http://www.babysmash.com"&gt;BabySmash&lt;/a&gt; for WP7, as well as a Diabetes application and maybe a few others. You can get the free developer tools at &lt;a href="http://developer.windowsphone.com"&gt;http://developer.windowsphone.com&lt;/a&gt; and sign up to sell your apps as well. I'm optimistic. This is quite a bit cooler than I expected. Looking forward to what's next.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Related Links&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/ff380145.aspx"&gt;Phone Development on MSDN&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://developer.windowsphone.com"&gt;http://developer.windowsphone.com&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lxkYJ4yeregA-3ULpktLgw5yA-c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lxkYJ4yeregA-3ULpktLgw5yA-c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lxkYJ4yeregA-3ULpktLgw5yA-c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lxkYJ4yeregA-3ULpktLgw5yA-c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=2BfmA_7u5lA:syhBIeW-4mQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=2BfmA_7u5lA:syhBIeW-4mQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=2BfmA_7u5lA:syhBIeW-4mQ:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=2BfmA_7u5lA:syhBIeW-4mQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=2BfmA_7u5lA:syhBIeW-4mQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=2BfmA_7u5lA:syhBIeW-4mQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=2BfmA_7u5lA:syhBIeW-4mQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=2BfmA_7u5lA:syhBIeW-4mQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=2BfmA_7u5lA:syhBIeW-4mQ:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/2BfmA_7u5lA" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=f0e14144-0126-4a94-88ae-d6dc6154b7b1</comments>
      <category>WinPhone</category>
    <feedburner:origLink>http://www.hanselman.com/blog/WindowsPhone7FirstImpressions.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=a1c21888-4d18-4b53-b319-40eae176fb51</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=a1c21888-4d18-4b53-b319-40eae176fb51</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=a1c21888-4d18-4b53-b319-40eae176fb51</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a1c21888-4d18-4b53-b319-40eae176fb51</wfw:commentRss>
      <slash:comments>23</slash:comments>
      <title>Ultimate Developer PC 2.0 - Part 3 - UPDATE on Building a WEI 7.9 and RFC for building a GOM (God's Own Machine)</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=a1c21888-4d18-4b53-b319-40eae176fb51</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/Yw_dlF7n0Ko/UltimateDeveloperPC20Part3UPDATEOnBuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx</link>
      <pubDate>Tue, 27 Jul 2010 23:47:07 GMT</pubDate>
      <description>&lt;div&gt;&lt;a href="http://www.hanselminutes.com/default.aspx?showID=238"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Big Ass Mobo" border="0" alt="Big Ass Mobo" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D006/image_3.png" width="350" height="197" /&gt;&lt;/a&gt; As a reminder, if you're just turning in, here's our glossary:   &lt;p&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;acronym title="Windows Experience Index"&gt;WEI&lt;/acronym&gt; - Windows Experience Index. How fast is your machine? If you say &amp;quot;I've got a WEI 6.0&amp;quot; you've got a good machine, for example. &lt;/li&gt;    &lt;li&gt;&lt;acronym title="Request for Comments"&gt;RFC&lt;/acronym&gt; - Request for Comments. This is crowdsourcing. I want to know what YOU think we need to do to make a machine that is so fast that it'll max out at WEI 7.9 and be a GOM. &lt;/li&gt;    &lt;li&gt;&lt;acronym title="God&amp;#39;s Own Machine"&gt;GOM&lt;/acronym&gt; - God's Own Machine. If the Good Lord had a computer, it'd be a 7.9. We want to build that machine. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There have been two posts so far:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/UltimateDeveloperPC20Part1BuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx"&gt;Ultimate Developer PC 2.0 - Part 1 - Building a WEI 7.9 and RFC for building a GOM (God's Own Machine)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/UltimateDeveloperPC20Part2UPDATEAndPODCASTOnBuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx"&gt;Ultimate Developer PC 2.0 - Part 2 - UPDATE and PODCAST on Building a WEI 7.9 and RFC for building a GOM (God's Own Machine)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Also, we hosted a &lt;a href="http://www.hanselminutes.com/default.aspx?showID=238"&gt;great podcast last week with some actual members of the WEI team and asked their ideas on how we could create the Ultimate Developer PC&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There were lots of great comments on both posts, and arguably there is more content in the comments than the posts! I want to give a big thank you to all the thoughtful people who have commented. You all know more than I do about this topic.&lt;/p&gt;  &lt;p&gt;The point of this exercise is several-fold. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;First, &lt;a href="http://www.hanselman.com/blog/TheCodingHorrorUltimateDeveloperRigThrowdownPart2.aspx"&gt;I haven't built a machine in 3 years, since the first Ultimate PC, lead by Jeff Atwood&lt;/a&gt;. Every Jedi should build their own lightsaber. &lt;/li&gt;    &lt;li&gt;Second, it'd be interesting to see if it's easy (or how hard) to get a 7.9 WEI (the current maximum) on a machine given a $3000 limit. It's also interesting to see what a $1000 PC gets. Yes, we all realize that WEI is just &lt;em&gt;one &lt;/em&gt;benchmark, but it's a public one and it's built into Windows, so it's interesting. &lt;/li&gt;    &lt;li&gt;Third, I am not much of a gamer (I have a Xbox for that) but I do run several large 24&amp;quot; to 30&amp;quot; monitors and don't like waiting for my Windows to repaint, so do like a faster video card. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here's some scores, some results, and some commentary.&lt;/p&gt;  &lt;h3&gt;Baseline. My Laptop.&lt;/h3&gt;  &lt;p&gt;This is the WEI my stock Lenovo W500 8Gb with an aftermarket OCZ Vertex 256gig SSD.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;img title="My W500 is a 4.6." border="0" alt="My W500 is a 4.6." src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/UltimateDevelop.0Part1RFCforbuildingaGOM_DEF0/image_3.png" width="567" height="197" /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Using Visual Studio 2010 and building the trunk of the &lt;a href="http://nerddinner.codeplex.com"&gt;NerdDinner&lt;/a&gt; project (a smallish sized ASP.NET app) is about 3 to 4 seconds. On my new PC, building NerdDinner from scratch happens before I can say &amp;quot;one one-thousand.&amp;quot; I could try it from MSBuild and the command line...&lt;/p&gt;  &lt;h3&gt;Measuring Commands with PowerShell&lt;/h3&gt;  &lt;p&gt;Here's a better way to measure. Taking Chris Tavares' vsvars32.ps2, changed slightly for Visual Studio 2010 and run under PowerShell x86, I add this to my local machine's Microsoft.PowerShell_profile.ps1. (As well as running &amp;quot;set-executionpolicy unrestricted&amp;quot; as admin. Or set it to whatever you like).&lt;/p&gt;  &lt;pre class="brush: csharp; toolbar: false; auto-links: false;"&gt;function Get-Batchfile ($file) {&lt;br /&gt;    $cmd = &amp;quot;`&amp;quot;$file`&amp;quot; &amp;amp; set&amp;quot;&lt;br /&gt;    cmd /c $cmd | Foreach-Object {&lt;br /&gt;        $p, $v = $_.split('=')&lt;br /&gt;        Set-Item -path env:$p -value $v&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function VsVars32($version = &amp;quot;10.0&amp;quot;)&lt;br /&gt;{&lt;br /&gt;    $key = &amp;quot;HKLM:SOFTWARE\Microsoft\VisualStudio\&amp;quot; + $version&lt;br /&gt;    $VsKey = get-ItemProperty $key&lt;br /&gt;    $VsInstallPath = [System.IO.Path]::GetDirectoryName($VsKey.InstallDir)&lt;br /&gt;    $VsToolsDir = [System.IO.Path]::GetDirectoryName($VsInstallPath)&lt;br /&gt;    $VsToolsDir = [System.IO.Path]::Combine($VsToolsDir, &amp;quot;Tools&amp;quot;)&lt;br /&gt;    $BatchFile = [System.IO.Path]::Combine($VsToolsDir, &amp;quot;vsvars32.bat&amp;quot;)&lt;br /&gt;    Get-Batchfile $BatchFile&lt;br /&gt;    [System.Console]::Title = &amp;quot;Visual Studio &amp;quot; + $version + &amp;quot; Windows Powershell&amp;quot;&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Thanks to Chris, now I can type &amp;quot;VsVars32&amp;quot; at any PowerShell prompt and I'm immediately setup with a Visual Studio Command Line environment. Just as an FYI, while MSBuild does report timings, since I'm using PowerShell, I can surround any command with &amp;quot;measure-command&amp;quot; as in.&lt;/p&gt;

&lt;p&gt;&lt;font face="Courier New"&gt;measure-command { msbuild /t:rebuild .\NerdDinner.sln }&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;In this case from the command line, NerdDinner takes 1900ms on my laptop and 900ms on my desktop, so this isn't a good test as the app is far too small.&lt;/p&gt;

&lt;p&gt;Of course, I can also run msbuild with the /m switch and &lt;a href="http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx"&gt;get parallel builds on multi-core machines&lt;/a&gt;. However, since NerdDinner only has two projects, I only get a 10% performance increase. Let's try a more significant project. &lt;/p&gt;

&lt;h3&gt;The Upfront Conclusion: How about &lt;a href="http://sourceforge.net/projects/nhibernate/files/"&gt;building yesterday's release of NHibernate 3.0 Alpha&lt;/a&gt;?&lt;/h3&gt;

&lt;p&gt;Here's the results, building NHibernate 3.0 Alpha using NHibernate.Everything.sln:&lt;/p&gt;

&lt;table border="1" cellspacing="0" cellpadding="2" width="550"&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;thead&gt;
    &lt;tr&gt;
      &lt;th valign="top" width="100"&gt;Times are in seconds&lt;/th&gt;

      &lt;th valign="top" width="100"&gt;Lenovo W500 w/ SSD&lt;/th&gt;

      &lt;th valign="top" width="100"&gt;Ultimate PC 1.0&lt;/th&gt;

      &lt;th valign="top" width="100"&gt;Ultimate PC 2.0&lt;/th&gt;
    &lt;/tr&gt;

    &lt;tr&gt;&lt;/tr&gt;
  &lt;/thead&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;MSBuild /t:rebuild&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;36.05&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;35.52&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;16.12&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;MSBuild /t:rebuild /m&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;24.98&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;25.57&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;12.53&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;MSBuild &lt;/td&gt;

      &lt;td valign="top" width="100"&gt;6.17&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;6.99&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;3.11&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;MSBuild /m&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;5.91&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;6.66&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;2.72&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Interesting that last year's laptop is very competitive with the original &amp;quot;&lt;a href="http://www.hanselman.com/blog/TheCodingHorrorUltimateDeveloperRigThrowdownPart2.aspx"&gt;Ultimate PC&lt;/a&gt;&amp;quot; from 2007 (still a beefy Quad Core) due to the laptop's new SSD.&lt;/p&gt;

&lt;p&gt;Still, against the best numbers the new PC is &lt;strong&gt;effectively twice as fast or more &lt;/strong&gt;at everything. Yesterday I was encoding a large HD video for Channel 9 and while the Lenovo took 3 hours, the new Ultimate PC 2.0 took 15 minutes. In some cases, it'll save hours on computationally intensive tasks, I believe. Additionally, for computationally intensive multi-tasking that have caused me to use multiple computers in the past, this machine has handled easily. For example, while I was encoding that video, I was also streaming live 720p HD video over Office Communicator. This takes at least 2 procs working full and slowed my Ultimate PC 1.0 down to the point of uselessness. The aggregate CPU on the new machine never went above 12% while just streaming video.&lt;/p&gt;

&lt;p&gt;While I did go overboard on the Video Card, I'm extremely happy with the computer so far. I threw in an NVidia GTX275 I had laying around to run another 22&amp;quot; monitor while the GTX480 is running the 30&amp;quot; and a 24&amp;quot;. The GTX480 &lt;strong&gt;does run hot&lt;/strong&gt;. For you, dear reader, a GTX275 or any decent $100 card would do you just fine and you'd save a lot of money.&lt;/p&gt;

&lt;p&gt;Here's the final parts list along with some caveats. Remember, building your own PC does come with risks, as you're sometimes putting together different companies parts and things don't always work perfectly. You can get a great 7.x WEI machine for $1000 from just about anyone. &lt;/p&gt;

&lt;h3&gt;The Parts List&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;$965 &lt;/strong&gt;&lt;a href="http://www.anrdoezrs.net/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16819115223%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Processors%2B-%2BDesktops-_-Intel-_-19115223&amp;amp;cjsku=N82E16819115223"&gt;&lt;strong&gt;Intel Core i7-980X Extreme Edition 3.33GHz LGA 1366 130W Six-Core Desktop Processor&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.awltovhc.com/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;I haven't overclocked this yet. I'm waiting for a better BIOS release from Gigabyte. If anyone is an expert overclocker and wants to have a chat and maybe do a show, give me a call. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;$699 (with combo actually $480) &lt;/strong&gt;&lt;a href="http://www.jdoqocy.com/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16813128446%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Motherboards%2B-%2BIntel-_-GIGABYTE-_-13128413&amp;amp;cjsku=N82E16813128446"&gt;&lt;strong&gt;GIGABYTE GA-X58A-UD9 ATX Intel Motherboard&lt;/strong&gt;&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;This motherboard is picky about power. My original Silverstone refused to boot this board, so I took it back and got an ANTEC and it works first try. The UD5 or UD7 would also have been nice and would have been smaller, but I wanted the USB3 and SATA 6gb/s support. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;$374 &lt;/strong&gt;&lt;a href="http://www.jdoqocy.com/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820227538%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Memory%2B%28Desktop%2BMemory%29-_-OCZ%2BTechnology-_-20227538&amp;amp;cjsku=N82E16820227538"&gt;&lt;strong&gt;OCZ Reaper Edition 12GB (3 x 4GB) 240-Pin DDR3 SDRAM DDR3 1333 (PC3 10666) Low Voltage Desktop Memory&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.tqlkg.com/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;Apparently the Intel x58 &amp;quot;Nehalem&amp;quot; chipset is finicky about RAM. When I boot the machine - sometimes - it says I have only 8 gigs of RAM (even though the BIOS knows I have 12 gigs and see it). I have to reboot a few times to get the 12 gigs to stick. I'm hoping this is fixed in a BIOS update or a little more voltage on the mobo. This appears to be a widespread issue. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;$320 &lt;/strong&gt;&lt;a href="http://www.bing.com/shopping/search?q=nvidia+gtx+480&amp;amp;form=QBRE"&gt;&lt;strong&gt;NVidia GTX 480&lt;/strong&gt;&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;Honestly, any good $100 card will do you. I know I went over the top on this. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;$610 &lt;/strong&gt;&lt;a href="http://www.anrdoezrs.net/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820148349%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Solid%2BState%2BDisk-_-Crucial%2BTechnology-_-20148349&amp;amp;cjsku=N82E16820148349"&gt;&lt;strong&gt;Crucial RealSSD C300 CTFDDAC256MAG-1G1 2.5&amp;quot; MLC Internal Solid State Drive (SSD)&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.lduhtrp.net/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;I needed to flash the BIOS on this SSD before I set it up, but that involved just burning an image to a CD and booting off it. This SSD will get you a 7.9 if you plug it into a SATA 6Gb/s port, or a 7.7 if it's plugged into a SATA 3Gb/s port in my experience. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;$174 &lt;/strong&gt;&lt;a href="http://www.kqzyfj.com/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16817371012%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Power%2BSupplies-_-Silverstone-_-17256057&amp;amp;cjsku=N82E16817371012"&gt;&lt;strong&gt;Antec TruePOwer TPQ-1000 PowerSupply&lt;/strong&gt;&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;Very quiet, worked nicely and immediately. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;$199 &lt;/strong&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811119225&amp;amp;Tpk=haf-x"&gt;&lt;strong&gt;Cooler Master HAF-X Case&lt;/strong&gt;&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;This case is a beast, but it's required for the UD9 motherboard as extended ATX. To be clear, it's big. That said, it's got great airflow, and it's quiet even with all the fans running as they are big low RPM fans. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, &lt;a href="http://twitter.com/Erlichmen"&gt;Shay Erlichmen&lt;/a&gt; wrote some Google Apps Javascript and put up &lt;a href="https://spreadsheets0.google.com/ccc?key=t_dEV-yODC7X4sp2dfazTfQ&amp;amp;hl=en#gid=0"&gt;a LIVE Google Spreadsheet that will scrape NewEgg's site and put up the current total of all the components&lt;/a&gt;. Thanks to Shay!&lt;/p&gt;

&lt;h3&gt;The Build&lt;/h3&gt;

&lt;p&gt;I built the case over two 4 hour sessions and &lt;a href="http://www.ustream.tv/channel/hanselminuteslive"&gt;broadcasted live to 80 of my close internet friends on UStream&lt;/a&gt;. A lot of really smart people helped me out on this build and offered a lot of interesting points. &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can watch the VERY raw video of &lt;a href="http://www.ustream.tv/recorded/8374848"&gt;Day 1&lt;/a&gt; and &lt;a href="http://www.ustream.tv/recorded/8413110"&gt;Day 2&lt;/a&gt; on &lt;a href="http://www.ustream.tv/channel/hanselminuteslive"&gt;UStream&lt;/a&gt; if you like pain. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first day build went bad because of the power supply issue so we got it built, then spent hours thinking it was a motherboard issue. It was the power supply.&lt;/p&gt;

&lt;p&gt;After we assembled the machine and before we installed any drivers, here was the first WEI score. The 1.0s happened because the standard VGA driver loaded.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1.0 WEI" border="0" alt="1.0 WEI" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D20C/wei1_3.png" width="583" height="219" /&gt;&lt;/p&gt;

&lt;p&gt;After installing the Intel Chipset drivers for the Motherboard and the latest NVidia drivers, we were at 7.8 for video and 7.4 all up with the SSD holding us back.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="7.4 WEI" border="0" alt="7.4 WEI" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D20C/wei2_3.png" width="570" height="205" /&gt;&lt;/p&gt;

&lt;p&gt;I moved the SSD to another SATA port as this motherboard has multiple SATA chipsets (Intel, Marvel) and installed the latest drivers. In one case, setting the BIOS to IDE instead of AHCI seemed to stick me at 5.9 for disk.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="5.9 WEI" border="0" alt="5.9 WEI" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D20C/wei4_3.png" width="599" height="202" /&gt;&lt;/p&gt;

&lt;p&gt;Once I moved onto the Marvel SATA 3 controller with 6 GB/s I got 7.9 on disk. Interestingly the same drive on the Intel SATA 2 controller gets 7.7. The Marvel gets 310MB/s out of the Crucial SSD while the Intel controller gets 270MB/s.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="7.8 WEI" border="0" alt="7.8 WEI" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D20C/wei3_3.png" width="552" height="223" /&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;At this point, running everything stock and air-cooled, I have a nice 7.8 machine. I suspect I won't be able to get the Processor to 7.9 without overclocking to 4Ghz. As it is, the machine is running lovely. I wouldn't mind overclocking but I have decided against water cooling as I'm just too old and I need a machine to work 100% of the time. &lt;a href="http://10rem.net/blog/2010/06/23/the-79-wei-pc"&gt;Pete Brown will be water cooling his&lt;/a&gt;, he says, so I'll be following his build. That said, if anyone wants to sit with me and chat about if it's possible to get this machine to 4Ghz using air-cooling, give me a holler. As for the graphics, I don't see how I can get to 7.9 without something drastic.&lt;/p&gt;

&lt;p&gt;All in all, a great time was had by all. Thanks so much to everyone who helped and to all the wonderful (and waspish) commenters who made this a better experience. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx"&gt;Hack: Parallel MSBuilds from within the Visual Studio IDE&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx"&gt;Faster Builds with MSBuild using Parallel Builds and Multicore CPUs&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="https://spreadsheets0.google.com/ccc?key=t_dEV-yODC7X4sp2dfazTfQ&amp;amp;hl=en#gid=0"&gt;Newegg Ultimate PC 2.0 Price and Links Spreadsheet&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Earlier posts: 
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/UltimateDeveloperPC20Part1BuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx"&gt;Ultimate Developer PC 2.0 - Part 1 - Building a WEI 7.9 and RFC for building a GOM (God's Own Machine)&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/UltimateDeveloperPC20Part2UPDATEAndPODCASTOnBuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx"&gt;Ultimate Developer PC 2.0 - Part 2 - UPDATE and PODCAST on Building a WEI 7.9 and RFC for building a GOM (God's Own Machine)&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;Also, we hosted a &lt;a href="http://www.hanselminutes.com/default.aspx?showID=238"&gt;great podcast last week with some actual members of the WEI team and asked their ideas on how we could create the Ultimate Developer PC&lt;/a&gt;. &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://10rem.net/blog?filterby=Ultimate-PC"&gt;Pete Brown's parallel Ultimate PC Build&lt;/a&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;Ultimate PC 1.0 
    &lt;ul&gt;
      &lt;li&gt;Podcasts 
        &lt;ul&gt;
          &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast69BuildingADeveloperPC.aspx"&gt;Hanselminutes Podcast 69 - Building a Developer PC&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast74JeffAtwoodOverclocksTheUltimatePC.aspx"&gt;Hanselminutes Podcast 74 - Jeff Atwood overclocks the Ultimate PC&lt;/a&gt; &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;

      &lt;li&gt;Blog Posts 
        &lt;ul&gt;
          &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/TheCodingHorrorUltimateDeveloperRigThrowdownPart1.aspx"&gt;The CodingHorror Ultimate Developer Rig Throwdown: Part 1&lt;/a&gt; - The idea is presented and my list of&lt;strike&gt;demands&lt;/strike&gt; goals is kicked around. &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/TheCodingHorrorUltimateDeveloperRigThrowdownPart2.aspx"&gt;The CodingHorror Ultimate Developer Rig Throwdown: Part 2&lt;/a&gt; - The hardware list from NewEgg with a total of $1903.00. It'd be probably $1600 or less today, just a few months later. &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/TheCodingHorrorUltimateDeveloperRigThrowdownPart3.aspx"&gt;The CodingHorror Ultimate Developer Rig Throwdown: Part 3&lt;/a&gt; - Jeff gets my system to boot and I link to him excessively. &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000905.html"&gt;Building a PC, Part I&lt;/a&gt; - The Basic Build. Jeff unpacks and get my system to POST in two hours. &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000907.html"&gt;Building a PC, Part II&lt;/a&gt; - Lots of pics as Jeff moves beyond BIOS POST and adds my 10,000 RPM Raptor Drives. &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000908.html"&gt;Building a PC, Part III&lt;/a&gt; - Jeff digs into the magic and voodoo that is overclocking and pushes my system nearer to 3 Ghz. We're conservative overclockers, though. Remember this is a developer machine, not a Gamer PC. &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000918.html"&gt;Building a PC, Part IV&lt;/a&gt; - Jeff adds some damping foam and greats a &lt;a href="http://www.codinghorror.com/blog/archives/000918.html"&gt;&lt;strong&gt;Basic&lt;/strong&gt;, &lt;strong&gt;Premium &lt;/strong&gt;and &lt;strong&gt;Deluxe &lt;/strong&gt;Parts List&lt;/a&gt;. &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Obligatory Taskman Screenshot!&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D20C/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="12 procs in Taskman" border="0" alt="12 procs in Taskman" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D20C/image_thumb.png" width="554" height="287" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Woohoo!&lt;/p&gt;
.

&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bw0k7Hn5TECuC1sspoFGTPu-_Qw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bw0k7Hn5TECuC1sspoFGTPu-_Qw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bw0k7Hn5TECuC1sspoFGTPu-_Qw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bw0k7Hn5TECuC1sspoFGTPu-_Qw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=Yw_dlF7n0Ko:06rlR3F-ypg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=Yw_dlF7n0Ko:06rlR3F-ypg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=Yw_dlF7n0Ko:06rlR3F-ypg:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=Yw_dlF7n0Ko:06rlR3F-ypg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=Yw_dlF7n0Ko:06rlR3F-ypg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=Yw_dlF7n0Ko:06rlR3F-ypg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=Yw_dlF7n0Ko:06rlR3F-ypg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=Yw_dlF7n0Ko:06rlR3F-ypg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=Yw_dlF7n0Ko:06rlR3F-ypg:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/Yw_dlF7n0Ko" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=a1c21888-4d18-4b53-b319-40eae176fb51</comments>
      <category>Hardware</category>
      <category>Podcast</category>
    <feedburner:origLink>http://www.hanselman.com/blog/UltimateDeveloperPC20Part3UPDATEOnBuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=8de22ae5-4079-4975-9f33-21ebecbd7a97</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=8de22ae5-4079-4975-9f33-21ebecbd7a97</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=8de22ae5-4079-4975-9f33-21ebecbd7a97</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8de22ae5-4079-4975-9f33-21ebecbd7a97</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>ASP.NET MVC 3 Preview 1 Released – Channel 9 Video and Hanselminutes Podcast 224, Oh My!</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=8de22ae5-4079-4975-9f33-21ebecbd7a97</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/KBPwOw4C0Yo/ASPNETMVC3Preview1ReleasedChannel9VideoAndHanselminutesPodcast224OhMy.aspx</link>
      <pubDate>Tue, 27 Jul 2010 21:51:58 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Phil and friends released ASP.NET MVC 3 Preview 1 today. I snuck into the office of Phil Haack and Morgan the Canadian Intern to talk about the release of ASP.NET MVC 3 Preview 1 and some of the cool &amp;quot;futures&amp;quot; stuff that Morgan (and our fleet of interns) is working on. This video isn't only about MVC as Morgan's working on some cool CSS Sprites stuff that works nicely in WebForms that you should check out as well.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-ASPNET-MVC-3-and-NEW-ASPNET-Futures-with-Phil-Haack-and-Morgan-the-Intern/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/ASP.NETMVC3Preview1ReleasedVideoandPodca_CCD2/image_3.png" width="504" height="275" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also, my &lt;a href="http://www.hanselminutes.com/default.aspx?showID=242"&gt;two-hundred-and-twenty-fourth podcast is up&lt;/a&gt; and I talk more in depth with, yes, you guessed, it, Phil Haack. More detail in a less shaky-camera format.&lt;/p&gt;  &lt;h3&gt;What's new in ASP.NET MVC 3?&lt;/h3&gt;  &lt;p&gt;Note that installing ASP.NET MVC 3 won't mess up your ASP.NET MVC 2 applications.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Razor Syntax View Engine &lt;/strong&gt;- Cleaner view syntax &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Dynamic View and ViewModel properties&lt;/strong&gt; - passing data between controllers and views using &lt;em&gt;dynamic&lt;/em&gt; rather than a dictionary &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&amp;quot;Add View&amp;quot; Dialog Box Supports Multiple View Engines&lt;/strong&gt; - You two can be in this box. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Service Location and Dependency Injection Support&lt;/strong&gt; - Get your DI hooked into controller factories, dependency injection, action filters and View Pages. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Global Filters&lt;/strong&gt; - put filters on the all control methods &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New JsonValueProviderFactory Class &lt;/strong&gt;- Model bind directly to JSON-encoded data &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Support for .NET Framework 4 Validation Attributes and IValidatableObject &lt;/strong&gt;- Easier validation including validating one property based on another. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New IClientValidatable Interface &lt;/strong&gt;- Discovering at runtime if the client supports validation. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Support for .NET Framework 4 Metadata Attributes &lt;/strong&gt;- Support .NET 4 specific attributes like DisplayAttribute &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New IMetadataAware Interface &lt;/strong&gt;- Write your own attributes to contribute to the ModelMetadata creation process. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New Action Result Types &lt;/strong&gt;- HttpNotFoundResult, HttpStatusCodeResult. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Permanent Redirect &lt;/strong&gt;- More easily return 301s for Actions, Routes or any URL. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;ASP.NET MVC Preview 1 Link Round-Up&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;amp;displaylang=en"&gt;&lt;strong&gt;Download ASP.NET MVC 3 Preview 1 - Note: Requires ASP.NET 4&lt;/strong&gt;&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;but most importantly: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;amp;displaylang=en"&gt;&lt;strong&gt;ASP.NET MVC&amp;#160; Preview 1 Release Notes&lt;/strong&gt;&lt;/a&gt; are on this page. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx"&gt;ScottGu: Introducing ASP.NET MVC 3 (Preview 1)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx"&gt;ScottGu: Razor ViewEngine&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Brad Wilson on ASP.NET MVC 3's improved Dependency Injection Support.      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://bradwilson.typepad.com/blog/2010/07/service-location-pt1-introduction.html"&gt;ASP.NET MVC 3 Service Location: Introduction (Part 1)&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://bradwilson.typepad.com/blog/2010/07/service-location-pt2-controllers.html"&gt;ASP.NET MVC 3 Service Location: Controllers (Part 2)&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://bradwilson.typepad.com/blog/2010/07/service-location-pt3-views.html"&gt;ASP.NET MVC 3 Service Location: Views (Part 3)&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html"&gt;ASP.NET MVC 3 Service Location: Filters (Part 4)&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://haacked.com/archive/2010/07/27/aspnetmvc3-preview1-released.aspx"&gt;Phil Haack: ASP.NET MVC 3 Preview 1 Released&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/aspnet/overview.aspx?gad=CPLKy9kDEghsdEbLXRZ0NBiF1bL_AyCCkdsU"&gt;&lt;strong&gt;Telerik&lt;/strong&gt;&lt;/a&gt; is our sponsor for this show.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/community/promos/hanselminutes-promo.aspx?utm_source=HanselminutesBlog&amp;amp;utm_medium=banner&amp;amp;utm_campaign=SummerPromo_July19"&gt;&lt;img title="Hansel_Promo" border="0" alt="Hansel_Promo" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast222ArtisShippingDesi_B3F/Hansel_Promo_3.jpg" width="504" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hanselminutes podcasts listeners can get $50 off any Telerik product this summer. All interested listeners should drop an email to &lt;b&gt;&lt;a href="http://www.hanselman.com/"&gt;podcast@telerik.com&lt;/a&gt; &lt;/b&gt;and mention the Hanselminutes promo and their sales team will reply with the special $50-off coupon code.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;strong&gt;Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface and developer tools, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/aspnet-ajax.aspx"&gt;&lt;em&gt;&lt;strong&gt;ASP.NET AJAX&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/aspnet-mvc.aspx"&gt;&lt;em&gt;&lt;strong&gt;MVC&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;&lt;em&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/winforms.aspx"&gt;&lt;em&gt;&lt;strong&gt;Windows Forms&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt; and &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/wpf.aspx"&gt;&lt;em&gt;&lt;strong&gt;WPF&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;. Enjoy developer tools like &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/reporting.aspx"&gt;&lt;em&gt;&lt;strong&gt;.NET Reporting&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/orm.aspx"&gt;&lt;em&gt;&lt;strong&gt;ORM&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/automated-testing-tools.aspx"&gt;&lt;em&gt;&lt;strong&gt;Automated Testing Tools&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/team-productivity-tools/teampulse.aspx"&gt;&lt;em&gt;&lt;strong&gt;Agile Project Management Tools&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;, and &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.sitefinity.com/"&gt;&lt;em&gt;&lt;strong&gt;Content Management Solution&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;. And now you can increase your productivity with &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/products/justcode.aspx"&gt;&lt;em&gt;&lt;strong&gt;JustCode&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;, Telerik’s new productivity tool for code analysis and refactoring. Visit&amp;#160; &lt;/strong&gt;&lt;/em&gt;&lt;a href="http://www.telerik.com/"&gt;&lt;em&gt;&lt;strong&gt;www.telerik.com&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YkM4SsQzvAaXsh0G6iAl1apWJLY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YkM4SsQzvAaXsh0G6iAl1apWJLY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YkM4SsQzvAaXsh0G6iAl1apWJLY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YkM4SsQzvAaXsh0G6iAl1apWJLY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=KBPwOw4C0Yo:SIkX69tAVKw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=KBPwOw4C0Yo:SIkX69tAVKw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=KBPwOw4C0Yo:SIkX69tAVKw:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=KBPwOw4C0Yo:SIkX69tAVKw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=KBPwOw4C0Yo:SIkX69tAVKw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=KBPwOw4C0Yo:SIkX69tAVKw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=KBPwOw4C0Yo:SIkX69tAVKw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=KBPwOw4C0Yo:SIkX69tAVKw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=KBPwOw4C0Yo:SIkX69tAVKw:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/KBPwOw4C0Yo" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=8de22ae5-4079-4975-9f33-21ebecbd7a97</comments>
      <category>ASP.NET</category>
      <category>ASP.NET MVC</category>
      <category>Channel9</category>
      <category>Podcast</category>
      <category>VS2010</category>
    <feedburner:origLink>http://www.hanselman.com/blog/ASPNETMVC3Preview1ReleasedChannel9VideoAndHanselminutesPodcast224OhMy.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=558488be-958a-41ff-b789-d69c5d6b0988</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=558488be-958a-41ff-b789-d69c5d6b0988</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=558488be-958a-41ff-b789-d69c5d6b0988</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=558488be-958a-41ff-b789-d69c5d6b0988</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>Hanselminutes Podcast 222 - Art is Shipping - Designers and Developers with Jin Yang</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=558488be-958a-41ff-b789-d69c5d6b0988</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/8fx5rSqFKN8/HanselminutesPodcast222ArtIsShippingDesignersAndDevelopersWithJinYang.aspx</link>
      <pubDate>Fri, 16 Jul 2010 17:53:57 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;a href="http://www.hanselminutes.com/default.aspx?showID=240"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Random Giant Robot Picture" border="0" alt="Random Giant Robot Picture" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast222ArtisShippingDesi_9921/image_3.png" width="350" height="232" /&gt;&lt;/a&gt; My &lt;a href="http://www.hanselminutes.com/default.aspx?showID=240"&gt;two-hundred-and-twenty-second podcast is up&lt;/a&gt;. Scott sits down with designer &lt;a href="http://www.8164.org"&gt;Jin Yang&lt;/a&gt; (&lt;a href="http://twitter.com/jzy"&gt;@jzy&lt;/a&gt;) to talk about the fundamental differences between developers and designers. Are we a totally different breed? How should designers and developers work together? Should designers code their own sites?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE: If you want to download our complete archives as a feed - that's all 219 shows, &lt;/strong&gt;&lt;a href="http://feeds.feedburner.com/HanselminutesCompleteMP3"&gt;&lt;strong&gt;subscribe to the Complete MP3 Feed here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Subscribe: &lt;/strong&gt;&lt;a href="http://feeds.feedburner.com/Hanselminutes"&gt;&lt;img border="0" alt="Subscribe to Hanselminutes" src="http://www.hanselman.com/blog/content/binary/feed_2Dicon_2D16x16.png" /&gt;&lt;/a&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=117488860"&gt;&lt;img border="0" alt="Subscribe to my Podcast in iTunes" src="http://www.hanselman.com/blog/themes/zenGarden2/itunes_subscribe.gif" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download: &lt;/strong&gt;&lt;a href="http://perseus.franklins.net/hanselminutes_0222f.mp3"&gt;MP3 Full Show&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;Links from the Show&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.456bereastreet.com/"&gt;http://www.456bereastreet.com/ (accessibility)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.alistapart.com/"&gt;http://www.alistapart.com/ (web design, standards)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.drawar.com/"&gt;http://www.drawar.com/ (design community, articles, showcases and forum).&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.lukew.com/ff/"&gt;http://www.lukew.com/ff/ (interaction design)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://37signals.com/svn/posts"&gt;http://37signals.com/svn/posts (web app design, inspirations)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.smashingmagazine.com/"&gt;http://www.smashingmagazine.com/ (showcases, freebies, articles)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://typography.com/email/2010_03/index_tw.htm"&gt;http://typography.com/email/2010_03/index_tw.htm (typography)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://retinart.net/"&gt;http://retinart.net/ (graphics design)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://cssglobe.com/"&gt;http://cssglobe.com/ (frontend dev)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://ilovetypography.com/"&gt;http://ilovetypography.com/ (typography)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.uxbooth.com/"&gt;http://www.uxbooth.com/ (User Experience)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://scriptandstyle.com"&gt;http://scriptandstyle.com/ (frontend dev)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.thegridsystem.org/"&gt;http://www.thegridsystem.org/ (layout)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://52weeksofux.com/"&gt;http://52weeksofux.com/ (User experience, design)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://tutsplus.com/"&gt;http://tutsplus.com/ (tutorials)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.zeldman.com/ "&gt;http://www.zeldman.com/ (web standards)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Do also &lt;a href="http://www.hanselminutes.com/archives.aspx"&gt;remember the complete archives&lt;/a&gt; are always up and they have &lt;strong&gt;&lt;em&gt;PDF Transcripts&lt;/em&gt;&lt;/strong&gt;, a little known feature that show up a few weeks after each show. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/aspnet/overview.aspx?gad=CPLKy9kDEghsdEbLXRZ0NBiF1bL_AyCCkdsU"&gt;&lt;strong&gt;Telerik&lt;/strong&gt;&lt;/a&gt; is our sponsor for this show.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.telerik.com/community/promos/hanselminutes-promo.aspx?utm_source=HanselminutesBlog&amp;amp;utm_medium=banner&amp;amp;utm_campaign=SummerPromo_July19"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Hansel_Promo" border="0" alt="Hansel_Promo" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast222ArtisShippingDesi_B3F/Hansel_Promo_3.jpg" width="504" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hanselminutes podcasts listeners can get $50 off any Telerik product this summer. All interested listeners should drop an email to &lt;b&gt;&lt;a href="http://www.hanselman.com/"&gt;podcast@telerik.com&lt;/a&gt; &lt;/b&gt;and mention the Hanselminutes promo and their sales team will reply with the special $50-off coupon code. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/aspnet/overview.aspx?gad=CPLKy9kDEghsdEbLXRZ0NBiF1bL_AyCCkdsU"&gt;&lt;strong&gt;&lt;img border="0" align="left" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast51StaticCodeAnalysis_140AB/telerikLogo%5B1%5D%5B8%5D.gif" width="216" height="74" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface and developer tools, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/aspnet-ajax.aspx"&gt;&lt;strong&gt;ASP.NET AJAX&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/aspnet-mvc.aspx"&gt;&lt;strong&gt;MVC&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/winforms.aspx"&gt;&lt;strong&gt;Windows Forms&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;and &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/wpf.aspx"&gt;&lt;strong&gt;WPF&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. Enjoy developer tools like &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/reporting.aspx"&gt;&lt;strong&gt;.NET reporting&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/orm.aspx"&gt;&lt;strong&gt;ORM&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/web-testing-tools.aspx"&gt;&lt;strong&gt;Automated Testing Tools&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/tfsmanager-and-tfsdashboard.aspx"&gt;&lt;strong&gt;TFS&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, and &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/sitefinity.aspx"&gt;&lt;strong&gt;Content Management Solution&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. And now you can increase your productivity with JustCode, Telerik’s new productivity tool for code analysis and refactoring. Visit&lt;/strong&gt;&lt;a href="http://www.telerik.com/"&gt;&lt;strong&gt;www.telerik.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;As I've said before this show comes to you with the audio expertise and stewardship of &lt;a href="http://weblogs.asp.net/cfranklin/archive/2006/01/11/435036.aspx"&gt;Carl Franklin&lt;/a&gt;. The name comes from &lt;a href="http://www.paraesthesia.com/blog/comments.php?id=776_0_1_0_C"&gt;Travis Illig&lt;/a&gt;, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring) &lt;/p&gt;  &lt;p&gt;Enjoy. Who knows what'll happen in the next show?&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gv4HYMxqEeHSsuMfvs42ot5PYAc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gv4HYMxqEeHSsuMfvs42ot5PYAc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gv4HYMxqEeHSsuMfvs42ot5PYAc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gv4HYMxqEeHSsuMfvs42ot5PYAc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=8fx5rSqFKN8:JuvIk4Xcy_8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=8fx5rSqFKN8:JuvIk4Xcy_8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=8fx5rSqFKN8:JuvIk4Xcy_8:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=8fx5rSqFKN8:JuvIk4Xcy_8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=8fx5rSqFKN8:JuvIk4Xcy_8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=8fx5rSqFKN8:JuvIk4Xcy_8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=8fx5rSqFKN8:JuvIk4Xcy_8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=8fx5rSqFKN8:JuvIk4Xcy_8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=8fx5rSqFKN8:JuvIk4Xcy_8:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/8fx5rSqFKN8" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=558488be-958a-41ff-b789-d69c5d6b0988</comments>
      <category>Podcast</category>
      <category>Programming</category>
    <feedburner:origLink>http://www.hanselman.com/blog/HanselminutesPodcast222ArtIsShippingDesignersAndDevelopersWithJinYang.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=705e6eb5-24c6-4475-bbf2-52e4317d63e6</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=705e6eb5-24c6-4475-bbf2-52e4317d63e6</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=705e6eb5-24c6-4475-bbf2-52e4317d63e6</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=705e6eb5-24c6-4475-bbf2-52e4317d63e6</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Hanselminutes Podcast 221 - Hanselminutiae-eight with Dan Fernandez</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=705e6eb5-24c6-4475-bbf2-52e4317d63e6</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/z1kwPHNyVUo/HanselminutesPodcast221HanselminutiaeeightWithDanFernandez.aspx</link>
      <pubDate>Fri, 16 Jul 2010 17:49:43 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;a href="http://www.hanselminutes.com/default.aspx?showID=239"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast221Hanselminutiaeeig_953D/image_3.png" width="250" height="142" /&gt;&lt;/a&gt; My &lt;a href="http://www.hanselminutes.com/default.aspx?showID=239"&gt;two-hundred-and-twenty-first podcast is up&lt;/a&gt;. This week it's a very sick &lt;a href="http://blogs.msdn.com/b/danielfe/"&gt;Dan Fernandez&lt;/a&gt; from &lt;a href="http://channel9.msdn.com"&gt;Channel 9&lt;/a&gt; who joins me on the show for a random Hanselminutiae. We talk iPads, Windows Phone 7, Hulu Plus, TimeSvr, innovation and more. Dan is the co-host of &lt;a href="http://channel9.msdn.com/shows/This+Week+On+Channel+9/"&gt;This Week on Channel 9&lt;/a&gt;, a random and &lt;a href="http://channel9.msdn.com/shows/This+Week+On+Channel+9/RSS/"&gt;cool weekly video show on Channel 9 that you can subscribe to here&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE: If you want to download our complete archives as a feed - that's all 219 shows, &lt;/strong&gt;&lt;a href="http://feeds.feedburner.com/HanselminutesCompleteMP3"&gt;&lt;strong&gt;subscribe to the Complete MP3 Feed here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Subscribe: &lt;/strong&gt;&lt;a href="http://feeds.feedburner.com/Hanselminutes"&gt;&lt;img border="0" alt="Subscribe to Hanselminutes" src="http://www.hanselman.com/blog/content/binary/feed_2Dicon_2D16x16.png" /&gt;&lt;/a&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=117488860"&gt;&lt;img border="0" alt="Subscribe to my Podcast in iTunes" src="http://www.hanselman.com/blog/themes/zenGarden2/itunes_subscribe.gif" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download: &lt;/strong&gt;&lt;a href="http://perseus.franklins.net/hanselminutes_0221.mp3"&gt;MP3 Full Show&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;Links from the Show&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/jgalasyn/archive/2010/07/07/modern-programming-a-tale-of-four-frameworks.aspx"&gt;Modern programming: A tale of four frameworks&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.hulu.com/plus/"&gt;Hulu Plus - US Only&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.mostlymaths.net/2010/03/8-reasons-for-re-inventing-wheel-as.html"&gt;8 reasons for re-inventing the wheel as a programmer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.timesvr.com/"&gt;TimeSvr Virtual Assistant&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Do also &lt;a href="http://www.hanselminutes.com/archives.aspx"&gt;remember the complete archives&lt;/a&gt; are always up and they have &lt;strong&gt;&lt;em&gt;PDF Transcripts&lt;/em&gt;&lt;/strong&gt;, a little known feature that show up a few weeks after each show.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/aspnet/overview.aspx?gad=CPLKy9kDEghsdEbLXRZ0NBiF1bL_AyCCkdsU"&gt;&lt;strong&gt;Telerik&lt;/strong&gt;&lt;/a&gt; is our sponsor for this show.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/community/promos/hanselminutes-promo.aspx?utm_source=HanselminutesBlog&amp;amp;utm_medium=banner&amp;amp;utm_campaign=SummerPromo_July19"&gt;&lt;img title="Hansel_Promo" border="0" alt="Hansel_Promo" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast222ArtisShippingDesi_B3F/Hansel_Promo_3.jpg" width="504" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hanselminutes podcasts listeners can get $50 off any Telerik product this summer. All interested listeners should drop an email to &lt;b&gt;&lt;a href="http://www.hanselman.com/"&gt;podcast@telerik.com&lt;/a&gt; &lt;/b&gt;and mention the Hanselminutes promo and their sales team will reply with the special $50-off coupon code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/aspnet/overview.aspx?gad=CPLKy9kDEghsdEbLXRZ0NBiF1bL_AyCCkdsU"&gt;&lt;strong&gt;&lt;img border="0" align="left" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/HanselminutesPodcast51StaticCodeAnalysis_140AB/telerikLogo%5B1%5D%5B8%5D.gif" width="216" height="74" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface and developer tools, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/aspnet-ajax.aspx"&gt;&lt;strong&gt;ASP.NET AJAX&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/aspnet-mvc.aspx"&gt;&lt;strong&gt;MVC&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/winforms.aspx"&gt;&lt;strong&gt;Windows Forms&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;and &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/wpf.aspx"&gt;&lt;strong&gt;WPF&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. Enjoy developer tools like &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/reporting.aspx"&gt;&lt;strong&gt;.NET reporting&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/orm.aspx"&gt;&lt;strong&gt;ORM&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;a href="http://www.telerik.com/products/web-testing-tools.aspx"&gt;&lt;strong&gt;Automated Testing Tools&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/tfsmanager-and-tfsdashboard.aspx"&gt;&lt;strong&gt;TFS&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, and &lt;/strong&gt;&lt;a href="http://www.telerik.com/products/sitefinity.aspx"&gt;&lt;strong&gt;Content Management Solution&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. And now you can increase your productivity with JustCode, Telerik’s new productivity tool for code analysis and refactoring. Visit&lt;/strong&gt;&lt;a href="http://www.telerik.com/"&gt;&lt;strong&gt;www.telerik.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;As I've said before this show comes to you with the audio expertise and stewardship of &lt;a href="http://weblogs.asp.net/cfranklin/archive/2006/01/11/435036.aspx"&gt;Carl Franklin&lt;/a&gt;. The name comes from &lt;a href="http://www.paraesthesia.com/blog/comments.php?id=776_0_1_0_C"&gt;Travis Illig&lt;/a&gt;, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)&lt;/p&gt;  &lt;p&gt;Enjoy. Who knows what'll happen in the next show?&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o_SkS-PfUH2axFRl8Nn5CptxGo8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o_SkS-PfUH2axFRl8Nn5CptxGo8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o_SkS-PfUH2axFRl8Nn5CptxGo8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o_SkS-PfUH2axFRl8Nn5CptxGo8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=z1kwPHNyVUo:DYRyaRGlsJQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=z1kwPHNyVUo:DYRyaRGlsJQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=z1kwPHNyVUo:DYRyaRGlsJQ:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=z1kwPHNyVUo:DYRyaRGlsJQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=z1kwPHNyVUo:DYRyaRGlsJQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=z1kwPHNyVUo:DYRyaRGlsJQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=z1kwPHNyVUo:DYRyaRGlsJQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=z1kwPHNyVUo:DYRyaRGlsJQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=z1kwPHNyVUo:DYRyaRGlsJQ:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/z1kwPHNyVUo" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=705e6eb5-24c6-4475-bbf2-52e4317d63e6</comments>
      <category>Podcast</category>
    <feedburner:origLink>http://www.hanselman.com/blog/HanselminutesPodcast221HanselminutiaeeightWithDanFernandez.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=df836a89-8984-49c4-83ae-046764575da1</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=df836a89-8984-49c4-83ae-046764575da1</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=df836a89-8984-49c4-83ae-046764575da1</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=df836a89-8984-49c4-83ae-046764575da1</wfw:commentRss>
      <slash:comments>41</slash:comments>
      <title>Simple Code First with Entity Framework 4 - Magic Unicorn Feature CTP 4</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=df836a89-8984-49c4-83ae-046764575da1</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/3xB9HjlfvQU/SimpleCodeFirstWithEntityFramework4MagicUnicornFeatureCTP4.aspx</link>
      <pubDate>Thu, 15 Jul 2010 00:54:41 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/129310627_4.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Space Needle made of LEGO" border="0" alt="Space Needle made of LEGO" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/129310627_thumb_1.jpg" width="225" height="301" /&gt;&lt;/a&gt;Microsoft's been releasing a number of right-sized LEGO pieces lately. In case you missed it, Betas have been announced for:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/06/30/new-embedded-database-support-with-asp-net.aspx"&gt;&lt;strong&gt;SQL 4 Compact Edition&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; - &lt;/strong&gt;It has a small embedded file-based SQL Database, and a web-server called IIS Express that's compatible with the full version of IIS. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx"&gt;&lt;strong&gt;&amp;quot;Razor&amp;quot; Page Syntax&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;- A way to make pages/ViewEngine called &amp;quot;Razor.&amp;quot; Your sites can be later be expanded to use all of ASP.NET MVC. It's a simple syntax that is easy to learn. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/06/introducing-webmatrix.aspx"&gt;&lt;strong&gt;WebMatrix&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; - &lt;/strong&gt;It's a small (15 megs if you have .NET 4, 50megs if you don't) lightweight IDE for making ASP.NET or PHP websites. Good for non-pro developers.       &lt;ul&gt;       &lt;li&gt;It uses the WebDeploy engine to deploy apps to hosts, setting up permissions, copying databases, etc. &lt;/li&gt;        &lt;li&gt;WebMatrix also has the free &lt;a href="http://www.iis.net/download/SEOToolkit"&gt;&lt;strong&gt;Search Engine Optimization Toolkit&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;built in, so you can spider your own site and see how Search Engines see it. It'll make recommendations and store reports. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx"&gt;&lt;strong&gt;IIS Express&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;- A version of the IIS 7.5 Web Server that can be run as non-admin, isn't installed as a service, that will also integrate with Visual Studio &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More details to come on all this. Howver, on the tooling side, I did get a chance to talk to &lt;a href="http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-Razor-IIS-Express-SQL-4-Compact-Edition-and-VS2010-Tooling-with-Damien-Edwards/"&gt;Damian Edwards, a developer working on some of this stuff and I put video up on Channel 9&lt;/a&gt; yesterday.&lt;/p&gt;  &lt;p&gt;There's lots of cool pieces that are packaged up with WebMatrix initially, but these pieces are interesting for pro developers as well. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Still, something's missing.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-Razor-IIS-Express-SQL-4-Compact-Edition-and-VS2010-Tooling-with-Damien-Edwards/"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_23.png" width="250" height="145" /&gt;&lt;/a&gt;In my mind, it's been too hard to talk to databases. I like LINQ to SQL and used it on the first NerdDinner version, but since EF4 &lt;strike&gt;sucks so much less&lt;/strike&gt; is way better than earlier versions of EF, Jon and I updated NerdDinner to use EF. It was easy, but I would have liked to code first, and code only if I could. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4announcement.aspx"&gt;&lt;strong&gt;Microsoft announced a new Entity Framework CTP today&lt;/strong&gt;&lt;/a&gt;. It has the romantic and wonderful name &amp;quot;&lt;strong&gt;Microsoft ADO.NET Entity Framework Feature CTP4&lt;/strong&gt;&amp;quot; which is lame. You can say &amp;quot;EF Feature CTP4&amp;quot; but I like &amp;quot;EF Magic Unicorn Edition&amp;quot; but that's just me. We're getting the tech better at Microsoft but still can't get naming right. Whadayagonnado? Still, it makes EF a pleasure.&lt;/p&gt;  &lt;p&gt;It's got a lot of interesting features and choices, and while it's still a CTP, you should take a minute and check it out.&amp;#160; &lt;/p&gt;  &lt;p&gt;To &lt;strong&gt;get a more detailed version of this walkthrough plus &lt;/strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-03-78-93/EF.CodeFirst.Walkthrough.zip"&gt;&lt;strong&gt;downloadable sample code&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4codefirstwalkthrough.aspx"&gt;&lt;strong&gt;check out the ADO team's excellent blog post&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Quick CRUD via a Code First Model&lt;/h3&gt;  &lt;p&gt;After you install it (it won't mess up your system if you do), go and create a new whatever project. For my little example, I'll make a new ASP.NET MVC Website. It works for me better than a console app to illustrate a point.&lt;/p&gt;  &lt;p&gt;Add a reference to Microsoft.Data.Entity.CTP.dll.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_thumb.png" width="303" height="157" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Make a new class, maybe in the Models folder, and name it something like Book. Add some code like this. Notice it's just code. Nothing derives from anything.&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: false;"&gt;public class Book&lt;br /&gt;{&lt;br /&gt;    [Key]&lt;br /&gt;    public int ISBN { get; set; }&lt;br /&gt;    [Required]&lt;br /&gt;    public string Title { get; set; }&lt;br /&gt;    public DateTime FirstPublished { get; set; }&lt;br /&gt;    public bool IsFiction { get; set; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Notice I've put [Key] and [Required] on this class, but if that bothers me, I &lt;em&gt;could&lt;/em&gt; put these kinds of declarations in a more fluent way in my database context class, in OnModelCreating.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;builder.Entity&amp;lt;Book&amp;gt;().HasKey(b =&amp;gt; b.ISBN);&lt;br /&gt;builder.Entity&amp;lt;Book&amp;gt;().Property(b =&amp;gt; b.Title).IsRequired();&lt;/pre&gt;

&lt;p&gt;To access my data, Here's a SimpleBookCatalog...&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public class SimpleBookCatalog : DbContext&lt;br /&gt;{&lt;br /&gt;    public DbSet&amp;lt;Book&amp;gt; Books { get; set; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Next, I'll make a new Controller, via right|click Add Controller. I'll make a BookController.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public class BookController : Controller&lt;br /&gt;{&lt;br /&gt;    SimpleBookCatalog db = new SimpleBookCatalog();&lt;br /&gt;&lt;br /&gt;    public ActionResult Index()&lt;br /&gt;    {&lt;br /&gt;        var books = db.Books;&lt;br /&gt;        return View(books);&lt;br /&gt;    }&lt;br /&gt;    ...&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;I'll right click on the Index method and make an Index view. Then I'll run my app.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_8.png" width="293" height="115" /&gt; &lt;/p&gt;

&lt;p&gt;No data. What if I look in my SQL Management Studio? I got a Database created for me with a convention-based name since I didn't supply one.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_18.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SQL Management Studio with an automatically named Database" border="0" alt="SQL Management Studio with an automatically named Database" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_thumb_6.png" width="330" height="217" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If I specified a different connection string, that DB could be anywhere. &lt;/p&gt;

&lt;p&gt;However, if use a different database provider, like say, a &lt;strong&gt;SQL 4 Compact Edition&lt;/strong&gt; one, setting it as the default in my Application_Start:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;Database.DefaultConnectionFactory = new SqlCeConnectionFactory(&amp;quot;System.Data.SqlServerCe.4.0&amp;quot;);&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;Then when I run my app and look in my App_Data folder:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SQL Compact Edition Database file in App_Data" border="0" alt="SQL Compact Edition Database file in App_Data" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_7.png" width="533" height="60" /&gt; &lt;/p&gt;

&lt;p&gt;So I got a file based database without doing anything and I don't need SQL Server. (Yes, I can change the name, location, etc.) If I do nothing, I get a reasonable convention.&lt;/p&gt;

&lt;p&gt;Next, I'll add two Create methods, one for a GET and one for a POST. In Create, I'll add my new book and save the changes:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public ActionResult Create()&lt;br /&gt;{&lt;br /&gt;    return View();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[HttpPost]&lt;br /&gt;public ActionResult Create(Book book)&lt;br /&gt;{&lt;br /&gt;    db.Books.Add(book);&lt;br /&gt;    db.SaveChanges();&lt;br /&gt;    return RedirectToAction(&amp;quot;Index&amp;quot;);&lt;br /&gt;} &lt;/pre&gt;

&lt;p&gt;I'll right click, Add View, and make a Create View. Run my app, look at the empty list, then click Create.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="My Create Form" border="0" alt="My Create Form" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_13.png" width="267" height="359" /&gt; &lt;/p&gt;

&lt;p&gt;Click Create, and I'm redirected back to the Index page:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Book List" border="0" alt="Book List" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_16.png" width="650" height="140" /&gt; &lt;/p&gt;

&lt;p&gt;Back on the Index page, I can change the link to Details to use our primary key:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: false;"&gt;&amp;lt;%: Html.ActionLink(&amp;quot;Details&amp;quot;, &amp;quot;Details&amp;quot;, new { id=item.ISBN })%&amp;gt; |&lt;/pre&gt;

&lt;p&gt;Create a Details View and add a Details method:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public ActionResult Details(int id)&lt;br /&gt;{&lt;br /&gt;    var book = db.Books.Find(id);&lt;br /&gt;    return View(book);&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;See that Find method? That's there automatically. I can certainly use al the LINQy goodness as well, but as you can see, CRUD is simple. I can hook up Edit and Delete in a few minutes as well.&lt;/p&gt;

&lt;p&gt;Here's the whole thing:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public class BooksController : Controller&lt;br /&gt;{&lt;br /&gt;    SimpleBookCatalog db = new SimpleBookCatalog();&lt;br /&gt;&lt;br /&gt;    public ActionResult Index()&lt;br /&gt;    {&lt;br /&gt;        var books = db.Books;&lt;br /&gt;        return View(books);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // GET: /Books/Details/5&lt;br /&gt;    public ActionResult Details(int id)&lt;br /&gt;    {&lt;br /&gt;        var book = db.Books.Find(id);&lt;br /&gt;        return View(book);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // GET: /Books/Create&lt;br /&gt;    public ActionResult Create()&lt;br /&gt;    {&lt;br /&gt;        return View();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [HttpPost]&lt;br /&gt;    public ActionResult Create(Book book)&lt;br /&gt;    {&lt;br /&gt;        db.Books.Add(book);&lt;br /&gt;        db.SaveChanges();&lt;br /&gt;        return RedirectToAction(&amp;quot;Index&amp;quot;);&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    // GET: /Books/Edit/5&lt;br /&gt;    public ActionResult Edit(int id)&lt;br /&gt;    { &lt;br /&gt;        return View(db.Books.Find(id));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // POST: /Books/Edit/5&lt;br /&gt;    [HttpPost]&lt;br /&gt;    public ActionResult Edit(int id, FormCollection collection)&lt;br /&gt;    {&lt;br /&gt;        var book = db.Books.Find(id);&lt;br /&gt;        UpdateModel(book);&lt;br /&gt;        db.SaveChanges();&lt;br /&gt;        return RedirectToAction(&amp;quot;Index&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // GET: /Books/Delete/5&lt;br /&gt;    public ActionResult Delete(int id)&lt;br /&gt;    {&lt;br /&gt;        var book = db.Books.Find(id);&lt;br /&gt;        return View(book);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // POST: /Books/Delete/5&lt;br /&gt;    [HttpPost]&lt;br /&gt;    public ActionResult Delete(int id, FormCollection collection)&lt;br /&gt;    {&lt;br /&gt;        db.Books.Remove(db.Books.Find(id));&lt;br /&gt;        db.SaveChanges();&lt;br /&gt;        return RedirectToAction(&amp;quot;Index&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;So that's a nice simple controller that uses a model that was written in just code. The database and its schema was created for me. The DbContext is LINQable with stuff like Add, Find, and Remove all just there. Plus, it's all EF under the hood, so if you need more complex stuff, you can do it.&lt;/p&gt;

&lt;p&gt;For example, here's a more complex Code First Model with Collections, and more attributes. I show some fluent wiring up of relationships later on, although there are conventions that can assign bi-directionality based on naming.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public class Book&lt;br /&gt;{&lt;br /&gt;    [Key]&lt;br /&gt;    public int ISBN { get; set; }&lt;br /&gt;    [Required]&lt;br /&gt;    public string Title { get; set; }&lt;br /&gt;    [Required]&lt;br /&gt;    public DateTime FirstPublished { get; set; }&lt;br /&gt;    [Required]&lt;br /&gt;    public bool IsFiction { get; set; }&lt;br /&gt;&lt;br /&gt;    public virtual Publisher Publisher { get; set; }&lt;br /&gt;    [RelatedTo(RelatedProperty=&amp;quot;Author&amp;quot;)]&lt;br /&gt;    public virtual Author Author { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Person&lt;br /&gt;{&lt;br /&gt;    [ScaffoldColumn(false)]&lt;br /&gt;    public int PersonId { get; set; }&lt;br /&gt;    public string FirstName { get; set; }&lt;br /&gt;    public string LastName { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Author : Person&lt;br /&gt;{&lt;br /&gt;    [ScaffoldColumn(false)]&lt;br /&gt;    public int AuthorId { get; set; }&lt;br /&gt;&lt;br /&gt;    public virtual ICollection&amp;lt;Book&amp;gt; Books { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Publisher&lt;br /&gt;{&lt;br /&gt;    [ScaffoldColumn(false)]&lt;br /&gt;    public int PublisherId { get; set; }&lt;br /&gt;    [Required]&lt;br /&gt;    [MaxLength(50)]&lt;br /&gt;    public string Name { get; set; }&lt;br /&gt;&lt;br /&gt;    public virtual ICollection&amp;lt;Book&amp;gt; Books { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class SimpleBookCatalog : DbContext&lt;br /&gt;{&lt;br /&gt;    public DbSet&amp;lt;Book&amp;gt; Books { get; set; }&lt;br /&gt;    public DbSet&amp;lt;Person&amp;gt; People { get; set; }&lt;br /&gt;    public DbSet&amp;lt;Author&amp;gt; Authors { get; set; }&lt;br /&gt;    public DbSet&amp;lt;Publisher&amp;gt; Publishers { get; set; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Also, &amp;quot;Magic Unicorn EF&amp;quot; supports DataAnnotations (or validation via Fluent interfaces), so those [Required] and [StringLength] stuff from before? Those apply not only in JavaScript, but also at the Server-side &lt;strong&gt;and &lt;/strong&gt;Database persistence layers.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_20.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/586fa8b19c9f_1352D/image_thumb_7.png" width="401" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can make your own strategies for creating databases, based on what's going on with the model, if it's changed, etc. Here's some built-in examples. Yours can do whatever you like. Here the SimpleBookCatalog is the DbContext from before.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;//This is the default strategy.  It creates the DB only if it doesn't exist&lt;br /&gt;Database.SetInitializer(new CreateDatabaseOnlyIfNotExists&amp;lt;SimpleBookCatalog&amp;gt;());&lt;br /&gt;//Recreates the DB if the model changes but doesn't insert seed data.&lt;br /&gt;Database.SetInitializer(new RecreateDatabaseIfModelChanges&amp;lt;SimpleBookCatalog&amp;gt;());&lt;br /&gt;//Strategy for always recreating the DB every time the app is run.&lt;br /&gt;Database.SetInitializer(new AlwaysRecreateDatabase&amp;lt;SimpleBookCatalog&amp;gt;());&lt;/pre&gt;

&lt;p&gt;Connection Strings for the SQL 4 CE provider are simpler (like, they are possible to memorize, which is amazing, considering how hard they are now). For example:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: false;"&gt;&amp;lt;add name=&amp;quot;SimpleBookCatalog&amp;quot; connectionString=&amp;quot;Data Source=C:\FooFoo\MyBooks.sdf&amp;quot; providerName=&amp;quot;System.Data.SqlServerCe.4.0&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;Here's some examples of fluent mappings and setting up relationships to give you an idea of the kinds of things you can do, while avoiding looking at any visual designers. It all depends on how clean you need your &lt;acronym title="Plain Old CLR Objects"&gt;POCO&lt;/acronym&gt; (Plain Old CLR Objects) to be.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;modelBuilder.Entity&amp;lt;Book&amp;gt;().HasKey(b =&amp;gt; b.ISBN);&lt;br /&gt;modelBuilder.Entity&amp;lt;Book&amp;gt;().HasRequired(b =&amp;gt; b.Title);&lt;br /&gt;modelBuilder.Entity&amp;lt;Book&amp;gt;().HasRequired(b =&amp;gt; b.Author).WithMany(a =&amp;gt; a.Books);&lt;br /&gt;modelBuilder.Entity&amp;lt;Publisher&amp;gt;().Property(p =&amp;gt; p.Name).MaxLength = 50;&lt;br /&gt;modelBuilder.Entity&amp;lt;Author&amp;gt;().HasMany(a =&amp;gt; a.Books).WithRequired();&lt;/pre&gt;

&lt;p&gt;These configurations can be batched up into a class that handles configuration for a specific entity so you can reuse them and more easily config like this.&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;builder.Configurations.Add(new BookConfiguration());&lt;/pre&gt;

&lt;p&gt;All this is a really basic example as a means of introduction and for my own learning, but so far I like it. It takes just a few minutes to get a lot done without much code. Since this is all Entity Framework, I can put an &lt;a href="http://www.hanselman.com/blog/ODataBasicsAtTheAZGroupsDayOfNETWithScottGu.aspx"&gt;OData service&lt;/a&gt; on top of my model really quickly and then start consuming those services from &lt;a href="http://www.odata.org/consumers"&gt;iPhones&lt;/a&gt; or whatever.&lt;/p&gt;

&lt;p&gt;It'll be interesting to take a sample like Nerd Dinner or MVC Music Store and change them to use Code First EF and the Razor View Engine and see if they are more readable and how many fewer lines of code they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventions-for-code-first.aspx"&gt;Conventions for Code First&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/06/21/productivity-improvements-for-the-entity-framework.aspx"&gt;Productivity Improvements for the Entity Framework&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx"&gt;Data Annotations in the Entity Framework and Code First&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-10-03-78-93/EF.CodeFirst.Walkthrough.zip"&gt;Code First Walkthrough plus Sample Code&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bIAQ9TaEJ9sVnRS7BuMrvEAdqDI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bIAQ9TaEJ9sVnRS7BuMrvEAdqDI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bIAQ9TaEJ9sVnRS7BuMrvEAdqDI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bIAQ9TaEJ9sVnRS7BuMrvEAdqDI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=3xB9HjlfvQU:EUKZLT7sYnQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=3xB9HjlfvQU:EUKZLT7sYnQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=3xB9HjlfvQU:EUKZLT7sYnQ:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=3xB9HjlfvQU:EUKZLT7sYnQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=3xB9HjlfvQU:EUKZLT7sYnQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=3xB9HjlfvQU:EUKZLT7sYnQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=3xB9HjlfvQU:EUKZLT7sYnQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=3xB9HjlfvQU:EUKZLT7sYnQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=3xB9HjlfvQU:EUKZLT7sYnQ:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/3xB9HjlfvQU" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=df836a89-8984-49c4-83ae-046764575da1</comments>
      <category>ASP.NET</category>
      <category>ASP.NET MVC</category>
      <category>Data</category>
      <category>IIS</category>
    <feedburner:origLink>http://www.hanselman.com/blog/SimpleCodeFirstWithEntityFramework4MagicUnicornFeatureCTP4.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=ff34f126-b3bc-4f26-b539-b349d463a2e9</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=ff34f126-b3bc-4f26-b539-b349d463a2e9</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=ff34f126-b3bc-4f26-b539-b349d463a2e9</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ff34f126-b3bc-4f26-b539-b349d463a2e9</wfw:commentRss>
      <slash:comments>76</slash:comments>
      <title>Ultimate Developer PC 2.0 - Part 2 - UPDATE and PODCAST on Building a WEI 7.9 and RFC for building a GOM (God's Own Machine)</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=ff34f126-b3bc-4f26-b539-b349d463a2e9</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/bfKQHXtNyZo/UltimateDeveloperPC20Part2UPDATEAndPODCASTOnBuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx</link>
      <pubDate>Tue, 13 Jul 2010 23:16:54 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;a href="http://www.hanselminutes.com/default.aspx?showID=238"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Big Ass Mobo" border="0" alt="Big Ass Mobo" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/Ult.9andRFCforbuildingaGOMGodsOwnMachine_D006/image_3.png" width="350" height="197" /&gt;&lt;/a&gt; As a reminder, if you're just turning in, here's our glossary:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;acronym title="Windows Experience Index"&gt;WEI&lt;/acronym&gt; - Windows Experience Index. How fast is your machine? If you say &amp;quot;I've got a WEI 6.0&amp;quot; you've got a good machine, for example. &lt;/li&gt;    &lt;li&gt;&lt;acronym title="Request for Comments"&gt;RFC&lt;/acronym&gt; - Request for Comments. This is crowdsourcing. I want to know what YOU think we need to do to make a machine that is so fast that it'll max out at WEI 7.9 and be a GOM. &lt;/li&gt;    &lt;li&gt;&lt;acronym title="God&amp;#39;s Own Machine"&gt;GOM&lt;/acronym&gt; - God's Own Machine. If the Good Lord had a computer, it'd be a 7.9. We want to build that machine. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There were lots of great comments in the original post. Here's some of &lt;strong&gt;my&lt;/strong&gt; answers to those comments, as well as some on Twitter. The fun thing about doing hardware builds is that EVERYONE has an opinion. Also, since I'm a software guy (although I could totally rock a 486-SX build) &lt;strong&gt;your opinion, &lt;/strong&gt;Dear Reader, is better than mine. I can only explain why I (and &lt;a href="http://10rem.net/blog/2010/06/23/the-79-wei-pc"&gt;Pete&lt;/a&gt;, who is doing a similar build with me) made certain decisions.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;We hosted a great podcast last week with some actual members of the WEI team and asked their ideas on how we could create the Ultimate Developer PC. You can &lt;/em&gt;&lt;a href="http://www.hanselminutes.com/default.aspx?showID=238"&gt;&lt;em&gt;listen to &lt;strong&gt;Hanselminutes Podcast 220 on &amp;quot;Creating the Ultimate Developer Machine 2.0 - How can we get a 7.9 WEI Score for under $3k?&amp;quot;&lt;/strong&gt; here&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;This I Believe - Hardware Edition&lt;/h3&gt;  &lt;p&gt;There's some guiding principles for this build.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;We aren't trying to build the Ultimate PC. We don't have 20 grand or whatever the super PC is today. &lt;/li&gt;    &lt;li&gt;We aren't trying to build the Ultimate Gamer PC &lt;/li&gt;    &lt;li&gt;We don't want a divorce. We have a budget and we've been saving for 2 years, but give or take a few hundred dollars we can hide in tacos, we've got $3k. &lt;/li&gt;    &lt;li&gt;We do have some existing parts. I've already got good monitors, as you might as well. I've got a decent case, keyboard and mouse. These don't count. Maybe the case, but you get the idea. &lt;/li&gt;    &lt;li&gt;If we can stretch JUST a smidge and get a better piece of hardware for a few more bucks, or if we feel that if we DON'T get a certain level of hardware that we'll be sad, we'll go for it. Within reason. &lt;/li&gt;    &lt;li&gt;We aren't AnandTech and don't claim to be. &lt;/li&gt;    &lt;li&gt;We value multi-tasking as we do a &lt;a href="http://10rem.net/blog/2010/06/23/the-79-wei-pc"&gt;lot of stuff a the same time&lt;/a&gt;. We think more cores is a good thing and you can't have enough memory. &lt;/li&gt;    &lt;li&gt;Sometimes folks who write hardware websites talk perf, but it's unclear what they are actually DOING with these PCs, other than using them to run benchmarks. We are doing these things:      &lt;ul&gt;       &lt;li&gt;Communicating - Email, Twitter, Skype, Messenger, Communicator all running at the same time. &lt;/li&gt;        &lt;li&gt;Coding - Multiple instances of VS2010, HippoEdit, e, IIS7, etc. &lt;/li&gt;        &lt;li&gt;Virtual Machines - I usually have at least one VM doing, sometimes peaking at 2 or 3. &lt;/li&gt;        &lt;li&gt;Writing - Live Writer, Excel, Word &lt;/li&gt;        &lt;li&gt;Browsing - Chrome uses like 20-30 chrome.exe processes and thing slow down when Flash is involved. &lt;/li&gt;        &lt;li&gt;Media - Usually running Zune or iTunes in the background. Sometimes a pinned video or Hulu on another monitor. &lt;/li&gt;        &lt;li&gt;Gaming - Nope. Zip. I have an XBox, Wii and PS3 for that. And a Vectrex. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;The Purchase&lt;/h3&gt;  &lt;p&gt;So here's what I purchased and what I was thinking when I did it.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;$965 &lt;/strong&gt;&lt;a href="http://www.anrdoezrs.net/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16819115223%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Processors%2B-%2BDesktops-_-Intel-_-19115223&amp;amp;cjsku=N82E16819115223"&gt;&lt;strong&gt;Intel Core i7-980X Extreme Edition 3.33GHz LGA 1366 130W Six-Core Desktop Processor&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.awltovhc.com/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I thought about an overclocked P4, but I REALLY wanted an i series and I really wanted a hexacore and something overclockable to 4GHz without being an expert overclocker. Compile times need GHz and multitasking needs multiple cores so even though it's a grand for a processor, I feel good about it. It is the brain. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;$699 (with combo actually $480) &lt;/strong&gt;&lt;a href="http://www.jdoqocy.com/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16813128446%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Motherboards%2B-%2BIntel-_-GIGABYTE-_-13128413&amp;amp;cjsku=N82E16813128446"&gt;&lt;strong&gt;GIGABYTE GA-X58A-UD9 ATX Intel Motherboard&lt;/strong&gt;&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;This was the &lt;img border="0" src="http://www.ftjcfx.com/image-2478723-10440897" width="1" height="1" /&gt;UD7 before, but when I was on NewEgg they had a deal when purchased with memory that took $219 off it, so it was $699-$219 = $480 for the UD9 vs. the $339 UD7. The extra $140 seemed worth it for such an exceptional motherboard. It's a very flexible board, does 6-core and does SATA 6Gbit/s. It's an Intel X58 chipset, and has seven PCIe 2.0 x16 slots. I HATE running out of room. There's also enough space for dual slot graphics cards. I have four monitors (although I'm starting by running just two in this config) and I need the elbow room. It's also got two gigabit LAN, USB 3.0, and two eSATA as well. It supports 24GB of RAM which is nice breathing room, given I'll start at 12GB. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;$374 &lt;/strong&gt;&lt;a href="http://www.jdoqocy.com/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820227538%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Memory%2B%28Desktop%2BMemory%29-_-OCZ%2BTechnology-_-20227538&amp;amp;cjsku=N82E16820227538"&gt;&lt;strong&gt;OCZ Reaper Edition 12GB (3 x 4GB) 240-Pin DDR3 SDRAM DDR3 1333 (PC3 10666) Low Voltage Desktop Memory&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.tqlkg.com/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Buttloads of RAM. Actually, I'd have preferred 16, as 12 just FEELS a little small. I have 8 now. Good news is, I can double this in a year or so when funds allow. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;$320 &lt;/strong&gt;&lt;a href="http://www.bing.com/shopping/search?q=nvidia+gtx+285&amp;amp;mkt=en-US&amp;amp;FORM=BPFD"&gt;&lt;strong&gt;NVidia GTX 470&lt;/strong&gt;&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;Video cards are like Religions. The only thing that they all have in common is that you think YOURS is the One True Way. Why did I pick this one? I'm religious. No other reason. Why not eat Pork? It's a filthy animal, right? Of course not. But still. You never know! Why not buy ATI? They blue screened me ONE too many times years ago and I just can't do it. They're a filthy beast!          &lt;br /&gt;Now, in fairness, read that paragraph &lt;strong&gt;again &lt;/strong&gt;and swap ATI and NVidia. It works both ways.           &lt;br /&gt;I like NVidia. You may think this is a gamer card, but it really came down to this. I want my Windows, and my (soon to be) hardware accelerated browsers to as well.&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: David in the comments said that I contradicted myself with my religious rant. To the numbers. This card gets me 7.9. I like NVidia. It'll run two 30&amp;quot; monitors no problem. Two of them will run four. It's in my budget and it's the Top NVidia card that'll push the pixels I want. That's why I picked it.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;$610 &lt;/strong&gt;&lt;a href="http://www.anrdoezrs.net/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820148349%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Solid%2BState%2BDisk-_-Crucial%2BTechnology-_-20148349&amp;amp;cjsku=N82E16820148349"&gt;&lt;strong&gt;Crucial RealSSD C300 CTFDDAC256MAG-1G1 2.5&amp;quot; MLC Internal Solid State Drive (SSD)&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.lduhtrp.net/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;This was a hard one. Folks were suggesting &amp;quot;get a small C: drive&amp;quot; and a large spinning-rust drive for data. I have 2 TB of storage on a Windows Home Server and lots of External Drives around, so let's just say D: drive space is a non-issue. However, I can't abide a 64gig or 128gig C: drive. It's insane. There's no room. This is a great drive, a good balance between size and speed. It'll probably get a 7.7-7.8 WEI, but I really think that RAID 0 array of two drives is overkill. It also seems like I'd be asking for a drive failure. This was a good balance of price and performance. I need to update the firmware before building. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;$200 &lt;/strong&gt;&lt;a href="http://www.kqzyfj.com/click-2478723-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16817256057%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Power%2BSupplies-_-Silverstone-_-17256057&amp;amp;cjsku=N82E16817256057"&gt;&lt;strong&gt;SILVERSTONE ST1000-P 1000W Power Supply&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;img border="0" src="http://www.tqlkg.com/image-2478723-10440897" width="1" height="1" /&gt;&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;A number of people thought this was overkill. Fortunately, I can always swap it out or return it if it was a bad idea. That said, when I add in another video card for the other two monitors, as well as a harddrive or three, I'm going to want the extra headroom. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I have likely (and will likely) make mistakes here, but that's part of the fun of building your own machine. &lt;strong&gt;Remember, Jedis build their own lightsabers, so you should build your own computer at least one!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I'll be building this in the next week or two. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;QUESTION: &lt;/font&gt;&lt;/strong&gt;Is there any interest in a &amp;quot;live build&amp;quot; where we stream the build and the viewers make suggestions, ask questions, etc?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Your thoughts?&lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RWZYgNTRZTSf4nbqFMEpjh9pv_M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RWZYgNTRZTSf4nbqFMEpjh9pv_M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RWZYgNTRZTSf4nbqFMEpjh9pv_M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RWZYgNTRZTSf4nbqFMEpjh9pv_M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=bfKQHXtNyZo:LmyNYn-gVI8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=bfKQHXtNyZo:LmyNYn-gVI8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=bfKQHXtNyZo:LmyNYn-gVI8:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=bfKQHXtNyZo:LmyNYn-gVI8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=bfKQHXtNyZo:LmyNYn-gVI8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=bfKQHXtNyZo:LmyNYn-gVI8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=bfKQHXtNyZo:LmyNYn-gVI8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=bfKQHXtNyZo:LmyNYn-gVI8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=bfKQHXtNyZo:LmyNYn-gVI8:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/bfKQHXtNyZo" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=ff34f126-b3bc-4f26-b539-b349d463a2e9</comments>
      <category>Hardware</category>
      <category>Podcast</category>
    <feedburner:origLink>http://www.hanselman.com/blog/UltimateDeveloperPC20Part2UPDATEAndPODCASTOnBuildingAWEI79AndRFCForBuildingAGOMGodsOwnMachine.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=d6043642-fccc-45c5-85d3-79616a346fd4</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=d6043642-fccc-45c5-85d3-79616a346fd4</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=d6043642-fccc-45c5-85d3-79616a346fd4</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d6043642-fccc-45c5-85d3-79616a346fd4</wfw:commentRss>
      <slash:comments>28</slash:comments>
      <title>Microsoft WebMatrix in Context and Deploying Your First Site</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=d6043642-fccc-45c5-85d3-79616a346fd4</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/XCGsaxkFleE/MicrosoftWebMatrixInContextAndDeployingYourFirstSite.aspx</link>
      <pubDate>Tue, 06 Jul 2010 21:09:52 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&amp;#160;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/06/introducing-webmatrix.aspx"&gt;ScottGu&lt;/a&gt; announced &lt;a href="http://www.microsoft.com/web/webmatrix/"&gt;Microsoft WebMatrix&lt;/a&gt; Beta today. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/web/webmatrix/"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WebMatrix Starting Page" border="0" alt="WebMatrix Starting Page" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_0b134c68-94f5-4abd-89f7-702e3fc0b64c.png" width="400" height="183" /&gt;&lt;/a&gt;It's a small (15 megs if you have .NET 4, 50megs if you don't) lightweight IDE for making ASP.NET or PHP websites. &lt;/li&gt;    &lt;li&gt;It has a small embedded file-based SQL Database, and a web-server called IIS Express that's compatible with the full version of IIS. &lt;/li&gt;    &lt;li&gt;It uses a View Engine called &amp;quot;Razor&amp;quot; to make Web Pages, and your sites can be later be expanded to use all of ASP.NET MVC. It's a simple syntax that is easy to learn &lt;/li&gt;    &lt;li&gt;It uses the WebDeploy engine to deploy apps to hosts, setting up permissions, copying databases, etc. &lt;/li&gt;    &lt;li&gt;WebMatrix also has the &lt;a href="http://www.iis.net/download/SEOToolkit"&gt;Search Engine Optimization Toolkit&lt;/a&gt; built in, so you can spider your own site and see how Search Engines see it. It'll make recommendations and store reports. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I've said before that Microsoft is just now starting to get the &amp;quot;right-sized LEGO pieces.&amp;quot; It the past some stuff was too little or too big, but now as an example, here's five separate and right-sized LEGOs (ya, I know it's singular) that are helpful for the professional &lt;em&gt;and &lt;/em&gt;the folks just getting starter, or those who don't want to learn a bunch of stuff to setup and/or modify a website.&lt;/p&gt;  &lt;p&gt;Visual Studio 2010 looks like a dashboard. It's big and powerful and overwhelming. I tried to get my wife, then later my 10 year old nephew to make a website and it was a non-starter. It worked later with WebMatrix. This isn't for professionals, even though it has components that professionals will use. Pros will like a free file-based SQL Server, and a non-service version of IIS that's more compatible than the Visual Web Developer, and pros might like using Razor as an alternative View Engine for their ASP.NET MVC sites.&lt;/p&gt;  &lt;p&gt;However, folks that are starting out, or hobbyists, or maybe just installing a blog or forum will use WebMatrix to get stuff done.&lt;/p&gt;  &lt;h3&gt;Download and Install Matrix &lt;/h3&gt;  &lt;p&gt;Here's how you'd get &lt;a href="http://www.microsoft.com/web/webmatrix/"&gt;WebMatrix&lt;/a&gt;, sign up for a new host, and deploy your first site. &lt;/p&gt;  &lt;p&gt;Go to the WebMatrix site and click &lt;a href="http://www.microsoft.com/web/webmatrix/"&gt;Download Now&lt;/a&gt;. It'll install the Web Platform Install (about 2 megs) and then you click Install. The WebMatrix download for me was 8megs, then SQL Compact was 2.5megs, and then some deployment dependencies brought my total download to 29 megs.&lt;/p&gt;  &lt;h3&gt;Run and Select a Site &lt;/h3&gt;  &lt;p&gt;You can install a site from the Gallery, like &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/06/introducing-webmatrix.aspx"&gt;ScottGu did when he chose BlogEngine.NET&lt;/a&gt;. These are regular ASP.NET and PHP apps that you've probably used before. There's lots of Open Source apps like Blogs (like DasBlog, that runs this site!), Content Management Systems (like Umbraco, that powers &lt;a href="http://asp.net"&gt;http://asp.net&lt;/a&gt;!) and other apps that you can start working with immediately.&lt;/p&gt;  &lt;p&gt;However, since we're learning, my wife and I are going to select Site from Template and pick the Bakery App. This is a basic store-type application that we can deploy in just a few minutes. We don't need to look at code if we don't want to.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_3.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WebMatrix Site from Template" border="0" alt="WebMatrix Site from Template" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb.png" width="500" height="351" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hit OK and I'm in WebMatrix looking a new screen. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_5.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_1.png" width="500" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;At this point I can click Run to see my app. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_7.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_2.png" width="500" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It's running locally on IIS Express along with some others Apps I was looking at earlier. This is effectively FULL IIS (not Visual Web Developer) but installed as a User App...when I stop the app, it's gone. It's not an auto-startup service, but it is IIS, which means your apps will run the same locally as they do deployed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_9.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_3.png" width="438" height="328" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I can run it locally, but how do I get it up to a host? &lt;/p&gt;  &lt;h3&gt;Deploying My App to a Host&lt;/h3&gt;  &lt;p&gt;Things usually get complicated when you go to deploy and app. It's pretty easy to get an application running locally, but it's sometimes a challenge to get that app up on a site. People can sign up for a Gmail or Hotmail account and get that running, so why can't they get a website up that they coded themselves? &lt;/p&gt;  &lt;p&gt;I've &lt;a href="http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx"&gt;blogged about WebDeployment before and shown examples in my Mix Video &amp;quot;If you're using XCopy you're doing it wrong.&lt;/a&gt;&amp;quot; WebDeploy is part of WebMatrix also.&lt;/p&gt;  &lt;p&gt;I'll click on Publish and &amp;quot;Find Web Hosting&amp;quot; and I get a list of hosts I can choose from. I'll select &lt;a href="http://www.appliedi.net/webmatrix-signup"&gt;Applied Innovations&lt;/a&gt; and click Learn More. I do prefer hosts like AdHost that give you both a .NET 2 and .NET 4 Application Pools to work in, which means I can use apps from the Gallery and apps that use the new Razor Syntax at the same time. &lt;/p&gt;  &lt;p&gt;I go to &lt;a href="http://www.appliedi.net/webmatrix-signup"&gt;Applied Innovations&lt;/a&gt;, and fill out the form. I'll get free hosting until next year with 1 GB of Disk Space and 100 GB monthly transfer. I get .NET 3.5 and 4, but also PHP. I can use SQL Compact, but also mySQL.&lt;/p&gt;  &lt;p&gt;I fill out a form -&amp;#160; no credit card needed - and they send me an email. Click a link and they send me back an email with all the details I need. This is the same experience you'll get with all the hosters.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;My Opinion: Some hosts make you switch your AppPools between .NET 2 and .NET 4 and that's too hard for beginners, I think. Hopefully all the hosters will remove this step and offer two app pools, or make switching between them a top level button in their Control Panels. &lt;a href="http://www.adhost.com/betahosting/webmatrix.shtml"&gt;AdHost&lt;/a&gt; does this. I hope others will also.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;To switch to .NET 4, go to the Control Panel URL in your welcome email. Click WebSites, Extensions and select ASP.NET 4 from the dropdown. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_13.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Control Panel" border="0" alt="Control Panel" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_5.png" width="493" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Other hosts to choose from during this Beta are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.cytanium.com/"&gt;Cytanium&lt;/a&gt; from Orcsweb (disclosure: my blog is hosted at Orcsweb) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.appliedi.net/webmatrix-signup"&gt;AppliedInnovations&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.gogrid.com/signUp/"&gt;GoGrid&lt;/a&gt; - Cloud-based&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.adhost.com/betahosting/webmatrix.shtml"&gt;AdHost&lt;/a&gt; - Gives you .NET 2 &lt;strong&gt;and &lt;/strong&gt;.NET 4 AppPools&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I fill out the Publish Form in WebMatrix with the details direct from my new host.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_11.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Publishing" border="0" alt="Publishing" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_4.png" width="500" height="392" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice I don't need to do anything special for my database, as it's a file-based SQL database, runs in Medium Trust and requires no configuration.&lt;/p&gt;  &lt;p&gt;Click Publish, and I'll get a list of files that'll be copied up. This is a differential copy, so if you change one file later, only that file will go up. Be sure to click the checkbox to deploy your database.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_15.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Publishing Preview" border="0" alt="Publishing Preview" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_6.png" width="500" height="351" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The publish happens in the background...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_17.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Publish Progress Bar" border="0" alt="Publish Progress Bar" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_7.png" width="408" height="47" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then it completes, and I can now &lt;a href="http://shanselman.web01.appliedi-labs.net/"&gt;visit my new Bakery site&lt;/a&gt; online at my host, AppliedI:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_19.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_8.png" width="438" height="44" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Of course, if I wanted to, I could change the site, maybe modify the Products page:&lt;/p&gt;  &lt;pre class="html" name="code"&gt;@{&lt;br /&gt;    LayoutPage = &amp;quot;~/_Layout.cshtml&amp;quot;;&lt;br /&gt;    PageData[&amp;quot;Title&amp;quot;] = &amp;quot;Product&amp;quot;;&lt;br /&gt;&lt;br /&gt;    var db = Database.Open(&amp;quot;bakery&amp;quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;h2&amp;gt;Available Products:&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;products group&amp;quot;&amp;gt;&lt;br /&gt;    @foreach (var p in db.Query(&amp;quot;SELECT * FROM PRODUCTS&amp;quot;)) {&lt;br /&gt;        &amp;lt;div class=&amp;quot;product&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;h3&amp;gt;@p.Name&amp;lt;/h3&amp;gt;&lt;br /&gt;            &amp;lt;img src=&amp;quot;@Href(&amp;quot;~/Images/&amp;quot;+ p.ImageName)&amp;quot; alt=&amp;quot;@p.Name&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;p&amp;gt;@p.Description&amp;lt;/p&amp;gt;&lt;br /&gt;            &amp;lt;ul class=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;                &amp;lt;li class=&amp;quot;price&amp;quot;&amp;gt;$@string.Format(&amp;quot;{0:f}&amp;quot;, p.Price)&amp;lt;/li&amp;gt;&lt;br /&gt;                &amp;lt;li class=&amp;quot;order&amp;quot;&amp;gt;&lt;br /&gt;                    &amp;lt;form action=&amp;quot;Order&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;                        &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;ProductId&amp;quot; value=&amp;quot;@p.Id&amp;quot;/&amp;gt;&lt;br /&gt;                        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Order Now&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/form&amp;gt;&lt;br /&gt;                &amp;lt;/li&amp;gt;&lt;br /&gt;            &amp;lt;ul&amp;gt;&lt;br /&gt;        &amp;lt;/div&amp;gt;&lt;br /&gt;    }    &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;There's lots of nice helpers for Google Analytics and Twitter integration:&lt;/p&gt;

&lt;pre class="html" name="code"&gt;&amp;lt;div class=&amp;quot;sidebar&amp;quot;&amp;gt;&lt;br /&gt;    @Twitter.Search(&amp;quot;#bakery&amp;quot;, caption: &amp;quot;#bakery&amp;quot;)&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;
I could of course, also edit my data: 

&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_21.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Database Editing in WebMatrix" border="0" alt="Database Editing in WebMatrix" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/MicrosoftWebMatrix_B145/image_thumb_9.png" width="500" height="131" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;All in a reasonably not scary-dashboard looking UI. It's all ASP.NET underneath, so I can graduate to ASP.NET MVC and move my logic into controllers, and I've already got &lt;a href="http://haacked.com/archive/2010/07/03/razor-view-syntax.aspx"&gt;Views written in the &amp;quot;Razor&amp;quot; syntax, which is the new default for ASP.NET MVC 3.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Context&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;If you're reading this blog, and you're not my Wife, this tool probably isn't for you.&lt;/strong&gt; (Hi, wife.) &lt;/p&gt;

&lt;p&gt;However, the &lt;em&gt;pieces &lt;/em&gt;that make up WebMatrix probably are. SQL Compact is pretty sweet. It's small, free, file-based and easy to upgrade to SQL Express Big Boys and Girls Edition. The new Razor syntax is a nice alternative to the WebForms Syntax (as are other alternative ViewEngines). IIS Express is hotness, especially if you've ever had an app that acted differently on IIS than on Visual Web Developer.&lt;/p&gt;

&lt;p&gt;If you are learning web development or just want to get a site up, check out WebMatrix. Even if you don't edit the code, you can get and deploy and app to a host quickly, be it an ASP.NET app or a PHP app. If you do choose to write an app yourself, you can get started with WebMatrix and then move to Visual Studio (Free Express or $ Pro) if you outgrow it.&lt;/p&gt;

&lt;p&gt;I'll report back and see what the WAF (Wife Acceptance Factor) is on &lt;a href="http://www.microsoft.com/web/webmatrix/download/"&gt;WebMatrix&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/Dan/Simon-Calvert--Scott-Hunter-WebMatrix-and-the-new-Razor-Syntax/"&gt;&lt;strong&gt;Channel 9 Video:&lt;/strong&gt; WebMatrix with Scott Hunter and Simon Calvert&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix"&gt;&lt;strong&gt;Learn by Doing - &lt;/strong&gt;WebMatrix walkthroughs&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/1-getting-started-with-webmatrix-and-asp-net-web-pages"&gt;1 - Getting Started&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/2-introduction-to-asp-net-web-programming-using-the-razor-syntax"&gt;2 - Coding with Razor Syntax&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/3-creating-a-consistent-look"&gt;3 - Creating a Consistent Look&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/4-working-with-forms"&gt;4 - Working with Forms&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/5-working-with-data"&gt;5 - Working with Data&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/6-working-with-files"&gt;6 - Working with Files&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/7-working-with-images"&gt;7 - Working with Images&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/8-working-with-video"&gt;8 - Working with Video&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/9-adding-email-to-your-website"&gt;9 - Adding Email to your Website&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/10-adding-social-networking-to-your-website"&gt;10 - Adding Social Networking&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/11-analyzing-traffic-on-your-website"&gt;11 - Analyzing Traffic on your Website&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/12-adding-caching-for-faster-websites"&gt;12 - Adding Caching for Faster Websites&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/13-adding-security-and-membership"&gt;13 - Adding Security and Membership&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/14-introduction-to-debugging"&gt;14 - Introduction to Debugging&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/15-customizing-site-wide-behavior"&gt;15 - Customizing Site-Wide Behavior&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference"&gt;ASP.NET Web Pages API Reference&lt;/a&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/855/webmatrix-beta/"&gt;WebMatrix Tutorials and FAQs&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/856/webmatrix-overview/"&gt;WebMatrix Overview&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/878/create-a-website-from-a-gallery-application/"&gt;Create a Website from a Gallery Application&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/872/webmatrix-beta-release-readme/"&gt;WebMatrix Beta Release Readme&lt;/a&gt; &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/861/using-webmatrix-beta/"&gt;Using WebMatrix Beta&lt;/a&gt;&lt;a href="http://learn.iis.net/page.aspx/861/using-webmatrix-beta/"&gt;[Show All]&lt;/a&gt; 

        &lt;ul&gt;
          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/862/download-and-install-an-aspnet-application/"&gt;Download and Install an ASP.NET Application&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/863/download-and-install-a-php-application/"&gt;Download and Install a PHP Application&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/866/make-your-website-seo-friendly/"&gt;Make your Website SEO Friendly&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/867/analyze-your-website/"&gt;Analyze Your Website&lt;/a&gt; &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/860/using-iis-developer-express/"&gt;Using IIS Developer Express&lt;/a&gt; 

        &lt;ul&gt;
          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/868/iis-developer-express-overview/"&gt;IIS Developer Express Overview&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/869/use-the-windows-system-tray-to-manage-websites-and-applications/"&gt;Use the Windows System Tray to Manage Websites and Applications&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/870/use-the-command-line-to-run-a-webmatrix-site-or-application/"&gt;Use the Command Line to Run a WebMatrix Site or Application&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/901/iis-developer-express-faq/"&gt;IIS Developer Express FAQ&lt;/a&gt; &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;

      &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/873/application-gallery-faqs/"&gt;Application Gallery FAQs&lt;/a&gt; 

        &lt;ul&gt;
          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/874/acquia-drupal-faq/"&gt;Acquia Drupal FAQ&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/875/atomsite-faq/"&gt;AtomSite FAQ&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/876/blogenginenet-faq/"&gt;BlogEngine.NET FAQ&lt;/a&gt; &lt;/li&gt;

          &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/877/dasblog-faq/"&gt;dasBlog FAQ&lt;/a&gt; &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;a href="https://connect.microsoft.com/site1112"&gt;&lt;strong&gt;File a Bug on WebMatrix or Suggest a Feature&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2E8sU4jTnB88GhC9YLHjqcL8XDE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2E8sU4jTnB88GhC9YLHjqcL8XDE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2E8sU4jTnB88GhC9YLHjqcL8XDE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2E8sU4jTnB88GhC9YLHjqcL8XDE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=XCGsaxkFleE:CJww7Yu91fY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=XCGsaxkFleE:CJww7Yu91fY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=XCGsaxkFleE:CJww7Yu91fY:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=XCGsaxkFleE:CJww7Yu91fY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=XCGsaxkFleE:CJww7Yu91fY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=XCGsaxkFleE:CJww7Yu91fY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=XCGsaxkFleE:CJww7Yu91fY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=XCGsaxkFleE:CJww7Yu91fY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=XCGsaxkFleE:CJww7Yu91fY:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/XCGsaxkFleE" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=d6043642-fccc-45c5-85d3-79616a346fd4</comments>
      <category>ASP.NET</category>
      <category>ASP.NET MVC</category>
      <category>IIS</category>
      <category>Learning .NET</category>
      <category>WebMatrix</category>
    <feedburner:origLink>http://www.hanselman.com/blog/MicrosoftWebMatrixInContextAndDeployingYourFirstSite.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.hanselman.com/blog/Trackback.aspx?guid=4afa5c68-06b9-4e2c-9f0f-c250347dbaca</trackback:ping>
      <pingback:server>http://www.hanselman.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.hanselman.com/blog/PermaLink.aspx?guid=4afa5c68-06b9-4e2c-9f0f-c250347dbaca</pingback:target>
      <dc:creator>Scott Hanselman</dc:creator>
      <wfw:comment>http://www.hanselman.com/blog/CommentView.aspx?guid=4afa5c68-06b9-4e2c-9f0f-c250347dbaca</wfw:comment>
      <wfw:commentRss>http://www.hanselman.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4afa5c68-06b9-4e2c-9f0f-c250347dbaca</wfw:commentRss>
      <slash:comments>34</slash:comments>
      <title>Removing Dead Tracks (Duplicates that don't exist) from iTunes using C#</title>
      <guid isPermaLink="false">http://www.hanselman.com/blog/PermaLink.aspx?guid=4afa5c68-06b9-4e2c-9f0f-c250347dbaca</guid>
      <link>http://feedproxy.google.com/~r/ScottHanselman/~3/HwvmEXHGu84/RemovingDeadTracksDuplicatesThatDontExistFromITunesUsingC.aspx</link>
      <pubDate>Sun, 04 Jul 2010 05:43:47 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/RemovingDeadTracksDuplicatesthatdontexis_13AF6/image_a91259a6-d2bb-4ca6-9066-bb993abd004f.png" width="305" height="245" /&gt; I hate iTunes on Windows with the heat of a thousand suns. It is a pox on my existence and it has cost me hours of pain and suffering. I'm sure it's all unicorns and spun sugar on MAC, but as a guy using Windows with dozens of gigabytes of music on a shared file server that I've ripped since the first CD I ever purchased, it's hell on earth. I could manage all my music with Zune (and I do have a Zune Pass for leasing music I don't want to buy) but there are iDevices in the house and iTunes is what it takes.&lt;/p&gt;  &lt;p&gt;Did I mention it sucks? It's slow, frustrating, and is effectively just a giant listbox that exists only to mess up my music library and occasionally try to sneak Safari and QuickTime onto my machines. But enough about Satan, let's yank some dead tracks, shall we?&lt;/p&gt;  &lt;p&gt;At some point, I ended up with hundreds of dead tracks and/or duplicates. I ended up with &amp;quot;LL Cool J - I Need Love 1.mp3&amp;quot; and &amp;quot;LL Cool J - I Need Love 2.mp3&amp;quot; along side the original. It was taking up many gigs of duplicate space. I searched for *1.mp3 and *2.mp3, etc, and deleted the dupes on disk.&lt;/p&gt;  &lt;p&gt;However, this then left me with a big iTunes database that THINKS it has music, even though the file on disk is long gone. Now, as a napalm-style solution, you CAN delete your iTunes library completely and re-add it. It'll add just files that exist, but you will lose any edits, artwork, etc, you may have added. This solution wasn't cool for me so I say, nay nay.&lt;/p&gt;  &lt;p&gt;There's a MILLION stupid little shareware apps that purport to fix duplicates and remove dead tracks. In my case, removing dupes was easy, but yanking dead tracks isn't worth me spending money.&lt;/p&gt;  &lt;p&gt;Instead, I sat down tonight and decided to write a script in C# that said something like &amp;quot;foreach track, does that track exist where the system thinks it should be? No? Delete it.&amp;quot;&lt;/p&gt;  &lt;p&gt;A little googling with Bing, however, brought me to a &lt;a href="http://www.scartech.net/2007/09/28/itunes-sdk-and-c-part-1/"&gt;three year old post at ScarTech&lt;/a&gt; where Shawn (shame he's stopped blogging) did the code for me! Yay. Here's a bit of his code, using the iTunes COM SDK. His stuff was written using Visual Studio Express 2008, but I upgraded to 2010. Also, I'm on 64-bit and his COM code expects x86, so I changed the project properties from AnyCPU to x86 and it worked great.&lt;/p&gt;  &lt;pre class="c#" name="code"&gt;//create a reference to iTunes&lt;br /&gt;iTunesAppClass iTunes = new iTunesAppClass();&lt;br /&gt;//get a reference to the collection of all tracks&lt;br /&gt;IITTrackCollection tracks = iTunes.LibraryPlaylist.Tracks;&lt;br /&gt;for (int i = trackCount; i &amp;gt; 0; i–)&lt;br /&gt;{&lt;br /&gt;      IITTrack track = tracks[i];&lt;br /&gt;      if (track.Kind == ITTrackKind.ITTrackKindFile)&lt;br /&gt;      {&lt;br /&gt;            IITFileOrCDTrack fileTrack = (IITFileOrCDTrack)track;          &lt;br /&gt;            //if the file doesn’t exist, we’ll delete it from iTunes           &lt;br /&gt;           if (fileTrack.Location == String.Empty || !System.IO.File.Exists(fileTrack.Location))            &lt;br /&gt;          {&lt;br /&gt;                  fileTrack.Delete();&lt;br /&gt;            }&lt;br /&gt;      }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Here's before:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1" border="0" alt="1" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/RemovingDeadTracksDuplicatesthatdontexis_13AF6/1.png" width="178" height="32" /&gt; &lt;/p&gt;

&lt;p&gt;So I ran it...&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iTunes COM Sample Screenshot" border="0" alt="iTunes COM Sample Screenshot" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/RemovingDeadTracksDuplicatesthatdontexis_13AF6/iTunes%20COM%20Sample%20(2)_e48d092c-6ce4-4490-9b46-22ba14693a6c.png" width="616" height="477" /&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;...and here's the afterparty:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.hanselman.com/blog/content/binary/WindowsLiveWriter/RemovingDeadTracksDuplicatesthatdontexis_13AF6/image_27d6a2cb-234e-4a27-883c-2e40e615fd70.png" width="172" height="31" /&gt; &lt;/p&gt;

&lt;p&gt;Looks like it checked 7219 tracks and removed 570 dead ones. Yum.&lt;/p&gt;

&lt;p&gt;I'd also encourage you to &lt;a href="http://www.scartech.net/2007/10/11/itunes-sdk-and-c-part-2/"&gt;check out the second part of Shawn's iTunes and C# tutorial series where he creates a duplicate finder that knows to keep the higher bitrate song&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can &lt;a href="http://www.scartech.net/wp-content/uploads/itunescomsample.zip"&gt;download Shawn's code here&lt;/a&gt; but as he hasn't blogged in a LONG time, I've mirrored it at SkyDrive. Big thanks to Shawn at ScarTech for saving me my evening and for tidying up my iTunes.&lt;/p&gt;

&lt;p&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-cd06a7367371152c.skydrive.live.com/embedicon.aspx/Public/iTunesCOMSample2.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Good stuff, the internets. &lt;/p&gt;&lt;br/&gt;&lt;hr/&gt;© 2010 Scott Hanselman. All rights reserved. &lt;br/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/buBWFQjivnbpj_pvodtV2kqOE40/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/buBWFQjivnbpj_pvodtV2kqOE40/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/buBWFQjivnbpj_pvodtV2kqOE40/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/buBWFQjivnbpj_pvodtV2kqOE40/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=HwvmEXHGu84:bDbBcon3tx4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=HwvmEXHGu84:bDbBcon3tx4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=HwvmEXHGu84:bDbBcon3tx4:MjquXQBfoPI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=MjquXQBfoPI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=HwvmEXHGu84:bDbBcon3tx4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=HwvmEXHGu84:bDbBcon3tx4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=HwvmEXHGu84:bDbBcon3tx4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?i=HwvmEXHGu84:bDbBcon3tx4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=HwvmEXHGu84:bDbBcon3tx4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ScottHanselman?a=HwvmEXHGu84:bDbBcon3tx4:5M_9TJJRyfI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ScottHanselman?d=5M_9TJJRyfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ScottHanselman/~4/HwvmEXHGu84" height="1" width="1"/&gt;</description>
      <comments>http://www.hanselman.com/blog/CommentView.aspx?guid=4afa5c68-06b9-4e2c-9f0f-c250347dbaca</comments>
      <category>Source Code</category>
      <category>Tools</category>
    <feedburner:origLink>http://www.hanselman.com/blog/RemovingDeadTracksDuplicatesThatDontExistFromITunesUsingC.aspx</feedburner:origLink></item>
  </channel>
</rss>
