<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Andy Skelton &#187; WordPress</title>
	<atom:link href="http://andy.wordpress.com/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://andy.wordpress.com</link>
	<description>Just another WordPress hacker</description>
	<lastBuildDate>Sat, 19 Dec 2009 15:34:11 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='andy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/e6cf065746f46ab81c9bfb04d3358079?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Andy Skelton &#187; WordPress</title>
		<link>http://andy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://andy.wordpress.com/osd.xml" title="Andy Skelton" />
		<item>
		<title>WordPress Search plugin</title>
		<link>http://andy.wordpress.com/2009/08/21/wordpress-search-plugin/</link>
		<comments>http://andy.wordpress.com/2009/08/21/wordpress-search-plugin/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 16:15:30 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Fulltext]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Custom Search]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sphinx]]></category>
		<category><![CDATA[Sphinx Search]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=282</guid>
		<description><![CDATA[My Google Summer of Code 2009 student, Justin Shreve, has done an excellent job creating a new search API for WordPress. We hope this API will be integrated into the WordPress core because it would simplify replacing the core search functionality and encourage developers to create many more options for searching blogs.
Justin&#8217;s Search plugin is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=282&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My Google Summer of Code 2009 student, <a href="http://justinshreve.com/">Justin Shreve</a>, has done an excellent job creating a new search <abbr title="Application Programming Interface">API</abbr> for WordPress. We hope this API will be integrated into the WordPress core because it would simplify replacing the core search functionality and encourage developers to create many more options for searching blogs.</p>
<p>Justin&#8217;s <a href="http://wordpress.org/extend/plugins/search/">Search</a> plugin is actually a package of three plugins. The first plugin installs the API that lets other plugins do the searching. The other two plugins use the API to provide search systems that we think will please most users who are dissatisfied with the built-in WordPress search results: MySQL Fulltext and <a href="http://www.google.com/coop/cse/">Google Custom Search</a>. (The Google plugin  requires a Google account.) For the search-savvy, Justin also wrote a <a href="http://sphinxsearch.com/">Sphinx</a>-based plugin, <a href="http://wordpress.org/extend/plugins/sphinx-search/">Sphinx Search</a>. This last one involves installing additional software on the server.</p>
<p>I&#8217;m running the Fulltext plugin on <a href="http://skeltoac.com/">my personal blog</a> so you can try it. Enter a search in the sidebar. On the search results page you can refine your search by specifying whether to search posts, pages, and comments. You can also sort the results by relevance, date, or alphabet. The Advanced Search link leads to a form where you can specify author, categories, tags, and date range.</p>
<p>Self-hosted WordPress users can install <a href="http://wordpress.org/extend/plugins/search/">Search</a>. (It is not available for WordPress.com&#8230; yet.) After activating the main Search plugin you must also activate one of the other plugins: MySQL Fulltext, Google Custom Search, or Sphinx Search. We are anxious to know what you think of it. Justin plans to continue to improve the search system so he will need lots of user feedback.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/282/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=282&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2009/08/21/wordpress-search-plugin/feed/</wfw:commentRss>
		<slash:comments>21</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>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>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>Batcache for WordPress</title>
		<link>http://andy.wordpress.com/2008/06/22/batcache-for-wordpress/</link>
		<comments>http://andy.wordpress.com/2008/06/22/batcache-for-wordpress/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 18:47:40 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Automattic]]></category>
		<category><![CDATA[Batcache]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress.com]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=180</guid>
		<description><![CDATA[[I meant to publicize this after a period of quiet testing and feedback but the watchdogs at WLTC upended the kitten bag and forced my hand. Batcache comes with all the usual disclaimers. If you try it on a production server expect the moon to fall on your head.]
People say WordPress can&#8217;t perform under pressure. The way most people [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=180&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>[I meant to publicize this after a period of quiet testing and feedback but the watchdogs at WLTC <a href="http://weblogtoolscollection.com/archives/2008/06/22/andy-skelton-introduces-batcache/">upended the kitten bag</a> and forced my hand. <a href="http://wordpress.org/extend/plugins/batcache/">Batcache</a> comes with all the usual disclaimers. If you try it on a production server expect the moon to fall on your head.]</p>
<p>People say WordPress can&#8217;t perform under pressure. The way most people set it up, that&#8217;s true. For those who host their blog for $7.99 a month (do they also run Vista on an 8086?) the best bet is to serve static pages rather than dynamic pages. <a href="http://wordpress.org/extend/plugins/wp-super-cache/">Donncha&#8217;s WP-Super-Cache</a> does that brilliantly. I&#8217;ve seen it raise a server&#8217;s capacity for blog traffic by <em>one hundred times or more</em>. It&#8217;s a cheapskate&#8217;s dream.</p>
<p>WP-Super-Cache is good for anyone with a single web server with a writable <code>wp-content/cache</code> directory. To them, the majority, I say use WP-Super-Cache. What about enterprises with multiple servers that don&#8217;t share disk space? If you can&#8217;t or won&#8217;t use file-based caching, I have something for you. It&#8217;s based on what WordPress.com uses. It&#8217;s Batcache.</p>
<h3>Batcache will protect you</h3>
<p>Batcache implements a very simplistic caching model that shields your database and web servers from traffic spikes: after a document has been requested X times in Y seconds, the document is cached for Z seconds and all new users are served the cached copy.</p>
<p>New users are defined as anybody who hasn&#8217;t interacted with your domain&#8212;once they&#8217;ve left a comment or logged in, their cookies will ensure they get fresh pages. People arriving from Digg won&#8217;t notice that the comments are a minute or two behind but they&#8217;ll appreciate your site being up.</p>
<p>You don&#8217;t need PHP skills to install Batcache but you do have to get Memcached working first. That can be easy or hard. We use Memcached because it&#8217;s <em>awesome</em>. Once you know how to install it you can create the same kind of distributed, persistent cache that underpin web giants like WordPress.com and Facebook.</p>
<h3>What Batcache does</h3>
<p>The first thing Batcache does is decide whether the visitor is eligible to receive cached documents. If their cookies don&#8217;t show evidence of previous interaction on that domain they are eligible. Next it decides whether the request is eligible for caching. For example, Batcache won&#8217;t interfere when a comment is being posted.</p>
<p>If the visitor and the request are eligible, Batcache enters its traffic metering routine. By default it looks for URLs that receive more than two hits from unrecognized users in two minutes. When a URL&#8217;s traffic crosses that threshold, Batcache caches the document for five minutes. You can configure these numbers any way you like, or turn off traffic metering and send documents right to the cache.</p>
<p>Once a document has been cached, it is served to eligible visitors until it expires. This is one place where Batcache is different. Most other caches delete cached documents as soon as the underlying data changes. Batcache doesn&#8217;t care if it&#8217;s serving old data because &#8220;old&#8221; is relative (and configurable).</p>
<h3>What Batcache doesn&#8217;t do</h3>
<p>It doesn&#8217;t guarantee a current document. I repeat this because reliable cache invalidation is a typical feature that was purposefully omitted from Batcache. There is a routine in the included plugin that tries to trigger regeneration of updated and commented posts but in some situations a document will still live in the cache until it expires. This routine will be improved over time but it is only an afterthought.</p>
<p>Batcache doesn&#8217;t automatically know the difference between document variants. Variants exist when two requests for the same URL can yield two different documents. Common examples are user agent-dependent variants formatted for mobile devices and referrer-dependent variants with Google search terms highlighted. In these cases you MUST take extra steps to inform Batcache about variants to avoid serving a variant to the wrong audience. The source code includes examples of how to turn off caching of uncommon variants (search term highlighting) or cache common variants separately (mobile versions).</p>
<h3>Where Batcache is going</h3>
<p>I want to make Batcache easier to configure by adding a configuration page and storing the main settings in memcached as well as the database. This way you won&#8217;t have to deploy a code change to update the configuration. However, conditional configurations (e.g. &#8220;never cache URLs matching some pattern&#8221;) and variant detection will probably always live in PHP.</p>
<p>I want to have Batcache serve correct headers more reliably. On some servers it can detect the headers that were sent with a newly generated page and serve them again from the cache. But when that doesn&#8217;t work you will have to take extra steps to serve certain headers. For example you must specify the Content-Encoding header in the Batcache configuration or add it to <code>php.ini</code>. I want this sort of thing to be done automatically for all server setups.</p>
<p>I know that Batcache is not ideal for most WordPress installations. It saves us a lot of headaches and expense at WordPress.com, so maybe it can help other large installations. If you try it, I want to hear from you whether it worked and how well. I am also keen to see what new configurations and modifications you use.</p>
<p>As always, this software is provided without claims or warrantees. It&#8217;s so experimental that it doesn&#8217;t even have a version number! Until the project grows to need its own blog, keep an eye on the <a href="http://dev.wp-plugins.org/browser/batcache/trunk">Trac browser</a> for updates.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/180/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/180/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/180/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/180/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=180&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/06/22/batcache-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>15</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>Austin WordPress Professional Office</title>
		<link>http://andy.wordpress.com/2008/05/27/austin-wordpress-professional-office/</link>
		<comments>http://andy.wordpress.com/2008/05/27/austin-wordpress-professional-office/#comments</comments>
		<pubDate>Wed, 28 May 2008 01:48:45 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Austin]]></category>
		<category><![CDATA[Automattic]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=176</guid>
		<description><![CDATA[We&#8217;re thinking of opening an Automattic office in Austin. Being the only local employee, I imagine sharing the space with independent/satellite WordPress professionals. Are you interested?
Candidates should be earning all or part of their income working on WordPress (developing, designing, or servicing) and be able to defend their choice of editor. Benefits may include collaboration, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=176&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We&#8217;re thinking of opening an Automattic office in Austin. Being the only local employee, I imagine sharing the space with independent/satellite WordPress professionals. Are you interested?</p>
<p>Candidates should be earning all or part of their income working on WordPress (developing, designing, or servicing) and be able to defend their choice of editor. Benefits may include collaboration, networking, social opportunities, fortune, fame, romance, and French pressed Ruta Maya coffee.</p>
<p>We don&#8217;t have any locations in mind yet. Please include your home zip code for geographical tabulation. If you can recommend a cool location with flexible space, good bandwidth, and no long-term commitments, please do.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/176/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/176/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=176&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/05/27/austin-wordpress-professional-office/feed/</wfw:commentRss>
		<slash:comments>34</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>Attachment Stats</title>
		<link>http://andy.wordpress.com/2008/04/12/attachment-stats/</link>
		<comments>http://andy.wordpress.com/2008/04/12/attachment-stats/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 23:53:17 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Stats]]></category>
		<category><![CDATA[Uploader]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[media]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=173</guid>
		<description><![CDATA[WordPress 2.5 with its new uploader results in a lot more post attachments. Until now, the Stats plugin didn&#8217;t keep track of which attachments were viewed. Stats 1.2.1 contains a minor change that lets us show you which of your attachments are most popular.
Remember, attachment views are only counted if you link to the attachment&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=173&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>WordPress 2.5 with its new uploader results in a lot more post attachments. Until now, the <a href="http://wordpress.org/extend/plugins/stats/">Stats</a> plugin didn&#8217;t keep track of which attachments were viewed. Stats 1.2.1 contains a <a href="http://dev.wp-plugins.org/changeset/40064/stats/trunk/stats.php">minor change</a> that lets us show you which of your attachments are most popular.</p>
<p>Remember, attachment views are only counted if you link to the attachment&#8217;s Post URL when inserting from the uploader.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/173/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/173/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/173/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=173&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/04/12/attachment-stats/feed/</wfw:commentRss>
		<slash:comments>1</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>Cache with Versioned Tags</title>
		<link>http://andy.wordpress.com/2008/03/01/cache-with-versioned-tags/</link>
		<comments>http://andy.wordpress.com/2008/03/01/cache-with-versioned-tags/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 02:00:25 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=172</guid>
		<description><![CDATA[A couple of years ago I had an idea: a tagged cache with versioned tags. It works just like an associative array but with an added hidden layer in the cache interface that salts the key with any tags provided and their version numbers. This facilitates classified mass extinctions by the simple act of incrementing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=172&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A couple of years ago I had an idea: a tagged cache with versioned tags. It works just like an associative array but with an added hidden layer in the cache interface that salts the key with any tags provided and their version numbers. This facilitates classified mass extinctions by the simple act of incrementing a tag version. The entire cache or any tagged subset can be &#8220;flushed&#8221; in this way. I call it extinction because although the items are dead (irretrievable by a normal read operation) they are not removed and may still be exhumed&#8212;Jurassic Park-style&#8212;until an expiration or eviction takes them out.</p>
<p>WordPress.com depends largely on <a href="http://www.danga.com/memcached/">memcached</a> clusters so I modified the <a href="http://dev.wp-plugins.org/browser/memcached/trunk">WordPress memcached client</a> to operate with versioned tags and it did work as planned. It is not operating today because the core changes needed to make the benefits of the new cache outweigh the performance cost never happened. WordPress does use a &#8220;cache group&#8221; concept and we have used it successfully to create different cache scopes but it does not use a multi-tagging cache and it does not have a mechanism to flush groups of items. However, let&#8217;s keep WordPress in mind because the basic data structures of a blog are simple and thus good example fodder.</p>
<p>For one usage example, there could be a &#8220;posts&#8221; tag indicating that the cached resource derives from data in the posts table and you would increment the &#8220;posts&#8221; version every time you changed that table. When you ask the cache for items tagged &#8220;posts&#8221;, it will only find resources that were stored since the last time the &#8220;posts&#8221; tag was incremented by a flush. Any operation that changes the table&#8217;s structure or its contents would trigger a flush of the &#8220;posts&#8221; tag.</p>
<p>To add another degree of utility, you can apply any number of tags when storing a resource in the cache. Thus if you stored a rendered page, you could tag it with every table queried while generating that resource and rely on tag flushes instead of specifically deleting the item from the cache. For finer-grained control, tags could be specified for individual table rows (e.g. &#8220;posts:142&#8243;) but the detrimental effects of increased version array size would have to be outweighed by the benefits of excluding the rest of the &#8220;posts&#8221; items from an extinction.</p>
<p>The central idea behind this scheme is that you should have multiple paths to remove a key or set of keys without knowing which keys are stored in the cache. If your caching substrate has a good eviction scheme this works. If you can reliably determine the generating factors (tables queried, etc.) for every cached resource, you can forget about cache expirations and let the tags do all the work.</p>
<p>There is also the concept of &#8220;tag scope&#8221;. It is not universally applicable but in WordPress MU, where each blog has its own tables, each blog must also have its own array of tag versions so that extinctions are not unnecessarily applied out of context. There are also certain global keys that never vary between blogs. By specifying the scope of some tags as local to the blog and others as global, and storing global and local versions separately, we can specify whether to increment a tag version on one or all blogs.</p>
<p>Each blog would have a local array version that can be incremented to flush all tags in the local scope, making it easy to clear out one blog&#8217;s poisoned cache. A global array version allows us to trigger a universal cache extinction. With many dedicated memcached servers, this would be a neat time-saver.</p>
<p>Metaversions are the cherry on top: a global &#8220;metaversion&#8221; for any local tag can be stored in local as well as global version arrays. The local metaversion is checked against the global metaversion and if they differ, the local version and the local metaversion are incremented. Thus when the &#8220;posts&#8221; tag metaversion is incremented in the global array, each local &#8220;posts&#8221; version will be incremented. This way, we can trigger mass extinctions of any tag across all scopes.</p>
<p>My experimental client did all of this but it increased page generation times by 5-10%. I am still sure that if the software made smart use of cache tags we could have seen great benefits. Unfortunately, with a package as large as WordPress, the time to improve cache utilization would be many times longer than the two weekends I spent hacking the cache client.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/172/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/172/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/172/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=172&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/03/01/cache-with-versioned-tags/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>Austin WordPress users, mark your calendars!</title>
		<link>http://andy.wordpress.com/2008/02/12/austin-wordpress-users-mark-your-calendars/</link>
		<comments>http://andy.wordpress.com/2008/02/12/austin-wordpress-users-mark-your-calendars/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 04:33:37 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Austin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/?p=171</guid>
		<description><![CDATA[Today at the GeekAustin/Dorkbot happy hour I met up with LinearB who said that on the second third Tuesday in May GeekAustin would like to co-host a social event with WordPress. I know Austin has a lot of WordPress users and consultants that don&#8217;t typically come out for the social events so I&#8217;m putting the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=171&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Today at the GeekAustin/Dorkbot happy hour I met up with LinearB who said that on the <del datetime="2008-02-15T22:27:05+00:00">second</del> <ins datetime="2008-02-15T22:27:05+00:00">third</ins> Tuesday in May GeekAustin would like to co-host a <a href="http://upcoming.yahoo.com/event/433081/">social event with WordPress</a>. I know Austin has a lot of WordPress users and consultants that don&#8217;t typically come out for the social events so I&#8217;m putting the word out early. How about it?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/171/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/171/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=171&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/02/12/austin-wordpress-users-mark-your-calendars/feed/</wfw:commentRss>
		<slash:comments>15</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>Apology: Not Useless Code</title>
		<link>http://andy.wordpress.com/2008/01/11/apology-not-useless-code/</link>
		<comments>http://andy.wordpress.com/2008/01/11/apology-not-useless-code/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 23:38:12 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[correction]]></category>

		<guid isPermaLink="false">http://andy.wordpress.com/2008/01/11/apology-not-useless-code/</guid>
		<description><![CDATA[at the top of the main loop, have_posts() and is_404() are mutually exclusive.
Useless Code in WordPress Themes
That is true sometimes, but not always. More specifically, it can be false when a non-permalink URL seeks a non-existent post. For example, /?p=-1.
Issue a 404 if a permalink request doesn&#8217;t match any posts.  Don&#8217;t issue a 404 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=168&subd=andy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><blockquote><p>at the top of the main loop, have_posts() and is_404() are mutually exclusive.</p>
<p><cite><a href="http://andy.wordpress.com/2006/08/13/useless-code-in-wordpress-themes/">Useless Code in WordPress Themes</a></cite></p></blockquote>
<p>That is true sometimes, but not always. More specifically, it can be false when a non-permalink URL seeks a non-existent post. For example, <code>/?p=-1</code>.</p>
<blockquote><p>Issue a 404 if a permalink request doesn&#8217;t match any posts.  Don&#8217;t issue a 404 if one was already issued, if the request was a search, or if the request was a regular query string request rather than a permalink request.</p>
<p><cite><a href="http://trac.wordpress.org/browser/tags/2.3.2/wp-includes/classes.php#L278">classes.php</a></cite></p></blockquote>
<p>Now it makes sense that the single.php template file would check <code>have_posts()</code>. Let the healing begin.</p>
<p>(Are there any documented examples of this bug occurring outside of single.php?)</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/andy.wordpress.com/168/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/andy.wordpress.com/168/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andy.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andy.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/andy.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/andy.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/andy.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/andy.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/andy.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/andy.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/andy.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/andy.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andy.wordpress.com&blog=155&post=168&subd=andy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://andy.wordpress.com/2008/01/11/apology-not-useless-code/feed/</wfw:commentRss>
		<slash:comments>5</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>