<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.3" -->
<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/"
	>

<channel>
	<title>www.otton.org</title>
	<link>http://www.otton.org</link>
	<description>Look! Bunnies!</description>
	<pubDate>Tue, 08 Apr 2008 09:36:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.3</generator>
	<language>en</language>
			<item>
		<title>Google App Engine</title>
		<link>http://www.otton.org/2008/04/08/google-app-engine/</link>
		<comments>http://www.otton.org/2008/04/08/google-app-engine/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 09:36:37 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[web]]></category>

		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.otton.org/2008/04/08/google-app-engine/</guid>
		<description><![CDATA[I just happened to be up at 3AM, and I snagged a Google App Engine invitation. Neato. Now I need to figure out what to do with it&#8230;
]]></description>
			<content:encoded><![CDATA[<p>I just happened to be up at 3AM, and I snagged a <a href="http://code.google.com/appengine/">Google App Engine</a> invitation. Neato. Now I need to figure out what to do with it&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2008/04/08/google-app-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zend Framework component overview</title>
		<link>http://www.otton.org/2008/02/07/zend-framework-documentation-guide-quick-reference/</link>
		<comments>http://www.otton.org/2008/02/07/zend-framework-documentation-guide-quick-reference/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 18:15:49 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[zend]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[web]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.otton.org/2008/02/07/zend-framework-documentation-guide-quick-reference/</guid>
		<description><![CDATA[I haven&#8217;t had much luck finding a quick reference to the Zend Framework, so I put this short guide together for my own use. Because I&#8217;ve just digested the Zend Framework Documentation there are some essential pieces missing (eg Action Controllers), so I&#8217;ll be updating this document as I go.
]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t had much luck finding a quick reference to the Zend Framework, so I put this short guide together for my own use. Because I&#8217;ve just digested the <a href="http://framework.zend.com/manual/">Zend Framework Documentation</a> there are some essential pieces missing (eg Action Controllers), so I&#8217;ll be updating this document as I go.</p>
<p> <a href="http://www.otton.org/2008/02/07/zend-framework-documentation-guide-quick-reference/#more-71" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2008/02/07/zend-framework-documentation-guide-quick-reference/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sony digital audio downloads</title>
		<link>http://www.otton.org/2008/01/07/sony-digital-audio-downloads/</link>
		<comments>http://www.otton.org/2008/01/07/sony-digital-audio-downloads/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 12:54:25 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<guid isPermaLink="false">http://www.otton.org/2008/01/07/sony-digital-audio-downloads/</guid>
		<description><![CDATA[Like watching a man trying to saw his own leg off (via)
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.usatoday.com/money/media/2008-01-07-sony-music_N.htm">Like watching a man trying to saw his own leg off</a> (<a href="http://www.techcrunch.com/2008/01/07/sony-bmg-confirms-drm-free-music-but-will-force-customers-to-visit-a-record-store-to-buy-it/">via</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2008/01/07/sony-digital-audio-downloads/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Some PHP function signatures</title>
		<link>http://www.otton.org/2008/01/03/some-php-function-signatures/</link>
		<comments>http://www.otton.org/2008/01/03/some-php-function-signatures/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 14:51:46 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.otton.org/2008/01/03/some-php-function-signatures/</guid>
		<description><![CDATA[The function signature for assert handlers:
function assert_handler( $file, $line, $message )
and for error handlers:
function error_handler( $errno, $message, $file, $line, $errcontext )
How to set an assert handler:
assert_options( ASSERT_CALLBACK, 'assert_handler' )
And an error handler:
set_error_handler( 'error_handler' )
Nobody could get it this wrong by chance. I think it&#8217;s wilful.
]]></description>
			<content:encoded><![CDATA[<p>The function signature for assert handlers:</p>
<p><code>function assert_handler( $file, $line, $message )</code></p>
<p>and for error handlers:</p>
<p><code>function error_handler( $errno, $message, $file, $line, $errcontext )</code></p>
<p>How to set an assert handler:</p>
<p><code>assert_options( ASSERT_CALLBACK, 'assert_handler' )</code></p>
<p>And an error handler:</p>
<p><code>set_error_handler( 'error_handler' )</code></p>
<p>Nobody could get it this wrong by chance. I think it&#8217;s wilful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2008/01/03/some-php-function-signatures/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kewl libs, d00d!</title>
		<link>http://www.otton.org/2008/01/02/kewl-libs-d00d/</link>
		<comments>http://www.otton.org/2008/01/02/kewl-libs-d00d/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 11:20:20 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.otton.org/2008/01/02/kewl-libs-d00d/</guid>
		<description><![CDATA[http://www.ajaxian.com/archives/mad-cool-date-library
/still laughing
Or despairing. Or something. Honestly, who lets these people walk around loose?
Update: found another one. &#8220;Eventually the goal is to save all the functions in one php.js file and make it publicly available for your coding pleasure&#8221;. Ye gods. It must be one of those days.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ajaxian.com/archives/mad-cool-date-library">http://www.ajaxian.com/archives/mad-cool-date-library</a></p>
<p>/still laughing</p>
<p>Or despairing. Or something. Honestly, who lets these people walk around <em>loose</em>?</p>
<p>Update: found <a href="http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_basename/" title="basename() in Javascript">another one</a>. <em>&#8220;Eventually the goal is to save all the functions in one php.js file and make it publicly available for your coding pleasure&#8221;</em>. Ye gods. It must be one of those days.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2008/01/02/kewl-libs-d00d/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;What were they thinking?&#8221;: &#8220;They were thinking like C programmers&#8221;</title>
		<link>http://www.otton.org/2008/01/02/what-were-they-thinking-they-were-thinking-like-c-programmers/</link>
		<comments>http://www.otton.org/2008/01/02/what-were-they-thinking-they-were-thinking-like-c-programmers/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 03:41:21 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.otton.org/2008/01/02/what-were-they-thinking-they-were-thinking-like-c-programmers/</guid>
		<description><![CDATA[API Archaeology. Heh.
If he thinks he has troubles, he should try PHP&#8217;s string and array libraries. You can really see the accretion of &#8220;thought&#8221; there.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://fishbowl.pastiche.org/2007/12/24/api_archaeology" title="Short comment on Java APIs">API Archaeology</a>. Heh.</p>
<p>If he thinks he has troubles, he should try PHP&#8217;s string and array libraries. You can really see the accretion of &#8220;thought&#8221; there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2008/01/02/what-were-they-thinking-they-were-thinking-like-c-programmers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Beyond ACID</title>
		<link>http://www.otton.org/2007/12/22/beyond-acid/</link>
		<comments>http://www.otton.org/2007/12/22/beyond-acid/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 20:50:27 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[databases]]></category>

		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.otton.org/2007/12/22/beyond-acid/</guid>
		<description><![CDATA[This is good. There&#8217;s a lot to think about here for anyone concerned with database scaling.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.allthingsdistributed.com/2007/12/eventually_consistent.html" title="Eventually Consistent by Werner Vogels">This is good</a>. There&#8217;s a lot to think about here for anyone concerned with database scaling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2007/12/22/beyond-acid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Book List</title>
		<link>http://www.otton.org/2007/12/18/book-list/</link>
		<comments>http://www.otton.org/2007/12/18/book-list/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 13:01:08 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<guid isPermaLink="false">http://www.otton.org/2007/12/18/book-list/</guid>
		<description><![CDATA[People keep asking me what I want for Christmas, so I spent some time trawling Amazon. As an aide-mémoire, here is the list of interesting programming books I came up with:









JQuery Reference Guide



Designing Interfaces



Designing Web Navigation: Optimizing the User Experience



Algorithmic Game Theory



The Pragmatic Programmer



Embedded C Programming and the Atmel AVR



The Pi-Calculus: A Theory of Mobile [...]]]></description>
			<content:encoded><![CDATA[<p>People keep asking me what I want for Christmas, so I spent some time trawling Amazon. As an aide-mémoire, here is the list of interesting programming books I came up with:</p>
<p><a href="http://www.amazon.co.uk/dp/0201485672"><img src="http://ecx.images-amazon.com/images/I/519XT0DER6L._AA240_.jpg" title="Refactoring: Improving the Design of Existing Code by Martin Fowler" border="0" /></a></p>
<p><a href="http://www.amazon.co.uk/dp/0596529325"><img src="http://ecx.images-amazon.com/images/I/51AnWLR89xL._AA240_.jpg" title="Programming Collective Intelligence by Toby Segaran" border="0" /></a></p>
<p><a href="http://www.amazon.co.uk/dp/0262182629"><img src="http://ecx.images-amazon.com/images/I/51UPLtYbwkL._AA240_.jpg" title="Processing: A Programming Handbook for Visual Designers and Artists by Casey Reas and Ben Fry" border="0" /></a></p>
<p><a href="http://www.amazon.co.uk/dp/0201485419"><img src="http://ecx.images-amazon.com/images/I/41on7GLAU1L._AA240_.jpg" title="The Art of Computer Programming: Vol 1-3" border="0" /></a></p>
<p><a href="http://www.amazon.co.uk/dp/0596529260"><img src="http://ecx.images-amazon.com/images/I/518TAgBUwKL._AA240_.jpg" title="RESTful Web Services" border="0" /></a></p>
<p><a href="http://www.amazon.co.uk/dp/0321200683"><img src="http://ecx.images-amazon.com/images/I/51QYJHWD4VL._AA240_.jpg" title="Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions" border="0" /></a></p>
<table>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/51gfWQ03LFL._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/1847193811">JQuery Reference Guide</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/51V3XD1MEBL._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/0596008031">Designing Interfaces</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/51-OkeU4qDL._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/0596528108">Designing Web Navigation: Optimizing the User Experience</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/511KUJ4VOYL._BO2,204,203,200_PIsitb-dp-500,-64_OU02_AA240_SH20_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/0521872820">Algorithmic Game Theory</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/41kRagsFGDL._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/020161622X">The Pragmatic Programmer</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/51NZEADXJ0L._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/1418039594">Embedded C Programming and the Atmel AVR</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/41V8M4MK78L._BO2,204,203,200_PIsitb-dp-500_OU02_AA240_SH20_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/exec/obidos/ASIN/0521543274">The Pi-Calculus: A Theory of Mobile Processes</a></td>
</tr>
</table>
<p>Still adding stuff&#8230; fiction this time. If I&#8217;m going to keep updating this, I should probably move it to a separate page.</p>
<table>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/514H0Nij3rL._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/gp/product/0575079843">Galactic North</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/41p0%2BzAwXML._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/1841494178">Matter</a></td>
</tr>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/61ZRXCYZ7wL._AA240_.jpg" /></td>
<td><a href="http://www.amazon.co.uk/dp/1841495700">The Jennifer Morgue</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2007/12/18/book-list/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Life On An Infinite Grid</title>
		<link>http://www.otton.org/2007/12/17/john-conway-life-karl-sigmund-games-infinity/</link>
		<comments>http://www.otton.org/2007/12/17/john-conway-life-karl-sigmund-games-infinity/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 11:02:00 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[biology]]></category>

		<category><![CDATA[life]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://www.otton.org/2007/12/17/john-conway-life-karl-sigmund-games-infinity/</guid>
		<description><![CDATA[I&#8217;ve been reshelving books recently, which caused me to pick out and re-read Karl Sigmund&#8217;s Games of Life. It&#8217;s a great book - unashamedly playful, accessible, pun-dense prose (&#8221;Do lynxes let their hare down?&#8221;, &#8220;Y all those boys?&#8221;), which still provides enough detail on a whole raft of biological simulations for you to code up [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/tantek/276442952/" title="CC licensed image"><img src="http://www.otton.org/images/glider.jpg" title="M&amp;M Glider" alt="M&amp;M Glider" align="left" border="0" height="240" width="320" /></a>I&#8217;ve been reshelving books recently, which caused me to pick out and re-read Karl Sigmund&#8217;s <a href="http://www.librarything.com/work/book/606693" title="Games of Life by Karl Sigmund">Games of Life</a>. It&#8217;s a great book - unashamedly playful, accessible, pun-dense prose (&#8221;Do lynxes let their hare down?&#8221;, &#8220;Y all those boys?&#8221;), which still provides enough detail on a whole raft of biological simulations for you to code up your own versions.</p>
<p>Anyway, a passage at the end of the chapter on <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life">John Conway&#8217;s Life</a> struck a false note for me this time around. The chapter presents the argument that <em>Life</em> is capable of supporting self-replicating universal Turing Machines, and therefore evolution.</p>
<p>[Aside: It&#8217;s interesting to note that the &#8220;given probability&#8221; mentioned below doesn&#8217;t matter - it could be 0.000001 or 0.999999; all possible patterns will still turn up. Infinity is weird.]</p>
<blockquote><p>Now let us stretch our imagination somewhat more, and ask about the origin of life in the <em>Life</em>-universe. Conway&#8217;s answer is that it is inescapable. Inescapable, at least, under certain rather mild assumptions. If the game board is totally empty, of course, then nothing will ever happen; if, conversely, every cell is occupied then all will be polished off in the next instant; and similarly, there will be countless other initial positions yielding no self-replicating patterns. But these are all special cases. We should not try to tamper too much with <em>Life</em>. The simplest way to distribute matter <em>randomly</em> in the plane would be to have every cell, independently of its neighbours, occupied or not with some given probability. In this case, every conceivable finite pattern will certainly occur <em>somewhere</em> in the infinite plane. (It will even occur infinitely often.) Self-reproducing patterns will therefore also be bound to occur; very sparsely, to be sure, but present nevertheless. In this sense, the world of <em>Life</em> contains life almost as soon as it contains matter.</p>
<p>Many very different configurations will have the property of self-reproduction. They will be submitted to a natural selection of sorts. Some will multiply faster than others. Some will be quickly destroyed by Gliders happening to pass by, or by other patterns crawling across the plane. Some will be more resilient, or simply more lucky. Some will end up suffocated by their own offspring. Some will move too slowly, and some too fast. The proportion of successful patterns is bound to increase. The lifeless environment will change too.</p>
<p>Some automata will evolve rudimentary sense organs to obtain information about their surroundings. Some will develop the faculty to move into the direction which appears the most promising, or to flee from dangers. Some will withdraw into shell-like structures, and some will evolve offensive weapons. There will be species exploiting others, and species set upon cooperation. In due time, multicellular beings are apt to emerge - huge colonies of automata, obeying a common program and begetting other colonies. In order to discover better blueprints, such automata may start to recombine their instructions, using some two-dimensional forms of sexuality. There will be complex types of social interaction, and sooner or later some kind of intelligence too. These patterns will learn to feel and to think.</p></blockquote>
<p>Only a mathematician could consider an infinite plane a &#8220;mild assumption&#8221;. This requirement, along with the randomised starting grid, means that simple self-replicators aren&#8217;t the only patterns present at <em>t=0</em> - every possible pattern is already represented. Every possible single-celled organism, multi-cellular organism and intelligent creature that <em>Life</em> can support, and every possible thought and memory that each of those creatures is capable of having - they&#8217;re all right there on the plane; infinite copies in infinite combinations. Every future state that a region can evolve into is already out there somewhere else on the plane, so running the simulation at all seems a little pointless.</p>
<p>Additionally, since the system is deterministic, I see no reason why some regions wouldn&#8217;t be set up, purely by chance, to &#8220;run backwards&#8221; (complex creatures de-evolving into single-celled organisms, then into random blocks), make major jumps from one point in the phase space of possible lifeforms to another (equivalent perhaps to a chicken giving birth to a dashchund, which in turn gives birth to a clown fish), or behave in any other way we can imagine. In a system that can and will produce all these outcomes, considering evolution to be noteworthy smacks of observer bias. Yes, it&#8217;s probably happening, but so are the dashchunds.</p>
<p><em>Postscript: <a href="http://jubal.westnet.com/hyperdiscordia/library_of_babel.html" title="The Library of Babel by Jorge Luis Borges">Borges&#8217; meditations on infinity</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2007/12/17/john-conway-life-karl-sigmund-games-infinity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Note to self: don&#8217;t do this</title>
		<link>http://www.otton.org/2007/11/26/note-to-self-dont-do-this/</link>
		<comments>http://www.otton.org/2007/11/26/note-to-self-dont-do-this/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 14:06:40 +0000</pubDate>
		<dc:creator>david</dc:creator>
		
		<category><![CDATA[mysql]]></category>

		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.otton.org/2007/11/26/note-to-self-dont-do-this/</guid>
		<description><![CDATA[ERROR 1116 (HY000): Too many tables; MySQL can only use 61 tables in a join
If you ever run into this MySQL error, something has gone badly wrong with your database schema. In this case, the database had no foreign key constraints, and I was trying to build a DELETE query that cascaded across ~230 tables. [...]]]></description>
			<content:encoded><![CDATA[<blockquote><tt>ERROR 1116 (HY000): Too many tables; MySQL can only use 61 tables in a join</tt></p></blockquote>
<p>If you ever run into this MySQL error, something has gone badly wrong with your database schema. In this case, the database had no foreign key constraints, and I was trying to build a <tt>DELETE</tt> query that cascaded across ~230 tables. Not pretty at all.</p>
<p>It doesn&#8217;t help that there&#8217;s no consistency in key names - <tt>id, clientid, client, fkClient</tt> - all refer to the same foreign key in different tables.</p>
<p>Update: After a few false starts, I&#8217;ve given up on doing the deletes by hand; instead I&#8217;m going through the database creating the foreign key constraints that should have been there in the first place. It&#8217;s the same amount of work, I end up with a slightly saner database, and doing the delete becomes a simple &#8220;delete clientid&#8221;, which cascades through the rest of the tables removing related data.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otton.org/2007/11/26/note-to-self-dont-do-this/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
