<?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>Chad Austin &#187; opensource</title>
	<atom:link href="http://chadaustin.me/tag/opensource/feed/" rel="self" type="application/rss+xml" />
	<link>http://chadaustin.me</link>
	<description></description>
	<lastBuildDate>Mon, 07 Nov 2011 21:24:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Scalable Build Systems: An Analysis of Tup</title>
		<link>http://chadaustin.me/2010/06/scalable-build-systems-an-analysis-of-tup/</link>
		<comments>http://chadaustin.me/2010/06/scalable-build-systems-an-analysis-of-tup/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 10:00:17 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[ibb]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[scons]]></category>

		<guid isPermaLink="false">http://chadaustin.me/?p=1530</guid>
		<description><![CDATA[I previously argued that any tool whose running time is proportional with the number of files in a project scales quadratically with time.  Bluem00 on Hacker News pointed me towards Tup, a scalable build system with goals similar to ibb.

Mike Shal, Tup&#8217;s author, wrote Build System Rules and Algorithms, formalizing the algorithmic deficiencies with [...]]]></description>
			<content:encoded><![CDATA[<p>I previously argued that any tool whose running time is proportional with the number of files in a project <a href="http://chadaustin.me/2010/03/your-version-control-and-build-systems-dont-scale-introducing-ibb/">scales quadratically with time</a>.  Bluem00 on <a href="http://news.ycombinator.com/item?id=1167238">Hacker News</a> pointed me towards <a href="http://gittup.org/tup/">Tup</a>, a scalable build system with goals similar to <a href="http://github.com/chadaustin/ibb">ibb</a>.</p>

<p>Mike Shal, Tup&#8217;s author, wrote <a href="http://gittup.org/tup/build_system_rules_and_algorithms.pdf">Build System Rules and Algorithms</a>, formalizing the algorithmic deficiencies with existing build systems and describing Tup&#8217;s implementation, a significant improvement over the status quo.  I would like to document my analysis of Tup and whether I think it replaces <a href="http://github.com/chadaustin/ibb">ibb</a>.</p>

<p>Before we get started, I&#8217;d like to thank Mike Shal for being receptive to my comments.  I sent him a draft of my analysis and his responses were thoughtful and complete.  With his permission, I have folded his thoughts into the discussion below.</p>

<p>Is Tup suitable as a general-purpose build system?  Will it replace SCons or Jam or Make anytime soon?  Should I continue working on ibb?</p>

<p>Remember our criteria for a scalable build system, one that enables test-driven development at arbitrary project sizes:</p>

<ol>
<li>O(1) no-op builds</li>
<li>O(changes) incremental builds</li>
<li>Accessible dependency DAG atop which a variety of tools can be built</li>
</ol>

<p>Without further ado, my thoughts on Tup follow:</p>

<h2>Syntax</h2>

<p>Tup defines its own declarative syntax, similar to Make or Jam.  At first glance, the Tup syntax looks semantically equivalent to Make.  From the <a href="http://gittup.org/tup/examples.html">examples</a>:</p>

<pre>
: hello.c |> gcc hello.c -o hello |> hello
</pre>

<p>Read the dependency graph from left to right:  hello.c is compiled by gcc into a hello executable.  Tup supports variable substitution and limited flow control.</p>

<p>Build systems are inherently declarative, but I think Tup&#8217;s syntax has two flaws:</p>

<ol>
<li>Inventing a new syntax unnecessarily slows adoption: by implementing GNU Make&#8217;s syntax, Tup would be a huge drop-in improvement to existing build systems.</li>
<li>Even though specifying dependency graphs is naturally declarative, I think a declarative syntax is a mistake.  Build systems are a first-class component of your software and your team&#8217;s workflow.  You should be able to develop them in a well-known, high-level language such as Python or Ruby, especially since those languages come with rich libraries.  As an example, SCons gets this right: it&#8217;s trivial for me to write CPU autodetection logic for parallel builds in a build script if that makes sense.  Or I can extend SCons&#8217;s Node system to download source files from the web.</li>
</ol>

<h2>Implementation Language</h2>

<p>Tup is 15,000 lines of C.  There&#8217;s no inherent problem with C, but I do think a community-supported project is more likely to thrive in a faster and safer language, such as Python or Ruby.  Having worked with teams of engineers, it&#8217;s clear that most engineers can safely work in Python with hardly any spin-up time.  I can&#8217;t say the same of C.</p>

<p>Git is an interesting case study: The core performance-sensitive data structures and algorithms are written in C, but many of its interesting features are written in Perl or sh, including git-stash, git-svn, and git-bisect.  Unlike Git, I claim Python and Ruby are plenty efficient for the entirety of a scalable build system.  Worst case, the dependency graph could live in C and everything else could stay in Python.</p>

<h2>Scanning Implicit Dependencies</h2>

<p>The Tup paper mentions offhand that it&#8217;s trivial to monitor a compiler&#8217;s file accesses and thus determine its true dependencies for generating a particular set of outputs.  The existing implementation uses a LD_PRELOAD shim to monitor all file accesses attempted by, say, gcc, and treats those as canonical input files.  Clever!</p>

<p>This is a great example of lateral, scrappy thinking.  It has a couple huge advantages:</p>

<ol>
<li>No implicit dependencies (such as C++ header file includes) need be specified &#8212; if all dependencies come from the command line or a file, Tup will know them all.</li>
<li>It&#8217;s easy to implement.  Tup&#8217;s ldpreload.c is a mere 500 lines.</li>
</ol>

<p>And a few disadvantages:</p>

<ol>
<li>Any realistic build system must treat Windows as a first-class citizen.  Perhaps, on Windows, Tup could use something like <a href="http://research.microsoft.com/en-us/projects/detours/">Detours</a>. I&#8217;ll have to investigate that.</li>

<li>Intercepting system calls is reliable when the set of system calls is known and finite.  However, there&#8217;s nothing stopping the OS vendor from adding <a href="http://msdn.microsoft.com/en-us/library/aa363853(VS.85).aspx">new system calls</a> that modify files.</li>

<li>Incremental linking / external PDB files: these Visual C++ features both read and write the same file in one compile command.  SCons calls this a SideEffect: commands that share a SideEffect cannot parallelize.  A build system that does not support incremental linking or external symbols would face resistance among Visual C++ users.</li>
</ol>

<p>And some open questions:</p>

<ol>
<li>I haven&#8217;t completely thought this through, but it may be important to support user-defined dependency scanners that run before command execution, enabling tools such as graph debugging.</li>
<li>I don&#8217;t have a realistic example, but imagine a compiler that reads spurious dependency changes from run to run; say, a compiler that only checks its license file on every other day.</li>
</ol>

<p>Stepping back, I think the core build system should not be responsible for dependency scanning.  By focusing on dependency graph semantics and leaving dependency scanning up to individual tools (which may or may not use LD_PRELOAD or similar techniques), a build system can generalize to uses beyond compiling software, as I mentioned in my previous blog post.</p>

<h2>Dependency Graph</h2>

<p>Tup&#8217;s dependency DAG contains two types of nodes: Commands and Files.  Files depend on Commands and Commands depend on other Files.  I prefer Tup&#8217;s design over SCons&#8217;s DAG-edges-are-commands design for two reasons:</p>

<ol>
<li>It simplifies the representation of multiple-input multiple-output commands.</li>
<li>Some commands, such as &#8220;run-test foo&#8221; or &#8220;search-regex some.*regex&#8221; depend on source files but produce no files as output. Since they fit naturally into the build DAG, commands are a first-class concept.</li>
</ol>

<h2>Build Reliability</h2>

<p>Tup, like SCons, places a huge emphasis on build reliability.  This is key and I couldn&#8217;t agree more.  In the half-decade I&#8217;ve used SCons, I can count the number of broken builds on one hand.  Sadly, many software developers are used to typing &#8220;make clean&#8221; or clicking &#8220;full rebuild&#8221; when something is weird.  What a huge source of waste!  Developers should trust the build system as much as their compiler, and the build system should go out of its way to help engineers specify complete and accurate dependencies.</p>

<p>Reliable builds imply:</p>

<ol>
<li>Changes are tracked by file <em>contents</em>, not timestamps.</li>
<li>The dependency graph, including implicit dependencies such as header files and build commands, is complete and accurate by default.</li>
<li>Compiler command lines are included in the DAG.  Put another way: if the command used to build a file changes, the file must be rebuilt.</li>
</ol>

<p>Tup takes a strict functional approach and formalizes build state as a set of files and their contents.  (I would argue build state also includes file metadata such as file names and timestamps, at least if the compiler uses such information.)  If the build state does not change between invocations, then no work must be done.</p>

<p>Tup even takes build reliability one step further than SCons:  If you rename a target file in the build script, Tup actually deletes the old built target before rebuilding the new one.  Thus, you will never have stale target executables lying around in your build tree.</p>

<p>Nonetheless, there are situations where a project may choose to sacrifice absolute reliability for significant improvements in build speed, such as incremental linking discussed above.</p>

<h2>Core vs. Community</h2>

<p>A build system is a critical component of any software team&#8217;s development process.  Since every team is different, it&#8217;s essential that a build system is flexible and extensible.  SCons, for example, correctly chose to implement build scripts in a high-level language (Python) with a declarative API for specifying nodes and edges in the dependency graph.</p>

<p>However, I think SCons did not succeed at separating its core engine from its community.  SCons tightly couples the underlying dependency graph with support for tools like Visual C++, gcc, and version control.  The frozen and documented SCons API is fairly high-level while the (interesting) internals are treated as private APIs.  It should be the opposite: a dependency graph is a narrow, stable, and general API.  By simplifying and documenting the DAG API, SCons could enable broader uses, such as unit test execution.</p>

<h2>Configuration</h2>

<p>Like Tup&#8217;s author, I agree that build autoconfiguration (such as autoconf or SCons&#8217;s Configure support) should not live in the core build system.  Autoconfiguration is simply an argument that build scripts should be specified in a general programming language and that the community should develop competing autoconfiguration systems.  If a particular autoconfiguration system succeeds in the marketplace, then, by all means, ship it with your build tool.  Either way, it shouldn&#8217;t have access to any internal APIs.  Configuration mechanisms are highly environment-sensitive and are best maintained by the community anyway.</p>

<h2>DAG post-process optimizations</h2>

<p>Another argument for defining a build tool in a general-purpose language is to allow user-defined DAG optimizations and sort orders.  I can think of two such use cases:</p>

<ol>
<li>Visual C++ greatly improves compile times when multiple C++ files are specified on one command line.  In fact, the benefit of batched builds can exceed the benefit of PCH.  A DAG optimizer would search for a set of C++ source files that produce object files in the same directory and rewrite the individual command lines into one.</li>

<li>When rapidly iterating, it would be valuable for a build system or test runner to sort such that the most-recently-failed compile or test runs first.  However, when hunting test interdependencies as part of a nightly build, you may want to shuffle test runs.  On machines with many cores but slow disks, you want to schedule expensive links as soon as possible to mitigate the risk that multiple will execute concurrently and thrash against your disk.</li>
</ol>

<h2>Conclusion</h2>

<p>Tup is a significant improvement over the status quo, and I have personally confirmed its performance &#8212; it&#8217;s lightning fast and it scales to arbitrary project sizes.</p>

<p>However, without out-of-the-box Windows support, a mainstream general-purpose language, and a model for community contribution, I don&#8217;t see Tup rapidly gaining traction.  With the changes I suggest, it could certainly replace Make and perhaps change the way we iterate on software entirely.</p>

<p>Next, I intend to analyze <a href="http://code.google.com/p/prebake/">prebake</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2010/06/scalable-build-systems-an-analysis-of-tup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Thriving Sphere community</title>
		<link>http://chadaustin.me/2008/07/thriving-sphere-community/</link>
		<comments>http://chadaustin.me/2008/07/thriving-sphere-community/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 07:05:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2008/07/16/thriving-sphere-community/</guid>
		<description><![CDATA[I just found out that Sphere, the RPG creation system that I started developing eleven years ago, has a thriving community!  A good 2/3 of all of the hits to aegisknight.org are to http://aegisknight.org/sphere, so I made sure to point people on that page to spheredev.org and the spheredev.org forums.  Yeah open source!]]></description>
			<content:encoded><![CDATA[I just found out that Sphere, the RPG creation system that I started developing eleven years ago, has a thriving community!  A good 2/3 of all of the hits to aegisknight.org are to <a href="http://aegisknight.org/sphere">http://aegisknight.org/sphere</a>, so I made sure to point people on that page to <a href="http://www.spheredev.org/">spheredev.org</a> and the <a href="http://www.spheredev.org/smforums/index.php">spheredev.org forums</a>.  Yeah open source!]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2008/07/thriving-sphere-community/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Open sourced our pstats viewer!</title>
		<link>http://chadaustin.me/2008/05/open-sourced-our-pstats-viewer/</link>
		<comments>http://chadaustin.me/2008/05/open-sourced-our-pstats-viewer/#comments</comments>
		<pubDate>Thu, 22 May 2008 05:13:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[imvu]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2008/05/21/open-sourced-our-pstats-viewer/</guid>
		<description><![CDATA[
IMVU has benefited greatly from open source software.  Large components of our client and website are built on top of various open source projects.  In fact, you can see the list of software on our technology page.


Well, I&#8217;m happy to announce that we&#8217;re beginning to contribute source code back!  We have created [...]]]></description>
			<content:encoded><![CDATA[<p>
IMVU has benefited greatly from open source software.  Large components of our client and website are built on top of various open source projects.  In fact, you can see the list of software on our <a href="http://imvu.com/technology">technology page</a>.</p>

<p>
Well, I&#8217;m happy to announce that we&#8217;re beginning to contribute source code back!  We have created a <a href="http://sourceforge.net/projects/imvu">project</a> on SourceForge and released our first standalone tool: <a href="https://imvu.svn.sourceforge.net/svnroot/imvu/imvu_open_source/tools/pstats_viewer.py">pstats_viewer.py</a>.  pstats_viewer is a tool for browsing the data stored in a .pstats file generated by the Python profiler.</p>

]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2008/05/open-sourced-our-pstats-viewer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Wiki For Reviewing Third-Party Libraries</title>
		<link>http://chadaustin.me/2008/04/a-wiki-for-reviewing-third-party-libraries/</link>
		<comments>http://chadaustin.me/2008/04/a-wiki-for-reviewing-third-party-libraries/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 03:48:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[imvu]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2008/04/25/a-wiki-for-reviewing-third-party-libraries/</guid>
		<description><![CDATA[In Don&#8217;t Invest in the Wrong Code, Tom Kleinpeter has created a wiki for pitfalls in third-party libraries.  Sort of a consumer reports for software engineers.  I think this is a great idea, and would have helped us a lot at IMVU.  Please contribute!  Let&#8217;s see this thing get critical mass!]]></description>
			<content:encoded><![CDATA[In <a href="http://www.spiteful.com/2008/04/25/dev-diligence-dont-invest-in-the-wrong-code/">Don&#8217;t Invest in the Wrong Code</a>, Tom Kleinpeter has created a wiki for <a href="http://www.spiteful.com/dd/wishlist">pitfalls in third-party libraries</a>.  Sort of a consumer reports for software engineers.  I think this is a great idea, and would have helped us a lot at IMVU.  Please contribute!  Let&#8217;s see this thing get critical mass!]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2008/04/a-wiki-for-reviewing-third-party-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source Development Tip #1</title>
		<link>http://chadaustin.me/2007/02/open-source-development-tip-1/</link>
		<comments>http://chadaustin.me/2007/02/open-source-development-tip-1/#comments</comments>
		<pubDate>Sun, 11 Feb 2007 00:10:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2007/02/10/open-source-development-tip-1/</guid>
		<description><![CDATA[
A couple years ago, when I was heavily involved in several open source projects, I accumulated a set of thoughts that might be interesting to someone starting their own open source project.  I had grandiose dreams of writing a series of articles along these lines, but as you might expect, real life and a [...]]]></description>
			<content:encoded><![CDATA[<p>
A couple years ago, when I was heavily involved in several open source projects, I accumulated a set of thoughts that might be interesting to someone starting their own open source project.  I had grandiose dreams of writing a series of articles along these lines, but as you might expect, real life and a lack of ambition nixed that.  Now, I&#8217;ve forgotten even what I was interested in saying, so let&#8217;s try a different approach.  Whenever I have a thought that I think somebody might possibly care about, I will write it as a tip.  If the set of tips grows sufficiently large, and enough people care, I may combine them into something more organization.  So here we go.  Open Source Development Tip #1:
</p>

<p>
Subscribe to a <a href="http://www.google.com/alerts">Google Alert</a> with your project&#8217;s name and watch users &#8220;in the wild&#8221;.  Mailing lists are fine and all, but many people won&#8217;t bother sending their problems or even first impressions to you or the project mailing lists, even if they&#8217;ll write in other forums or blogs.  Google Alerts will give you a broader perspective.
</p>

<p>
Prerequisites:
</p>

<ol>
<li>Release your software.  (This, of course, requires a sufficient feature set to convince yourself that somebody might possibly want to use it.)</li>
<li>Give your software a sufficiently google-able name.  (Audiere, iPodExtract, yes.  Corona, Sphere, no.)</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2007/02/open-source-development-tip-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>backup-sourceforge.py</title>
		<link>http://chadaustin.me/2006/11/backup-sourceforgepy/</link>
		<comments>http://chadaustin.me/2006/11/backup-sourceforgepy/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 08:10:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2006/11/26/backup-sourceforgepy/</guid>
		<description><![CDATA[Today I updated my backup-sourceforge.py script to reflect the new SourceForge backup policies, including support for Subversion repositories.  You can download it on my scripts page.

It used to be a bash script, but the second you&#8217;re using commands like trap "error" ERR and set -e and cd "`dirname \"$0\"`", it&#8217;s worth rewriting in Python. [...]]]></description>
			<content:encoded><![CDATA[<p>Today I updated my <a href="http://aegisknight.org/backup-sourceforge.py">backup-sourceforge.py</a> script to reflect the new SourceForge backup policies, including support for Subversion repositories.  You can download it on my <a href="http://aegisknight.org/scripts">scripts</a> page.</p>

<p>It used to be a bash script, but the second you&#8217;re using commands like <code>trap "error" ERR</code> and <code>set -e</code> and <code>cd "`dirname \"$0\"`"</code>, it&#8217;s worth rewriting in Python.  Interestingly, the Python came out surprisingly terse and clear, unlike past experiences writing shell scripts in Python.  Also, it used to call into the <a href="http://sitedocs.sourceforge.net/projects/adocman/">adocman</a> project (some Perl scripts provided by SourceForge to make backups easier), but it was such a pain to set up CPAN and install the required Perl packages that I decided I would reimplement their <code>xml_export</code> tool in Python and urllib2.  I managed to replace <code>xml_export</code> with fewer than 20 lines of code.  Python really does have &#8220;batteries included&#8221;!</p>

]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2006/11/backup-sourceforgepy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPodExtract</title>
		<link>http://chadaustin.me/2006/10/ipodextract/</link>
		<comments>http://chadaustin.me/2006/10/ipodextract/#comments</comments>
		<pubDate>Tue, 03 Oct 2006 07:19:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2006/10/03/ipodextract/</guid>
		<description><![CDATA[This weekend I wrote a little program to extract music and movies off of your iPod, reconstituting an Artist/Album/Track directory tree based on the tags in the files.  I lost my RAID 0 array a while back (due to a controller failure, not a drive failure as you might think), so I needed a [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend I wrote a little program to extract music and movies off of your iPod, reconstituting an Artist/Album/Track directory tree based on the tags in the files.  I lost my RAID 0 array a while back (due to a controller failure, not a drive failure as you might think), so I needed a way to restore my iTunes purchases.  Also, I didn&#8217;t want to rerip all of my CDs.  The program worked well for my purposes, so I thought I should whip up a GUI and release it.</p>

<p>Its name is iPodExtract.  <a href="http://aegisknight.org/ipodextract">Check it out.</a></p>

<p>Also, I&#8217;m experimenting with Google ads.</p>

]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2006/10/ipodextract/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Download IMVU&#8217;s Cal3D modifications</title>
		<link>http://chadaustin.me/2006/09/download-imvus-cal3d-modifications/</link>
		<comments>http://chadaustin.me/2006/09/download-imvus-cal3d-modifications/#comments</comments>
		<pubDate>Wed, 20 Sep 2006 00:20:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[cal3d]]></category>
		<category><![CDATA[imvu]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2006/09/19/download-imvus-cal3d-modifications/</guid>
		<description><![CDATA[Hi all,

IMVU uses a lot of open source software on both our client software and the web site (frontend and backend).  One of the packages we use is Cal3D, a 3D skeletal animation system.  We&#8217;ve made a few changes to Cal3D over the last year or two, including support for morph targets, exporter [...]]]></description>
			<content:encoded><![CDATA[Hi all,

IMVU uses a lot of open source software on both our client software and the web site (frontend and backend).  One of the packages we use is Cal3D, a 3D skeletal animation system.  We&#8217;ve made a few changes to Cal3D over the last year or two, including support for morph targets, exporter UI improvements, an improved animation scheduler, vertex colors, and others.  In the past, we&#8217;ve published our changes directly back to the Cal3D project, but this wasn&#8217;t strictly in accordance with the LGPL, under which Cal3D is licensed.  So now you can easily download <a href="http://imvu.com/filebox/imvu-cal3d.7z">our version of Cal3D</a> directly from <a href="http://imvu.com/catalog/web_info_technology.php">our technology page</a>!

Enjoy!

<a href="http://avatars.imvu.com/Chad">Chad</a>]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2006/09/download-imvus-cal3d-modifications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GLScry 0.2.0 Released</title>
		<link>http://chadaustin.me/2005/05/glscry-020-released/</link>
		<comments>http://chadaustin.me/2005/05/glscry-020-released/#comments</comments>
		<pubDate>Fri, 27 May 2005 06:58:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2005/05/26/glscry-020-released/</guid>
		<description><![CDATA[The 0.2.0 release of GLScry, our OpenGL benchmarking application, is available.  The change log is available on its web page.]]></description>
			<content:encoded><![CDATA[The 0.2.0 release of <a href="http://aegisknight.org/glscry">GLScry</a>, our OpenGL benchmarking application, is available.  The change log is available on its <a href="http://aegisknight.org/glscry">web page</a>.]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2005/05/glscry-020-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ssh-agent and Cygwin</title>
		<link>http://chadaustin.me/2005/04/ssh-agent-and-cygwin/</link>
		<comments>http://chadaustin.me/2005/04/ssh-agent-and-cygwin/#comments</comments>
		<pubDate>Sun, 03 Apr 2005 04:46:00 +0000</pubDate>
		<dc:creator>Chad Austin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://aegisknight.org/new/2005/04/02/ssh-agent-and-cygwin/</guid>
		<description><![CDATA[
If you&#8217;re like me and you use ssh from Cygwin a lot, you may have tried to set up ssh-agent in the past.  There are a variety of reasons it doesn&#8217;t work nearly as well as it does in unix land.  I did some research and found win-ssh-askpass (English Readme).  Compile it, [...]]]></description>
			<content:encoded><![CDATA[<p>
If you&#8217;re like me and you use ssh from Cygwin a lot, you may have tried to set up ssh-agent in the past.  There are a variety of reasons it doesn&#8217;t work nearly as well as it does in unix land.  I did some research and found <a href="http://www.ganaware.jp/S/win-ssh-askpass/">win-ssh-askpass</a> (<a href="http://www.ganaware.jp/viewcvs.cgi/win-ssh-askpass/README.txt?rev=1.5">English Readme</a>).  Compile it, make a batch file that looks like the following, and drop it in your startup folder:
</p>

<pre>
C:\cygwin\usr\local\bin\win-ssh-agent --no-DISPLAY --hide-console
</pre>

<p>
Now you only have to enter your ssh password once per login!
</p>]]></content:encoded>
			<wfw:commentRss>http://chadaustin.me/2005/04/ssh-agent-and-cygwin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

