<?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</title>
	<atom:link href="http://thetoolsmiths.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://thetoolsmiths.org</link>
	<description></description>
	<lastBuildDate>Fri, 07 May 2010 01:34:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Reason 2 of 6 – The System Model of Design</title>
		<link>http://thetoolsmiths.org/2010/03/24/reason-2-of-6-%e2%80%93-the-system-model-of-design/</link>
		<comments>http://thetoolsmiths.org/2010/03/24/reason-2-of-6-%e2%80%93-the-system-model-of-design/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 15:30:56 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[Usabilty]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Six Reasons]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=393</guid>
		<description><![CDATA[This ongoing series delves more deeply into each of the “six reasons your game development tools suck” as argued in my very first post. Two of the most important concepts in software engineering are abstraction and modularity.  Abstraction allows us to categorize problems and write general code to handle all problems within a group, while modularity [...]]]></description>
			<content:encoded><![CDATA[<p>This ongoing series delves more deeply into each of the “<a href="http://toolssig.wordpress.com/2009/01/27/the-6-reasons-your-game-development-tools-suck/" target="_self">six reasons your game development tools suck</a>” as argued in my very first post.</p>
<p>Two of the most important concepts in software engineering are abstraction and modularity.  Abstraction allows us to categorize problems and write general code to handle all problems within a group, while modularity allows us to combine disparate abstract components to create unique solutions for a particular problem.  These two concepts give us the ability to write elegant, yet powerful systems that can solve many problems at once.</p>
<p>These systems often rely heavily on data, which is the glue that holds the abstract techniques together.  Data is used to configure which components plug into one another and how they behave. </p>
<p>As programmers, it makes a lot of sense to us to expose the raw data in the tool to the people responsible for making something useful with it.  After all, not only is this the easiest implementation, it&#8217;s also difficult to see another implementation that would not constrict the end user&#8217;s ability to get the full benefit of the system&#8217;s power.</p>
<p>If the tool was in our own hands, or even in the hands of another programmer, this would all be true.  Unfortunately, this is usually not the case.  The end users have to figure our very clever system out for themselves, often with no knowledge of our intention, the underlying data structures, or even basic software engineering or programming concepts.</p>
<p>Instead of empowering the end users with our uber-system that can handle any problem, we&#8217;ve saddled them with a system so intricate and burdensome, that they can&#8217;t wrap their minds around it, let alone do anything useful with it.</p>
<p>Training can help to a degree, but that turns into one-on-one training with every user for any one person to understand.  Documentation also helps, but often ignored, in reading as well as in writing/updating.  Usually, one person ends up being the expert that everyone relies on, but when only one person can use a tool, you know that it&#8217;s doomed to failure.</p>
<p>The answer is simple, yet hard to swallow.  The tool interface can not be designed around the data structures used by the underlying system.  The tool must be designed around the users, and the very specific things they want to do with it. </p>
<p>That will probably handle about 90% of the problems the system was designed to solve.  Most users will get along happily with that, and even find their own clever ways of getting some of the additional 10%.  They&#8217;ll be much happier with a tool that is easy to use than one that is all-powerful.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/03/24/reason-2-of-6-%e2%80%93-the-system-model-of-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Call For Submissions: Game Development Tools Book</title>
		<link>http://thetoolsmiths.org/2010/03/23/call-for-submissions-game-development-tools-book/</link>
		<comments>http://thetoolsmiths.org/2010/03/23/call-for-submissions-game-development-tools-book/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:36:16 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=504</guid>
		<description><![CDATA[I thought I would bring to the community&#8217;s attention this new book on Game Development Tools that&#8217;s looking for submissions.  Here&#8217;s the call: We invite you to submit a proposal for an innovative article to be included in a forthcoming book, Game Development Tools, which will be edited by Marwan Y. Ansari and published by [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I would bring to the community&#8217;s attention this new book on Game Development Tools that&#8217;s looking for submissions.  Here&#8217;s the call:</p>
<blockquote><p>We invite you to submit a proposal for an innovative article to be included in a forthcoming book, Game Development Tools, which will be edited by Marwan Y. Ansari and published by A. K. Peters. We expect to publish the volume in time for GDC 2011.</p>
<p>We are open to any tools articles that you feel would make a valuable contribution to this book.</p>
<p>Some topics that would be of interest include:</p>
<ul>
<li>Content Pipeline tools (creation, streamlining, management)</li>
<li>Graphics/Rendering tools</li>
<li>Profiling tools</li>
<li>Collada import/export/inspection</li>
<li>Sound tools</li>
<li>In-Game debugging tools</li>
<li>Memory management &amp; analysis</li>
<li>Console tools (single and cross platform)</li>
</ul>
<p>This list is not meant to be exclusive and other topics are welcome.</p>
<p>The schedule for the book is as follows:</p>
<p>June 30th &#8211; All proposals in.<br />
July 15th &#8211; Final list of accepted authors are informed and begin articles.<br />
August 15th &#8211; First draft in to editor<br />
September 15th &#8211; Drafts sent to other book authors for peer review<br />
October 15th &#8211; Final articles in to editor<br />
November 30th &#8211; Final articles to publisher (A K Peters)<br />
GDC 2011 &#8211; Book is released.</p>
<p>Please send proposals to marwan at <a href="http://www.gamedevelopmenttools.com/">www.gamedevelopmenttools.com</a>.</p></blockquote>
<p>Regardless of whether Toolsmiths readers get into the book, it sounds like it could be great.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/03/23/call-for-submissions-game-development-tools-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adult Beverages</title>
		<link>http://thetoolsmiths.org/2010/03/08/adult-beverages/</link>
		<comments>http://thetoolsmiths.org/2010/03/08/adult-beverages/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 23:17:57 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[GDC]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=475</guid>
		<description><![CDATA[If you are free at 6:00 PM on Thursday come out for some drinks during GDC. We will be at The Thirsty Bear Brewing Company. Photo Credit: http://www.flickr.com/photos/burnblue/ / CC BY-NC-SA 2.0]]></description>
			<content:encoded><![CDATA[<p><img src="http://thetoolsmiths.org/wp-content/uploads/2010/03/308441464_c5d9def328_o.jpg"/></p>
<p>If you are free at 6:00 PM on Thursday come out for some drinks during GDC.  We will be at <a href="http://maps.google.com/places/us/ca/san-francisco/howard-st/661/-thirsty-bear-brewing-co?hl=en">The Thirsty Bear Brewing Company</a>.</p>
<p><font size="-3"></p>
<div xmlns:cc="http://creativecommons.org/ns#" about="http://www.flickr.com/photos/burnblue/308441464/">Photo Credit: <a rel="cc:attributionURL" href="http://www.flickr.com/photos/burnblue/">http://www.flickr.com/photos/burnblue/</a> / <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC BY-NC-SA 2.0</a></div>
<p></font></p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/03/08/adult-beverages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Follow us on Twitter</title>
		<link>http://thetoolsmiths.org/2010/03/03/follow-us-on-twitter/</link>
		<comments>http://thetoolsmiths.org/2010/03/03/follow-us-on-twitter/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 16:44:22 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=466</guid>
		<description><![CDATA[The Toolsmiths now have a twitter feed here (thetoolsmiths). Blog posts should be tweeted there, and we will drop some tweets about happenings at GDC.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.theyoungestcandidate.com/main/Portals/0/twitter_logo.png"/></p>
<p>The Toolsmiths now have a twitter feed <a href="http://twitter.com/thetoolsmiths">here</a> (thetoolsmiths).  Blog posts should be tweeted there, and we will drop some tweets about happenings at GDC.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/03/03/follow-us-on-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tools Related GDC10 Sessions</title>
		<link>http://thetoolsmiths.org/2010/03/03/tools-related-gdc10-sessions/</link>
		<comments>http://thetoolsmiths.org/2010/03/03/tools-related-gdc10-sessions/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 16:34:02 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[GDC]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=426</guid>
		<description><![CDATA[First off, our official Tools SIG gathering at GDC is on Thursday 1:30 to 2:30 at the IGDA booth. Everyone should also show up to at least one of John Walker&#8217;s excellent roundtables. I find them useful to see what approaches people are using in their pipelines and share lessons learned from the past year. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://kleberandrade.files.wordpress.com/2010/02/gdc2010_body_bg.jpg"/></p>
<p>First off, our official Tools SIG gathering at GDC is on Thursday 1:30 to 2:30 at the IGDA booth.</p>
<p>Everyone should also show up to at least one of John Walker&#8217;s excellent roundtables.  I find them useful to see what approaches people are using in their pipelines and share lessons learned from the past year.</p>
<p><strong>Technical Issues in Tools Development</strong><br />
John Walker (Applied Signal Technology)<br />
Thursday 4:30- 5:30 Room 120, North Hall<br />
Friday 1:30- 2:30 Room 120, North Hall<br />
Saturday 9:00-10:00 Room 120, North Hall</p>
<p>Lectures:</p>
<p><strong>Data is a Four-Letter Word</strong><br />
Paul Du Bois (Double Fine) and Henry Goffin (Double Fine)<br />
Thursday 10:30-11:30 Room 131, North Hall</p>
<p><strong>Building Blocks: Artist Driven Procedural Buildings</strong><br />
James Golding (Epic Games)<br />
Thursday 10:30-11:30 Room 130, North Hall</p>
<p><strong>The Asset Pipeline for Just Cause 2: Lessons Learned</strong><br />
Mathias Westerdahl (Avalanche Studios)<br />
Thursday 3:00- 4:00 Room 131, North Hall</p>
<p><strong>Introduction to Maya API Programming and Custom UI</strong><br />
Kristine Middlemiss (Autodesk Inc.)<br />
Thursday 4:30- 5:30 Room 300, South Hall</p>
<p><strong>Collada &#8211; Featuring WebGL</strong><br />
Mark Barnes (Khronos Group)<br />
Friday 1:30- 2:30 Room 123, North Hall</p>
<p><strong>The Role of Middleware in Game Development: Today and Tomorrow</strong><br />
Martin Walker (Artificial Mind &#038; Movement), Kevin Scharff (Spark Unlimited), Matthew Shaw (Electronic Arts, Mythic Entertainment Studio) and Mark Stevens (Autodesk)<br />
Friday 4:30- 5:30 Room 123, North Hall</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/03/03/tools-related-gdc10-sessions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Taming Third Party SDKs and Visual Studio</title>
		<link>http://thetoolsmiths.org/2010/02/23/taming-third-party-sdks-and-visual-studio/</link>
		<comments>http://thetoolsmiths.org/2010/02/23/taming-third-party-sdks-and-visual-studio/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 18:19:05 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=415</guid>
		<description><![CDATA[Visual Studio fan or not, its ubiquity in game development means that sooner or later you will have to deal with its shortcomings. It is the de facto standard IDE for the de facto standard game development operating system. One of its weak points is the project file property editor. While it does wrangle compile [...]]]></description>
			<content:encoded><![CDATA[<p>Visual Studio fan or not, its ubiquity in game development means that sooner or later you will have to deal with its shortcomings.  It is the de facto standard IDE for the de facto standard game development operating system.</p>
<p>One of its weak points is the project file property editor.  While it does wrangle compile and link flags pretty well, it tends to break when organizing include and lib paths in large codebases.  The knee jerk thing to do is to laundry list each include and lib path that every project needs in each project file.  This can be a real pain when moving to a different version of an SDK or library (since you have to update it in every project where it is referenced).</p>
<p>The built-in solution to this problem is Visual Studio Property Sheets.  Property Sheets are separate files of config data that each of your Visual Studio projects reference (or inherit from since they can be nested).  Property Sheets let you define your own macros that can be expanded using the standard $(Macro) syntax.  Using property sheet macros to path to the include and lib folders of your libraries and SDKs allows for updating all your project&#8217;s SDK dependencies by editing one shared property sheet file.</p>
<p>Insomniac&#8217;s property sheets are organized like this:<br />
Root.vsprops<br />
> SDK.vsprops<br />
>> Windows.vsprops</p>
<p>Root.vsprops defines for top level macros, SDK.vsprops defines macros that path to versioned SDKs and libraries checked into revision control, and Windows.vsprops defines macros and build settings for projects that target the Windows platform.  We also have a simple perl script (getsdk.pl) that syncs SDKs specified by SDK.vsprops by reading that file in directly (vsprops files are really XML files).</p>
<p>Another tricky bit of dealing with Visual Studio comes from its lack of a real compiler plugin API.  Each of the major build system integrations on the market (Incredibuild, SN Systems ProDG VSI) have to essentially hack your Visual Studio installation to function as a replacement for stock features.  When using these plugins Visual Studio still thinks its calling cl.exe and link.exe but really its calling a replacement program that either does the plugin&#8217;s bidding or falls back to the real stock program.</p>
<p>This creates an interesting situation with SN System&#8217;s ProDG VSI because it needs to know which version of the PS3 compiler to use when you go to build a project.  The VSI plugin looks to environment variables of Visual Studio&#8217;s devenv.exe to find the compiler to call from the replacement cl.exe and link.exe.  Since most of us like to branch our code, defining which PS3 SDK to use as a global environment variable is a pain because you have to update that environment variable on every machine that builds code every time you change SDKs.</p>
<p>Sadly one cannot use property sheet macros to solve this problem.  Even when the &#8220;Set in build environment&#8221; option is checked the user macros are never sourced into devenv.exe environment and will not be defined when the VSI goes to build your PS3 project.  VSI will then error out that its unable to find the PS3 compiler.  Presumably this option only causes the macro to be in the environment when Visual Studio calls out to external build tools when it is running its own builds (and not the builds of a hacked-in plugin like Incredibuild or VSI).  If Visual Studio had a real plugin architecture for alternate platforms then this would probably &#8220;just work&#8221; since the proper integration would be able to use the Visual Studio build system to call out to 3rd party compilers without unfortunate file swapping hacks.</p>
<p>A handy solution to this problem is to use <a href="http://workspacewhiz.com/SolutionBuildEnvironmentReadme.html">Workspace Whiz&#8217;s Solution Build Environment</a> to read environments variable from a text file in the same folder as the solution file.  The text file just needs to use a basename that matches the solution file (Foo.sln would have a corresponding Foo.slnenv file).  This will allow you to specify the proper environment variables and have them be loaded into devenv.exe&#8217;s environment and be ready for VSI to utilize when it needs to build your PS3 projects.  Since this file can be checked into revision control you don&#8217;t have to ever worry about setting a machine-wide environment variable for VSI to do its job.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/02/23/taming-third-party-sdks-and-visual-studio/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>IGDA Board Elections</title>
		<link>http://thetoolsmiths.org/2010/02/22/igda-board-elections/</link>
		<comments>http://thetoolsmiths.org/2010/02/22/igda-board-elections/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 17:03:56 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[IGDA]]></category>
		<category><![CDATA[SIG Business]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=422</guid>
		<description><![CDATA[The Toolsmiths was created, and is an integral part of, the IGDA Tools SIG. Right now, the IGDA is holding elections for its new board. There are 23 candidates for 5 positions on the board, and you can read all of their statements at the IGDA’s website. In addition, Boston Chapter member and indie developer [...]]]></description>
			<content:encoded><![CDATA[<p>The Toolsmiths was created, and is an integral part of, the IGDA Tools SIG.  Right now, the IGDA is holding elections for its new board.  There are 23 candidates for 5 positions on the board, and you can read all of their statements at <a href="http://www.igda.org/igda-board-directors-2010-candidate-statements">the IGDA’s website</a>. In addition, Boston Chapter member and indie developer Scott McMillan has subjected each of the candidate statements to <a href="http://www.igda.org/igda-board-directors-2010-candidate-statements">some scrutiny</a>, and asks them some important questions about where they feel the IGDA is going over the next few years.</p>
<p>The elections are very important, especially this year. In the past, the IGDA has had image problems, in no small part because of the actions of certain board members.  It is important that we get board members that are actually extensions of our own voices, so that the IGDA can actually represent us as developers.  If you are a member of the IGDA (which I really hope you are) please <a href="http://www.igda.org/2010election/BoDVote">go vote</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/02/22/igda-board-elections/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GDC Approaches</title>
		<link>http://thetoolsmiths.org/2010/02/21/gdc-approaches/</link>
		<comments>http://thetoolsmiths.org/2010/02/21/gdc-approaches/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 23:40:08 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[GDC]]></category>
		<category><![CDATA[SIG Business]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=419</guid>
		<description><![CDATA[GDC gets closer every day.  This year, instead of doing an official IGDA roundtable to talk SIG business, we&#8217;ve decided to just get together for beers at a local bar.  The location and time is yet to be determined, but I would like to find out what night the membership / readers would prefer. So [...]]]></description>
			<content:encoded><![CDATA[<p>GDC gets closer every day.  This year, instead of doing an official IGDA roundtable to talk SIG business, we&#8217;ve decided to just get together for beers at a local bar.  The location and time is yet to be determined, but I would like to find out what night the membership / readers would prefer.</p>
<p>So please take a moment to visit the site and respond to the poll in this post to let us know when you&#8217;d most like to gather, and we&#8217;ll see you at GDC!</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/02/21/gdc-approaches/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XSLT as a Development Tool</title>
		<link>http://thetoolsmiths.org/2010/01/22/xslt-as-a-development-tool/</link>
		<comments>http://thetoolsmiths.org/2010/01/22/xslt-as-a-development-tool/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 13:00:53 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=403</guid>
		<description><![CDATA[Some time ago, I decided to write a small C# &#8220;wizard&#8221; tool for enemy encounters and other level design patterns.  The idea was to create pattern types, that designers could define with a small amount of data (different for each type of pattern) that could be exported into a much more complex xml format that could describe when [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, I decided to write a small C# &#8220;wizard&#8221; tool for enemy encounters and other level design patterns.  The idea was to create pattern types, that designers could define with a small amount of data (different for each type of pattern) that could be exported into a much more complex xml format that could describe when to spawn what enemies, what behaviors and properties to give them, etc. in order to make each instance of a pattern unique. </p>
<p>The properties set by the designers were stored internally as an XML document, since XML in C# is incredibly easy to manipulate, and since the data would be different for each level design pattern.  It was easy enough to save out the raw XML data as it was stored internally, but the problem was how to transform this data into the format that would be read into the game. Enter XSLT.</p>
<p>C# has the functionality to transform data internally with an external XSLT file.  It&#8217;s easy enough to associate a XSLT file with a specific pattern, apply it at run time, and then simply write out the result.  At this point, it&#8217;s simply a matter of providing the designers with the data files necessary to generate their data.</p>
<p>The advantages here are great.  Putting the complex structure and syntax in an external file, and separating it from the designer&#8217;s view, allows them to concentrate on what&#8217;s  actually important.  The downside is that someone has to craft these XSLT files, which is a format that is a bit obtuse for someone used to functional languages.  Additionaly, XSLT has little to no debugging capability.</p>
<p>Now, more recently, I&#8217;ve had the challenge of writing an exporter from OpenOffice Calc, which also uses XSLT as filters for importing and exporting.  All OpenOffice documents are are stored as XML.  In fact, if you simply rename an .ODS file to a .ZIP file, you can explore the format, which is spread over several files inside the .ZIP, the most interesting of which is called content.xml.  This is the data that needs to be transformed in order to get the information out of OpenOffice into your own format.</p>
<p>What we wanted was a way to store properies of all enemies in a single table, so designers could tweak values easily.  The data then needed to be exported into a proprietary text format (not XML).  This is also relatively easy with XSLT, but as with anything, exporting from Calc with XSLT had its pitfalls.</p>
<p>It&#8217;s easy enough to access individual cells in a row in Calc.  Unfortunately, for some reason, they decided that if adjacent cells in a single row have the same value, it would only be stored in the first cell and an attribute on that cell would indicate the value repeats for n-number of cells.</p>
<p>With XSLT, there are no variables that can change their values, only constants within a single template (the XSLT equivalent of a function).  Consequently, there are no &#8220;for loops&#8221; in the traditional sense.  The way to get around this with XSLT is to use recursion.  In my script, I basically have every cell recursively calling the template on the next cell in the row, or on itself in the case of repeated cells, and track the cell heading (the first row of the table) separately.  Just thinking about it gives me nightmares.</p>
<p>At any rate, more and more data is being stored as XML, and consequently XSLT is probably here to stay.  It&#8217;s another tool that should be available in the game developer&#8217;s toolbox, but must be used with care.  To learn more, there are tons of resources on the web, but your best bet for a good introduction is the W3 schools site at <a href="http://www.w3schools.com/xsl/">http://www.w3schools.com/xsl/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/01/22/xslt-as-a-development-tool/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tools Programmer Fundamentals</title>
		<link>http://thetoolsmiths.org/2010/01/18/tools-programmer-fundamentals/</link>
		<comments>http://thetoolsmiths.org/2010/01/18/tools-programmer-fundamentals/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 17:28:03 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=401</guid>
		<description><![CDATA[A while back, after a talk I gave at our local IGDA chapter meeting, I got an email from a recruiter at a local game development company.  He was looking to fill a position for a tools engineer and wanted to know what he needed to look for.  I never got back to him (sorry!) [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, after a talk I gave at our local IGDA chapter meeting, I got an email from a recruiter at a local game development company.  He was looking to fill a position for a tools engineer and wanted to know what he needed to look for.  I never got back to him (sorry!) mostly because I didn’t know what to tell him.  What makes a good tools engineer?  More importantly, what’s going to make someone want to take a position in tools development over a position in, say, game play programming, or AI programming, or graphics programming?  Is there a distinct difference?</p>
<p>I really wasn’t sure of the answers to these questions until recently, and it made me think a lot about… well… you’ll see.</p>
<h2>The Fundamental Trait</h2>
<p>During my thinking, I think I identified the fundamental trait that makes a good tools programmer, or at least a programmer that would rather be in tools than any other field of game development: the desire to fix things.</p>
<p>This is different from most programmers who enter the game industry.  Most game programmers want to create things.  They want to point at a portion of a game and say “You see that?  I did that.  I made that happen.”  As tools programmers, we can’t really say that.  I worked on Oblivion and Fallout 3, on the game team, but there’s nothing I can specifically point to in the game that I really created.  The closest I can get to is that I can point at the models and say “You see that model?  I made the tool that made that model more memory efficient on the 360.”</p>
<p>Game programmers want to create, and, in my experience, when you talk to people both inside and outside the industry and say you’re a game programmer, the first thing they’ll ask is “So what did you do on the game?” expecting that you’ll be able to point to something specific.  Gameplay programmers can say “I made that system work.” AI programmers can say “I made that person move.”  Graphics programmers can say “I made that thing render and look good.”</p>
<p>Tools programmers can really only point at the team and say “I made that work better.”  And honestly that’s how we want it.  We take joy in oiling the machine.</p>
<p>The problem with the fundamental trait is that it’s not the trait that makes people enter the game industry.  A programmer that takes joy in oiling the machine can do so in almost any industry, and, unfortunately, the game industry offers some of the worst hours, worst pay, and worst return on emotional investment of any programming industry.  So, the only people you’re going to get looking to be tools programmers are going to be those that are attracted to the game industry in the first place, and the problems that it stands to solve.  In my experience, this means creative people.</p>
<h2>The Fundamental Dichotomy</h2>
<p>Because you’re working with creative people, game industry tools programmers not only want to oil the machine, they also want to take part in its construction.  Like most good programmers, good tools programmers want to constantly try new things, learn new technologies, and generally broaden their knowledge and hopefully find a way to improve your tool chain as a result.</p>
<p>The dichotomy here is that, at some point, you need to stop these creative people from being creative, and earlier than you would the rest of the game team.  They need to stabilize their tools for use by the team, and therefore they enter support for code a lot sooner than the rest of the team, and support is the one thing creative individuals dread.  It means the end of creative solutions, and the start of debugging drudgery.  Keeping a balance of both is tough, but necessary, to keep the best tools programmers on your team.</p>
<h2>Achieving the Balance</h2>
<p>In my opinion, there are a few things you can do to help keep this fundamental balance between oiling the machine and constructing the machine.  It boils down to the fundamental roles of your tools team during the different phases of a game’s production.</p>
<p>During pre-production, give your tools programmers some time to be in full construction mode.  Allow them to try new things, new pipelines, new technologies.  Let them look into converting the build system to Erlang, rewrite your Win32 tool in C#, or improve the interface on many tools.  This is a prototyping phase, and should be labeled as such.  Things made during this time do not necessarily need to be working, just prove that something will be more efficient than what is already available.</p>
<p>During code production, you should select the prototypes that make the most sense to implement and implement them.  Here, your tools programmers are working very closely with the other teams to make sure all of their needs are going to be handled.  They’re constructing the tools and letting out creative energy, but the tools now have clients (the team) and the client’s needs have to be met.</p>
<p>As the game enters production, the tools team needs to transition to support and minor improvements.  At this point you’re mostly looking at bug fixes, but all of your tools programmers should be researching how well tools are doing “in the field” and look for ways to improve interfaces and save other team members time, either now with minor changes or during the next phase.  When code lock down occurs, this should include tools, and the team has entered support mode.</p>
<p>However, once code lockdown occurs, the tools programmers, provided they have time, should be already entering pre-production on their new tools.  Now is the best time.  The problems of their technologies are fresh in their mind, and if they can fix them now, when more of the core team moves on to pre-production they can start being productive immediately with new tools.</p>
<p>This cycle helps keep your tools programmers creative, and helps them really point to the whole process and say “I made that work better,” which is exactly what they want.</p>
<p>What do others think?</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2010/01/18/tools-programmer-fundamentals/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
