<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Andy Skelton</title>
	<atom:link href="http://andy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://andy.wordpress.com</link>
	<description>Just another WordPress hacker</description>
	<lastBuildDate>Wed, 15 Jul 2009 18:42:22 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/e6cf065746f46ab81c9bfb04d3358079?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Andy Skelton</title>
		<link>http://andy.wordpress.com</link>
	</image>
			<item>
		<title>Real-time WordPress.com subscription</title>
		<link>http://andy.wordpress.com/2009/07/16/real-time-wordpress-com-subscription/</link>
		<comments>http://andy.wordpress.com/2009/07/16/real-time-wordpress-com-subscription/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 18:06:24 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[im]]></category>
		<category><![CDATA[pubsub]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=270</guid>
		<description><![CDATA[Sometimes RSS isn&#8217;t fast enough. We&#8217;ve been experimenting with faster blog subscription delivery using Jabber to push the messages. When you use Jabber to subscribe to blogs you get the news as soon as it is published. Now almost every post and comment on WordPress.com blogs is published this way and you can subscribe to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=270&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.flickr.com/photos/thatguyfromcchs08/2300190277/"><img class="alignright size-full wp-image-275" title="&quot;Going nowhere fast&quot; by Nathan" src="http://andy.files.wordpress.com/2009/07/2300190277_360853ae0d_m.jpg?w=150&#038;h=112" alt="Going nowhere fast" width="150" height="112" /></a>Sometimes RSS isn&#8217;t fast enough. We&#8217;ve been experimenting with faster blog subscription delivery using Jabber to push the messages. When you use Jabber to subscribe to blogs you get the news as soon as it is published. Now almost every post and comment on <a href="http://wordpress.com/">WordPress.com</a> blogs is published this way and you can subscribe to these streams using almost any Jabber client. Messages are delivered typically within one second of publication. You can also publish to your blogs by typing instant messages. Soon comments will be appearing in Jabber chat rooms.</p>
<p>Let me break it down. <a href="http://jabber.org/">Jabber</a> (<a href="http://xmpp.org/">XMPP</a>) is an instant messaging protocol. There are dozens of free clients (programs) that can connect to Jabber services, thousands of Jabber servers, and millions of daily Jabber users around the world. Even some phones can connect to it, including the iPhone with an appropriate app. So you can probably use Jabber. The primary exception is people behind company or government firewalls that block XMPP ports, but we&#8217;ll have a web-based solution for them soon.</p>
<p>Before I give you a link I have to tell you that this service is experimental. If you use it, you are a tester so please wear your white lab coat. A few dozen people have been using it for several months with very few hiccups, but hiccups are still to be expected. Even so, most of us at Automattic rely on it daily to surface and accelerate the discussions on our private blogs. Finally I must tell you that we have not yet worked out all the business angles, so the feature set and limitations may change to accommodate our inevitable need to feed the monkey.</p>
<p>Now I give you <a href="http://im.wordpress.com/">im.wordpress.com</a>, which I demonstrated at the <a href="http://www.techcrunch.com/real-time-stream-and-4th-annual-crunchup-at-august-capital/">CrunchUp last week</a>. Every WordPress.com account is automatically linked to a Jabber account on im.wordpress.com. We have compiled <a href="http://support.wordpress.com/jabber/">instructions for setting up</a> some popular Jabber clients.</p>
<p>If you want my personal recommendation for a Jabber client, my choice for Mac OS X is <a href="http://adium.im/">Adium</a>. If you already use iChat, just stick with iChat. Some of my coworkers who run Windows have chosen <a href="http://pidgin.im/">Pidgin</a>. I also sometimes use <a href="http://psi-im.org/">Psi</a>, which is available for Mac, Windows, and Linux.</p>
<p>Here is some info for people familiar with XMPP. This service is based on <a href="http://www.xmpp.org/extensions/xep-0060.html">XEP-0060</a> (Publish-Subscribe) acting as a front-end for WordPress blogs. It started as a simple <a href="http://en.wordpress.com/firehose/">firehose</a> for our commercial partners and grew from there. People subscribing with Jabber clients don&#8217;t need Pubsub. They send simple commands to a chat bot and their items are delivered as XHTML-IM from the blog&#8217;s URL. The bot speaks XEP-0060 on their behalf. If you can speak XEP-0060, you can connect to pubsub.im.wordpress.com and subscribe to nodes. The nodes for this blog are /blogs/andy.wordpress.com/ for posts, /blogs/andy.wordpress.com/comments/ for all comments, and /blogs/andy.wordpress.com/2009/07/16/real-time-wordpress-com-subscription/ for comments on this post. Node discovery and item discovery and retrieval are not implemented. Reasonable subscription and traffic limits will be imposed. If you are looking for a complete feed of all our blogs and comments, try the <a href="http://en.wordpress.com/firehose/">firehose</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=270&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2009/07/16/real-time-wordpress-com-subscription/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>

		<media:content url="http://andy.files.wordpress.com/2009/07/2300190277_360853ae0d_m.jpg" medium="image">
			<media:title type="html">&#34;Going nowhere fast&#34; by Nathan</media:title>
		</media:content>
	</item>
		<item>
		<title>Help test Stats 1.5 beta</title>
		<link>http://andy.wordpress.com/2009/06/19/help-test-stats-1-5-beta/</link>
		<comments>http://andy.wordpress.com/2009/06/19/help-test-stats-1-5-beta/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 20:37:53 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Stats]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=259</guid>
		<description><![CDATA[At first we thought it was a good idea to use iframes to display reports in the Stats plugin. We&#8217;ve seen since then a lot of problems with browsers and cookies. To help resolve these issues, and in anticipation of future features, I am updating the plugin and the WordPress.com stats reporting system to remove [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=259&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>At first we thought it was a good idea to use iframes to display reports in the <a href="http://wordpress.org/extend/plugins/stats/">Stats plugin</a>. We&#8217;ve seen since then a lot of problems with browsers and cookies. To help resolve these issues, and in anticipation of future features, I am updating the plugin and the WordPress.com stats reporting system to remove the iframes. I just posted <a href="http://svn.wp-plugins.org/stats/trunk/stats.php">1.5 beta 1</a>. If you host your own WordPress 2.7+ blog and you use the Stats plugin, why not contribute to its development by installing this testing version? Anyone can download the beta but I don&#8217;t recommend it unless you are able to cope with potentially unstable software.</p>
<ul>
<li><strong>What are the risks of using this beta?</strong><br />
You won&#8217;t lose any stats. If something goes horribly wrong it&#8217;s probably a bad download; just reinstall the latest version of Stats.</li>
<li><strong>How does it work?<br />
</strong>The plugin connects to WordPress.com to get the stats reports when you request them. It uses the API key to authenticate.</li>
<li><strong>Aside from fixing cookie problems, how is this better?</strong><br />
Now it&#8217;s possible for anyone who can publish posts on your blog to see blog stats. They don&#8217;t have to be logged into a WordPress.com account. They only need the publish_posts capability (Author role) to view stats reports.</li>
<li><strong>Where did the dropdown blog switcher go?<br />
</strong>Because the plugin uses a single API key to authenticate, the service doesn&#8217;t know whether the visitor is the owner of that key or some other user. So it doesn&#8217;t make much sense to show the list of blogs belonging to the API key owner. You can still use the switcher if you view your stats on any WordPress.com dashboard.</li>
<li><strong>Where did the Stats Access panel go?<br />
</strong>This is also related to single API key authentication. Maybe in future we will bring administrative access back to the plugin. But until then, we have left the Stats Access panel intact on WordPress.com dashboards. You might want to bookmark <a href="http://dashboard.wordpress.com/wp-admin/index.php?page=stats">dashboard.wordpress.com</a> if you need these features on a regular basis.</li>
<li><strong>Will this be a required upgrade?</strong><br />
You mean will older version of stats be broken? Not by 1.5. Later versions may break compatibility but for now you can keep using earlier versions of Stats if you like.</li>
<li><strong>What if I install this and still see iframes?<br />
</strong>This happens because your server is unable to connect to WordPress.com. I set it up to use SSL (https) in the hopes that most hosts support this. If yours does not work, I&#8217;d like to hear from you and do some testing on your host.</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/259/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=259&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2009/06/19/help-test-stats-1-5-beta/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>Idea drop: db::multi_query</title>
		<link>http://andy.wordpress.com/2009/02/11/idea-drop-db-multi_query/</link>
		<comments>http://andy.wordpress.com/2009/02/11/idea-drop-db-multi_query/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 03:46:38 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=244</guid>
		<description><![CDATA[We usually do things sequentially in PHP. Any point where we can get two things done at the same time is an opportunity to reduce the total execution time. It is generally safe to execute processes in parallel when no process has a side effect that may impact any other process. Most MySQL SELECT statements [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=244&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We usually do things sequentially in PHP. Any point where we can get two things done at the same time is an opportunity to reduce the total execution time. It is generally safe to execute processes in parallel when no process has a side effect that may impact any other process. Most MySQL SELECT statements fall into this class. Under certain conditions it might help to run these queries in parallel.</p>
<p>So I got to thinking: does PHP provide a function to issue a query and return immediately, instead of waiting while the database churns? Such a function would let me spread a batch of queries across several servers and then collect the results. It should not involve forking or making OS calls. Maybe <a href="http://php.net/mysql_unbuffered_query">mysql_unbuffered_query</a> is that function.</p>
<p>Assuming it is, here is the basis for a parallel query system in PHP. It is obviously incomplete. I may complete it and try it out when I need to query a dataset partitioned across separate MySQL instances. The function connect_reserved($query) returns a locked MySQL link identifier, opening new connections as needed. The function release($query) removes the lock, returning the link to the pool of available database connections.</p>
<pre><code>function multi_query($queries);
    foreach ( $queries as $i =&gt; $query ) {
        $link = connect_reserved($query);
        $res[$i] = <span style="color:#990000;">mysql_unbuffered_query</span>($query, $link);
        $ret[$i] = array();
    }

    do {
        foreach ( $res as $i =&gt; $r ) {
            if ( $row = <span style="color:#000099;">mysql_fetch_row</span>($r) ) {
                $ret[$i][] = $row;
            } else {
                release($queries[$i]);
                unset($res[$i]);
            }
        }
    } while ( count($res) );

    return $ret;
}</code></pre>
<p>I have not used mysql_unbuffered_query. For best results, it should return as soon as the server determines that the query is valid. I have assumed that it can return while the database is still looking for records. (If it can not, this whole idea should be forgotten.) This oversimplified diagram helps illustrate how the queries run in parallel. The green line shows the beneficial overlap of query processing time.</p>
<p><img src="http://andy.files.wordpress.com/2009/02/multi_query2.png?w=373&#038;h=219" alt="quasi-parallel queries in PHP" title="parallel queries in PHP" width="373" height="219" class="aligncenter size-full wp-image-251" /></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/244/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=244&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2009/02/11/idea-drop-db-multi_query/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>

		<media:content url="http://andy.files.wordpress.com/2009/02/multi_query2.png" medium="image">
			<media:title type="html">parallel queries in PHP</media:title>
		</media:content>
	</item>
		<item>
		<title>Persistent PHP processes in Erlang/OTP</title>
		<link>http://andy.wordpress.com/2009/02/06/persistent-php-processes-in-erlang-otp/</link>
		<comments>http://andy.wordpress.com/2009/02/06/persistent-php-processes-in-erlang-otp/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 11:30:54 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=230</guid>
		<description><![CDATA[Running PHP code from within Erlang is easy: os:cmd("php -r 'echo \"Hello, World!\";'"). This is fine when you need to run simple commands. When you demand more from PHP, this approach becomes awkward, wasteful, and eventually unusable. If your Erlang-to-PHP calls require large PHP applications, open connections to databases, or somehow incur significant initialization overhead, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=230&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Running PHP code from within Erlang is easy: <code>os:cmd("php -r 'echo \"Hello, World!\";'").</code> This is fine when you need to run simple commands. When you demand more from PHP, this approach becomes awkward, wasteful, and eventually unusable. If your Erlang-to-PHP calls require large PHP applications, open connections to databases, or somehow incur significant initialization overhead, you should maintain pool of reusable PHP processes.</p>
<p>My first complete application for Erlang/OTP is <a href="http://github.com/skeltoac/php_app">php_app</a>. It manages a pool of persistent PHP processes and provides a simple API to evaluate PHP code. I designed php_app to be robust and easy to use. It&#8217;s so easy, in fact, that I now use it to debug WordPress functions from within Erlang. Here is a sample session using <code>start/0</code> and <code>eval/1</code>:</p>
<pre><code>$ erl
Eshell V5.6.4  (abort with ^G)
1&gt; php:start().
ok
2&gt; php:eval("echo 'Hello, World!';
2&gt;           trigger_error('Uh-oh!');
2&gt;           return array(true, true);").
{ok,&lt;&lt;"Hello, World!"&gt;&gt;,
    [{0,true},{1,true}],
    &lt;&lt;"Uh-oh!"&gt;&gt;,continue}
3&gt; </code></pre>
<p>In the resulting tuple we have the output, the return value, and the last error. The atom <code>continue</code> indicates that the PHP process is eligible for reuse, determined by its size in memory after evaluating my code. In the next example I&#8217;ll reserve a PHP process to demonstrate persistence and what happens when we hit the memory limit.</p>
<pre><code>3&gt; Ref = php:reserve().
#Ref&lt;0.0.0.52&gt;
4&gt; php:eval("$a = array_fill(0, 200000, rand());
4&gt;           return count($a);", Ref).
{ok,&lt;&lt;&gt;&gt;,200000,&lt;&lt;&gt;&gt;,continue}
5&gt; php:eval("$a = array_merge($a, array_fill(0, 200000, rand()));
5&gt;           return count($a);", Ref).
{ok,&lt;&lt;&gt;&gt;,400000,&lt;&lt;&gt;&gt;,break}
6&gt; php:eval("return count($a);", Ref).
{ok,&lt;&lt;&gt;&gt;,0,&lt;&lt;"Undefined variable:  a"&gt;&gt;,continue}
7&gt; php:release(Ref).
ok
8&gt;
</code></pre>
<p>The function <code>reserve/0</code> removes a PHP process from the pool and returns a key that is used in <code>eval/2</code>. Without a key, we can&#8217;t be sure that the same PHP process will evaluate our next string of code. Notice the correct return value of 400000 and the atom <code>break</code> which indicates that the PHP process has been restarted because it exceeded the memory usage limit. Our <code>Ref</code> now points to a fresh PHP process. The reservation remains valid.</p>
<p>There are a few other return tuples: one for timeouts, one for parse errors, and one for exits. That last one includes fatal errors. They can&#8217;t be trapped. You&#8217;ll just have to refer to your error logs. (You do write code with a terminal tailing all your error logs, don&#8217;t you?) Here are some more bullet points to keep in mind:</p>
<ul>
<li>Never define a PHP function without first testing <code>function_exists</code> because you will get a fatal error every time. This is by design.</li>
<li>Be mindful of escaping quotes and control characters. User input is the enemy. Test.</li>
<li>This app was written by an Erlang novice. Do not underestimate its potential destructive power.</li>
<li>Even so, it&#8217;s in use on a production system that makes lots of PHP calls.</li>
<li>The php module has EDoc for all of the API functions.  The HTML version is included for completeness.</li>
<li>If you modify the PHPLOOP, you should restart the PHP processes. Try <code>php:restart_all().</code></li>
</ul>
<p>The code is <a href="http://github.com/skeltoac/php_app/tree">here</a>. All you have to do is compile it. I like to <code>make:all().</code> The configuration is in php.app.</p>
<p>If you would like to contribute changes to the code or documentation, I will be happy to hear from you. My OTP stuff could benefit from a more experienced set of hands.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=230&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2009/02/06/persistent-php-processes-in-erlang-otp/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>Hybrid nodetree plugin for ejabberd</title>
		<link>http://andy.wordpress.com/2008/12/21/hybrid-nodetree-plugin-for-ejabberd/</link>
		<comments>http://andy.wordpress.com/2008/12/21/hybrid-nodetree-plugin-for-ejabberd/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 03:54:39 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[ejabberd]]></category>
		<category><![CDATA[nodetree]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=224</guid>
		<description><![CDATA[A current project of mine involves the Jabber extension PubSub (XEP-0060) and I chose ejabberd to power it. Ejabberd, the software that powers jabber.org, is written in Erlang. I am having a fantastic adventure learning Erlang. The beginner mind is where I feel most comfortable. But that&#8217;s another post.
Recently I wanted to make part of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=224&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A current project of mine involves the Jabber extension PubSub (XEP-0060) and I chose ejabberd to power it. Ejabberd, the software that powers jabber.org, is written in Erlang. I am having a fantastic adventure learning Erlang. The beginner mind is where I feel most comfortable. But that&#8217;s another post.</p>
<p>Recently I wanted to make part of a nodetree virtual. A virtual nodetree is one that doesn&#8217;t store any nodes. Thus you can have infinitely many &#8220;virtual&#8221; nodes with zero records in the pubsub_node table. For any large set of indentically configured, transient nodes, this is an ideal setup.</p>
<p>Ejabberd only supports one nodetree plugin per virtual host, so I created a nodetree plugin that lets me use as many different nodetree plugins as I like. A simple pattern match determines which nodetree plugin to call and calls it. Here is the pattern matching function:</p>
<pre><code>nodetree(["dogs",_|_]) -&gt;
	nodetree_dogs;
nodetree(["cats",_|_]) -&gt;
	nodetree_cats;
nodetree(_) -&gt;
	nodetree_default.</code></pre>
<p>And this is how the rest of the plugin looks:</p>
<pre><code>create_node(Key, Node, Type, Owner, Options) -&gt;
    Nodetree = nodetree(Node),
    Nodetree:create_node(Key, Node, Type, Owner, Options).</code></pre>
<p>Now I can have as many nodetree plugins as I want on a single virtual host. As a bonus, I don&#8217;t have to touch mod_pubsub when I add a new nodetree plugin. All I do is reload the nodetree_hybrid module and mod_pubsub never misses a beat. Erlang, you&#8217;re my hero.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/224/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/224/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/224/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=224&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/12/21/hybrid-nodetree-plugin-for-ejabberd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>Upgrade Memcached Before WordPress</title>
		<link>http://andy.wordpress.com/2008/11/19/upgrade-memcached-before-wordpress/</link>
		<comments>http://andy.wordpress.com/2008/11/19/upgrade-memcached-before-wordpress/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 00:03:07 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Batcache]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=219</guid>
		<description><![CDATA[Self-hosted WordPress and WordPress MU administrators: if you are using the memcached object cache (a prerequisite for batcache), upgrade it before upgrading WordPress. There is a bug that keeps the old db_version in the options cache, preventing WordPress from remembering that it has been upgraded, and this causes it to ask you to upgrade again. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=219&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Self-hosted WordPress and WordPress MU administrators: if you are using the <a href="http://svn.wp-plugins.org/memcached/">memcached object cache</a> (a prerequisite for <a href="http://wordpress.org/extend/plugins/batcache/">batcache</a>), upgrade it before upgrading WordPress. There is a bug that keeps the old db_version in the options cache, preventing WordPress from remembering that it has been upgraded, and this causes it to ask you to upgrade again. In a pinch you can resolve the problem by restarting the memcached daemon.</p>
<p>The memcached object cache can&#8217;t be automatically upgraded because it&#8217;s not a normal plugin. Make sure to use the right version: <a href="http://svn.wp-plugins.org/memcached/branches/1.0/object-cache.php">1.0</a> (sockets) or <a href="http://svn.wp-plugins.org/memcached/trunk/object-cache.php">2.0</a> (PECL). Only one line was changed, so you might prefer to update by hand: <a href="http://plugins.trac.wordpress.org/changeset/74856">1.0</a>, <a href="http://plugins.trac.wordpress.org/changeset/74855">2.0</a>.</p>
<p>If you aren&#8217;t sure whether you are using memcached, look for a file named object-cache.php in wp-content. If that file exists, look inside to see if the plugin name is &#8220;Memcached&#8221;.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/219/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=219&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/11/19/upgrade-memcached-before-wordpress/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress include stack</title>
		<link>http://andy.wordpress.com/2008/10/30/wordpress-include-stack/</link>
		<comments>http://andy.wordpress.com/2008/10/30/wordpress-include-stack/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 18:20:13 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=214</guid>
		<description><![CDATA[Inspired by the new and sublimely useful WP Roadmap, here is a high-level diagram of WordPress in three sizes: 512, 1024, 2048. Made with OmniGraffle Professional.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=214&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Inspired by the new and sublimely useful <a href="http://wp-roadmap.com/">WP Roadmap</a>, here is a high-level diagram of WordPress in three sizes: <a href="http://andy.files.wordpress.com/2008/10/wp-stack-512.png">512</a>, <a href="http://andy.files.wordpress.com/2008/10/wp-stack-1024.png">1024</a>, <a href="http://andy.files.wordpress.com/2008/10/wp-stack-2048.png">2048</a>. Made with <a href="http://www.omnigroup.com/applications/omnigraffle/pro/">OmniGraffle Professional</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=214&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/10/30/wordpress-include-stack/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>Detachable IRC Proxy: dircproxy</title>
		<link>http://andy.wordpress.com/2008/09/29/detachable-irc-proxy-dircproxy/</link>
		<comments>http://andy.wordpress.com/2008/09/29/detachable-irc-proxy-dircproxy/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 03:51:16 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[IRC]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[dircproxy]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=210</guid>
		<description><![CDATA[Because much of my work happens in IRC, I like to stay attached to the Freenode IRC server all the time. This was easy when I kept a desktop computer always on. But now that I use my laptop exclusively it&#8217;s impossible: every time I close the lid my IRC connection closes, so I can&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=210&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Because much of my work happens in IRC, I like to stay attached to the Freenode IRC server all the time. This was easy when I kept a desktop computer always on. But now that I use my laptop exclusively it&#8217;s impossible: every time I close the lid my IRC connection closes, so I can&#8217;t read what was said and nobody can send me a message.</p>
<p>So I went looking for something that could keep me online even while my laptop sleeps. I found <a href="http://code.google.com/p/dircproxy/">dircproxy, a Detachable IRC Proxy</a> that runs on Linux. It was easy to install from Aptitude in Debian but their version had one very annoying bug, so I compiled the current <a href="http://code.google.com/p/dircproxy/source/checkout">dircproxy source code</a> and installed the new binary by hand. Now everything is sweet.</p>
<p>When I want to connect to Freenode, I actually connect to dircproxy, which in turn connects to Freenode. When I quit, dircproxy keeps my IRC nickname online and logs everything that happens while I&#8217;m away. When I return, dircproxy plays back the logs so I know who said what when, including private messages. It&#8217;s like I was never gone.</p>
<p>Aside from solving the basic problem of intermittent connectivity, dircproxy has other benefits. You can make it keep complete logs apart from the ones it uses internally. You can specify different nicknames for when you detach. You can customize messages to send when you detach and reattach, as well as auto-replies for when you are away. It has a long list of options I don&#8217;t understand, but they look good.</p>
<p>I was discouraged when I found a lot of dead links, but the project has been uploaded to Google Code and it&#8217;s <a href="http://code.google.com/p/dircproxy/issues/list">getting some attention</a> again. The <a href="irc://irc.freenode.net/#dircproxy">Freenode dircproxy channel</a> has 15 members. I hope they can attract more developers to the project. They also need some new links to get them past the old, dead ones. Blog it if you try it.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=210&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/09/29/detachable-irc-proxy-dircproxy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>URL encoding in bash with perl</title>
		<link>http://andy.wordpress.com/2008/09/17/urlencode-in-bash-with-perl/</link>
		<comments>http://andy.wordpress.com/2008/09/17/urlencode-in-bash-with-perl/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 03:58:45 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=206</guid>
		<description><![CDATA[ENCODED=$(echo -n "value to encode" &#124; \
perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg');
echo $ENCODED
This command line percent-encodes strings, even binary data. You can use redirection. I used `echo -n` because I didn&#8217;t want a newline (%0A) tagged onto the end. I&#8217;ll be using this in a bash script to send HTTP POST data via curl.
My result is based on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=206&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><pre><code>ENCODED=$(echo -n "value to encode" | \
perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg');
echo $ENCODED</code></pre>
<p>This command line percent-encodes strings, even binary data. You can use redirection. I used <code>`echo -n`</code> because I didn&#8217;t want a newline (<code>%0A</code>) tagged onto the end. I&#8217;ll be using this in a bash script to send HTTP POST data via curl.</p>
<p>My result is based on <a href="http://support.internetconnection.net/CODE_LIBRARY/Perl_URL_Encode_and_Decode.shtml">Perl URL Encode &amp; Decode String</a>, modified to be run on the command line and updated to skip the four non-alphanumeric unreserved characters specified in <a href="http://tools.ietf.org/html/rfc3986#section-2.3">RFC 3986 Section 2.3</a>.</p>
<p>I don&#8217;t know if this depends on Perl multibyte settings or anything else. I might have just been lucky. Perl isn&#8217;t my thing.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/206/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/206/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/206/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=206&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/09/17/urlencode-in-bash-with-perl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
		<item>
		<title>Debian Humor</title>
		<link>http://andy.wordpress.com/2008/09/12/debian-humor/</link>
		<comments>http://andy.wordpress.com/2008/09/12/debian-humor/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 20:27:38 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[geek humor]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=203</guid>
		<description><![CDATA[Heh, the Lenny installer lists the keymap &#8220;US american&#8221; instead of &#8220;US English&#8221;&#8230; is that a joke on the Miss Teen USA flop?
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=203&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Heh, the Lenny installer lists the keymap &#8220;US american&#8221; instead of &#8220;US English&#8221;&#8230; is that a joke on the <a href="http://www.youtube.com/watch?v=lj3iNxZ8Dww">Miss Teen USA flop</a>?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/203/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/203/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/203/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=203&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/09/12/debian-humor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/35756b05226763c9539679ccec26a1c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Administrator</media:title>
		</media:content>
	</item>
	</channel>
</rss>