<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>A River of Words - Programming</title>
    <link>http://blog.joeysmith.com/</link>
    <description>Drowning In Stupid</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <pubDate>Mon, 01 Jun 2009 20:43:41 GMT</pubDate>

    <image>
        <url>http://blog.joeysmith.com/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: A River of Words - Programming - Drowning In Stupid</title>
        <link>http://blog.joeysmith.com/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>The Halting Problem in the Style of Ted Geisel</title>
    <link>http://blog.joeysmith.com/92.html</link>
            <category>CPH12Y</category>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/92.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=92</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=92</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.reddit.com/r/programming&#039;);&quot;  href=&quot;http://www.reddit.com/r/programming&quot;&gt;ProggIt&lt;/a&gt; had &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.lel.ed.ac.uk/~gpullum/loopsnoop.html&#039;);&quot;  href=&quot;http://www.lel.ed.ac.uk/~gpullum/loopsnoop.html&quot;&gt;this&lt;/a&gt; amusing gem today, but it&amp;#8217;s pretty obscure, so I put it here instead of the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.thehomestarmy.com/s9y/&#039;);&quot;  href=&quot;http://www.thehomestarmy.com/s9y/&quot;&gt;Homestarmy&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
So where can this argument possibly go?&lt;br/&gt;I don&amp;#8217;t have to tell you; I&amp;#8217;m sure you must know.&lt;br/&gt;By reductio, there cannot possibly be&lt;br/&gt;a procedure that acts like the mythical P.
&lt;/blockquote&gt;

	&lt;p&gt;Great stuff.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 03 Mar 2009 04:40:57 -0700</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/92.html</guid>
    
</item>
<item>
    <title>A &quot;Longest-Prefix&quot; Solution for SQL</title>
    <link>http://blog.joeysmith.com/90.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/90.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=90</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=90</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;Something came up in &lt;span class=&quot;caps&quot;&gt;IRC&lt;/span&gt; today, I thought I found a pretty nice solution to it, thought I&amp;#8217;d share it here. A guy has a table in his database that contains &amp;#8216;prefixes&amp;#8217;. It looks like this:
	&lt;table&gt;
		&lt;tr&gt;
			&lt;th&gt;id &lt;/th&gt;
			&lt;th&gt;number &lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;1 &lt;/td&gt;
			&lt;td&gt;           1&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;2  &lt;/td&gt;
			&lt;td&gt;          1800&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;3   &lt;/td&gt;
			&lt;td&gt;         18&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;4    &lt;/td&gt;
			&lt;td&gt;        180&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;5     &lt;/td&gt;
			&lt;td&gt;       1801&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;&lt;/p&gt;

	&lt;p&gt;Given the phone number &amp;#8220;18005551234&amp;#8221;, he&amp;#8217;d like to find the longest valid prefix. He had suggested to me that he was considering a stored procedure which loops, character-by-character, through the input looking for the longest match. Instead, I recommended he use &amp;#8216;replace&amp;#8217; to trim the &amp;#8216;prefixes&amp;#8217; off of the input, and let an &amp;#8216;order by&amp;#8217; tell him which of those actually resulted in the shortest remaining string (and thus, was the longest match).&lt;/p&gt;

	&lt;p&gt;The query I ended up with goes something like this:&lt;br /&gt;
