<?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/"
	>

<channel>
	<title>The Toolsmiths &#187; Builds</title>
	<atom:link href="http://thetoolsmiths.org/category/builds/feed/" rel="self" type="application/rss+xml" />
	<link>http://thetoolsmiths.org</link>
	<description></description>
	<lastBuildDate>Mon, 23 Aug 2010 18:22:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CoApp</title>
		<link>http://thetoolsmiths.org/2010/08/23/coapp/</link>
		<comments>http://thetoolsmiths.org/2010/08/23/coapp/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 18:22:43 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Dependencies]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=533</guid>
		<description><![CDATA[One open source project I have been keeping an eye on is CoApp. Microsoft is currently paying a Garrett Serack to develop an open binary and source package management platform for Windows. The goal is provide the ease of use and flexibility of linux-style package management on the Windows platform. This is exactly what Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>One open source project I have been keeping an eye on is <a href="http://coapp.org">CoApp</a>.  Microsoft is currently paying a Garrett Serack to develop an open binary and source package management platform for Windows.  The goal is provide the ease of use and flexibility of linux-style package management on the Windows platform.  This is exactly what Microsoft needs to do to keep its operating system competitive in the current climate.  Anyone that has developed or broadly deployed an open source application on windows knows the pain that can be avoided if this project succeeds.</p>
<p><iframe src="http://player.vimeo.com/video/14075000" width="549" height="309" frameborder="0"></iframe>
<p><a href="http://vimeo.com/14075000">CoApp Presentation</a> from <a href="http://vimeo.com/user4476256">Garrett Serack</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/08/23/coapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving Builds (GameX Talk)</title>
		<link>http://thetoolsmiths.org/2009/12/14/improving-builds-gamex-talk/</link>
		<comments>http://thetoolsmiths.org/2009/12/14/improving-builds-gamex-talk/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 19:57:59 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Builds]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=396</guid>
		<description><![CDATA[As many of you know, I&#8217;m a stickler for a good build process.  In my mind, a any game team can loose a lot of time and money just waiting for their builds to complete, or waiting for a build that won&#8217;t crash every 10 minutes.  This is mitigated somewhat by programming processes like unit [...]]]></description>
			<content:encoded><![CDATA[<p>As many of you know, I&#8217;m a stickler for a good build process.  In my mind, a any game team can loose a lot of time and money just waiting for their builds to complete, or waiting for a build that won&#8217;t crash every 10 minutes.  This is mitigated somewhat by programming processes like unit testing and the like, but even with these, it is important that you have a clear and defined process for getting the build from check-in to team without any significant snags.</p>
<p>A few months ago, I gave a talk at GameX about improving builds and build process, and I’ve finally gotten around to posting the slides on my website, <a href="http://fuzzybinary.com/talks/SlackOff.ppt">here</a>.</p>
<p>There are a few things I wish I’d hit in the talk that just didn’t make it in, including talking about ways to distribute asset optimization and best practices for version control, but much of that is in flux for me right now, especially with my new found fascination with Mercurial and distributed version control (and it’s very real lack of binary / large file support).  Even without those concerns, I&#8217;ve yet to see anyone really tackle best practices in distributed asset optimization, including best practices in file composing (taking multiple files that make up a level, and composing so that they load faster), so it wasn&#8217;t something I was prepared to address.</p>
<p>What about from the readers?  What would you have liked to see in this talk that never got mentioned?  What would have rather I&#8217;d spent more time on?</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/12/14/improving-builds-gamex-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building on the Cloud</title>
		<link>http://thetoolsmiths.org/2009/10/05/building-on-the-cloud/</link>
		<comments>http://thetoolsmiths.org/2009/10/05/building-on-the-cloud/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 12:43:52 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Revision Control]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/blog/?p=368</guid>
		<description><![CDATA[Over the past few years, cloud computing has become the next big thing for enterprise software.  The ability to easily scale resources to meet the needs of the end users cheaply is very attractive.  Amazon, Sun, Google and now Mictrosoft (among others) are all offering cloud computing solutions.  I&#8217;ve recently been playing around with the AWS (Amazon [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few years, cloud computing has become the next big thing for enterprise software.  The ability to easily scale resources to meet the needs of the end users cheaply is very attractive.  Amazon, Sun, Google and now Mictrosoft (among others) are all offering cloud computing solutions.  I&#8217;ve recently been playing around with the AWS (Amazon Web Services) to see what you can do with this technology, and I can already see a few ways it could be applied to games.</p>
<p>Running games on the cloud is an obvious use of these resources.  Need a game server accessable from anywhere in the world?  Start one up on a virtual server.  The ability to build machine images (AMIs on Amazon), complete with your own software running on operating systems like Linux, OpenSolaris, or even Microsoft Windows Server gives you that possibility for pennies a day.</p>
<p>But, where cloud computing could really come in handy is in game development.  Imagine starting a build distributed across the cloud, in which thousands of virtual machines simultaneously start processing individual bits data.  You might see builds going from minutes or hours to just a few sconds.</p>
<p>And the cloud isn&#8217;t just for processing either.  Some companies offer services for managing data that would traditionally reside in a relational database, and as well as file storage services.  You could even use your own machine image running some flavor of SQL.  With that capability, why not store assets in the cloud?  An asset control vendor could use the software as service (SAS) model for asset control, supplying developers with web and client based views into an asset database on the cloud itself.</p>
<p>The big problem here is that we&#8217;re trading bandwidth for processing power and flexibility.  The build process may take a few seconds, but retrieving the results to local machines may eat up every bit of build-time savings and then some.  We may see overnight builds turn into overnight downloads, and that&#8217;s no savings at all. </p>
<p>Bittorrent file serving (available on AWS) may be useful as a build distribution model, but with most users on a single network, it doesn&#8217;t seem likely to make a difference.  Limiting the download process to necessary files only is simply the flipside of building necessary files only, so may also offer little in the way of savings.  Doing a bit by bit comparrison of files built on the cloud, and downloading just the file differences, may be a way to reduce the download time, assuming there are chunks of data in a binary file that remain constant between builds.  Other optimiztions almost certainly exist.</p>
<p>All in all, it could be a big win, but until someone proves it, we can&#8217;t know for sure.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/10/05/building-on-the-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Debugging in the Field</title>
		<link>http://thetoolsmiths.org/2009/09/15/debugging-in-the-field/</link>
		<comments>http://thetoolsmiths.org/2009/09/15/debugging-in-the-field/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 18:11:59 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[pdb]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windbg]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=363</guid>
		<description><![CDATA[Developing in-house game tools presents a myriad of debugging issues. You can&#8217;t always nail down bugs to reproducible steps (if you even have QA resources to concentrate on that). Frequently content creators will complain about rare issues that force them to reboot the tools or use bizarre workarounds then things go wrong. Remote debugging works [...]]]></description>
			<content:encoded><![CDATA[<p>Developing in-house game tools presents a myriad of debugging issues.  You can&#8217;t always nail down bugs to reproducible steps (if you even have QA resources to concentrate on that).  Frequently content creators will complain about rare issues that force them to reboot the tools or use bizarre workarounds then things go wrong.  Remote debugging works in some of these scenarios, but is mainly useful for debugging crash bugs.  Errant &#8220;drag and drop&#8221; or &#8220;click and drag&#8221; problems require sitting at the machine to properly deal with.</p>
<p>In these cases its handy to be able to deploy a debugger onto the user&#8217;s machine so you can dive in and see where your code is going wrong.  To be successful at this you need a couple of components: the debug symbols from the compile, the source code, and a debugger.</p>
<p>On Windows the debugging symbols are separate files from the executables.  PDB files contains the information debuggers need to map addresses of code and data in a running tool to the source code counterparts.  In Visual Studio, PDBs are only generated in the Debug configuration by default, so assuming you distribute something like a Release build to your users you will need to turn on PDB generation in that configuration.  Its under Linker&#8230; Debugging&#8230; Generate Debugging Info.  Set it to Yes (/DEBUG).  When you prepare and publish your tool set, make sure to include these PDBs with the executables (EXE and DLL files).</p>
<p>PDBs can get quite large, so it may be a good idea to not always pull down PDB files when users get the latest tools.  Insomniac&#8217;s tools retrieval script has some command line flags to pull down PDBs and code only when we know we want to debug something on a user&#8217;s machine.  Using -pdb will get the executables and PDBs, and -code will get the executables, PDBs, and source (all from a label populated when the tools executables were checked in).</p>
<p>Once you have the PDB and code on the machine you just need a Debugger to dig in with.  On Windows you have a choice: <a href="http://www.microsoft.com/express/">Visual C++ Express Editions</a> or WinDBG (from <a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx">Debugging Tools for Windows</a>).  Both are free to install so you aren&#8217;t bending any license agreements here.  Visual C++ should work pretty much like you expect on your development box, but can take a while to install and patch to the latest service pack.  WinDBG on the other hand is very quick to install, but takes a little getting used to.  Typically you must show the UI you want to use (Callstack, Memory, etc&#8230;), as well as potentially manually setting the PDB search path (from File&#8230; Symbol File Path).  It&#8217;s a very different experience but its so quick to deploy it may be worth checking out.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/09/15/debugging-in-the-field/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Tech Behind the Tools of Insomniac Games</title>
		<link>http://thetoolsmiths.org/2009/03/30/the-tech-behind-the-tools-of-insomniac-games/</link>
		<comments>http://thetoolsmiths.org/2009/03/30/the-tech-behind-the-tools-of-insomniac-games/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 04:58:51 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[GDC]]></category>
		<category><![CDATA[Production]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=193</guid>
		<description><![CDATA[Thanks to everyone that was able to show up to my talk at GDC. I thought it went very well, and I got a lot of good questions and feedback after the lecture. The focal points of the lecture were: Indirection of file locations using unique IDs instead of string paths to allow files to [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to everyone that was able to show up to my talk at GDC.  I thought it went very well, and I got a lot of good questions and feedback after the lecture.</p>
<p>The focal points of the lecture were:</p>
<ul>
<li>Indirection of file locations using unique IDs instead of string paths to allow files to be moved around efficiently</li>
<li>Organizing data within asset definitions using a modular attribute system, and classifying hard engine types based on those attributes</li>
<li>Our flexible data-driven properties systems (Nocturnal&#8217;s Inspect) coupled with C++ reflection (Nocturnal&#8217;s Reflect) providing extremely flexible and highly extensible property editing</li>
<li>Sharing general processed data results using signature-based cache files to remove processed data from revision control</li>
<li>Perforce for code and assets storage, branching for milestones, and the virtues of less live assets coupled with our continuous integration system for keeping users working reliably through an increment of content creation</li>
</ul>
<p>The slides are available from GDC&#8217;s website <a href="http://cmpmedia.vo.llnwd.net/o1/vault/gdc09/slides/GeoffEvans-TechBehindtheTools.pptx">here</a>.  If anyone has any questions I will be happy to handle them as best I can in the comments.</p>
<p>Happy hunting (bug hunting), folks <img src='http://thetoolsmiths.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/03/30/the-tech-behind-the-tools-of-insomniac-games/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Build Pipeline</title>
		<link>http://thetoolsmiths.org/2009/01/28/the-build-pipeline/</link>
		<comments>http://thetoolsmiths.org/2009/01/28/the-build-pipeline/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 16:00:00 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Builds]]></category>

		<guid isPermaLink="false">http://toolssig.wordpress.com/?p=8</guid>
		<description><![CDATA[Hi everyone, I&#8217;m Jeff Ward, Lead Architect and co-founder of metrics middleware company Orbus Gameworks, located in Cambridge, MA.  Although I&#8217;m sure I&#8217;ll have a change to talk about the use of metrics as an extension of your tools at some point, for my first post, I wanted to talk about something near and dear [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, I&#8217;m Jeff Ward, Lead Architect and co-founder of metrics middleware company Orbus Gameworks, located in Cambridge, MA.  Although I&#8217;m sure I&#8217;ll have a change to talk about the use of metrics as an extension of your tools at some point, for my first post, I wanted to talk about something near and dear to my heart: automated builds and continuous integration.</p>
<p>Now, I know, build process isn&#8217;t technically tools related, but, like most technical obstacles to good process,  it usually falls to tools programmers to actually set it up, and it&#8217;s usually up to us to write any custom integration our game might provide, but that&#8217;s a completely different post.</p>
<p>There are a lot of things to consider when writing a build system, but in my experience, any reasonable build system will be able to the following:</p>
<ul>
<li>Do a complete, clean build of all current code and assets from scratch without any user interaction.  This is commonly known as a &#8220;one button build&#8221;.</li>
<li>Be able to do incremental builds of code an assets when prompted, and be able to perform these builds quickly regardless of the number of files or assets.</li>
<li>Automatically update executable versions and package working builds together for distribution.</li>
<li>Inform interested parties about changes in the latest build, or any errors that occur during the process.</li>
<li>Be run regularly, at least daily.  Continuously is better.</li>
</ul>
<p>The great thing is that, most of this can be accomplished without any special tools.  Almost any build scripting system has the capabilities to make your build vision a reality without too much effort.  Favorites include make, ant, scons, jam, waf, rake and msbuild, among others, and most of them will even do dependency checking for you (so long as you structure them correctly).</p>
<p>But this is really only the first step on the track to creating a build system that will really save everyone at your company time and money. Let&#8217;s face it, an automated build system and build server doesn&#8217;t solve the &#8220;bad build&#8221; problem, which is the key to actually getting your artists and designers to be productive.</p>
<p>The first step on the track to success is using continuous integration.  Continuous integration is a process by which new code is contagiously integrated (aka, built, hence the name) so that an up to date version is always available.  What this means in layman&#8217;s terms is that every time a file is checked into source control, it kicks off a new build of the game.  This means that the available executable are always up to date with the latest and greatest features, or that you&#8217;re informed of a broken build as fast as possible after a check-in.  Of course, this can be a complete nightmare if you&#8217;re not using any automated testing, but that doesn&#8217;t mean the concept isn&#8217;t completely off the wall for the general game developer.</p>
<p>Let&#8217;s say you&#8217;re not doing any automated testing.  New versions of the build could go up every day, or every hour, but there&#8217;s no way for your developers to know whether they&#8217;re getting good builds.  You have a few options:</p>
<ul>
<li>Don&#8217;t run daily builds.  Have a programmer in charge of creating and deploying &#8220;good&#8221; builds every so often.  This is a bad idea.  It takes time away from a programmer who has other things to do, and puts a person in charge of what should be an automated process.</li>
<li>Run daily builds, but only have people update when &#8220;good&#8221; builds are made.  This can also be a bad idea.  It still requires a person send out an email informing the team of &#8220;good&#8221; builds.  And what happens when someone updates by accident?</li>
<li>Run daily build that goes through an established pipeline.  &#8220;Good&#8221; builds that pass through the pipeline can be push to a centralized location after they&#8217;ve been verified.</li>
</ul>
<p>This is the &#8220;smoke test&#8221; concept.  I know many companies do this, but most do not formalize it, or don&#8217;t follow it with every build.  In a lot of cases, smoke testing builds doesn&#8217;t even start until late in the development cycle (beta or release candidate stages) and that&#8217;s really too bad, because lost time at the beginning of a development cycle is just as bad as lost time at the end, so you should always prepare for it.</p>
<p>So what tools can you use to automate a build pipeline?  Well, the product we use at Orbus is a continuous integration server called <a href="http://studios.thoughtworks.com/cruise-continuous-integration">Cruise</a>, which is made by the same company that originally made Cruise Control (though Cruise Control is a free, open source project and Cruise is a commercial project, though limited agent builds are still available for free).  The nice thing about Cruise is that, not only are individual tasks parallelizable, but portions of your pipeline can wait for user interaction.  For me, here would be a common pipeline:</p>
<ul>
<li>Run continuous integration on code builds (every check-in triggers a build)</li>
<li>Successful code builds trigger asset builds, and the two are bundled together as an artifact.  At this point, anyone can grab this particular build, meaning people waiting on the latest and greatest (who don&#8217;t care whether or not the build is &#8220;good&#8221;) do not have to wait for user interaction or testing.</li>
<li>A select test team tests the build for any obvious flaws, and can confirm (through Cruise) that the build is good, and the build is copied to a more centralized location for the rest of the team.</li>
<li>If you&#8217;re really good, the build is then automatically distributed to the team.</li>
</ul>
<p>The agileness of continuous builds with the safety of a smoke test, every time.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2009/01/28/the-build-pipeline/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
