<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns: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/" version="2.0">

<channel>
	<title>The Toolsmiths</title>
	
	<link>http://thetoolsmiths.org</link>
	<description />
	<lastBuildDate>Thu, 15 Nov 2012 21:22:59 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheToolsmiths" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="thetoolsmiths" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>MVVM for Game Tools</title>
		<link>http://thetoolsmiths.org/2012/10/25/mvvm-for-game-tools/</link>
		<comments>http://thetoolsmiths.org/2012/10/25/mvvm-for-game-tools/#comments</comments>
		<pubDate>Thu, 25 Oct 2012 19:53:05 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[Usabilty]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=810</guid>
		<description><![CDATA[The MVVM (Model-View-ViewModel) software pattern is a very powerful architecture that can benefit game tool development, particularly in the area of usability. MVVM separates the UI from the underlying data through a kind of interface class, the view model. The &#8230; <a href="http://thetoolsmiths.org/2012/10/25/mvvm-for-game-tools/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The MVVM (Model-View-ViewModel) software pattern is a very powerful architecture that can benefit game tool development, particularly in the area of usability.  MVVM separates the UI from the underlying data through a kind of interface class, the view model.  The view model handles all the manipulation in the model (the data), and serves the data to the view (the UI) in a way that the view can understand.  Because of the added view model layer, the view can be more easily written with the end-user in mind, instead of in a way that best fits the data.</p>
<p>You would think that adding this middle layer would complicate the development process for the programmer, leading to a longer development time, but in fact, it allows the interface for the tool and the complex interactions behind the tool to be developed in parallel by the most appropriate persons.  Splitting the development process in two parts, between an engineer and a designer, allows the engineer to focus on the hard programming tasks while the design expert works out the hard usability and design tasks.  The two come together within the glue of the view model.  This takes the time-consuming task of iterating on the UI with the feedback of the end-users off the shoulders of the programmer, and puts it onto someone in a role closer to that of the end-users, themselves.</p>
<p>Facilitating this relationship between tool designer and software engineer requires development tools that can bring these two worlds together.  Fortunately, the most common framework for developing MVVM-based applications, WPF, has the tools to do so.  WPF is a .NET UI library and a replacement for the older WinForms library.  It uses a a declarative language called XAML, which is based on XML.  Because of its declarative nature, XAML can be easily created with a graphical editor such as Expression Blend, which is well suited to designers, and works almost seamlessly with Visual Studio.</p>
<p>MVVM allows programmers and designers to come together in a way that they never have before, allowing them to shorten development time and increase tool quality by putting each task into the hands of the person best suited to it.  Leveraging this power will give game developers the ability to create better interfaces for editing game data, and improve the development process overall.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2012/10/25/mvvm-for-game-tools/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Light Table is now on Kickstarter</title>
		<link>http://thetoolsmiths.org/2012/04/18/light-table-is-now-on-kickstarter/</link>
		<comments>http://thetoolsmiths.org/2012/04/18/light-table-is-now-on-kickstarter/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 20:39:05 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Prototyping]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[Usabilty]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=789</guid>
		<description><![CDATA[Chris Granger&#8216;s Light Table was originally a concept video for a dynamic language IDE that extends concepts by Bret Victor about how to make the coding experience more focused and integrated with the final product. The project is now on &#8230; <a href="http://thetoolsmiths.org/2012/04/18/light-table-is-now-on-kickstarter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.chris-granger.com/">Chris Granger</a>&#8216;s <a href="http://www.chris-granger.com/2012/04/12/light-table---a-new-ide-concept/">Light Table</a> was originally a concept video for a dynamic language IDE that extends concepts by <a href="http://thetoolsmiths.org/2012/04/12/bret-victor-inventing-on-principle/">Bret Victor</a> about how to make the coding experience more focused and integrated with the final product.  </p>
<p>The project is now on <a href="http://www.kickstarter.com/projects/306316578/light-table">Kickstarter</a>, and its looking for $200k in funding to build an open source IDE for Clojure and Javascript.  If they reach $300k they are going to build plug-in support for Python , too.  Very exciting stuff!</p>
<p><iframe src="http://player.vimeo.com/video/40281991?title=0&amp;byline=0&amp;portrait=0" width="560" height="315" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><a href="http://vimeo.com/40281991">Light Table &#8211; a new IDE</a> from <a href="http://vimeo.com/user11261775">Chris Granger</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2012/04/18/light-table-is-now-on-kickstarter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#AltDevPanel</title>
		<link>http://thetoolsmiths.org/2012/04/17/altdevpanel/</link>
		<comments>http://thetoolsmiths.org/2012/04/17/altdevpanel/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 06:48:51 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Teams]]></category>
		<category><![CDATA[Tool Design]]></category>
		<category><![CDATA[Usabilty]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=782</guid>
		<description><![CDATA[Jeff Ward (@fuzzybinary) and I (@gorlak) have a chat about game tools development with Mike Acton (@mike_acton) of #AltDevBlogADay (and the Tools SIG).]]></description>
				<content:encoded><![CDATA[<p>Jeff Ward (<a href="http://twitter.com/fuzzybinary">@fuzzybinary</a>) and I (<a href="http://twitter.com/gorlak">@gorlak</a>) have a chat about game tools development with Mike Acton (<a href="http://twitter.com/mike_acton">@mike_acton</a>) of #AltDevBlogADay (and the Tools SIG).</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/EhZVirydTMA" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2012/04/17/altdevpanel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bret Victor – Inventing on Principle</title>
		<link>http://thetoolsmiths.org/2012/04/12/bret-victor-inventing-on-principle/</link>
		<comments>http://thetoolsmiths.org/2012/04/12/bret-victor-inventing-on-principle/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 18:26:46 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[Usabilty]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=758</guid>
		<description><![CDATA[There are some stellar ideas in this talk about how to change scripting workflow to lower the latency of iteration: Bret Victor &#8211; Inventing on Principle from CUSEC on Vimeo.]]></description>
				<content:encoded><![CDATA[<p>There are some stellar ideas in this talk about how to change scripting workflow to lower the latency of iteration:</p>
<p><iframe src="http://player.vimeo.com/video/36579366?byline=0" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><a href="http://vimeo.com/36579366">Bret Victor &#8211; Inventing on Principle</a> from <a href="http://vimeo.com/cusec">CUSEC</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2012/04/12/bret-victor-inventing-on-principle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What do you look for in a game writing tool?</title>
		<link>http://thetoolsmiths.org/2011/11/06/what-do-you-look-for-in-a-game-writing-tool/</link>
		<comments>http://thetoolsmiths.org/2011/11/06/what-do-you-look-for-in-a-game-writing-tool/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 23:44:24 +0000</pubDate>
		<dc:creator>Richard Rabil</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[dialogue]]></category>
		<category><![CDATA[game writing]]></category>
		<category><![CDATA[interactive storytelling]]></category>
		<category><![CDATA[software tools]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=742</guid>
		<description><![CDATA[Hi all, My name is Richard Rabil, and I&#8217;m a recent student member of IGDA and a participant in the Writing and Tools SIGs. I&#8217;d like to invite you to take a short, anonymous survey I&#8217;m conducting on software tools &#8230; <a href="http://thetoolsmiths.org/2011/11/06/what-do-you-look-for-in-a-game-writing-tool/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hi all,</p>
<p>My name is Richard Rabil, and I&#8217;m a recent student member of IGDA and a participant in the Writing and Tools SIGs. I&#8217;d like to invite you to take a short, anonymous survey I&#8217;m conducting on software tools for interactive storytelling.</p>
<p>Ultimately, my goal is to evaluate a set of authoring tools for interactive storytelling and develop a report that can help people determine which software tool is best suited to their situation. Data from the survey will help me better understand game writers&#8217; or designers&#8217; preferences, and assign weightings to my evaluation criteria. This project will also count toward my graduate research.</p>
<p>Although the survey is geared towards game writing, I think it will be important to get a wide variety of perspectives from people who work in the industry. So even if you&#8217;re not a game writer, your input will still be valuable since you will likely have fresh insights from other aspects of the game development process.</p>
<p>You can access the survey here: <a href="http://www.linkedin.com/redirect?url=https%3A%2F%2Fwww%2Esurveymonkey%2Ecom%2Fs%2F2Y5MD6B&amp;urlhash=nCez&amp;_t=tracking_anet" rel="nofollow" target="blank">https://www.surveymonkey.com/s/2Y5MD6B</a>. It will be open between now and November 21st.</p>
<p>When I finish writing my report in mid-December, you’ll be able to download your own free copy at the following URL: <a href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fdialoguejunkie%2Ecom%2F2011%2F10%2F29%2Fsurvey-results&amp;urlhash=4E1R&amp;_t=tracking_anet" rel="nofollow" target="blank">http://dialoguejunkie.com/2011/10/29/survey-results</a>.</p>
<p>If you have any questions, let me know! I hope you&#8217;ll consider participating and help me spread the word. The more honest input I receive, the more I believe the report will benefit the gaming industry.
<p>Cheers,<br />
Richard Rabil</p>
<div>richard.rabil@ttu.edu</div>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2011/11/06/what-do-you-look-for-in-a-game-writing-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using XML Schema for Tools</title>
		<link>http://thetoolsmiths.org/2011/09/06/using-xml-schema-for-tools/</link>
		<comments>http://thetoolsmiths.org/2011/09/06/using-xml-schema-for-tools/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 17:26:22 +0000</pubDate>
		<dc:creator>Dan Goodman</dc:creator>
				<category><![CDATA[Functionality]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=648</guid>
		<description><![CDATA[XML is the de facto standard for game data, at least for intermediate data. Just about every programming language commonly in use has robust libraries for reading, writing and manipulating XML data. There are also some interesting general purpose tools &#8230; <a href="http://thetoolsmiths.org/2011/09/06/using-xml-schema-for-tools/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>XML is the de facto standard for game data, at least for intermediate data. Just about every programming language commonly in use has robust libraries for reading, writing and manipulating XML data. There are also some interesting general purpose tools for XML that not many people know very well such as XSLT (which I&#8217;ve discussed previously) and XML schema.<br />
XML schema is most often associated with error checking (AKA validation), and that is a very powerful feature of schema. XML schema acts as a data definition language for well-formed XML data, so, once your schema is defined, you can test your XML file against it, to make sure that thew data follows the definition. This is particularly useful in situations where the data is potentially hand edited (a big no-no), corruption of data can occur, or where the definition of the data is in flux.<br />
In the case where data definition is changing while the data is being worked on (we&#8217;ve all been there), you could use a versioning scheme that included versioned schema files to automatically fix your data, removing data that was old, and adding new data with default values defined in the schema.<br />
And that&#8217;s not all.<br />
The second and possibly more interesting use for schema is to add metadata to types using the annotation field using the appinfo element. The appinfo can contain any well formed XML and can be read directly by your application. This can be useful in customizing your editor to display unique controls for each data element being edited. For instance, you might have something like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xs:schema xmlns:xs=&quot;http://www.roboticarmsoftware.com&quot;&gt;
&lt;xs:complexType name =&quot;Unit&quot; abstract=&quot;false&quot;&gt;
  &lt;xs:annotation&gt;
    &lt;xs:appinfo&gt;
      &lt;attribute name=&quot;Name&quot; editor=&quot;TextField&quot;/&gt;
      &lt;attribute name=&quot;Type&quot; editor=&quot;EnumList&quot; values=&quot;Infantry,Artillery,Hovercraft&quot;/&gt;
      &lt;attribute name=&quot;HP&quot; editor=&quot;Slider&quot; range=&quot;1,100&quot;/&gt;
    &lt;/xs:appinfo&gt;
  &lt;/xs:annotation&gt;
  &lt;xs:complexContent&gt;
    &lt;xs:attribute name=&quot;Name&quot; type=&quot;xs:string&quot; default=&quot;None&quot;/&gt;
    &lt;xs:attribute name=&quot;Type&quot; type=&quot;UnitType&quot; default=&quot;Infantry&quot;/&gt;
    &lt;xs:attribute name=&quot;HP&quot; type=&quot;xs:integer&quot; default=&quot;0&quot;/&gt;
  &lt;/xs:complexContent&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:schema&gt;
</pre>
<p>In our code, we&#8217;d read the appinfo and initialize the various controls for each property of the Unit type as defined above, that way, instead of just showing generic property editing controls, we can truly customize it to fit the data being edited. This is just a simple example, but you can easily come up with much more interesting (and hopefully useful) uses of the concept. You can find more detailed info on the W3Schools and MSDN websites.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2011/09/06/using-xml-schema-for-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Call for Submissions for Game Development Tools 2</title>
		<link>http://thetoolsmiths.org/2011/07/12/call-for-submissions-for-game-development-tools-2/</link>
		<comments>http://thetoolsmiths.org/2011/07/12/call-for-submissions-for-game-development-tools-2/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 21:33:58 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=712</guid>
		<description><![CDATA[Submissions are now open for Game Development Tools 2.  It will be edited by Marwan Y. Ansari, and published by CRC Press/A. K. Peters. The currently targeted publish date is for release at Siggraph 2012. Some possible topics include: Content &#8230; <a href="http://thetoolsmiths.org/2011/07/12/call-for-submissions-for-game-development-tools-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Submissions are now open for Game Development Tools 2.  It will be edited by Marwan Y. Ansari, and published by CRC Press/A. K. Peters. The currently targeted publish date is for release at Siggraph 2012.</p>
<p>Some possible topics 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 tools</li>
<li>Sound tools</li>
<li>In-Game debugging tools</li>
<li>Memory management &amp; analysis tools</li>
<li>Console tools (single and cross platform)</li>
<li>Mobile Device (phone/tablet) tools</li>
<li>3rd Party tools</li>
<li>Importers/Exporters</li>
<li>&lt;That cool thing widget someone made last week that helped you find a bug or saved you hours of time&gt;</li>
</ul>
<p>The list is not exclusive, so other topics are welcome.</p>
<p>Proposals are due September 1st, and can be sent in using <a href="http://gamedevelopmenttools.com/GameDevelopmentTools_ExampleProposal.docx">this form</a>.</p>
<p>Now get out there, make your voice heard, and share what tools you use to help you get your game done!</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2011/07/12/call-for-submissions-for-game-development-tools-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Some Code Organization Patterns</title>
		<link>http://thetoolsmiths.org/2011/06/10/some-code-organization-patterns/</link>
		<comments>http://thetoolsmiths.org/2011/06/10/some-code-organization-patterns/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 02:03:39 +0000</pubDate>
		<dc:creator>Geoff Evans</dc:creator>
				<category><![CDATA[Builds]]></category>
		<category><![CDATA[Common Problems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Revision Control]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=652</guid>
		<description><![CDATA[Lately I am settling into a new job over at Neversoft. There are some awesome folks over there, and I am really enjoying it so far. Along with starting a new job comes learning a completely different codebase. This can &#8230; <a href="http://thetoolsmiths.org/2011/06/10/some-code-organization-patterns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lately I am settling into a new job over at Neversoft.  There are some awesome folks over there, and I am really enjoying it so far.  Along with starting a new job comes learning a completely different codebase.  This can be especially arduous for tools folks since tools code typically sits atop a mountain of engine, pipeline, and foundation code.</p>
<p>In trying to wrap my head around an entirely new chunk of tech, I keep re-discovering patterns that make it easier to get your bearings on a lot of new code quickly.  There are lots of these patterns that studios follow when organizing their code, and following these can make it easier to dive and and start getting work done (or just make getting work done in general).  Some or all of these may be obvious to experienced engineers, but I figure it never hurts to reinforce best practices, and you never know when someone will have the total opposite opinion for really interesting reasons.</p>
<p>Maintain just a handful of high level solutions so its easy to gain grand perspective.</p>
<p>The lower the solution count in your project the better.  Ideally they should all be in the top level folder of your code.  The key here is to create awareness of the major chunks of technology in your project.  I think most people agree that the bar should be low for any engineer to get in and look at tools, engine, or game code.  The more you hide solutions within your code tree the more arcane knowledge is required to even know who the major players are in your codebase.</p>
<p>Direct all compiler output to a single folder.</p>
<p>Nothing hurts broad searches more than having large binary files mixed in with the source you are trying to search.  It&#8217;s probably the reason why Visual Studio has preconfigured laundry lists of source code file filters in their Find in Files tool.  If you redirect all your compiler output folders to its own root folder then broad searches gets orders of magnitude faster since it doesn&#8217;t have to wade through compiler data.</p>
<p>If your compiler output is directed to a separate dedicated folder then doing a clean build is just a simple matter of destroying the output folder and re-running your build.  Explicit cleans are just slower, and its just easier to delete a folder when scripting things like build server operations.</p>
<p>Code generated via custom build steps counts as compiler output too!  Add your output location an include path and #include generated code, even c/cpp files.  Doing this keeps a very clear distinction between generated code and code which belongs in revision control (and hopefully you aren&#8217;t storing generated code in revision control!).</p>
<p>Keep 3rd party library code and solutions separate.</p>
<p>A big part of effectively searching through your codebase is being able to differentiate your code from external library code.  Littering 3rd party libraries in with your own code can muddle search results.</p>
<p>Frequently its not necessary to clean build both 3rd party code and your project code, so having separate solutions can save time.  It also makes performing search and replaces within solutions that only have your project code in them safer (you don&#8217;t want to search and replace within a 3rd party lib do you!?).</p>
<p>Install large 3rd party SDKs directly onto workstations.</p>
<p>Revision control isn&#8217;t the only software delivery mechanism on the planet.  Nobody should be making changes within the CellSDK, DirectX SDK, or FBX SDK so they shouldn&#8217;t be checked into revision control.  These packages tend to be very easy to script for unattended installation (msiexec).  This makes it easy to write a simple SDK checkup script to make sure that any given client (even build servers) have the latest kit installed.</p>
<p>Most large SDKs have environment variables that make them easy to find on the system, and even if they don&#8217;t you can typically assume where it should be installed.  If they are missing it&#8217;s a simple thing to track down and install t (even for junior or associate engineers).  Also, it never hurts to add compile asserts to validate that the code is being built against the correct version of those libraries.</p>
<p>If you happen to develop on a system with a package manager, they are awesome for making it easy to pull down 3rd party libraries directly off the internet.  Microsoft&#8217;s CoApp project aims to do just that on Windows.</p>
<p>Only check in binaries of what you cannot easily compile.</p>
<p>The less compiled binaries you check in the better your revision control will perform, and everyone you work with is served better when revision control works well.  Source code is much quicker to transfer and store on servers and peers.  Not checking in compiled binaries means less waiting for transfers, less locking for centralized servers, and less long term size creep for distributed repositories.</p>
<p>Checking in built versions of libraries will create a headache for yourself in the future when you want to deploy a new compiler or support a new architecture (which will require you to recompile using a bunch of crusty project files that haven&#8217;t been used in months or years).  It&#8217;s always worth a little extra time when adding a new external library to take command over your build configuration management.  Sometimes this can involve making your own project files instead of using ones that may be included with the library source code.  High level build scripting tools like Premake, CMake, and boost::build are worth spending time to learn, and can make hand-creating IDE-specific projects seem archaic.  If updating external libraries in your engine is easy you will do it more often, and hence reap the benefit of more frequent fixes and improvements you don&#8217;t have to do yourself.</p>
<p>This article was also posted to <a href="http://altdevblogaday.org/2011/06/11/some-code-organization-patterns/">AltDevBlogADay</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2011/06/10/some-code-organization-patterns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Toolsmiths Google Group</title>
		<link>http://thetoolsmiths.org/2011/03/28/the-toolsmiths-google-group/</link>
		<comments>http://thetoolsmiths.org/2011/03/28/the-toolsmiths-google-group/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 03:13:06 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[SIG Business]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=644</guid>
		<description><![CDATA[The IGDA Tools SIG has a new discussion group! We&#8217;re moving from using the IGDA hosted Mailman group (called Tools-Discuss) to a Google Group called The Toolsmiths. The purpose of the group is to provide a discussion forum for all &#8230; <a href="http://thetoolsmiths.org/2011/03/28/the-toolsmiths-google-group/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The IGDA Tools SIG has a new discussion group!  We&#8217;re moving from using the IGDA hosted Mailman group (called Tools-Discuss) to a Google Group called <a href="http://groups.google.com/group/the-toolsmiths">The Toolsmiths</a>.</p>
<p>The purpose of the group is to provide a discussion forum for all<span style="color: black; font-family: Arial; font-size: 10pt;"> types of game tools development, from command line tools, to UI-focused tools, and middleware applications.  This can include things like best practices in version control, building and build servers, exporters, level editors, deployment scripts, and game to tools integration.  Basically, if you do it as a tools developer, we want to hear about it, and discuss it with you.</span></p>
<p><span style="color: black; font-family: Arial; font-size: 10pt;">See you on the list!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2011/03/28/the-toolsmiths-google-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Driven is Half The Battle</title>
		<link>http://thetoolsmiths.org/2011/02/14/data-driven-is-half-the-battle/</link>
		<comments>http://thetoolsmiths.org/2011/02/14/data-driven-is-half-the-battle/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 18:06:49 +0000</pubDate>
		<dc:creator>Jeff Ward</dc:creator>
				<category><![CDATA[Functionality]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Talks]]></category>
		<category><![CDATA[Tool Design]]></category>

		<guid isPermaLink="false">http://thetoolsmiths.org/?p=639</guid>
		<description><![CDATA[I was recently invited to do a talk at Game Forum Germany, and the talk I gave was called &#8220;Data Driven Is Half the Battle.&#8221; I&#8217;ve made the slides available on my website if you would like to take a &#8230; <a href="http://thetoolsmiths.org/2011/02/14/data-driven-is-half-the-battle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I was recently invited to do a talk at Game Forum Germany, and the talk I gave was called &#8220;Data Driven Is Half the Battle.&#8221;  I&#8217;ve made the slides available on <a href="http://www.fuzzybinary.com/talks/DataDriven.pptx">my website</a> if you would like to take a look.</p>
<p>The purpose of the talk was to show that just making game systems data driven is not the end of the road to making your game configurable, especially when you want the rest of your team to be able to edit these configuration files.  Formats like XML and JSON are awesome, but by design lack any context for the properties and values they control.  This is good thing from a programmer&#8217;s perspective, since it means that we can define the meanings of properties and valid values, but a bad thing from the perspective of someone who has to edit those files.  Either the system needs to be really well documented, you need to create a tool that ensures that people editing can only supply valid values.</p>
<p>Maintaining these tools can become a huge pain in the ass, though, especially when features or data modules are being added frequently.</p>
<p>My proposal to fix this was to use reflection, either custom coded in C++ or one offered by the language you&#8217;re using.  This is the one I have the most experience with and the one I&#8217;m most comfortable using.  Interestingly fellow Toolsmith Geoff Evans actually has an article in Game Developer this month about using reflection in <a href="http://heliumproject.org/">Helium</a>, which is worth checking out if you&#8217;re looking to implement this sort of behavior.</p>
<p>However, this does not mean this is the only solution, especially if you&#8217;re moving data between multiple systems and / or multiple languages.  In this case, a data definition system, might be more worth your while, especially if you can just use the data definition to dynamically load the class as specified (this would be possible to do in dynamic or duck typed languages).</p>
<p>No matter what, the key takeaway of the talk was twofold: 1) Make it easier for people to modify data, and everyone will be happier, and 2) Make it easier for your programmers to do so, and they&#8217;ll do it more frequently, with fewer bugs., which also makes everyone happier.</p>
]]></content:encoded>
			<wfw:commentRss>http://thetoolsmiths.org/2011/02/14/data-driven-is-half-the-battle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