&lt;span style=&quot;text-decoration: line-through&quot;&gt;&lt;code&gt;select id from prefixes order by length(replace(&amp;#39;18005558355&amp;#39;, number, &amp;#39;&amp;#39;)) asc limit 1;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;Given a better understanding of mysql&amp;#8217;s &amp;#8216;replace()&amp;#8217;, we ended up using this instead &amp;#8211; note the identities are renamed to reflect his actual sytem:&lt;/i&gt;&lt;br /&gt;
&lt;code&gt;SELECT id, prefix from routes where locate(prefix, &amp;#39;18005558355&amp;#39;) = 1 order by length(prefix) desc limit 1;&lt;/code&gt;&lt;/p&gt;

	&lt;p&gt;Is there a better way? Below the fold is a quick (postgresql) &amp;#8220;dump&amp;#8221; of the database in question so you can come up with your own proposals.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://blog.joeysmith.com/90.html#extended&quot;&gt;Continue reading &quot;A &amp;quot;Longest-Prefix&amp;quot; Solution for SQL&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 26 Feb 2009 14:32:00 -0700</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/90.html</guid>
    
</item>
<item>
    <title>Bob Ippolito on JSON Hijacking</title>
    <link>http://blog.joeysmith.com/46.html</link>
            <category>JavaScript</category>
    
    <comments>http://blog.joeysmith.com/46.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=46</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=46</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;The always brilliant author of the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/bob.pythonmac.org/&#039;);&quot;  href=&quot;http://bob.pythonmac.org/&quot;&gt;`from &lt;i&gt;future&lt;/i&gt; import *` blog&lt;/a&gt; brings us an &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/bob.pythonmac.org/archives/2007/04/05/fortify-javascript-hijacking-fud/&#039;);&quot;  href=&quot;http://bob.pythonmac.org/archives/2007/04/05/fortify-javascript-hijacking-fud/&quot;&gt;article&lt;/a&gt; discussing a potential &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.fortifysoftware.com/servlet/downloads/public/JavaScript_Hijacking.pdf&#039;);&quot;  href=&quot;http://www.fortifysoftware.com/servlet/downloads/public/JavaScript_Hijacking.pdf&quot;&gt;JavaScript Hijacking&lt;/a&gt; [pdf] scenario &amp;#8211; the simple answer is &amp;#8220;Don&amp;#8217;t send &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; data as a list, send it as an object instead&amp;#8221;. That is, if you wanted to send:&lt;/p&gt;

&lt;pre style=&quot;font-size:9pt;&quot;&gt;
&lt;span style=&quot;color:#000000&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;]&lt;/span&gt;
&lt;/pre&gt;

	&lt;p&gt;you can avoid the security hole by sending something like this instead:&lt;/p&gt;

&lt;pre style=&quot;font-size:9pt;&quot;&gt;
&lt;span style=&quot;color:#000000&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;]}&lt;/span&gt;
&lt;/pre&gt;

	&lt;p&gt;and then stripping the object on the other end.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 04 Nov 2008 13:14:00 -0700</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/46.html</guid>
    
</item>
<item>
    <title>Stupid JavaScript Tricks: Make Page Editable</title>
    <link>http://blog.joeysmith.com/37.html</link>
            <category>JavaScript</category>
    
    <comments>http://blog.joeysmith.com/37.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=37</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=37</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;Drag this &lt;a href=&quot;javascript:document.body.contentEditable=&#039;true&#039;;%20document.designMode=&#039;on&#039;;%20void%200&quot;&gt;Make Page Editable&lt;/a&gt; link to your &amp;#8220;Bookmarks Toolbar&amp;#8221; in recent versions of Firefox, and click on it to enable the built-in &amp;#8220;Page Composer&amp;#8221;, allowing you to edit any page you want! &lt;img src=&quot;http://blog.joeysmith.com/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 16 Oct 2008 15:17:45 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/37.html</guid>
    
</item>
<item>
    <title>Project Euler, Problem #2 in Python</title>
    <link>http://blog.joeysmith.com/35.html</link>
            <category>Python</category>
    
    <comments>http://blog.joeysmith.com/35.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=35</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=35</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;As a &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/codekata.pragprog.com/&#039;);&quot;  href=&quot;http://codekata.pragprog.com/&quot;&gt;Code Kata&lt;/a&gt;, I&amp;#8217;ve been working my way through the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/projecteuler.net/index.php?section=problems&#039;);&quot;  href=&quot;http://projecteuler.net/index.php?section=problems&quot;&gt;Project Euler&lt;/a&gt; stuff.&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/projecteuler.net/index.php?section=problems&amp;amp;#38;id=2&#039;);&quot;  href=&quot;http://projecteuler.net/index.php?section=problems&amp;#38;id=2&quot;&gt;Here&amp;#8217;s&lt;/a&gt; the problem.&lt;/p&gt;

	&lt;p&gt;Here&amp;#8217;s my solution:&lt;/p&gt;

	&lt;p&gt;&lt;pre style=&quot;font-size:9pt;&quot;&gt;&lt;/p&gt;

	&lt;p&gt;&lt;span style=&quot;color:#ac2020; font-style:italic&quot;&gt;# A generator to derive the Fibonacci sequence&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;fib&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;():&lt;/span&gt;
    x&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; y &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;1&lt;/span&gt;
    &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;yield&lt;/span&gt; x
    &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;yield&lt;/span&gt; y
    &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;:&lt;/span&gt;
        x&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; y &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; y&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; x&lt;span style=&quot;color:#000000&quot;&gt;+&lt;/span&gt;y
        &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;yield&lt;/span&gt; y&lt;/p&gt;

	&lt;p&gt;&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;if&lt;/span&gt; &lt;i&gt;name&lt;/i&gt; &lt;span style=&quot;color:#000000&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;#8216;&lt;i&gt;main&lt;/i&gt;&amp;#8216;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;:&lt;/span&gt;
    idx &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;0&lt;/span&gt;
    &lt;span style=&quot;color:#208920&quot;&gt;sum&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;0&lt;/span&gt;
    gen &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;fib&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;()&lt;/span&gt;&lt;/p&gt;

    &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;while&lt;/span&gt; idx &lt;span style=&quot;color:#000000&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;4000000&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;:&lt;/span&gt;
        idx &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; gen&lt;span style=&quot;color:#000000&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;()&lt;/span&gt;
        &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;(&lt;/span&gt;g &lt;span style=&quot;color:#000000&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;):&lt;/span&gt; h &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; h&lt;span style=&quot;color:#000000&quot;&gt;+&lt;/span&gt;g
    &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;print&lt;/span&gt; h
&lt;/pre&gt;

	&lt;p&gt;Note: You want to be careful how you use infinite generators like the &amp;#8216;fib()&amp;#8217; I created above.&lt;/p&gt;

	&lt;p&gt;One guy on the forums noted:&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;Now, replacing an odd number with O and an even with E, we get: O, O, E, O, O, E, O, O, E, O, O, E, O, O, E&amp;#8230;And so each third number is even. We don&amp;#8217;t need to calculate the odd numbers. Starting from an two odd terms x, y, the series is: x, y, x + y, x + 2y, 2x + 3y, 3x + 5y&lt;/p&gt;
	&lt;/blockquote&gt; 
    </content:encoded>

    <pubDate>Tue, 14 Oct 2008 02:10:00 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/35.html</guid>
    
</item>
<item>
    <title>git-svn and svn:externals</title>
    <link>http://blog.joeysmith.com/32.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/32.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=32</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=32</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;Continuing on with yesterday&amp;#8217;s theme of revision control, I decided to post a little bit about how I&amp;#8217;m using &lt;span class=&quot;caps&quot;&gt;VCS&lt;/span&gt; these days. I&amp;#8217;ve moved to using &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.kernel.org/pub/software/scm/git/docs/&#039;);&quot;  href=&quot;http://www.kernel.org/pub/software/scm/git/docs/&quot;&gt;git&lt;/a&gt; as a front-end for &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/svnbook.red-bean.com/&#039;);&quot;  href=&quot;http://svnbook.red-bean.com/&quot;&gt;SVN&lt;/a&gt;, using a workflow that follows along the paths laid out &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/andy.delcambre.com/2008/3/4/git-svn-workflow&#039;);&quot;  href=&quot;http://andy.delcambre.com/2008/3/4/git-svn-workflow&quot;&gt;here&lt;/a&gt; and &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/notes.jimlindley.com/2008/3/25/git-svn-that-works-for-me&#039;);&quot;  href=&quot;http://notes.jimlindley.com/2008/3/25/git-svn-that-works-for-me&quot;&gt;here&lt;/a&gt;. Eventually, I&amp;#8217;ll probably look into using &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/jmibanez.livejournal.com/35264.html&#039;);&quot;  href=&quot;http://jmibanez.livejournal.com/35264.html&quot;&gt;partial clones as outlined here&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;Since I recently moved to using &amp;#8220;svn:externals&amp;#8221;: in my main repo, I spent some time this morning looking for information on how to get git-svn to pull these external trees, and here are a few resources I found:&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/blogs.gnome.org/johannes/2008/02/20/svnexternals-for-noobs/&#039;);&quot;  href=&quot;http://blogs.gnome.org/johannes/2008/02/20/svnexternals-for-noobs/&quot;&gt;Life and Hacking: svn:externals for noobs!&lt;/a&gt;&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/panthersoftware.com/articles/view/3/svn-s-svn-externals-to-git-s-submodule-for-rails-plugins&#039;);&quot;  href=&quot;http://panthersoftware.com/articles/view/3/svn-s-svn-externals-to-git-s-submodule-for-rails-plugins&quot;&gt;SVN&amp;#8217;s svn:externals to GIT&amp;#8217;s Submodule for Rails Plugins&lt;/a&gt;&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/weierophinney.net/matthew/archives/132-svnexternals.html&#039;);&quot;  href=&quot;http://weierophinney.net/matthew/archives/132-svnexternals.html&quot;&gt;Phly, boy, phly: svn:externals&lt;/a&gt;&lt;/p&gt;

	&lt;p&gt;None of these have actually solved the problem for me yet (I think I may be fighting against the fact that I&amp;#8217;m using debian&amp;#8217;s packaged git instead of the newest upstream), so I have begun looking into alternatives. &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/codeintensity.blogspot.com/2008/03/svn-externals-are-evil-use-piston-or.html&#039;);&quot;  href=&quot;http://codeintensity.blogspot.com/2008/03/svn-externals-are-evil-use-piston-or.html&quot;&gt;This&lt;/a&gt; article suggested I look into &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/evil.che.lu/projects/braid&#039;);&quot;  href=&quot;http://evil.che.lu/projects/braid&quot;&gt;braid&lt;/a&gt; and/or &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/piston.rubyforge.org/usage.html&#039;);&quot;  href=&quot;http://piston.rubyforge.org/usage.html&quot;&gt;piston&lt;/a&gt;, as well as pointing to &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.orcaware.com/svn/wiki/Svnmerge.py&#039;);&quot;  href=&quot;http://www.orcaware.com/svn/wiki/Svnmerge.py&quot;&gt;svnmerge.py&lt;/a&gt;, which can assist with automatic branch management. I&amp;#8217;ll be trying a few of these out over the coming weeks and will post my findings here.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 10 Oct 2008 14:16:49 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/32.html</guid>
    
</item>
<item>
    <title>Emacs VC mode cheat sheet</title>
    <link>http://blog.joeysmith.com/31.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/31.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=31</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=31</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;The following is an excerpt from the 3rd Edition of the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.ora.com&#039;);&quot;  href=&quot;http://www.ora.com&quot;&gt;O&amp;#8217;Reilly and Associates&lt;/a&gt; classic &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/safari.oreilly.com/0596006489&#039;);&quot;  href=&quot;http://safari.oreilly.com/0596006489&quot;&gt;Learning &lt;span class=&quot;caps&quot;&gt;GNU&lt;/span&gt; Emacs&lt;/a&gt;, regarding Emacs&amp;#8217; &amp;#8220;vc-mode&amp;#8221;, which I&amp;#8217;ve been using more often of late:&lt;/p&gt;

	&lt;h2&gt;12.5. VC Command Summary&lt;/h2&gt;

	&lt;blockquote&gt;
		&lt;p&gt;To give you the flavor of the other things VC can do for you, Table 12-1 provides a summary of VC commands. Each one will be explained in detail, but you can probably guess some of their actions from the command names.&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;h3&gt;Table 12-1. VC commands
	&lt;table style=&quot;border:0px solid black; background-color: black;&quot;&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;th&gt;Keystrokes&lt;/th&gt;
			&lt;th&gt;Command name&lt;/th&gt;
			&lt;th&gt;Action&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v v &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 15em; text-align: left; ;&quot;&gt;vc-next-action&lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Go to the next logical version control state.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v = &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-diff &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Generate a version difference report.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v u &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-revert-buffer &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Throw away changes since the last checked-in revision.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v ~ &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-version-other-window &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Retrieve a given revision in another window.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v l &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-print-log &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Display a file&amp;#8217;s change comments and history.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v i &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-register &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Register a file for version control.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v h &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-insert-headers &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Insert version control headers in a file.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v r &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-retrieve-snapshot &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Check out a named project snapshot.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v s &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-create-snapshot &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Create a named project snapshot.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v c &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-cancel-version &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Throw away a saved revision.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style=&quot;background:white;&quot;&gt;
			&lt;td style=&quot;width: 7em; padding: 0em 0.2em;&quot;&gt;C-x v a &lt;/td&gt;
			&lt;td style=&quot;width: 15em; padding: 0em 0.2em;&quot;&gt;vc-update-change-log &lt;/td&gt;
			&lt;td style=&quot;vertical-align:middle;width: 30em; text-align: left; padding: 0em 0.2em;&quot;&gt;Update a GNU-style ChangeLog file. &lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;&lt;/h3&gt; 
    </content:encoded>

    <pubDate>Thu, 09 Oct 2008 13:00:37 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/31.html</guid>
    
</item>
<item>
    <title>More on Mono 2.0</title>
    <link>http://blog.joeysmith.com/25.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/25.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=25</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=25</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;From &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.internetnews.com/dev-news/article.php/3776201/Is+NET+on+Linux+Finally+Ready.htm&#039;);&quot;  href=&quot;http://www.internetnews.com/dev-news/article.php/3776201/Is+NET+on+Linux+Finally+Ready.htm&quot;&gt;this&lt;/a&gt; article regarding the Mono 2.0 release, I bring you the following quotes from Miguel de Icaza:&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;Thanks to statistical data from MoMA, we&amp;#8217;re able to prioritize what people are actually using,&amp;#8221; De Icaza said. &amp;#8220;What is important about this is there are some API&amp;#8217;s that we&amp;#8217;ve definitely postponed. For example, [Windows Presentation Foundation] is not something that we&amp;#8217;re working on right now.&amp;#8221;&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;WPF&lt;/span&gt; is part of Microsoft .&lt;span class=&quot;caps&quot;&gt;NET&lt;/span&gt; 3.0 specifications. At one time, it was best known by its code name, &amp;#8220;Avalon.&amp;#8221; &lt;span class=&quot;caps&quot;&gt;WPF&lt;/span&gt; is included in Windows Vista and Windows Server 2008 and provides a graphical subsystem for developers. De Icaza claimed that &lt;span class=&quot;caps&quot;&gt;WPF&lt;/span&gt; is not yet widely used by developers at this point.&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;The IT developer cycles are not in lockstep with vendor release dates,&amp;#8221; he added. &amp;#8220;There are definitely the early adopters and they&amp;#8217;ll be using the latest APIs and those users won&amp;#8217;t be served by Mono. But anyone else on the tech adoption curve should be fine with Mono.&amp;#8221; &lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;Am I the only one that thinks this guy can&amp;#8217;t open his mouth without sticking his foot in it? I doubt the bulk of the Mono developers really want to broadcast the message &amp;#8220;We don&amp;#8217;t care about early adopters&amp;#8221; as the &amp;#8220;party line&amp;#8221;.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 08 Oct 2008 04:11:00 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/25.html</guid>
    
</item>
<item>
    <title>Paper Trail on GFS</title>
    <link>http://blog.joeysmith.com/26.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/26.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=26</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;The always entertaining &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/hnr.dnsalias.net/wordpress/&#039;);&quot;  href=&quot;http://hnr.dnsalias.net/wordpress/&quot;&gt;Paper Trail&lt;/a&gt; recently did a &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/hnr.dnsalias.net/wordpress/?p=58&#039;);&quot;  href=&quot;http://hnr.dnsalias.net/wordpress/?p=58&quot;&gt;write up&lt;/a&gt; deciphering the Google paper describing the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/labs.google.com/papers/gfs-sosp2003.pdf&#039;);&quot;  href=&quot;http://labs.google.com/papers/gfs-sosp2003.pdf&quot;&gt;Google File System&lt;/a&gt; &amp;#8211; a great read if you&amp;#8217;re at all interested in file systems and &amp;#8220;How Google Works&amp;#8221; &lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 07 Oct 2008 11:07:00 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/26.html</guid>
    
</item>
<item>
    <title>Regex Engines in JavaScript</title>
    <link>http://blog.joeysmith.com/22.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/22.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=22</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=22</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.reddit.com/r/programming/&#039;);&quot;  href=&quot;http://www.reddit.com/r/programming/&quot;&gt;proggit&lt;/a&gt; led me to &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/blog.mozilla.com/dmandelin/2008/10/06/squirrelfishing-in-regexp-dnajs/&#039;);&quot;  href=&quot;http://blog.mozilla.com/dmandelin/2008/10/06/squirrelfishing-in-regexp-dnajs/&quot;&gt;this&lt;/a&gt; post by what appears to be a member of Google&amp;#8217;s Chrome team, regarding the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/webkit.org/blog/214/introducing-squirrelfish-extreme/&#039;);&quot;  href=&quot;http://webkit.org/blog/214/introducing-squirrelfish-extreme/&quot;&gt;Squirrelfish Extreme&lt;/a&gt; engine&amp;#8217;s performance on regex. There&amp;#8217;s some fascinating stuff here, including the following gem:&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&lt;acronym title=&quot;WebKit Regular Expression Compiler&quot;&gt;WREC&lt;/acronym&gt; doesn’t save the intermediate matches, it just keeps track of the length of the text matched against /a*/ (repeatCount in my code) and decrements the position and count in order to backtrack. This is great, because it uses only two words of memory for state (instead of N million) but can find the next longest match very quickly (just 4 instructions).&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;If you&amp;#8217;ve never read &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.regex.info&#039;);&quot;  href=&quot;http://www.regex.info&quot;&gt;Mastering Regular Expressions&lt;/a&gt;, by Jeff Friedl, you might have trouble following some of the underlying concepts, but you should go out and &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/isbn.nu/0596002890&#039;);&quot;  href=&quot;http://isbn.nu/0596002890&quot;&gt;pick up a copy today&lt;/a&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 07 Oct 2008 00:19:50 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/22.html</guid>
    
</item>
<item>
    <title>The Fallacy of Business Requirements</title>
    <link>http://blog.joeysmith.com/21.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/21.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=21</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;[Note: This is an &amp;#8220;Executive Summary&amp;#8221; I wrote for some co-workers regarding Steve Yegge&amp;#8217;s &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/steve-yegge.blogspot.com/2008/08/business-requirements-are-bullshit.html&#039;);&quot;  href=&quot;http://steve-yegge.blogspot.com/2008/08/business-requirements-are-bullshit.html&quot;&gt;Business Requirements are Bullshit&lt;/a&gt; &amp;#8211; thanks to &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.thehomestarmy.com/s9y/index.php?/authors/7-Johnny-Elbows&#039;);&quot;  href=&quot;http://www.thehomestarmy.com/s9y/index.php?/authors/7-Johnny-Elbows&quot;&gt;Johnny Elbows&lt;/a&gt; for reviewing the summary and giving great feedback.]&lt;/p&gt;

	&lt;p&gt;Big Design Up Front (&lt;span class=&quot;caps&quot;&gt;BDUF&lt;/span&gt;) is the methodology in software development that a program&amp;#8217;s design should be completed and perfected before that program&amp;#8217;s implementation is started. It is often associated with the waterfall model of software development. The argument between the proponents and critics of &lt;span class=&quot;caps&quot;&gt;BDUF&lt;/span&gt; has somewhat degenerated into a &amp;#8220;holy war&amp;#8221;, with most people believing that a compromise between &lt;span class=&quot;caps&quot;&gt;BDUF&lt;/span&gt; and the more extreme variants of agile software development is the best solution to most software development problems.&lt;/p&gt;

	&lt;p&gt;The most important phase of any &lt;span class=&quot;caps&quot;&gt;BDUF&lt;/span&gt; project is &amp;#8220;requirements gathering&amp;#8221; &amp;#8211; a project that does not gather the correct requirements will fail, although it will often take an extended amount of time for the effects of failed requirements gathering to actually impact the project. This creates an environment where either a lot of money is spent chasing poor requirements, or projects fail to start because they cannot sufficiently capture the business requirements.&lt;/p&gt;

	&lt;p&gt;Steve Yegge, a Google Engineer, has written the following article that suggests that this failure is endemic to projects that even need to consider &amp;#8220;requirements gathering&amp;#8221;. Taking a page from Peter Lynch and Warren Buffet, he suggests that any development project be approached as an investment, and that we should only &amp;#8220;invest&amp;#8221; in products we would be interested in owning ourselves.&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;You can look at any phenomenally successful company,&amp;#8221; he suggests, &amp;#8220;and it&amp;#8217;s pretty obvious that their success was founded on building on something they personally wanted. The extent that any company begins to deviate from this course is the extent to which their ship starts taking on water.&amp;#8221; This means that projects which need to go through a &amp;#8220;requirements gathering&amp;#8221; phase are inherently doomed because &amp;#8220;if it&amp;#8217;s something you want, then you already know what the requirements are. You don&amp;#8217;t need to &amp;#8220;gather&amp;#8221; them. You think about it all the time. You can list the requirements from memory.&amp;#8221;&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;As we consider taking on projects, I think there is some sound advice contained here about what can make a project fail or succeed, as well as some tips about how simplicity (good) and imagination (bad) can affect the product itself.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 06 Oct 2008 15:05:52 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/21.html</guid>
    
</item>
<item>
    <title>Mono 2.0 Released</title>
    <link>http://blog.joeysmith.com/20.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/20.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=20</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=20</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.mono-project.com/Release_Notes_Mono_2.0&#039;);&quot;  href=&quot;http://www.mono-project.com/Release_Notes_Mono_2.0&quot;&gt;Release Notes in the usual spot&lt;/a&gt;, but I wanted to hit a few highlights:&lt;/p&gt;

	&lt;ol&gt;
		&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;ADO&lt;/span&gt;.&lt;span class=&quot;caps&quot;&gt;NET&lt;/span&gt; 2.0 &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; for accessing databases&lt;/li&gt;
		&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;ASP&lt;/span&gt;.&lt;span class=&quot;caps&quot;&gt;NET&lt;/span&gt; 2.0 &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; for developing Web-based applications&lt;/li&gt;
		&lt;li&gt;Windows.Forms 2.0&lt;/li&gt;
		&lt;li&gt;System.Core &amp;#8211; C# 3.0, including full support for &lt;span class=&quot;caps&quot;&gt;LINQ&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;Runtime &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/en.wikipedia.org/wiki/Monkey_patch&#039;);&quot;  href=&quot;http://en.wikipedia.org/wiki/Monkey_patch&quot;&gt;monkeypatching&lt;/a&gt; of compiled assemblies via Mono.Cecil&lt;/li&gt;
		&lt;li&gt;Mono.Cairo &amp;#8211; cross-platform rendering: &amp;#8220;Currently supported output targets include the X Window System, Quartz, Win32, image buffers, PostScript, &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt;, and &lt;span class=&quot;caps&quot;&gt;SVG&lt;/span&gt; file output. Experimental backends include OpenGL (through glitz), &lt;span class=&quot;caps&quot;&gt;XCB&lt;/span&gt;, BeOS, OS/2, and DirectFB.&amp;#8221;&lt;/li&gt;
		&lt;li&gt;Includes client libraries out of the box for: SQLite (presumably version 3), PostgresSQL, DB2, Oracle, Sybase, &lt;span class=&quot;caps&quot;&gt;SQL&lt;/span&gt; server, and Firebird&lt;/li&gt;
	&lt;/ol&gt;

	&lt;p&gt;I know of at least one project that has been put a bit on hold because of doubts about developing in C# for platforms other than Win32 &amp;#8211; perhaps this will allow us to break the stalemate a bit?&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 06 Oct 2008 02:20:48 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/20.html</guid>
    
</item>
<item>
    <title>Pylons References</title>
    <link>http://blog.joeysmith.com/19.html</link>
            <category>Python</category>
    
    <comments>http://blog.joeysmith.com/19.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=19</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;Spent the day poking at &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/pylonshq.com/&#039;);&quot;  href=&quot;http://pylonshq.com/&quot;&gt;Pylons 0.9.7rc2&lt;/a&gt; as well as the new documentation site that came out with the release of &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/python.org/download/releases/2.6/&#039;);&quot;  href=&quot;http://python.org/download/releases/2.6/&quot;&gt;Python 2.6&lt;/a&gt; &amp;#8211; some sweet stuff in there.&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/pythonpaste.org/webob/&#039;);&quot;  href=&quot;http://pythonpaste.org/webob/&quot;&gt;WebOb: The New Middleware Layer on 0.9.7&lt;/a&gt;, its &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/pythonpaste.org/webob/reference.html&#039;);&quot;  href=&quot;http://pythonpaste.org/webob/reference.html&quot;&gt;Reference page&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/pythonpaste.org/webob/differences.html&#039;);&quot;  href=&quot;http://pythonpaste.org/webob/differences.html&quot;&gt;How WebOb is different&lt;/a&gt; and &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/blog.ianbicking.org/2007/08/18/webob/&#039;);&quot;  href=&quot;http://blog.ianbicking.org/2007/08/18/webob/&quot;&gt;Ian Bicking&amp;#8217;s Blog Post about it&lt;/a&gt; &amp;#8211; &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/blog.ianbicking.org&#039;);&quot;  href=&quot;http://blog.ianbicking.org&quot;&gt;Ian&lt;/a&gt; is one of those guys who is so smart it fills me with a jealous rage. I&amp;#8217;ve already found a lot of useful stuff in WebOb that was missing or hard to do with the older Pylons middleware.&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/wiki.pylonshq.com/dashboard.action&#039;);&quot;  href=&quot;http://wiki.pylonshq.com/dashboard.action&quot;&gt;Base Pylons Documentation&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/wiki.pylonshq.com/display/authkitcookbook/Home&#039;);&quot;  href=&quot;http://wiki.pylonshq.com/display/authkitcookbook/Home&quot;&gt;AuthKit Cookbook&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/wiki.pylonshq.com/display/pylonscommunity/Pylons+Roadmap+to+1.0&#039;);&quot;  href=&quot;http://wiki.pylonshq.com/display/pylonscommunity/Pylons+Roadmap+to+1.0&quot;&gt;Roadmap to Pylons 1.0&lt;/a&gt; &amp;#8211; just some good links to pylonshq&lt;/p&gt;

	&lt;p&gt;Python modules I need to brush up on, or just links I used in the course of today&amp;#8217;s work: &lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/modindex.html&#039;);&quot;  href=&quot;http://docs.python.org/modindex.html&quot;&gt;2.6 Documentation Index&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/library/shutil.html&#039;);&quot;  href=&quot;http://docs.python.org/library/shutil.html&quot;&gt;shutil&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/library/xdrlib.html&#039;);&quot;  href=&quot;http://docs.python.org/library/xdrlib.html&quot;&gt;xdrlib&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/library/functools.html&#039;);&quot;  href=&quot;http://docs.python.org/library/functools.html&quot;&gt;functools &amp;#8211; a lot of functional paradigm stuff moved here?&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/library/stringio.html&#039;);&quot;  href=&quot;http://docs.python.org/library/stringio.html&quot;&gt;StringIO&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/library/tempfile.html&#039;);&quot;  href=&quot;http://docs.python.org/library/tempfile.html&quot;&gt;tempfile &amp;#8211; probably the best tempfile implementation by a programming language, ever&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/simplejson.googlecode.com/svn/tags/simplejson-2.0.1/docs/index.html&#039;);&quot;  href=&quot;http://simplejson.googlecode.com/svn/tags/simplejson-2.0.1/docs/index.html&quot;&gt;simpleJSON revved to 2.0.1&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.python.org/library/index.html&#039;);&quot;  href=&quot;http://docs.python.org/library/index.html&quot;&gt;2.6 &amp;#8216;Standard Library&amp;#8217; Index&lt;/a&gt;&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.makotemplates.org/docs/&#039;);&quot;  href=&quot;http://www.makotemplates.org/docs/&quot;&gt;Mako&lt;/a&gt; &amp;#8211; I&amp;#8217;m not sure why there are so dang many Pythons template layers. In fact, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.reportlab.org/preppy.html&#039;);&quot;  href=&quot;http://www.reportlab.org/preppy.html&quot;&gt;Preppy&lt;/a&gt; is another one that I might use more in the future due to its integration with &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.reportlab.org/&#039;);&quot;  href=&quot;http://www.reportlab.org/&quot;&gt;ReportLab&amp;#8217;s &lt;span class=&quot;caps&quot;&gt;PDF&lt;/span&gt; Toolkit&lt;/a&gt;&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/pylonsbook.com/alpha1/logging&#039;);&quot;  href=&quot;http://pylonsbook.com/alpha1/logging&quot;&gt;The Pylons Book&lt;/a&gt; &amp;#8211; I&amp;#8217;ve already pre-purchased, but wish it had more &amp;#8220;nuts and bolts&amp;#8221; based on what I&amp;#8217;ve seen so far.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 02 Oct 2008 15:02:05 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/19.html</guid>
    
</item>
<item>
    <title>Return from hiatus, and a quick jQuery example</title>
    <link>http://blog.joeysmith.com/16.html</link>
            <category>JavaScript</category>
    
    <comments>http://blog.joeysmith.com/16.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=16</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=16</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;Sorry for the break &amp;#8211; I spent the past week or so frantically preparing for, and then attending, my Director&amp;#8217;s annual off-site planning meeting. As always, it was a valuable experience &amp;#8211; the opportunity to interact with Managers in a more relaxed setting, and to see how each of us attacks a given problem from so many different angles, is incredibly cool. Plus, I got to play golf again. &lt;img src=&quot;http://blog.joeysmith.com/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

	&lt;p&gt;Today I&amp;#8217;m bringing you a &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/joeysmith.com/~joey/jqtest.html&#039;);&quot;  href=&quot;http://joeysmith.com/~joey/jqtest.html&quot;&gt;quick example&lt;/a&gt; of how to use &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/jquery.com/&#039;);&quot;  href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt; to check with a &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/joeysmith.com/~joey/jqtest.php?debug=1&#039;);&quot;  href=&quot;http://joeysmith.com/~joey/jqtest.php?debug=1&quot;&gt;Service&lt;/a&gt; to see whether the user should be allowed to toggle the state of a given checkbox. In my example, the &amp;#8220;Service&amp;#8221; only allows you to check boxes labelled with a prime number. I&amp;#8217;m sure there&amp;#8217;s a more jQuery-approved method, but this one was simpler to figure out than &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/docs.jquery.com/Attributes/val#val&#039;);&quot;  href=&quot;http://docs.jquery.com/Attributes/val#val&quot;&gt;.val()&lt;/a&gt; &amp;#8211; I couldn&amp;#8217;t figure out how to make that *un*check a box.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 21 Aug 2008 22:37:10 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/16.html</guid>
    
</item>
<item>
    <title>When mysqldump fails...</title>
    <link>http://blog.joeysmith.com/11.html</link>
            <category>Programming</category>
    
    <comments>http://blog.joeysmith.com/11.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=11</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=11</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;I had a friend who couldn&amp;#8217;t mysqldump a customer&amp;#8217;s database &amp;#8212; the best guess freenode&amp;#8217;s #mysql and I could come up with was that the username provided didn&amp;#8217;t have the ability to &lt;span class=&quot;caps&quot;&gt;LOCK&lt;/span&gt; tables &amp;#8212; so I came up with an alternate method that I thought I&amp;#8217;d abstract it and post it here for others to use. All this assumes you can connect to the database from your host&amp;#8230;&lt;/p&gt;

	&lt;p&gt;1) Get database schema&lt;br /&gt;
&lt;pre style=&quot;font-size:9pt;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color:#bd8d8b&quot;&gt;`mysql &amp;#8212;host=$MYSQLDUMP_HOST &amp;#8212;user=$MYSQLDUMP_USER &amp;#8212;password=$MYSQLDUMP_PWD $MYSQLDUMP_DATABASENAME -e &amp;quot;&lt;span class=&quot;caps&quot;&gt;SHOW&lt;/span&gt; TABLES&amp;quot; | tail -10`&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;do&lt;/span&gt;
    mysql &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;host&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_HOST&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;user&lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_USER&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;password&lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_PWD $MYSQLDUMP_DATABASENAME&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;-&lt;/span&gt;e &lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;&lt;span class=&quot;caps&quot;&gt;SHOW&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;TABLE&lt;/span&gt; $i\G&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;done&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;gt;&lt;/span&gt; schema.sql&lt;br /&gt;
&lt;/pre&gt;&lt;/p&gt;

	&lt;p&gt;2) Dump the table contents as &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; files to the local disk. I went with &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; files because I had trouble getting this particular data set to dump and then import using the &amp;#8216;batch&amp;#8217; format MySQL more natively supports.&lt;br /&gt;
&lt;pre style=&quot;font-size:9pt;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color:#bd8d8b&quot;&gt;`mysql &amp;#8212;host=$MYSQLDUMP_HOST &amp;#8212;user=$MYSQLDUMP_USER &amp;#8212;password=$MYSQLDUMP_PWD $MYSQLDUMP_DATABASENAME -e &amp;quot;&lt;span class=&quot;caps&quot;&gt;SHOW&lt;/span&gt; TABLES&amp;quot; | tail -10`&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;do&lt;/span&gt;
    mysql &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;host&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_HOST&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;user&lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_USER&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;password&lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_PWD $MYSQLDUMP_DATABASENAME&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;#8212;&lt;/span&gt;xml &lt;span style=&quot;color:#000000&quot;&gt;-&lt;/span&gt;e &lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;&lt;span class=&quot;caps&quot;&gt;SELECT&lt;/span&gt; * from $i;&amp;quot;&lt;/span&gt;  &lt;span style=&quot;color:#000000&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;tee&lt;/span&gt; &lt;span style=&quot;color:#208920&quot;&gt;$i&lt;/span&gt;.xml&lt;span style=&quot;color:#000000&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;done&lt;/span&gt;&lt;br /&gt;
&lt;/pre&gt; I used &amp;#8216;tee&amp;#8217; so I could watch the tables being created, in an attempt to gauge how much work was left. You could just as easily replace &amp;#8220;| tee&amp;#8221; with &amp;#8220;&gt;&amp;#8221;.&lt;/p&gt;

	&lt;p&gt;3) Turn the &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; files into &lt;span class=&quot;caps&quot;&gt;INSERT&lt;/span&gt; statements. I did this with Python and lxml &amp;#8211; you could use just about anything that has a decent &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;.&lt;/p&gt;

	&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/tools.joeysmith.com/import.py&#039;);&quot;  href=&quot;http://tools.joeysmith.com/import.py&quot;&gt;import.py&lt;/a&gt;&lt;br /&gt;
python import.py &gt; inserts.sql&lt;/p&gt;

	&lt;p&gt;4) Create the database, run the INSERTs.&lt;br /&gt;
&lt;pre style=&quot;font-size:9pt;&quot;&gt;mysql &lt;span style=&quot;color:#000000&quot;&gt;-&lt;/span&gt;e &lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;quot;&lt;span class=&quot;caps&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;DATABASE&lt;/span&gt; $MYSQLDUMP_DATABASENAME;&amp;quot;&lt;/span&gt;&lt;br /&gt;
mysql &lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_DATABASENAME&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;lt;&lt;/span&gt; schema.sql&lt;br /&gt;
mysql &lt;span style=&quot;color:#208920&quot;&gt;$MYSQLDUMP_DATABASENAME&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;&amp;lt;&lt;/span&gt; inserts.sql&lt;br /&gt;
&lt;/pre&gt; &lt;/p&gt;

	&lt;p&gt;Hope that can help someone else.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 13 Aug 2008 20:17:36 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/11.html</guid>
    
</item>
<item>
    <title>XMLReader punts on clone</title>
    <link>http://blog.joeysmith.com/8.html</link>
            <category>PHP</category>
    
    <comments>http://blog.joeysmith.com/8.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=8</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;PHP5&amp;#8217;s &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/php.net/xmlreader&#039;);&quot;  href=&quot;http://php.net/xmlreader&quot;&gt;XMLReader&lt;/a&gt; &amp;#8211; which I used for my &lt;a href=&quot;http://blog.joeysmith.com/5.html&quot;&gt;JSON-Like XML&lt;/a&gt; post, doesn&amp;#8217;t implement a &amp;#8216;clone&amp;#8217; handler, which came as quite a shock when I attempted to implement a wrapper class that would allow me to push values back into the stream when I had to read-ahead to implement &amp;#8216;nested data structures&amp;#8217; as suggested by Davey. I had a hard time finding a good example of how to internally implement clone (even &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/safari.oreilly.com/067232704X&#039;);&quot;  href=&quot;http://safari.oreilly.com/067232704X&quot;&gt;Sara Golemon&amp;#8217;s book&lt;/a&gt; only gives it a brief mention&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#fn19380630484b9a8222efb4f&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;), but I finally &lt;a href=&quot;http://blog.joeysmith.com/pages/clone.html&quot;&gt;came up with something&lt;/a&gt; &amp;#8211; I&amp;#8217;m building it now to see how well it works, or even if it works at all.&lt;/p&gt;

	&lt;p id=&quot;fn19380630484b9a8222efb4f&quot; class=&quot;footnote&quot;&gt;&lt;sup&gt;1&lt;/sup&gt; zend_object_value clone_obj(zval *object TSRMLS_DC) &amp;#8211; Used to generate a new object copied from an already instantiated one. The default behavior is to create a new object instance, associate the original&amp;#8217;s handler table with it, copy the properties table and, if the class entry for the object in question defines a __clone() method, call that to allow the new object to perform additional duplication work.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 12 Aug 2008 23:12:32 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/8.html</guid>
    
</item>
<item>
    <title>JSON-like XML</title>
    <link>http://blog.joeysmith.com/5.html</link>
            <category>PHP</category>
    
    <comments>http://blog.joeysmith.com/5.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=5</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=5</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;#phpc on Freenode had a discussion tonight about how there&amp;#8217;s nothing in &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; that&amp;#8217;s quite as simple as &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; for encoding types. I came up with this off-the-cuff &amp;#8211; as opposed to &lt;span class=&quot;caps&quot;&gt;WDDX&lt;/span&gt;, this is more JSON-like in that each &amp;#8216;&lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; Document&amp;#8217; encodes only a single value &amp;#8211; but that value might be mapped to any of the built-in types.&lt;br /&gt;
Of course, the &amp;lt;object&gt; stuff would only work with pretty simple objects &amp;#8211; but the fact that it tries at all to instance a class is a step beyond what &lt;span class=&quot;caps&quot;&gt;JSON&lt;/span&gt; does, which is &lt;span class=&quot;caps&quot;&gt;ALWAYS&lt;/span&gt; an instance of stdClass. You could drop this extra &amp;#8216;feature&amp;#8217; by &lt;del&gt;remove&lt;/del&gt; removing line 43 ($class = ...) and changing line 44 to:&lt;br /&gt;
&lt;pre style=&quot;font-size:9pt;&quot;&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;$data&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;=&lt;/span&gt; new stdClass&lt;span style=&quot;color:#000000&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;/pre&gt;&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://blog.joeysmith.com/5.html#extended&quot;&gt;Continue reading &quot;JSON-like XML&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 10 Aug 2008 22:01:40 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/5.html</guid>
    
</item>
<item>
    <title>Refinement of ringBuffer</title>
    <link>http://blog.joeysmith.com/4.html</link>
            <category>PHP</category>
    
    <comments>http://blog.joeysmith.com/4.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=4</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=4</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;&lt;pre style=&quot;font-size:9pt;&quot;&gt;    public &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;offsetSet&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;$key&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;$value&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;) {&lt;/span&gt;
        &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;$key&lt;/span&gt; &lt;span style=&quot;color:#000000&quot;&gt;===&lt;/span&gt; NULL&lt;span style=&quot;color:#000000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#0000ff&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#0000ff&quot;&gt;$value&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color:#0000ff&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;throwEx&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#bd8d8b&quot;&gt;&amp;#8216;Do not directly set indices in a %s, use push() instead&amp;#8217;&lt;/span&gt;&lt;span style=&quot;color:#000000&quot;&gt;,&lt;/span&gt; &lt;i&gt;CLASS&lt;/i&gt;&lt;span style=&quot;color:#000000&quot;&gt;));&lt;/span&gt;
        &lt;span style=&quot;color:#9c20ee; font-weight:bold&quot;&gt;return&lt;/span&gt; false&lt;span style=&quot;color:#000000&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color:#000000&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;/pre&gt; This allows the use of PHP&amp;#8217;s &amp;#8216;push&amp;#8217; syntax: $foo[] = &amp;#8216;bar&amp;#8217;;&lt;br /&gt;
Full class after the jump.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://blog.joeysmith.com/4.html#extended&quot;&gt;Continue reading &quot;Refinement of ringBuffer&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 09 Aug 2008 14:38:32 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/4.html</guid>
    
</item>
<item>
    <title>Using SPL to implement a ringBuffer</title>
    <link>http://blog.joeysmith.com/3.html</link>
            <category>PHP</category>
    
    <comments>http://blog.joeysmith.com/3.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=3</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=3</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;I liked the &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/php.net/spl&#039;);&quot;  href=&quot;http://php.net/spl&quot;&gt;SPL&lt;/a&gt; I used in my last post, so I cracked open my &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/oreilly.com/catalog/9780596001674/&#039;);&quot;  href=&quot;http://oreilly.com/catalog/9780596001674/&quot;&gt;Python Cookbook&lt;/a&gt; to a random location and decided to try and implement whatever it landed on in &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; using &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/php.net/spl&#039;);&quot;  href=&quot;http://php.net/spl&quot;&gt;SPL&lt;/a&gt; &amp;#8211; that led to the following implementation of a &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/en.wikipedia.org/wiki/Circular_buffer&#039;);&quot;  href=&quot;http://en.wikipedia.org/wiki/Circular_buffer&quot; target=&quot;_blank&quot;&gt;ring buffer&lt;/a&gt;.&lt;br /&gt;
There certain may be better ways to do it, but this was my first pass, and I think it behaves much how you&amp;#8217;d expect a &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/en.wikipedia.org/wiki/Circular_buffer&#039;);&quot;  href=&quot;http://en.wikipedia.org/wiki/Circular_buffer&quot; target=&quot;_blank&quot;&gt;ring buffer&lt;/a&gt; to.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://blog.joeysmith.com/3.html#extended&quot;&gt;Continue reading &quot;Using SPL to implement a ringBuffer&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 08 Aug 2008 15:39:18 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/3.html</guid>
    
</item>
<item>
    <title>Case-insensitive Array access in PHP</title>
    <link>http://blog.joeysmith.com/2.html</link>
            <category>PHP</category>
    
    <comments>http://blog.joeysmith.com/2.html#comments</comments>
    <wfw:comment>http://blog.joeysmith.com/wfwcomment.php?cid=2</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.joeysmith.com/rss.php?version=2.0&amp;type=comments&amp;cid=2</wfw:commentRss>
    

    <author>nospam@example.com (TML)</author>
    <content:encoded>
    	&lt;p&gt;Someone in ##&lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; was looking for an array that had &amp;#8216;case-insensitive&amp;#8217; keys, so I threw this together using &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/php.net/spl/&#039;);&quot;  href=&quot;http://php.net/spl/&quot;&gt;SPL&lt;/a&gt; &lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://blog.joeysmith.com/2.html#extended&quot;&gt;Continue reading &quot;Case-insensitive Array access in PHP&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 07 Aug 2008 21:21:48 -0600</pubDate>
    <guid isPermaLink="false">http://blog.joeysmith.com/2.html</guid>
    
</item>

</channel>
</rss>