<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>BadCorporateLogo</title>
	<atom:link href="http://badcorporatelogo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://badcorporatelogo.wordpress.com</link>
	<description>Just another WordPress.com site</description>
	<lastBuildDate>Mon, 20 Feb 2012 08:32:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='badcorporatelogo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>BadCorporateLogo</title>
		<link>http://badcorporatelogo.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://badcorporatelogo.wordpress.com/osd.xml" title="BadCorporateLogo" />
	<atom:link rel='hub' href='http://badcorporatelogo.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Faster Content Builds That Don&#8217;t Lock-up Your IDE</title>
		<link>http://badcorporatelogo.wordpress.com/2012/02/19/faster-content-builds-that-dont-lock-up-your-ide/</link>
		<comments>http://badcorporatelogo.wordpress.com/2012/02/19/faster-content-builds-that-dont-lock-up-your-ide/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 22:03:45 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">https://badcorporatelogo.wordpress.com/?p=92</guid>
		<description><![CDATA[Yesterday, I decided to explore what a sufficiently-motivated developer could do to improve content build times in XNA Game Studio 4.0. In a relatively short time, I was able to hack together a solution that distributes content builds across available &#8230; <a href="http://badcorporatelogo.wordpress.com/2012/02/19/faster-content-builds-that-dont-lock-up-your-ide/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=92&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I decided to explore what a sufficiently-motivated developer could do to improve content build times in XNA Game Studio 4.0. In a relatively short time, I was able to hack together a solution that distributes content builds across available processors, and doesn’t lock up the IDE (<a href="http://badcorporatelogo.wordpress.com/2011/03/06/building-game-content-makes-vs-unresponsive/" target="_blank">as described here</a>). This means Visual Studio remains responsive while your content builds, you can track build progress in the Output Window, and the whole thing will finish faster.</p>
<p>Before continuing, let me state clearly that <strong>what I’m about to describe requires Visual Studio 2010 Professional</strong>. Those of you using Visual C# Express Edition won’t be able to use this technique.</p>
<p>Okay, now I’m going to explain what I did. In my sample solution, I reduced the build time by 25% on my dual-core laptop (from 38 seconds down to 29 seconds).</p>
<p>For my experiment, I started with the <a href="http://create.msdn.com/en-US/education/catalog/starterkit/shipgame" target="_blank">Ship Game starter kit from create.msdn.com</a>. I chose this starter kit because it contained enough content that locking up the IDE on rebuilds would get annoying really fast.</p>
<p>Here’s what I did (short version; longer version at the end):</p>
<ol>
<li>Split content into multiple content projects, all building to the same output directory.</li>
<li>Add a Game Library project to the solution that references all the content projects.</li>
<li>Add a VC++ Makefile project to the solution that builds the game library from (2) with multi-proc support enabled.</li>
</ol>
<p>The key here is that I introduced a VC++ Makefile project to initiate the content build. This project type invokes arbitrary, user-defined commands, and it isn’t all broken like the C# projects. Specifically, it doesn’t lock up the UI thread when it executes long-running commands, and it correctly redirects all the command output to the Output Window, and reports errors in the Error List.</p>
<p>To have the makefile project build all my content projects in parallel, I set up the Build command to build the Game Library project using msbuild.exe with multi-processor support enabled.</p>
<p>Example Build Command:</p>
<blockquote><p>&#8220;$(MSBuildBinPath)\msbuild.exe&#8221; /m:$(NUMBER_OF_PROCESSORS) &#8220;$(SolutionDir)Content_All\Content_All.csproj&#8221;</p>
</blockquote>
<p>For Rebuild and Clean, I simply added /t:Rebuild and /t:Clean, respectively.</p>
<p><em>Note: </em>VC# Express doesn’t support VC++ projects, which is why this won’t work for Express users.</p>
<p>So that’s what I did, and it works great. Content builds don’t lock up the IDE, and the Output Window displays the name of each asset as it is compiled (some reassuring feedback during long-running builds).</p>
<p>At this stage, my solution is set up to build content projects referenced by the Game Library project (Content_All) in parallel. When I tried it the first time, I only squeezed 2 seconds off the build time. The bottleneck in my build was the project using the normal mapping processor, so I added another project, and moved some of the models and dependencies over there. That brought more parallelism into the build and the overall build time dropped to 29 seconds (from 38).</p>
<p>I experimented a little with putting the audio in another project, and shuffling some of the models back and forth, but gave up before finding any additional gains. On a machine with more processors (my laptop has two), there is potential for more savings.</p>
<p>I should note that in order to split up the custom model processing into multiple projects, I had to include some of their dependencies twice. For example, both projects build the NormalMapping shader. The cost of the redundancy was offset by a greater savings from parallel processing.</p>
<p>The drawbacks to doing this are:</p>
<ol>
<li>You basically need two extra projects in your solution to enable it, for each target platform.
<li>You need to manually edit the Solution Configurations to make things build properly.
<li>For Windows projects, the content won’t be recognized by ClickOnce publishing.</li>
</ol>
<p>The first isn’t so bad, because you can hide the extra projects in a Solution Folder. The second is something many people don’t really understand, but should be part of any advanced developer’s tool kit.</p>
<p>Another thing I want to note is that I separated the assets that use the custom processor from the assets that use standard processors to reduce incremental build times when NormalMappingModelProcessor.dll is modified. The standard content won’t rebuild at all – and thanks to splitting the custom content into two projects, the custom content can rebuild fully in less time as well.</p>
<p><strong>Angry grumbling: </strong>I had intended to provide my modified ShipGame solution as a downloadable sample, because the web site said it was under Ms-Pl. However, the actual ZIP file contains a license file that describes the “XNA Premium Content” license, which prohibits redistribution of unmodified software. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Before I go, let me leave you with this <u>disclaimer</u>: your mileage may vary. I do not plan to write out a click-by-click tutorial, but I added more detail below.</p>
<p>Here’s what I did (longer version):</p>
<ol>
<li>Move ShipGame content project up to the solution folder, and rename it Content_Main.</li>
<li>Add new content project, named Content_Custom.</li>
<li>Delete the Content Reference from ShipGameWindows.</li>
<li>Add new Game Library project to the solution, named Content_All.</li>
<li>Change the output folder of Content_All to match the output folder of ShipGameWindows.</li>
<li>In Content_All, add references to Content_Main and Content_Custom.</li>
<li>Change the Content Root Directory of all content projects to “Content”.</li>
<li>Add new C++ Makefile project, named Content_BuildAllParallel, and configure the Build, Rebuild, and Clean commands (details below).</li>
<li>Move all the content that depends on NormalMappingModelProcessor into Content_Custom, along with any additional content it depends on.</li>
<li>In Content_Custom, add a reference to NormalMappingModelProcessor.</li>
<li>In Content_Main, remove the reference to NormalMappingModelProcessor.</li>
<li>Edit the solution configuration so that Content_All and NormalMappingModelProcessor are excluded from all solution builds. Make sure that Content_BuildAllParallel is built when the rest of the game is built.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=92&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2012/02/19/faster-content-builds-that-dont-lock-up-your-ide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>Improving XNA Reflection-Based Readers and Writers</title>
		<link>http://badcorporatelogo.wordpress.com/2012/02/11/improving-xna-reflection-based-readers-and-writers/</link>
		<comments>http://badcorporatelogo.wordpress.com/2012/02/11/improving-xna-reflection-based-readers-and-writers/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 17:53:21 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://badcorporatelogo.wordpress.com/?p=88</guid>
		<description><![CDATA[This post is a bit random. I’m not feeling well today, but I had an idea while staring into space and decided I shouldn’t waste it. I thought about the XNA Content Pipeline, and the convenience of reflection-based serialization. I &#8230; <a href="http://badcorporatelogo.wordpress.com/2012/02/11/improving-xna-reflection-based-readers-and-writers/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=88&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This post is a bit random. I’m not feeling well today, but I had an idea while staring into space and decided I shouldn’t waste it.</p>
<p>I thought about the XNA Content Pipeline, and the convenience of <a href="http://blogs.msdn.com/b/shawnhar/archive/2009/03/25/automatic-xnb-serialization-in-xna-game-studio-3-1.aspx" target="_blank">reflection-based serialization</a>. I thought about the run-time performance penalty you pay for that convenience, and suddenly realized that you can have the best of both worlds.</p>
<p>What if the reflection-based XNB serializer also generated source code for a <a href="http://msdn.microsoft.com/en-us/library/bb195476.aspx" target="_blank">ContentTypeReader</a>? Then you’d have the convenience of automatic serialization at build time, and the performance of custom deserialization at run-time! The source code for all the generated content readers could be compiled by the content pipeline into an assembly and deployed along with the rest of the content. Then, when the content pipeline needs to read the types at run-time, it would use the (automatically-generated) custom readers instead of reflection.</p>
<p>Since I’m not sure I want to make this my keep-busy-while-sick project, I’m throwing the idea out there to see if anyone else wants to try it. If you try, but get stuck, I’ll be happy to help by answering questions about dynamic code gen or msbuild customization.</p>
<p>A couple references to get you started:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ff827626.aspx" target="_blank">Content Pipeline</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/650ax5cx.aspx" target="_blank">Code Generation and Compilation</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=88&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2012/02/11/improving-xna-reflection-based-readers-and-writers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>Building Game Content Makes VS Unresponsive</title>
		<link>http://badcorporatelogo.wordpress.com/2011/03/06/building-game-content-makes-vs-unresponsive/</link>
		<comments>http://badcorporatelogo.wordpress.com/2011/03/06/building-game-content-makes-vs-unresponsive/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 18:41:00 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">https://badcorporatelogo.wordpress.com/2011/03/06/building-game-content-makes-vs-unresponsive/</guid>
		<description><![CDATA[If you’re halfway serious about making games with XNA Game Studio 4.0, you’ve surely noticed that building any significant amount of game content (textures, audio, etc.) locks up the IDE until the build is complete. Long-time fans of XNA Game &#8230; <a href="http://badcorporatelogo.wordpress.com/2011/03/06/building-game-content-makes-vs-unresponsive/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=86&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you’re halfway serious about making games with XNA Game Studio 4.0, you’ve surely noticed that building any significant amount of game content (textures, audio, etc.) locks up the IDE until the build is complete. Long-time fans of XNA Game Studio recognize this as a regression. Those of you who are new to the product: it wasn’t always this way. You used to be able to use the IDE during builds; and the Output Window used to provide status on which content was being compiled as the build progressed.</p>
<p>The problem was introduced by a change in the C# project system on which Game Studio relies. The C# project system has a logger that captures output from the build and reports it to the Output Window. In VS 2010, the logger only updates the Output Window when the build is entirely complete. Until then, the rest of the VS UI is completely unresponsive. If your build takes more than a few seconds – say thirty – and you click on a menu or button in the hopes that something might happen, you’ll be rewarded by the IDE window turning white and a little pop-up from the system tray telling you that VS is busy.</p>
<p><a href="http://badcorporatelogo.files.wordpress.com/2011/03/vsisbusy.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="VSisBusy" border="0" alt="VSisBusy" src="http://badcorporatelogo.files.wordpress.com/2011/03/vsisbusy_thumb.png?w=244&#038;h=109" width="244" height="109"></a></p>
<p>That little pop-up also says to report the problem to Microsoft if it happens during normal use. Well, the other week I saw it one too many times and I did that. I reported the bug through <a href="http://connect.microsoft.com/" target="_blank">Microsoft’s customer feedback portal</a>. This portal provides an opportunity for customers to vote on issues and say whether they can reproduce the problem. The more customers impacted by a bug, the less likely a team is going to ignore it.</p>
<p>Sadly, the VS team responsible for this regression doesn’t seem to think it’s a big deal. When I reported the problem, I listed six ways it could be reproduced. One of those ways was to build content in an XNA game project. They immediately rejected the bug saying it was the XNA team’s problem. Well, it isn’t – and for the record, this problem was reported to them by another Microsoft team even before VS 2010 shipped. At the time, they determined it was a regression, and still decided not to fix it.</p>
<p>I reactivated the bug with a sample project that reproduces the hang without any hint of XNA anywhere at all. If having the IDE freeze up while you build content bothers you, please tell the team that’s responsible for fixing it. Vote on the Connect feedback for the root cause here:</p>
<p><a title="https://connect.microsoft.com/VisualStudio/feedback/details/645579/builds-occur-on-the-ui-thread-in-vs-2010" href="https://connect.microsoft.com/VisualStudio/feedback/details/645579/builds-occur-on-the-ui-thread-in-vs-2010">https://connect.microsoft.com/VisualStudio/feedback/details/645579/builds-occur-on-the-ui-thread-in-vs-2010</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/86/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=86&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2011/03/06/building-game-content-makes-vs-unresponsive/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>

		<media:content url="http://badcorporatelogo.files.wordpress.com/2011/03/vsisbusy_thumb.png" medium="image">
			<media:title type="html">VSisBusy</media:title>
		</media:content>
	</item>
		<item>
		<title>XNA Content Pipeline Debugging (4.0)</title>
		<link>http://badcorporatelogo.wordpress.com/2010/10/31/xna-content-pipeline-debugging-4-0/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/10/31/xna-content-pipeline-debugging-4-0/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 10:09:57 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">https://badcorporatelogo.wordpress.com/2010/10/31/xna-content-pipeline-debugging-4-0/</guid>
		<description><![CDATA[It took more work than I expected, but I’ve published my template for debugging the XNA Content Pipeline in XNA Game Studio 4.0. To install and use the template, right-click on the solution node of a solution where you have &#8230; <a href="http://badcorporatelogo.wordpress.com/2010/10/31/xna-content-pipeline-debugging-4-0/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=80&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It took more work than I expected, but I’ve published my template for debugging the XNA Content Pipeline in XNA Game Studio 4.0.</p>
<p>To install and use the template, right-click on the solution node of a solution where you have an XNA Content project to debug, and select <strong>Add—&gt;New Project…</strong> Then, in the Add New Project dialog, click Online Templates on the left-hand-side, and type “debugging” in the search box in the upper-right corner.</p>
<p><a href="http://badcorporatelogo.files.wordpress.com/2010/10/image.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;margin:0;" title="image" border="0" alt="image" src="http://badcorporatelogo.files.wordpress.com/2010/10/image_thumb.png?w=244&#038;h=157" width="244" height="157"></a></p>
<p>Select the XNA Content Pipeline Debugging template, and it will start the install wizard. The template is released under the Microsoft Public License. (When I submitted to the VS Gallery, I discovered that all submitted templates <em>must</em> be licensed under the Ms-PL.) If you don’t agree to the license, do not install or use the software.</p>
<p>After creating the project, there are two string constants that you must edit before you begin debugging. They are marked with comments, but I’ll describe it here as well.</p>
<p>Replace the highlighted value of this first field with the full path of the content project you want to debug:</p>
<p><font size="2" face="Courier New">&nbsp;&nbsp;&nbsp; private const string ProjectToDebug = @&#8221;<font>TODO_FullProjectPathGoesHere</font>&#8220;;</font></p>
<p>Then replace the highlighted value of this second field with the relative path of the item you want to debug. The path should be relative to the content project, so that it matches the item name in that project.</p>
<p><font size="2" face="Courier New">&nbsp;&nbsp;&nbsp; private const string SingleItem = @&#8221;<font>TODO_RelativeItemPathGoesHere</font>&#8220;;</font></p>
<p>Now when you want to debug, you set the DebugPipeline project to be the startup project and press <strong>F5</strong>. Or, even better, just right-click on the DebugPipeline project and select <strong>Debug—&gt;Start new instance</strong>.</p>
<p>By default, this project is configured to build content for Windows using the Debug configuration and the HiDef graphics profile. These settings will be apparent in the Program.cs file where you can change them to meet your needs.</p>
<p>Changing the graphics profile to Reach is easy, and you might need to do this if your content project is part of a Windows Phone game.</p>
<p><strong>HOWEVER</strong>, for now please <em>don’t</em> change the TargetPlatform (I just discovered a bug as I’m writing this… Damn!). I’ll update the template tomorrow to fix the problem.</p>
<p>If you have feedback or questions about the template, or want to review screenshots before downloading, follow this link to the template description page in the Visual Studio Gallery:</p>
<blockquote><p><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/98babd10-b66d-40fa-919d-56731c6af52f" target="_blank">XNA Content Pipeline Debugging</a></p>
</blockquote>
<p>The link above has a discussion page.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=80&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/10/31/xna-content-pipeline-debugging-4-0/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>

		<media:content url="http://badcorporatelogo.files.wordpress.com/2010/10/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Notes on Debugging the XNA Content Pipeline 4.0</title>
		<link>http://badcorporatelogo.wordpress.com/2010/10/30/notes-on-debugging-the-xna-content-pipeline-4-0/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/10/30/notes-on-debugging-the-xna-content-pipeline-4-0/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 21:00:15 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">https://badcorporatelogo.wordpress.com/2010/10/30/notes-on-debugging-the-xna-content-pipeline-4-0/</guid>
		<description><![CDATA[In the past, I’ve written about how to debug the content pipeline in Visual Studio 2008 or Visual C# 2008 Express Edition. Last month, while upgrading a bunch of projects and tools to work with Game Studio 4.0, I ran &#8230; <a href="http://badcorporatelogo.wordpress.com/2010/10/30/notes-on-debugging-the-xna-content-pipeline-4-0/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=75&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the past, I’ve written about <a href="http://badcorporatelogo.spaces.live.com/Blog/cns!43EB71B104A2D711!502.entry">how to debug the content pipeline in Visual Studio 2008 or Visual C# 2008 Express Edition</a>. Last month, while upgrading a bunch of projects and tools to work with Game Studio 4.0, I ran into a problem only occurred when debugging my content build. To work around the problem, I came up with a better way to debug content pipeline extensions. This blog post explains the problem I ran into and describes my work-around. Later this weekend, I’ll upload a template to <a href="http://visualstudiogallery.msdn.microsoft.com">VS Gallery</a> that you can use for your own XNA game solutions.</p>
<p>The build engine used by C# projects in Visual Studio is MSBuild, so it is natural that XNA Game Studio uses MSBuild to drive the XNA Content Pipeline. It’s important to note that MSBuild is both a technology and a product. The <em>technology </em>is the engine, and it is implemented in the .NET Framework’s <a href="http://msdn.microsoft.com/en-us/library/gg145008.aspx">Microsoft.Build namespaces</a>. The <em>product </em>is <a href="http://msdn.microsoft.com/en-us/library/ms164311.aspx">msbuild.exe</a>, which is a simple console application that serves as a driver for the engine.</p>
<p>When you build a C# project or an XNA Content project in Visual Studio, the IDE invokes the MSBuild engine directly, inside the IDE’s process. When you build a project on the command line with msbuild.exe, it invokes the same engine, but in a different process than the IDE.</p>
<p>Ideally, the MSBuild engine would not behave any differently when building in VS or in msbuild.exe. However, there <em>are </em>subtle differences, and it turns out they can have significant impact.</p>
<p>One such problem is that the threading models is not the same between these two processes. In VS, the engine is executed in a single-threaded apartment (STA), while in msbuild.exe, the engine is executed in a multi-threaded apartment (MTA). Usually, this doesn’t make any difference for build tools… But I have a custom <a href="http://en.wikipedia.org/wiki/XAML">XAML</a> importer in my content pipeline, and in .NET Framework 4.0, <a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xamlreader.load.aspx">XamlReader.Load</a> throws an exception when it is called by an MTA thread. That means in GS 4.0, my XAML importer works fine in the VS IDE, but throws an exception when building from the command line! (Note: I’m not sure whether the breaking change occurred in the new version of XamlReader or msbuild.exe, but the same code did not throw an exception in GS 3.1.)</p>
<p>I found this problem while working on a <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.canvas.aspx">Canvas</a> processor for the imported XAML. The processor was incorrectly inverting some UI elements, but when I tried to debug it by launching msbuild.exe under the debugger, the build couldn’t even get that far! Argh!</p>
<p>My eventual solution was to create my own console application to host the MSBuild engine. I marked the entry point method with the <a href="http://msdn.microsoft.com/en-us/library/system.stathreadattribute.aspx">STAThread</a> attribute, and configured it to build my content project. With only a few lines of code, I had a console application that would load the content pipeline and build my content with the same threading model as XNA Game Studio in the VS IDE. Better yet, because it was a standard C# console application project, debugging that project allowed me to debug my content pipeline extensions without any special configuration of the IDE!</p>
<p>Following that discovery, I began converting my solution into a project template so that it’s easy to share, easy to use, and works equally well in all editions of Visual Studio, including VC# Express and VS Express for Windows Phone.</p>
<p>The template creates a console application project with code to host the MSBuild engine and build a content project that you specify. You choose the project by providing its full path, and then tweak the build configuration by editing values in the source code. This provides full control over which configuration, platform, and profile to build. In addition, there is a field to specify which specific item you want to debug – this feature means you can select particular items in a large content project without waiting for everything else to rebuild. When the template is complete, it will be available through the <a href="http://msdn.microsoft.com/en-us/library/y3z83f7t.aspx">Online Templates feature</a> in the New Project Dialog.</p>
<p>As an aside, I’m a little disappointed that it is harder to build content projects from the command line in GS 4.0 than ever before. Several build properties do not have defaults, so the project won’t build if you don’t set them explicitly. Worse, when they’re missing, the errors don’t tell you which properties to set! My new template should take care of all of that for you. I’ll post a follow-up as soon as it’s ready.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=75&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/10/30/notes-on-debugging-the-xna-content-pipeline-4-0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>App Week for a Tools Developer</title>
		<link>http://badcorporatelogo.wordpress.com/2010/10/24/app-week-for-a-tools-developer/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/10/24/app-week-for-a-tools-developer/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 20:17:05 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">https://badcorporatelogo.wordpress.com/2010/10/24/app-week-for-a-tools-developer/</guid>
		<description><![CDATA[About a month ago, my colleague Shawn wrote a couple posts about the XNA team’s “App Week” (one, two, and three), a period of time reserved for our team to make games with the latest version of our product (XNA &#8230; <a href="http://badcorporatelogo.wordpress.com/2010/10/24/app-week-for-a-tools-developer/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=69&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>About a month ago, my colleague <a href="http://blogs.msdn.com/b/shawnhar/" target="_blank">Shawn</a> wrote a couple posts about the XNA team’s “App Week” (<a href="http://blogs.msdn.com/b/shawnhar/archive/2010/09/28/appweek-2010.aspx" target="_blank">one</a>, <a href="http://blogs.msdn.com/b/shawnhar/archive/2010/09/28/appweek-2010-update.aspx" target="_blank">two</a>, and <a href="http://blogs.msdn.com/b/shawnhar/archive/2010/09/29/appweek-2010-part-3.aspx" target="_blank">three</a>), a period of time reserved for our team to make games with the latest version of our product (<a href="http://msdn.microsoft.com/en-us/library/bb200104.aspx" target="_blank">XNA Game Studio 4.0</a>). I participated in App Week also – and while I did make a game, I also spent a fair amount of time updating my old tools and utilities for XNA Game Studio 4.0. This post is a little late, but I learned some things during App Week that I wanted to write about and talking about App Week is a good introduction to those topics.</p>
<p>First, the fun stuff! I worked with another developer from my team, Eli, to make a collection of distinct mini-games inspired by an SNL short film called <a href="http://www.hulu.com/watch/42614/saturday-night-live-giraffes" target="_blank">Giraffes</a> (warning: it is hilarious!). We did mini-games so we could add more as we completed them, and cut anything that we didn’t finish. In the end, we only finished one mini-game each – but they are reasonably polished and fun, in our humble opinions. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The two mini-games were Drive-By and Vampire Blood. (View a complete gallery of screenshots <a href="http://cid-43eb71b104a2d711.photos.live.com/browse.aspx/GS4%20App%20Week%20-%20Giraffes" target="_blank">here</a>.)</p>
<p><a href="http://badcorporatelogo.files.wordpress.com/2010/10/fly01.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Fly01" src="http://badcorporatelogo.files.wordpress.com/2010/10/fly01_thumb.png?w=244&#038;h=139" border="0" alt="Fly01" width="244" height="139" /></a></p>
<p>Eli’s drive-by shooting game was loosely inspired by Paper Boy, with the idea that you shoot pedestrians as you drive down the street instead of delivering newspapers. You have to avoid collisions with the other cars, both on the road and parked at the side (which can block your bullets for the pedestrians), or shoot them to blow them out of your way. It’s a twin-stick, side-scrolling shooter where right trigger fires your uzi and the left trigger sounds your horn (la cucaracha).</p>
<p>My vampire game involves pressing A to flap and stay airborne, while you constantly run out of blood. To replenish your blood, you have to swoop down and bite the happy shoppers at <a href="http://pikeplacemarket.org/" target="_blank">Pike Place Market</a> – but touching the ground ends the game, so you have to be careful! If you’re too good at the game, the A-Team shows up to shoot you down and save the market.</p>
<p>Aside from the mini-games themselves, we spent a fair amount of time on our menu screens. We had a Zune-inspired menu control, tons of animated transitions, and head-banging giraffes popping in and out of view to our heavy metal soundtrack.</p>
<p>Our game was one of maybe two app week games that didn’t use the <a href="http://create.msdn.com/en-US/education/catalog/sample/game_state_management" target="_blank">Game State Management sample</a> to build our game screens. Instead, we used the <a href="http://ferpect.codeplex.com/" target="_blank">Ferpect SDK</a>, which I upgraded to Game Studio 4.0 specifically so we could use it. The Ferpect SDK provides an integrated design view for game components in Visual Studio. Building game screens works a bit like building user controls with Windows Forms: you drag and drop components from the Toolbox onto the design surface, edit their properties in the Properties Window, and add event handlers by double-clicking. I fixed a few bugs and added a few features to the component model while we were at it.</p>
<p>While we were working on our game, occasionally Eli would ask me how to do something specific in the designer. Sometimes, the feature was there and he didn’t find it, sometimes it was there but broken, and sometimes it just wasn’t there. Whenever it wasn’t there, he got frustrated. I explained that the designer doesn’t stop you from doing anything – it might not do everything, but it doesn’t take anything away. If you can’t do something in the designer, go to the code view and just write the code!</p>
<p>The funny thing Eli told me is that if there was no design view, he wouldn’t have thought twice about writing the code himself. But because the designer made other things so easy, it made him mad if he had to do something manually and he seemed to try really hard to avoid it. Honestly, I’m not sure what to take away from that. It’s like being happy to use a nail gun for driving nails, but then being annoyed when you need a regular hammer to pull a bent nail with its claw. A nail gun might always make your work faster and easier, but psychologically, having to use a hammer once in a while gives you the impression the nail gun falls short. Hmm.</p>
<p>Aside from the Ferpect SDK upgrade, I also spent some time upgrading my copy of Box2D, then my Xaml2DImporter (never released because it’s still only halfway done), and finally my <a href="http://badcorporatelogo.wordpress.com/2010/08/07/debugging-xbox-360-content-%e2%80%93-bug-fix/" target="_blank">Content Pipeline Debugging tool</a> (still only available for GS 3.1). Neither Eli nor I used Box2D in our games, but I was thinking about it for another mini-game concept. While working on all these things, I realized something important: If you develop tools instead of games, you get really screwed by our (XNA Game Studio) upgrades!</p>
<p>All of our documentation and forum help are focused on changes in the XNA Framework API. We never really mention that we also switched from .NET Framework 2.0 to .NET Framework 4.0, from VS 2008 to VS 2010, and from MSBuild 3.5 to 4.0. If you’re a tools developer, you are likely impacted by each of these things, but they’re all documented independently by their owning teams, along with any breaking changes or gotchas. Upgrading my tools from Game Studio 3.1 to 4.0 was a challenge at times. One outcome of that effort, though, is that I’ve learned a few things. More on that another time.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=69&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/10/24/app-week-for-a-tools-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>

		<media:content url="http://badcorporatelogo.files.wordpress.com/2010/10/fly01_thumb.png" medium="image">
			<media:title type="html">Fly01</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://badcorporatelogo.wordpress.com/2010/10/22/hello-world/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/10/22/hello-world/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 04:47:55 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://badcorporatelogo.wordpress.com/?p=1</guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=1&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="https://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=1&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/10/22/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>Optimizing MSIL Rewriter – First Xbox Perf Test</title>
		<link>http://badcorporatelogo.wordpress.com/2010/09/06/optimizing-msil-rewriter-%e2%80%93-first-xbox-perf-test/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/09/06/optimizing-msil-rewriter-%e2%80%93-first-xbox-perf-test/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 02:57:48 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">http://badcorporatelogo.wordpress.com/2010/09/06/optimizing-msil-rewriter-%e2%80%93-first-xbox-perf-test</guid>
		<description><![CDATA[I just tested my assembly optimizer on Xbox 360 for the first time. Since the whole point is to improve runtime performance, I decided to run my optimizer on Box2D and then compare some of its most intensive tests. Without &#8230; <a href="http://badcorporatelogo.wordpress.com/2010/09/06/optimizing-msil-rewriter-%e2%80%93-first-xbox-perf-test/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=3&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!43EB71B104A2D711!509" class="bvMsg">
<p>I just tested my assembly optimizer on Xbox 360 for the first time. Since the whole point is to improve runtime performance, I decided to run my optimizer on <a href="http://box2dxna.codeplex.com/">Box2D</a> and then compare some of its most intensive tests.</p>
<p><strong>Without </strong>optimization, the Box2D pyramid test maxed-out at <strong>59 milliseconds</strong> per update for the physics simulation, without firing any bullets.</p>
<p><strong>With</strong> optimization, the Box2D pyramid test maxed-out at <strong>51 milliseconds </strong>per update for the physics simulation, without firing any bullets.</p>
<p>That was my first real-world test, with only naive inlining of Microsoft.Xna.Framework types. That means there’s lots of room to improve, since Box2D uses a lot of internal types and functions for its physics simulation. Oh, I suppose I should note I compiled that assembly without optimizations (that is, C# optimizations were disabled).</p>
<p>Sweet!</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=3&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/09/06/optimizing-msil-rewriter-%e2%80%93-first-xbox-perf-test/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>MSIL Inlining Update</title>
		<link>http://badcorporatelogo.wordpress.com/2010/08/30/msil-inlining-update/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/08/30/msil-inlining-update/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 07:45:15 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">http://badcorporatelogo.wordpress.com/2010/08/30/msil-inlining-update</guid>
		<description><![CDATA[I’m continuing work on my MSIL assembly rewriter. My primary goal for this tool is to optimize the IL in ways that the NetCF JIT compiler can’t. One such deficiency is that the NetCF JIT does a poor job of &#8230; <a href="http://badcorporatelogo.wordpress.com/2010/08/30/msil-inlining-update/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=4&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!43EB71B104A2D711!508" class="bvMsg">
<p>I’m continuing work on my MSIL assembly rewriter. My primary goal for this tool is to optimize the IL in ways that the NetCF JIT compiler can’t. One such deficiency is that the NetCF JIT does a poor job of inlining. Especially troublesome is its lack of ability to inline methods with value type parameters, return types, or local variables. That means just about every mathematical function that games use ALL THE TIME.</p>
<p>Last week, I got my tool working on operator overloads. Operator overloads are actually static methods where the arguments are passed by value. For small structures like vectors, the call overhead makes operators very expensive (read: slow) compared to performing operations on each individual component of the type.</p>
<p>That is to say that the following addition between vectors:</p>
<blockquote><p>Vector2 result = v1 + v2;</p>
</blockquote>
<p>Is more expensive than the following sequence of additions:</p>
<blockquote><p>Vector2 result;</p>
<p>result.X = v1.X + v2.X;</p>
<p>result.Y = v1.Y + v2.Y;</p>
</blockquote>
<p>Some of the overhead is copying v1 and v2 onto the stack, some is copying the return value off the stack into result, and some is the call itself (method calls are expensive on Xbox 360).</p>
<p>Straight inlining of static methods is really easy in principle, and it didn’t take long to get it working (not counting the two years of procrastination). I then added some analysis to the method bodies, to determine which parameters are modified. If they’re not modified, then the parameters can be replaced by the actual arguments rather than copies placed in new local variables. For the mathematical operators, that eliminates not only the method call overhead, but ALL of the copying overhead, too.</p>
<p>This weekend, I worked on inlining value type constructors. These are interesting because they’re instance methods and so the inlining tool needs to deal with “this” references. Replacing the “this” references turned out to be easy – but it got harder when I thought about inlining Xbox 360 functions.</p>
<p>Pretty much the whole point of this tool is to help performance on the NetCF. In particular, I want to use it on XNA Framework games for Xbox 360 and I’m currently working on XNA Framework 3.1. (Yes, I will eventually update to XNA Framework 4.0, but I don’t have a Windows Phone right now, and I do have an Xbox 360.)</p>
<p>Ah, there’s a catch! The XNA Framework 3.1 has different assembly identities for Xbox 360 than for Windows, and XNA Game Studio does not include full MSIL assemblies for Xbox 360. Instead, it provides the metadata assemblies only, which don’t contain any method bodies. Argh! I can’t inline what isn’t there!</p>
<p>Of course, last week I’d already started on a solution for it. It just got harder when I tried instance methods. My solution was to use custom attributes to mark methods as inlinable for calls to identical methods on surrogate types.</p>
<p>For example,</p>
<blockquote><p>public struct InlinableVector2<br />&#123;<br />    [InlinableMethod(typeof(Vector2))]<br />    public static Vector2 op_UnaryNegation(Vector2 value)<br />    &#123;<br />        Vector2 vector;<br />        vector.X = -value.X;<br />        vector.Y = -value.Y;<br />        return vector;<br />    &#125;
<p>//…</p>
</blockquote>
<p>In the example above, the op_UnaryNegation is declared as an inlinable method that replaces calls to Vector2.op_UnaryNegation (the minus operator).
<p>It works great, and allows me to ensure that the methods are written according to the limitations of my assembly rewriter. For example, I don’t want to inline methods with multiple return statements. It’s way easier just to rewrite such a method by hand to have one return statement than it is to write a program to do it. I wouldn’t have control over the method implementation conforming to my tool’s limits if I could only inline the actual methods of Vector2.
<p>It got tricky when I wanted to inline constructor calls. Instance methods have ‘this’ references and field references. My inlinable method’s ‘this’ isn’t the same type as the called method’s ‘this’. That shows up here and there in the IL, too, like in field references. Well, just before writing this blog entry, I got it working.
<p>I’m quite pleased with my progress so far. Next up is passing value types by reference (it might already work, but I haven’t tried), and then rewriting calls with equivalent, but more efficient calls (eg, replace “m3 = Matrix.Multiply(m1, m2)” with “Matrix.Multiply(ref m1, ref m2, out m3)”).
<p>All the optimizations this tool is performing could be done by hand in the source code. However, most of the more efficient patterns are more cumbersome to write and more difficult to read. Having a tool do it at the IL level means programmers can keep writing code the most productive way, but still get the benefit of tedious micro-optimizations done everywhere.</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=4&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/08/30/msil-inlining-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>An Optimizing MSIL Rewriter (First Working Prototype)</title>
		<link>http://badcorporatelogo.wordpress.com/2010/08/22/an-optimizing-msil-rewriter-first-working-prototype/</link>
		<comments>http://badcorporatelogo.wordpress.com/2010/08/22/an-optimizing-msil-rewriter-first-working-prototype/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 08:48:45 +0000</pubDate>
		<dc:creator>badcorporatelogo</dc:creator>
				<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">http://badcorporatelogo.wordpress.com/2010/08/22/an-optimizing-msil-rewriter-first-working-prototype</guid>
		<description><![CDATA[I originally started this project about two years ago, but lost interest and put it away also about two years ago. Recently, I dusted it off and started working on it again. Tonight, I have my first optimizations running. The &#8230; <a href="http://badcorporatelogo.wordpress.com/2010/08/22/an-optimizing-msil-rewriter-first-working-prototype/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=5&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!43EB71B104A2D711!505" class="bvMsg">
<p>I originally started this project about two years ago, but lost interest and put it away also about two years ago. Recently, I dusted it off and started working on it again. Tonight, I have my first optimizations running. The project is an MSIL rewriter to help overcome some of the JIT compiler shortcomings on Xbox 360. In particular, the focus of this tool is inlining method calls – starting with operator overloads on XNA Framework value types (eg, Vector2, Vector3, Matrix, etc.).</p>
<p>At this point, the inlining is terribly dumb. It doesn’t eliminate any of the implicit copying done in passing value types to a function, but that can be improved. (At the moment, it becomes explicit copying.) The main advantages of operator inlining is elimination of the function call, and elimination of copying arguments to and from the stack. Well, I’ve got one of the two so far.</p>
<p>The tool accomplishes about the same thing as manually inlining your code at the source level. However, it’s automatic, so it’s not tedious and error-prone. Also, it allows you to write source code more naturally, performing math at the vector or matrix level instead of breaking things down into components. Here’s what happens when my MSIL rewriter inlines the Vector2.op_Addition call…</p>
<p><strong><u>Original C# Source code:</u></strong></p>
<p>public Vector2 Add2(Vector2 a, Vector2 b)<br />&#123;<br />    return a + b;<br />&#125;  
<p><strong><u>MSIL Generated by C# Compiler:</u></strong>
<p>.method public hidebysig instance valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 Add2(valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 a, valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 b) cil managed<br />&#123;<br />    .maxstack 2<br />    .locals init (<br />        [0] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 CS$1$0000)<br />    L_0000: nop <br />    L_0001: ldarg.1 <br />    L_0002: ldarg.2 <br />    L_0003: call valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::op_Addition(valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2, valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2)<br />    L_0008: stloc.0 <br />    L_0009: br L_000e<br />    L_000e: ldloc.0 <br />    L_000f: ret <br />&#125;
<p><strong><u>MSIL after Rewriting:</u></strong></p>
<p>.method public hidebysig instance valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 Add2(valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 a, valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 b) cil managed<br />&#123;<br />    .maxstack 9<br />    .locals init (<br />        [0] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 CS$1$0000,<br />        [1] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 vector,<br />        [2] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 vector2,<br />        [3] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 vector3,<br />        [4] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 vector4,<br />        [5] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 vector5,<br />        [6] valuetype [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 vector6)<br />    L_0000: ldarg.1 <br />    L_0001: stloc.1 <br />    L_0002: ldarg.2 <br />    L_0003: stloc.2 <br />    L_0004: ldloca.s vector3<br />    L_0006: ldloca.s vector<br />    L_0008: ldfld float32 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::X<br />    L_000d: ldloca.s vector2<br />    L_000f: ldfld float32 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::X<br />    L_0014: add <br />    L_0015: stfld float32 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::X<br />    L_001a: ldloca.s vector3<br />    L_001c: ldloca.s vector<br />    L_001e: ldfld float32 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::Y<br />    L_0023: ldloca.s vector2<br />    L_0025: ldfld float32 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::Y<br />    L_002a: add <br />    L_002b: stfld float32 [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2::Y<br />    L_0030: ldloc.3 <br />    L_0031: stloc.s vector4<br />    L_0033: ldloc.s vector4<br />    L_0035: stloc.s vector5<br />    L_0037: ldloc.s vector5<br />    L_0039: stloc.0 <br />    L_003a: ldloc.0 <br />    L_003b: stloc.s vector6<br />    L_003d: ldloc.s vector6<br />    L_003f: ret <br />&#125;
<p><strong><u>Reflector’s Decompiled C# After Rewriting:</u></strong></p>
<p>public Vector2 Add2(Vector2 a, Vector2 b)<br />&#123;<br />    Vector2 vector3;<br />    Vector2 vector = a;<br />    Vector2 vector2 = b;<br />    vector3.X = vector.X + vector2.X;<br />    vector3.Y = vector.Y + vector2.Y;<br />    return vector3;<br />&#125;
<p>As you can see, the rewritten MSIL has eliminated a function call. That’s really cool because the Xbox 360 JIT compiler won’t do that!
<p>The MSIL rewriter can be incorporated into the Game Studio build process pretty easily, making operator inlining automatic. It also supports marking your own methods with an attribute so they will be inlined as well. I’m pretty excited to see it beginning to work! I guess that’s one good thing about this cold summer keeping me indoors.</p>
</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badcorporatelogo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badcorporatelogo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badcorporatelogo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badcorporatelogo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badcorporatelogo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badcorporatelogo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badcorporatelogo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badcorporatelogo.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badcorporatelogo.wordpress.com&amp;blog=16961186&amp;post=5&amp;subd=badcorporatelogo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badcorporatelogo.wordpress.com/2010/08/22/an-optimizing-msil-rewriter-first-working-prototype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/14273098df45104647faee91c29f64a2?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">badcorporatelogo</media:title>
		</media:content>
	</item>
	</channel>
</rss>
