<?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>Duct Tape And Turing Machines</title>
	<atom:link href="http://www.zen-hacking.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zen-hacking.com</link>
	<description></description>
	<lastBuildDate>Sat, 16 Jan 2010 16:01:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>python-mysql under Snow Leopard</title>
		<link>http://www.zen-hacking.com/2009/09/01/python-mysql-under-snow-leopard/</link>
		<comments>http://www.zen-hacking.com/2009/09/01/python-mysql-under-snow-leopard/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 17:14:32 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=48</guid>
		<description><![CDATA[Getting python-mysql to work under OS X has always required a bit of prodding.  Here&#8217;s what worked for me after upgrading to Snow Leopard:

Make sure you are running the 32-bit (x86) version of MySQL.  The python bindings compile against the 64-bit version, but don&#8217;t seem to work. Get it here.
Check out the python-mysql [...]]]></description>
			<content:encoded><![CDATA[<p>Getting python-mysql to work under OS X has always required a bit of prodding.  Here&#8217;s what worked for me after upgrading to Snow Leopard:</p>
<ol>
<li>Make sure you are running the <b>32-bit (x86)</b> version of MySQL.  The python bindings compile against the 64-bit version, but don&#8217;t seem to work. Get it <a href="http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg">here</a>.</li>
<li>Check out the python-mysql <a href="https://mysql-python.svn.sourceforge.net/svnroot/mysql-python/tags/MySQLdb-1.2.3c1/MySQLdb">1.2.3c1 tag</a> from SVN.</li>
<li>In the directory where you checked out python-mysql, run <code>sudo easy_install .</code></li>
<li>Verify that it works with <code>python -c "import MySQLdb"</code>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2009/09/01/python-mysql-under-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Slim</title>
		<link>http://www.zen-hacking.com/2009/08/07/slim/</link>
		<comments>http://www.zen-hacking.com/2009/08/07/slim/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 14:53:57 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=45</guid>
		<description><![CDATA[Something I whipped up recently and wanted to share: Slim is a module for Axiom Stack that can automatically create minified, concatenated copies of your client-side javascript and css. It takes care of which version to include in your page headers: you can switch back and forth between the minified copies and development copies with [...]]]></description>
			<content:encoded><![CDATA[<p>Something I whipped up recently and wanted to share: <a href="http://github.com/thegreatape/slim/tree/master">Slim</a> is a module for Axiom Stack that can automatically create minified, concatenated copies of your client-side javascript and css. It takes care of which version to include in your page headers: you can switch back and forth between the minified copies and development copies with a single config option.  Hope it&#8217;s useful to someone!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2009/08/07/slim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing commit authors in Git</title>
		<link>http://www.zen-hacking.com/2009/03/20/changing-commit-authors-in-git/</link>
		<comments>http://www.zen-hacking.com/2009/03/20/changing-commit-authors-in-git/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 01:21:25 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=42</guid>
		<description><![CDATA[One of the projects I work on, Axiom Stack, has been through three different version control systems.  It was originally hosted in Subversion.  We moved to Baazar about half a year ago because we needed a sane branching/merging system.  Now we&#8217;re switching again, this time to Git.[*]
With our share of migrations between [...]]]></description>
			<content:encoded><![CDATA[<p>One of the projects I work on, <a href="http://www.axiomstack.com">Axiom Stack</a>, has been through three different version control systems.  It was originally hosted in Subversion.  We moved to Baazar about half a year ago because we needed a sane branching/merging system.  Now we&#8217;re switching <i>again</i>, this time to Git.[*]</p>
<p>With our share of migrations between VCSes and authentication systems, the history of Axiom Stack was full of totally inconsistent representations of commit authors.  Depending on what we were using at at the time (and how I reassured the system that I was Me) my commits were by <Thomas> <tmayfield@axiomsoftwareinc.com>
<thomasmayfield@some-idiot-forgot-to-change-the-default.user> and a few others.  It was time to straighten things out before our upcoming move to GitHub.</p>
<p>It turned out to be surprisingly easy to do, albiet something you shouldn&#8217;t do to an existing public repository that people are tracking.  I used git&#8217;s fast-export to dump the entire repo out to a text file, sliced and diced it, and recreated it with fast-import. To wit:</p>
<p><code>$ cd git-repo-directory<br />
$ git fast-export --all > ../git-export.tmp<br />
$ cd ..<br />
# change the author and commit credit lines to some consistent<br />
# representation of each user.  For me, Batman-style text editing:<br />
# SED! AWK! GREP!<br />
$ mkdir fixed-authors-repo<br />
$ cd fixed-authors-repo<br />
$ git init<br />
$ git fast-import < ../git-export.tmp</code></p>
<p><small>---<br />
[*] There's nothing wrong with Baazar.  It was simply that Git's speed and in-place branch switching turned out to be must-haves.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2009/03/20/changing-commit-authors-in-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unrepentant Metapost</title>
		<link>http://www.zen-hacking.com/2009/03/20/unrepentant-metapost/</link>
		<comments>http://www.zen-hacking.com/2009/03/20/unrepentant-metapost/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 01:04:36 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=39</guid>
		<description><![CDATA[Long time no post.  As freeing as constraints are, I think I&#8217;ve been putting a few bogus constraints on myself that&#8217;ve kept me from writing here lately.
With apologies to Jeff Atwood, I&#8217;m going to call this the Coding Horror Trap.  For all of Jeff&#8217;s regular self-deprecation, he consistently writes in the voice of [...]]]></description>
			<content:encoded><![CDATA[<p>Long time no post.  As freeing as constraints are, I think I&#8217;ve been putting a few bogus constraints on myself that&#8217;ve kept me from writing here lately.</p>
<p>With apologies to Jeff Atwood, I&#8217;m going to call this the <a href="http://www.codinghorror.com">Coding Horror</a> Trap.  For all of Jeff&#8217;s regular self-deprecation, he consistently writes in the voice of authority.  Almost any given post of his has a point to make, something Jeff wants to tell you about How Things Are in the world of building software.  Most of the highly-read software bloggers write this way- Jeff&#8217;s just the easiest to pick on. </p>
<p>It should be said that there&#8217;s nothing wrong with this style of writing!  Putting your cherished opinions out in public for criticism can be a great tool to force you to elucidate what you believe in the first place.  Some of the biggest personal revelations I&#8217;ve had were while having to defend my own poorly thought-out opinions. </p>
<p>But. I&#8217;m now realizing that I&#8217;d began feeling that if I was going to write about software, by golly I better have some real insight to share.  And that&#8217;s patently not true.  A shell trick I discovered while munging log files is just as worth setting down as anything else.  So too are unanswered questions and uncertainties. </p>
<p>I don&#8217;t have to pretend to be some great authority on what I&#8217;m writing about.  And <em>that&#8217;s</em> freeing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2009/03/20/unrepentant-metapost/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bazaar: First Impressions</title>
		<link>http://www.zen-hacking.com/2008/08/10/bazaar-first-impressions/</link>
		<comments>http://www.zen-hacking.com/2008/08/10/bazaar-first-impressions/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 20:22:45 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=33</guid>
		<description><![CDATA[A few weeks ago, I switched from using Subversion to Bazaar for versioning my projects at work.  So far, my impressions have been overwhelmingly positive.
Bazaar is a distributed version control system- unlike Subversion, which has a master repository that everyone checks out and must synchronize with, every Bazaar repository is first-class.  This leads [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I switched from using Subversion to <a href="http://bazaar-vcs.org/">Bazaar</a> for versioning my projects at work.  So far, my impressions have been overwhelmingly positive.</p>
<p>Bazaar is a distributed version control system- unlike Subversion, which has a master repository that everyone checks out and must synchronize with, every Bazaar repository is first-class.  This leads to a good deal of flexibility in workflow.  However, what I&#8217;ve found to be Bazaar&#8217;s most compelling feature doesn&#8217;t really have much to do with its distributed nature.  In Bazaar, branching and merging are the near-trivial operations they ought to be.  </p>
<p>How much this affects your daily workflow really can&#8217;t be overstated.[*]  Our testers work in a different location from our devs and often have schedules that vary from ours significantly, so there&#8217;s a fair bit of latency that happens during the testing / bug-fix phase of the cycle.  How Bazaar makes it all better:</p>
<p>ME: Ok, bug fix time.<br />
<code>cd infernal-widget<br />
<i>hack hack hack</i><br />
bzr commit -m "fixed the bug with the demonic fompulator"</code><br />
ME: Yay, last one in the queue!  Let&#8217;s push this fix to the central repository so the testers can rake it over the coals.<br />
<code>bzr push https://where.our.stuff/is</code><br />
ME: Now we start on a new feature.  We don&#8217;t want to do this on what&#8217;s still slated to be our stable release, so we&#8217;ll create a branch for it.<br />
<code>bzr branch ../internal-widget-kitten-mill<br />
cd ../internal-widget-kitten-mill<br />
<i>hack hack hack, until...</i></code><br />
TESTERS: Um, hi.  So your fix causes green smoke to pour out of the server.  Also, it killed someone in the next building when we turned it on.<br />
ME:  Bugger.<br />
<code>bzr commit -m "work on the kitten mill" # save my work on the feature branch in a local commit<br />
cd ../infernal-widget<br />
<i>hack hack hack</i><br />
bzr commit -m "no, really, fixed the demonic fompulator"<br />
bzr push https://where.our.stuff/is</code><br />
ME: Yeesh, that should do it.  Now, I&#8217;d probably like that bug fix to be in my feature branch, too&#8230;<br />
<code>cd ../infernal-widget-kitten-mill<br />
bzr merge</code><br />
ME: That&#8217;s it? Didn&#8217;t this used to royally suck with Subversion? Ah, bliss. </p>
<p><small>&#8212;&#8211;<br />
[*] I guess it has not made puppies and rainbows appear from thin air. Perhaps it is a failure after all.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2008/08/10/bazaar-first-impressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To iPhone or not to iPhone?</title>
		<link>http://www.zen-hacking.com/2008/07/23/to-iphone-or-not-to-iphone/</link>
		<comments>http://www.zen-hacking.com/2008/07/23/to-iphone-or-not-to-iphone/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 01:25:25 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=29</guid>
		<description><![CDATA[(Or, structured posts are for godless weenies.)
I&#8217;ve been working on a web app tailored for the iPhone for the last few weeks, over at searchableradio.com. It&#8217;s got me seriously debating between waiting to see how the first Android phones turn out and getting one of them iThingys once the initial rush dies down.  
Consider [...]]]></description>
			<content:encoded><![CDATA[<p>(Or, structured posts are for godless weenies.)</p>
<p>I&#8217;ve been working on a web app tailored for the iPhone for the last few weeks, over at <a href="http://www.searchableradio.com">searchableradio.com</a>. It&#8217;s got me seriously debating between waiting to see how the first <a href="http://code.google.com/android/">Android</a> phones turn out and getting one of them iThingys once the initial rush dies down.  </p>
<p>Consider this both thinking out loud and a request for comments.  Raw data points follow:</p>
<ul>
<li>First things first, I actually do need a new phone.  My current one has this habit of randomly turning off.</li>
<li>AT&#038;T is the sole service provider for the iPhone. I&#8217;m with them now, the service is quite good, but the corporate ethics are nonexistent.  That said, does anyone know if any of the major cell network players <i>didn&#8217;t</i> drop their knickers and grab their ankles when the NSA came knocking sans warrants?  </li>
<li>From everything I&#8217;ve seen and read, the iPhone SDK is superb.  I don&#8217;t know Objective-C, but I don&#8217;t fancy that learning Yet Another Algol-Descended Language will be that big of a hurdle.  The Android SDK looks fairly nice, but Google <a href="http://www.moconews.net/entry/419-gphone-is-just-a-rumor-android-developer-discontent-is-real/">isn&#8217;t doing a great job communicating with developers</a>.</li>
<li>Android hardware: um, where is it?  There are rumors of the HTC Dream being slated for a Q4 release (and <a href="http://www.engadget.com/2008/05/28/google-demos-the-htc-dream-at-i-o-conference/">demoed at Google I/O</a>), but no release date has been announced.</li>
<li>The 2.0 iPhone firmware apparently isn&#8217;t as rock-solid as the first-gen: someone at Apple probably got a few gray hairs from the <a href="http://www.37signals.com/svn/posts/1148-iphone-20-the-glory-wore-off-in-wash">Signal vs Noise post on the matter</a>. </li>
<li>iPhone apps can only be loaded via the Apple App Store.  Ok, it&#8217;s a walled garden.  This isn&#8217;t as 100% evil as the FSF would have you believe- it&#8217;s arguably good news for small software shops trying to make money on their apps.  You&#8217;ve got a single point of entry for millions of potential customers and you let Apple handle your app getting listed on Slashdot without disrupting sales or turning your datacenter into a smoldering pile of slag.  That said, the manual approval process worries me a bit, at least without any provisions for guaranteed quick pushes for security-related updates.  </li>
<li>The iPhone won&#8217;t run apps as background processes.  This is a big honking limitation and smells like it&#8217;s aimed at keeping folks from eschewing pay-for SMS in favor of IM apps running as daemons.  Android has no such limitations.</li>
</ul>
<p>Whichever way I decide to go, I&#8217;m pretty excited about the state of mobile development.  The iPhone is setting the bar high for UI and SDK alike and there&#8217;s an awful lot of new territory to explore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2008/07/23/to-iphone-or-not-to-iphone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nonstandard HTTP Headers</title>
		<link>http://www.zen-hacking.com/2008/03/28/nonstandard-http-headers/</link>
		<comments>http://www.zen-hacking.com/2008/03/28/nonstandard-http-headers/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 03:21:06 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=26</guid>
		<description><![CDATA[File under: wait, what?

]]></description>
			<content:encoded><![CDATA[<p>File under: wait, what?<br />
<img src="/images/x-bender.gif"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2008/03/28/nonstandard-http-headers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keyboard Modifications</title>
		<link>http://www.zen-hacking.com/2008/02/04/keyboard-modifications/</link>
		<comments>http://www.zen-hacking.com/2008/02/04/keyboard-modifications/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 02:20:07 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Ergonomics]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=25</guid>
		<description><![CDATA[Or, Who Let The Author Near A Hacksaw?
I&#8217;m one of those unlucky people who&#8217;s naturally prone to RSI symptoms.  I&#8217;ve managed to get ergonomically-minded workstations set up both at home and at work, so I&#8217;m doing pretty well these days.  That said, over the last month or so, I&#8217;ve noticed that my right [...]]]></description>
			<content:encoded><![CDATA[<p><em>Or, Who Let The Author Near A Hacksaw?</em></p>
<p>I&#8217;m one of those unlucky people who&#8217;s naturally prone to RSI symptoms.  I&#8217;ve managed to get ergonomically-minded workstations set up both at home and at work, so I&#8217;m doing pretty well these days.  That said, over the last month or so, I&#8217;ve noticed that my right shoulder has been having some pain, particularly where the deltoid and trapezius meet.  After a bit of experimentation, I traced this to the fashion in which a large keyboard forces me to hold my mouse arm.</p>
<p>The Microsoft Natural Keyboard has been been seriously awesome for the health of my arms and wrists since I started using it.  However, it has one flaw: with the home-row keys centered in front of your body, the number pad and arrow/home/delete keys all take up a bunch of space on the right of the keyboard, thus forcing my shoulder to be turned out at an angle greater than ninety degrees. (Lefties may begin pointing and laughing now.)  For anyone who&#8217;s not doing data entry, there&#8217;s not a lot out there that&#8217;s totally essentially for writers, programmer, or normal users; the delete and arrow keys are about all.</p>
<p>I took a hacksaw and cut &#8216;em off.</p>
<p><img src="images/keyboard.jpg" style="float: right; padding: 10px;"/>Ok, it&#8217;s not quite <em>that</em> simple.  You can&#8217;t just take the saw and go straight to town on the keyboard- you&#8217;ll saw through the USB cable and about half the circuits for the other side.  Instead, I disassembled the keyboard first and removed everything but the shell and keys.  It&#8217;s not as hard as it sounds- most of what&#8217;s inside are flexible mylar sheets with circuits printed on &#8216;em and plastic with little key-nubbins that makes contact between the mylar sheets when keys are pressed.  The screws that hold it together are a bunch of different lengths, so I traced the outline of the keyboard onto a sheet of cardboard, punched holes in it to store the screws and used it to remember which one went where. </p>
<p>Once all of the innards were removed, I reassembled the plastic shell, clamped it between two boards and used a hacksaw to cut off everything to the right of the enter key.  Finally, I put the circuit sheets back in- there are little guide-holes punched in them that make it very hard to mess this up-  and screwed the whole thing back together.  At this point, you&#8217;ve got the mylar circuit sheets and some of the flexible plastic hanging out the right side.  The excess plastic can be safely cut off, and the mylar can simply be folded around and taped to the back side of the keyboard.  I put a sheet of paper in between the two layers to make sure no accidental contact was made.</p>
<p>So, what about all the keys I lost?</p>
<p>This was a great excuse to figure out how to make some keybindings I&#8217;d been using in Emacs for months work system-wide.  I&#8217;d taken the really common keys I constantly reach for with my right hand and remapped &#8216;em to key combos that are right under where my hands are normally.  So Alt-H became backspace, Alt-P became delete, and Alt-J,K,L,I became left/down/right/up.  Much easier on the wrists.  </p>
<p>OS X and Linux users can use native tools to get this done, but unfortunately a bit more is needed to accomplish this under Windows.  Microsoft evidently feels that remapping key-combinations to non-alphanumeric primitive key signals isn&#8217;t something mere users should be able to do via it&#8217;s keyboard layouts. After a bit of research, I found an  excellent GPLed macro program <a href="http://www.autohotkey.com">AutoHotKey</a> that fit the bill.  You can grab the script I use to rebind these keys <a href="files/keys.ahk">here</a>.</p>
<p>I&#8217;ve been using a pair of these modified keyboards at home and at work for about a week now, and my shoulder is feeling much improved already.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2008/02/04/keyboard-modifications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#8217;s The Law!</title>
		<link>http://www.zen-hacking.com/2007/07/19/its-the-law/</link>
		<comments>http://www.zen-hacking.com/2007/07/19/its-the-law/#comments</comments>
		<pubDate>Thu, 19 Jul 2007 01:29:32 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=23</guid>
		<description><![CDATA[Laws of Software Development: A great collection of pithy laws put forth by various hackers, usually with a bent towards the &#8220;ha ha only serious&#8221; kind of humor.
I can only offer Mayfield&#8217;s First Law: The degree to which an error message is inappropriate and/or funny is directly proportional to the likelyhood that someday, somehow, a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://globalnerdy.com/2007/07/18/laws-of-software-development/">Laws of Software Development</a>: A great collection of pithy laws put forth by various hackers, usually with a bent towards the &#8220;ha ha only serious&#8221; kind of humor.</p>
<p>I can only offer <b>Mayfield&#8217;s First Law</b>: The degree to which an error message is inappropriate and/or funny is directly proportional to the likelyhood that someday, somehow, a client will see it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2007/07/19/its-the-law/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gibson: AI Scripting Prototype</title>
		<link>http://www.zen-hacking.com/2007/07/10/gibson-ai-scripting-prototype/</link>
		<comments>http://www.zen-hacking.com/2007/07/10/gibson-ai-scripting-prototype/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 02:33:49 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.zen-hacking.com/?p=22</guid>
		<description><![CDATA[For the past few years, I&#8217;ve been kicking around the idea of a general framework for AI development using high-level dynamic languages.  It&#8217;s one of those grandiose ideas that&#8217;s oh-so-hard to get off the ground and I&#8217;ve had several false starts on its development.  Over my spare time in the last few weeks, [...]]]></description>
			<content:encoded><![CDATA[<p>For the past few years, I&#8217;ve been kicking around the idea of a general framework for AI development using high-level dynamic languages.  It&#8217;s one of those grandiose ideas that&#8217;s oh-so-hard to get off the ground and I&#8217;ve had several false starts on its development.  Over my spare time in the last few weeks, I&#8217;ve whipped up something that has the potential to be a good start.</p>
<p><img src="images/gibson.png" style="float:left"/>The prototype isn&#8217;t terrible visually impressive, but it gets the point across.  Each moving colored circle represents an autonomous agent.  Each of the agents shown here is being controlled by code written in a different language- Ruby, Javascript and Scheme, respectively- all running simultaneously, in the same world.</p>
<p>The agents, the world they exist in, and how the two interact is all written in Java.  The brains of the agents are then written in whatever JSR-223 scripting language implementation the author cares to use.  The Java-level APIs that control the bot and its perception of the world are exposed to the scripting layer, so hackers who want to play around and create emergent behaviors among their bots can focus on expressing the algorithms to do so, in their language of choice, and don&#8217;t have to worry about things like the physics of the world or how a bot draws itself to the screen.</p>
<p>You can download the source and prebuilt jar <a href="files/Gibson.tar.gz">here</a>.  Once unpackaged, you can run it with:</p>
<blockquote><p><tt>java -jar dist/gibson.jar [list of agent-controlling scripts]</tt></p></blockquote>
<p>The script engine manager automatically detects which scripting engine to use based on the extension of the file.  It depends only on the Java 1.6 standard library and whatever scripting languages you want to use with it.  I&#8217;ve packaged JRuby, Rhino, and SISC (the Java implementations of the previously mentioned scripting languages) and their dependencies so you can run the included test scripts.</p>
<p>This is, of course, just a prototype I hacked up over a few days.  Most this code will be chucked out the window as I refactor, rearchitect and generally flesh out how I want this thing to work.  Once I get some momentum, I plan to make the source repository and all the planning documents publicly exposed somewhere. The code is licensed under the <a href="http://en.wikipedia.org/wiki/MIT_License">MIT License</a>, so do whatever you want with it.</p>
<p>I&#8217;m calling this thing Gibson, after the esteemed sci-fi author and tasty cocktail. Pick your favorite interpretation. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.zen-hacking.com/2007/07/10/gibson-ai-scripting-prototype/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
