<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Random and Irrelevant &#187; Blosxom</title>
	<atom:link href="http://sgp.me.uk/tag/blosxom/feed/" rel="self" type="application/rss+xml" />
	<link>http://sgp.me.uk</link>
	<description>Sam Pearson's weblog - irrelevant content randomly updated</description>
	<lastBuildDate>Sun, 17 Jan 2010 18:57:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Wordpress</title>
		<link>http://sgp.me.uk/2008/11/19/wordpress/</link>
		<comments>http://sgp.me.uk/2008/11/19/wordpress/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 20:59:58 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Site News]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/?p=3</guid>
		<description><![CDATA[Hello and welcome to my new Wordpress-powered site!]]></description>
			<content:encoded><![CDATA[<p>Hello and welcome to my new Wordpress-powered site!</p>
<p>Rather than move my venerable Blosxom site here I am starting again with Wordpress.  Don&#8217;t get me wrong, I think Blosxom&#8217;s a fantastic tool and using it to run my site was both great fun and a valuable learning experience, but I really need something a bit more sophisticated now that doesn&#8217;t require quite the level of tinkering and hacking that Blosxom did.</p>
<p>My plan is to move all the old content into the new Wordpress installation, hopefully preserving the URL structure either directly or by using some <code>mod_rewrite</code> hackery.  I&#8217;m not sure when I&#8217;ll get the time to do this so in the meantime if anyone wants any of the old content (e.g. any of <a href="http://sgp.me.uk/tag/blosxom">the Blosxom plugins I wrote or modified</a>) please drop me a line at sam at sgp.me.uk and I&#8217;ll send you copies.</p>
<p>To be honest I&#8217;m not sure whether I&#8217;ll get back into blogging, but as this site has been up for six years I can&#8217;t imagine abandoning it completely.  I often think that I should write more and that I should get over some of the inhibitions I have about blogging longer and more thoughtful stuff, but a big reason at the moment is lack of time &#8211; a full-time job that&#8217;s not particularly amenable to personal blogging plus two small children keep my life pretty full!</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2008/11/19/wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Basic version control with wikieditish</title>
		<link>http://sgp.me.uk/2005/08/05/wikieditish-vc/</link>
		<comments>http://sgp.me.uk/2005/08/05/wikieditish-vc/#comments</comments>
		<pubDate>Fri, 05 Aug 2005 07:55:53 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/08/05/wikieditish-vc</guid>
		<description><![CDATA[At the <a href="http://www.stwerburghs.org.uk/">St Werburghs Community Centre</a>,  we use <a href="http://www.blosxom.com/">Blosxom</a> to power our website.  As the other staff needed to be able to update and add content quickly and with the minimum of fuss, I combined the <a href="http://www.blosxom.com/plugins/edit/wikieditish.htm" rel="related" title="The original wikieditish plugin">wikieditish</a> plugin with <a href="http://tinymce.moxiecode.com/" title="TinyMCE turns textareas into rich-text editing areas">TinyMCE</a> and a couple of other scripts to create a simple rich-text web interface to the site.]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://www.stwerburghs.org.uk/">St Werburghs Community Centre</a>,  we use <a href="http://www.blosxom.com/">Blosxom</a> to power our website.  As the other staff needed to be able to update and add content quickly and with the minimum of fuss, I combined the <a href="http://www.blosxom.com/plugins/edit/wikieditish.htm" rel="related" title="The original wikieditish plugin">wikieditish</a> plugin with <a href="http://tinymce.moxiecode.com/" title="TinyMCE turns textareas into rich-text editing areas">TinyMCE</a> and a couple of other scripts to create a simple rich-text web interface to the site.</p>
<p>During testing and the initial setup period, it became apparent that having the ability to roll an entry back to its original state after a dodgy edit would be a useful feature, so I added a few lines of code to wikieditish that supports a very simple kind of version control: every time a change is made, the plugin saves a copy of the current state of the post into a backup file.  This file is over-written each time so you can only revert to the last saved version, but this allowed staff some scope for experimentation with the knowledge that they could undo any serious mistakes quickly.</p>
<p>I thought that I&#8217;d make this version of the plugin available here in case any other blosxom users might find it useful, so download <a href="http://sgp.me.uk/files/wikieditishvc.zip" rel="enclosure">wikieditishvc.zip</a>, which contains the plugin and some basic flavour templates.  I have not renamed the plugin itself, it is still simply named wikieditish, but I&#8217;ve added a bit of extra documentation and updated the version number to differentiate it.  The version control behaviour is all optional and is off by default.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/08/05/wikieditish-vc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atom 1.0 Support for Blosxom</title>
		<link>http://sgp.me.uk/2005/08/04/atom-for-blosxom/</link>
		<comments>http://sgp.me.uk/2005/08/04/atom-for-blosxom/#comments</comments>
		<pubDate>Thu, 04 Aug 2005 15:36:12 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/08/04/atom-for-blosxom</guid>
		<description><![CDATA[Here is an updated atomfeed plugin that supports <a rel="related" href="http://atompub.org/2005/07/11/draft-ietf-atompub-format-10.html">Atom 1.0</a>: download <a href="http://sgp.me.uk/files/atomfeed">atomfeed</a>]]></description>
			<content:encoded><![CDATA[<p>Here is an updated atomfeed plugin that supports <a rel="related" href="http://atompub.org/2005/07/11/draft-ietf-atompub-format-10.html">Atom 1.0</a>: download <a href="http://sgp.me.uk/files/atomfeed">atomfeed</a>.</p>
<p>Changes since the last beta version:</p>
<ul>
<li>Moved variable configuration to head sub</li>
<li>Added simple entity-unescaping in generation of the <code></code> element</li>
<li>Adjusted the <code>xml:base</code> attribute to reflect <code>$id_domain</code> rather than <code>$blosxom::url</code>, and added the attribute at feed-level as well as for each entry</li>
</ul>
<p>This plugin offers basic support for most of the specification, which should be enough for the vast majority of users.  Not currently supported are the <code></code> and <code></code> elements.  <code></code> has been excluded as it seems an element more aimed at those publishing feeds aggregated from other feeds.  <code></code> probably could be supported, but would have been a bit of a kludge without the use of metadata &#8211; so anyone who needs this element could use the <a href="http://www.blosxom.com/plugins/meta/meta.htm">meta</a> plugin and a custom template.</p>
<p>Of course, Atom is designed to be flexible and extensible and there are already people out there imagining losts of uses for the format &#8211; see <a rel="related" href="http://www-128.ibm.com/developerworks/xml/library/x-atom10.html">this article</a> at <a href="http://www-130.ibm.com/developerworks/">IBM Developer Works</a> for some ideas (via <a rel="via" href="http://www.tbray.org/ongoing/When/200x/2005/07/14/Atom-1.0">Tim Bray</a>).  This plugin can never hope to cater for all possible uses, but it should be enough to provide the bare bones that others can build upon to meet their own needs.</p>
<p>The plugin comes with flavour templates and extensive documentation, including a list of all the variables it makes available for use in templates, notes on compatibility issues with other plugins and suchlike.  I&#8217;ve extracted some of the major points below, but see the plugin itself for more complete notes.</p>
<ul>
<li>The plugin has a large number of configurable variables and generates an even larger number of template variables.  However, it is designed to be usable with only minimal configuration: set the variables <code>$default_author</code> and <code>$feed_yr</code>, drop the plugin into your <code>$plugins_dir</code> and off you go.</li>
<li>The plugin is intended to work with nothing but <code>blosxom.cgi</code> and a standard perl installation, but it will perform better if the <code>XML::Parser</code> and <code>LWP</code> modules are installed, and if you are using a plugin like <a href="http://www.blosxom.com/plugins/indexing/entries_cache.htm">entries_cache</a> that stores the creation times of your posts.</li>
<li>If you are modifying the content of your entries using other plugins, particularly any that escape characters or add markup (like some of <a href="http://www.blosxom.com/plugins/text/index.html">these</a>), you should have them run before the atomfeed plugin.  You want atomfeed to get each post in the state that it would be sent to a normal web browser.</li>
<li>Similarly, if you intend to use the <a href="http://www.blosxom.com/plugins/general/config.htm">config</a> or <a href="http://www.blosxom.com/plugins/general/prefs.htm">prefs</a> plugins to modify any of the variables generated by the plugin, they will need to run before it.</li>
<li>Podcasters: enclosures are supported.  You need to link to your enclosure in the body of your weblog post, and provide the anchor tag with a <code>rel</code> attrubute of &#8220;enclosure&#8221;.  For example: <code>&lt;a rel=&quot;enclosure&quot; href=&quot;http://example.com/podcasts/august-05.mp3&quot;&gt;Podcast for 5th August&lt;/a&gt;</code>.  If you have the <code>LWP</code> module and you change the <code>$use_full_enclosures</code> configurable variable to &#8220;1&#8243;, the plugin will also include data on the length and content type of the enclosure (this is recommended as good practice).</li>
<li>You can include &#8220;related&#8221; and &#8220;via&#8221; links using a similar method &#8211; just ensure the anchor tags have an appropriate <code>rel</code> attribute for these links to be included in your feed as corresponding <code> </code>s.</li>
</ul>
<p>Please post any feedback you have to the <a href="http://groups.yahoo.com/group/blosxom/">blosxom mailing list</a>, maybe as a follow-up to <a href="http://groups.yahoo.com/group/blosxom/message/10858">this post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/08/04/atom-for-blosxom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beta support for Atom 1.0 in blosxom</title>
		<link>http://sgp.me.uk/2005/07/20/atom-1-beta/</link>
		<comments>http://sgp.me.uk/2005/07/20/atom-1-beta/#comments</comments>
		<pubDate>Wed, 20 Jul 2005 11:20:36 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/07/20/atom-1-beta</guid>
		<description><![CDATA[It's finished!  See <a href="http://sgp.me.uk/sam/2005/08/04/atom-for-blosxom" rel="related">this post</a> for more information, docs and download.]]></description>
			<content:encoded><![CDATA[<h3>atomfeed released!</h3>
<p>It&#8217;s finished!  See <a href="http://sgp.me.uk/sam/2005/08/04/atom-for-blosxom" rel="related">this post</a> for more information, docs and download.</p>
<h3>atomfeed-beta-6</h3>
<p>Download: <a href="http://sgp.me.uk/files/atomfeed-beta-6">atomfeed-beta-6</a></p>
<p>This is now pretty much ready for release: just a last check for suggestions and bugs.  It now supports the whole spec apart from <code><source></code>, which seems aimed at aggregators rather than bloggers, and <code><contributor></code>, which could easily be implemented if desired using the <a href="http://www.blosxom.com/plugins/meta/meta.htm" rel="related">meta plugin</a>.</p>
<p>Changes:</p>
<ul>
<li>Moved from using <code>class</code> to <code>rel</code> attributes in HTML anchors to identify enclosure/via/related links to include in the feed.  Just use the appropriate <code>rel</code> value &#8211; there&#8217;s no need to include the &#8220;atom-&#8221; prefix any longer.</li>
<li>Support for <code><summary></code>.  This uses a technique similar to that used by the <a href="http://www.blosxom.com/plugins/text/foreshortened.htm" rel="related">foreshortened plugin</a>.  It is excluded from the default templates in favour of a full-text <code><content></code> element.  I&#8217;ve temporarily placed the <code><summary></code> inside a comment in my feed if you&#8217;re interested in how it looks.</li>
<li><code><icon></code> and <code><logo></code> are now available as user-configurable variables.</li>
<li>Documentation is now included in the plugin &#8211; use <code>perldoc</code> or read directly.</li>
<li>Includes support for a stylesheet, like in the original 0.3 version.  Excluded by default.  You can also specify the MIME tpye of the stylesheet.</li>
</ul>
<p>As before, comments to <a href="http://groups.yahoo.com/group/blosxom/">the mailing list</a> please.</p>
<h3>atomfeed-beta-5</h3>
<p>Download <a href="http://sgp.me.uk/files/atomfeed-beta-5">atomfeed-beta-5</a></p>
<p>Changes in this version: support for <code>rel</code> attributes in <code>
<link></code> elements, including enclosures (based on <a href="http://www.evilgeniuschronicles.org/wordpress/">Dave Slusher</a>&#8217;s and <a href="http://www.asyserver.com/~kirwin/">Keith Irwin</a>&#8217;s <a href="http://www.evilgeniuschronicles.org/wordpress/2004/09/23/enclosures-plugin/" rel="related">enclosures plugin</a> for RSS 2).</p>
<ul>
<li>enlcosure: In the body of your post,  link to a file you would like to appear in your atom feed as an enclosure.  Make sure this link has a <code>class</code> attribute of &#8220;atom-enclosure&#8221;.  For extra points: if you have access to the LWP perl module, set the configurable variable <code>$use_full_enclosures</code> to &#8220;1&#8243; and atomfeed will attempt to find the content-type and length of your enclosure.  (Test: <a href="http://sgp.me.uk/files/pop.wav" rel="enclosure">This little audio file</a> should appear in my post as an enclosure.  The code for this link looks like this: <code><a href="http://sgp.me.uk/pop.wav" class="atom-enclosure">This little audio file</a></code>)</li>
<li>via: To include a link from your post in your atom feed as <code>
<link rel="via" ... /></code>, give it a <code>class</code> attribute of &#8220;atom-via&#8221;</li>
<li>related: similar to via, simply give a link a <code>class</code> attribute of &#8220;atom-related&#8221; for it to appear in your atom feed as an appropriate <code>
<link></code> element.</li>
</ul>
<p>Note: using the <code>class</code> attribute to identify these links may change in future versions.</p>
<h3>atomfeed-beta-4</h3>
<p>Download <a href="http://sgp.me.uk/files/atomfeed-beta-4">atomfeed-beta-4</a></p>
<p>Changes in this version (also posted to mailing list) based on suggestions from <a href="http://www.enilnomi.net/">Stu MacKenzie</a>:</p>
<ul>
<li>typo corrected</li>
<li><code>XML::Parser</code> is now a <code>require</code> rather than a <code>use</code> &#8211; those who don&#8217;t have this module can now use the plugin with the consequence that their entries will never be labelled as xhtml, only text or html, regardless of validity/well-formedness.</li>
<li>Regular expression for guessing text vs. mark-up is now: <code>m!</?[a-zA-Z0-9]+&#160;?/?>!</code>  This should hopefully catch pretty much anything that resembles mark-up.</li>
<li>The check in the <code>start()</code> sub for preloaded templates is now <code>or</code>&#8216;d with the call to <code>_load_templates</code>.  I&#8217;m not even sure if this check is necessary, as it doesn&#8217;t appear possible for any user-defined templates to have been loaded by this stage anyway, unless someone else knows better?</li>
</ul>
<h3>Major Revision: atomfeed-beta-3</h3>
<p>Since posting this entry, I have made a number of changes to the plugin.  It now contains support for the following additional elements:</p>
<ul>
<li><uri> and <email> for <author></li>
<li><category></li>
<li><rights></li>
</ul>
<p>Also, it checks <code>$blog_title</code>, <code>$blog_description</code> and each post&#8217;s <code>$title</code> for markup by looking for <del>left-side angle brackets</del> anything matching the regular expression <code>/<[a-zA-Z0-9]+>/</code>.  If it finds a match, it assumes that the variable contains markup and parses it as such, labelling it either html or xhtml depending on well-formedness.</p>
<p>You can <a href="http://sgp.me.uk/files/atomfeed-beta-3">download the new version here</a>.  The link below continues to point to the original version.  Documentation is still not finished, but the code is commented.  I&#8217;m particularly interested in feedback on the <code>_parse_markup</code> subroutine.</p>
<h3>Original post</h3>
<p>I&#8217;ve updated the atomfeed plugin for Blosxom to emit a basic Atom 1.0 feed.  It&#8217;s in beta; you can <a href="http://sgp.me.uk/files/atomfeed-beta">download it here</a>.  I&#8217;m running the plugin, so if you like you can see it in action by checking <a href="http://sgp.me.uk/sam/index.atom">my Atom feed</a>; the feed&#8217;s been checked with <a href="http://feedvalidator.org/">feedvalidator.org</a>&#8217;s new Atom 1.0 support.  Here are the notes I posted to the <a href="http://groups.yahoo.com/group/blosxom/">blosxom mailing list</a>:</p>
<p>The feed is very basic:  only the required elements along with a feed-level <code>
<link rel="self"/></code> pointing at the feed, a <code><subtitle></code> based on <code>$blog_description</code>, a <code><generator></code> element (updated 2005-07-21, but it was always in there), and each <code><entry></code> has a <code>
<published></code> as well as an <code><updated></code> element.</p>
<p>I have not yet updated documentation in the plugin.  I&#8217;m making it available so that anyone interested can take a look and make suggestions before I start looking at adding more support for optional elements and doing some other bugfixes.  When I&#8217;m happy with it I&#8217;ll re-write the docs, remove the BETA flag and post some instructions on my site.  Until then, use these notes as guidance if you want to use or test the plugin:</p>
<ul>
<li><code>$feed_yr</code> is now a configurable variable that MUST to be set to the year you want to see in your feed level <code><id></code> element.  This should be set once and then never changed.</li>
<li><code>
<published></code> is derived from the timestamp in <code>%blosxom::files</code>, and <code><updated></code> (entry level) is derived from a <code>stat()->mtime</code> on the actual file.  For these two elements to work as intended, you really should be running <a href="http://www.blosxom.com/plugins/indexing/entries_cache.htm">entries_cache</a> or similar, otherwise they will be the same.</li>
<li>entry level <code><id></code>&#8217;s are derived from <code>%blosxom::files</code>.  Again, for maximum conformance &#8211; to guarantee the <code><id></code> tags never change &#8211; is currently to use entries_cache or similar.</li>
<li>I decided not to worry about sniffing for plaintext entries as it seems to me that most blosxom users will have markup in their entries, so the mechanism for determining the type of <code><content></code> has remained bascially the same (UPDATED &#8211; see below).</li>
<li>I am still assuming that <code>$blog_title</code> and <code>$blog_description</code> contain only plaintext and no mark-up whatsoever.</li>
<li>the feed-level <code><updated></code> element must appear before the <code><entry></code>s, so I&#8217;ve taken the method used in the <a href="http://www.blosxom.com/plugins/syndication/rss10.htm">rss10</a> plugin to insert it in <code>$blosxom::output</code> in the foot subroutine using a placeholder.</li>
</ul>
<h3 id="u20050721">Update 2005-07-21 (1)</h3>
<p>I&#8217;ve removed the code that conditionally placed some HTML content into a <code>CDATA</code> section.  ALL content identfied as HTML will now be escaped.</p>
<h3>Feedback</h3>
<p>Please direct comments to the <a href="http://groups.yahoo.com/group/blosxom/">blosxom mailing list</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/07/20/atom-1-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://sgp.me.uk/files/pop.wav" length="4068" type="audio/x-wav" />
		</item>
		<item>
		<title>Technical Notes</title>
		<link>http://sgp.me.uk/2005/06/06/site-notes/</link>
		<comments>http://sgp.me.uk/2005/06/06/site-notes/#comments</comments>
		<pubDate>Mon, 06 Jun 2005 19:40:45 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[mod_rewrite]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/06/06/site-notes</guid>
		<description><![CDATA[This website is constructed with the help of <a href="http://www.apache.org/" title="The Apache Software Foundation">Apache</a>, <a href="http://www.blosxom.com/" title="Blosxom Prime">Blosxom</a> (with several plugins), <a href="http://sgp.me.uk/sam/2005/06/07/javascript-mailto" title="Javascript mailto links">a bit of javascript</a> and <a href="http://www.webstandards.org/" title="The Web Standards Project">Web Standards</a>.  It is very much a work in progress, but then point me to a weblog that isn't.  Here are some notes on the techniques used here.]]></description>
			<content:encoded><![CDATA[<p>This website is constructed with the help of <a title="The Apache Software Foundation" href="http://www.apache.org/">Apache</a>, <a title="Blosxom Prime" href="http://www.blosxom.com/">Blosxom</a> (with several plugins), <a title="Javascript mailto links" href="http://sgp.me.uk/sam/2005/06/07/javascript-mailto">a bit of javascript</a> and <a title="The Web Standards Project" href="http://www.webstandards.org/">Web Standards</a>.  It is very much a work in progress, but then point me to a weblog that isn&#8217;t.  Here are some notes on the techniques used here.</p>
<h3>Apache tricks</h3>
<p>I use a couple of simple <code>.htaccess</code> tricks to help create more human-friendly <abbr title="Uniform Resource Locator">URL</abbr>s.   Most of these hacks use <code>mod_rewrite</code>, and none are particularly esoteric.   The comments in the following extract from the site-wide <code>.htaccess</code> should explain what&#8217;s going on:</p>
<pre><code># This little trick allows me to rename the blosxom
# script from the cumbersome script.cgi format to
# something simpler (in this case, 'sam'):

  SetHandler cgi-script

# Rewrite rules:
RewriteEngine On

# As I prefer to use just 'sgp.me.uk' as the base
# domain, this rule redirects requests for
# 'www.sgp.me.uk'.  This both allows the use of the
# 'www.' prefix while hopefully encouraging people
# not to use it by visibly redirecting rather than
# simply rewriting.
RewriteCond %{HTTP_HOST} ^www\.sgp\.me\.uk$ [NC]
RewriteRule ^(.*)$ http://sgp.me.uk/$1 [R=301,L]

# Pages devoted to baby photos have been integrated
# into my blog. This rule preserves the old
# hierarchy and provides me with a really simple
# URL to point family to for these photos:
RewriteRule ^uma(.*)$ /sam/uma$1

# I liked the idea of losing the required
# 'index.$flavour' suffixes for rss feeds:
RewriteRule ^sam(.*)/rss$ /sam$1/index.rss
RewriteRule ^sam(.*)/rdf$ /sam$1/index.rdf</code></pre>
<h3>Blosxom configuration</h3>
<p>The site uses Blosxom 2.0.  The script has been slightly modified to remove the code used to escape <abbr title="HyperText Markup Language">HTML</abbr> when outputting <abbr title="Really Simple Syndication|RDF Site Summary">RSS</abbr> (<a title="Auto escaping HTML in RSS with blosxom" href="http://sgp.me.uk/sam/2005/04/16/auto-escaping-html">see this post</a> for more information on this and a patch).  I also use the following plugins, some of which I wrote myself:</p>
<ul>
<li><a href="http://sgp.me.uk/sam/2005/08/04/atom-for-blosxom">atomfeed</a></li>
<li><a href="http://www.rho.org.uk/blosxom/plugins/cooluri">cooluri</a></li>
<li><a href="http://www.blosxom.com/downloads/plugins/entries_index">entries_index</a></li>
<li><a href="http://fletcher.freeshell.org/computers/web/blosxom/find">find</a></li>
<li><a href="http://www.blosxom.com/downloads/plugins/flavourdir">flavourdir</a></li>
<li><a href="http://fletcher.freeshell.org/wiki/HidePlugin">hide</a> (<a href="http://sgp.me.uk/sam/2005/04/17/hide-with-date-urls">modified</a>)</li>
<li><a href="http://www.cobblers.net/files/lastmodified">lastmodified</a></li>
<li>logger (Awaiting write-up.  An old version can be found <a href="http://sgp.me.uk/files/blosxom_plugins/logger">here</a>.)</li>
<li><a href="http://sgp.me.uk/files/nice_title">nice_title</a></li>
<li><a href="http://www.blosxom.com/downloads/plugins/rss10">rss10</a></li>
<li><a href="http://sgp.me.uk/sam/2005/06/06/xhtml-mime-plugin">xhtmlmime</a></li>
</ul>
<h3>Standards</h3>
<p>The website is designed to be accessible in all of the major browsers (having said that, it does render best in <a title="Get Firefox!" href="http://www.mozilla.org/products/firefox/">Firefox</a> because of <code>-moz-border-radius</code>).  It uses vaguely semantic HTML for structure and <abbr title="Cascading Style Sheets">CSS</abbr> for layout.  The HTML template is written to validate against the <abbr title="eXtensible Hypertext Markup Language">XHTML</abbr> 1.0 Strict Doctype, and the <code>xhtmlmime</code> plugin means that non-well-formed entries quickly get picked up.  The RSS feeds are all validated against the <a title="Validate your Feeds!" href="http://feedvalidator.org/">Feed Validator</a> from time to time.</p>
<h3>To do</h3>
<ul>
<li><del>application/xhtml+xml</del> &#8211; <a href="http://sgp.me.uk/sam/2005/06/06/xhtml-mime-plugin">done</a>!</li>
<li><del>Sort out some better page titles</del> &#8211; <a href="http://sgp.me.uk/files/nice_title">done</a>!</li>
<li>Comments/Writebacks</li>
<li>Tags (think <a title="Social Bookmarks" href="http://del.icio.us">del.icio.us</a>).  Probably implement this using a hacked version of the <a href="http://www.blosxom.com/downloads/plugins/meta">meta plugin</a></li>
<li><del><a title="AtomEnabled.org" href="http://www.atomenabled.org/">Atom</a> feed, once the spec is finalised</del> &#8211; <a href="http://sgp.me.uk/sam/2005/08/04/atom-for-blosxom">done</a>!</li>
<li>More stuff as I think of it</li>
<li>Oh yeah, actually post some <em>real content</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/06/06/site-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blosxom and application/xhtml+xml</title>
		<link>http://sgp.me.uk/2005/06/06/xhtml-mime-plugin/</link>
		<comments>http://sgp.me.uk/2005/06/06/xhtml-mime-plugin/#comments</comments>
		<pubDate>Mon, 06 Jun 2005 14:23:04 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Blosxom]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/06/06/xhtml-mime-plugin</guid>
		<description><![CDATA[Since this website is written to the <abbr title="eXtensible HyperText Markup Language">XHTML</abbr> 1.0 Strict Doctype, I thought it would be nice to serve it with the correct <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> type to conforming user-agents.  I remembered hearing about a plugin called <code>xhtml</code> that would do this, but after a cursory search came up with nothing I decided that I'd just <a href="http://sgp.me.uk/files/xhtmlmime">write my own</a>.]]></description>
			<content:encoded><![CDATA[<p>Since this website is written to the <abbr title="eXtensible HyperText Markup Language">XHTML</abbr> 1.0 Strict Doctype, I thought it would be nice to serve it with the correct <abbr title="Multipurpose Internet Mail Extensions">MIME</abbr> type to conforming user-agents.  I remembered hearing about a plugin called <code>xhtml</code> that would do this, but after a cursory search came up with nothing I decided that I&#8217;d just write my own.</p>
<p><a href="http://sgp.me.uk/files/xhtmlmime">So here&#8217;s <code>xhtmlmime</code></a>.  It uses <code>CGI.pm</code> to sniff the <code>Accept:</code> <abbr title="HyperText Transfer Protocol">HTTP</abbr> header from the user-agent and then serves blosxom with the preferred MIME type.  There are two variables that need to be set:</p>
<ul>
<li><code>$flavours</code> needs to be set to a list of flavours upon which to act.  This defaults to empty, and the plugin will exit quietly until you set it.</li>
<li><code>$charset</code> should be set to the character encoding used on your weblog.  This defaults to <code>utf-8</code>.</li>
</ul>
<p>You can force the plugin to send the <code>application/xhtml+xml</code> MIME type by specifying a <abbr title="Uniform Resource Locator">URL</abbr> parameter of <code>mime=xhtml</code>.  Setting <code>mime</code> to anything else will result in the user getting <code>text/html</code>.</p>
<h3>Update 2005-07-21</h3>
<p>The plugin now exports a variable &#8211; <code>$xhtmlmime::meta_http_equiv</code> &#8211; for use in your head templates.  If you use the http-equiv <code></code> element, set it as follows:</p>
<pre><code></code></pre>
<p>And the plugin will ensure that it is set correctly.</p>
<h3>Warning</h3>
<p><a href="http://www.ilovett.com/blog/projects/blogging/blosxom-xhtml-mime">As noted by Bill Lovett</a>, serving as <code>application/xhtml+xml</code> raises a couple of issues.  The most important one is that this will lead to very strict interpretation of your pages by the web browser, so unless your pages are well-formed &#8211; contain no mistakes in the markup &#8211; your visitors will just get error messages!  Bad plugin!</p>
<p>So, before using this plugin you need to be confident that this is the case, and that you have some method for ensuring that only well-formed, valid markup ends up on your pages.</p>
<h3>Feedback</h3>
<p>If you have any feedback, either <a href="http://sgp.me.uk/sam/about/contact.html">contact me</a> directly or post a message to the <a href="http://groups.yahoo.com/group/blosxom/">blosxom mailing list</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/06/06/xhtml-mime-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hide plugin and date-based URLs</title>
		<link>http://sgp.me.uk/2005/04/17/hide-with-date-urls/</link>
		<comments>http://sgp.me.uk/2005/04/17/hide-with-date-urls/#comments</comments>
		<pubDate>Sun, 17 Apr 2005 09:42:31 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/04/17/hide-with-date-urls</guid>
		<description><![CDATA[The <a href="http://fletcher.freeshell.org/wiki/HidePlugin" title="The Hide plugin homepage">hide</a> plugin allows you to conceal certain posts and/or categories from the standard blosxom index pages - this works for either path or date based <abbr title="Uniform Resource Locator">URL</abbr>s.  A side effect of this is that if you are using date-based links like me - <code>http://example.com/YYYY/MM/DD/filename</code> - then the posts won't show up when you visit their permalinks - they'll only display when referenced with a URL like <code>http://example.com/path/to/filename.flavour</code>.]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://fletcher.freeshell.org/wiki/HidePlugin" title="The Hide plugin homepage">hide</a> plugin allows you to conceal certain posts and/or categories from the standard blosxom index pages &#8211; this works for either path or date based <abbr title="Uniform Resource Locator">URL</abbr>s.  A side effect of this is that if you are using date-based links like me &#8211; <code>http://example.com/YYYY/MM/DD/filename</code> &#8211; then the posts won&#8217;t show up when you visit their permalinks &#8211; they&#8217;ll only display when referenced with a URL like <code>http://example.com/path/to/filename.flavour</code>.</p>
<p>A solution is to add quick test to the <code>start</code> subroutine in the hide plugin that checks to see whether blosxom knows about any date-based path information:</p>
<pre><code>sub start {
  $blosxom::path_info_yr and return 0;
  ...</code></pre>
<p>As I don&#8217;t want posts in <a href="http://sgp.me.uk/sam/about/">about/</a> to display in the monthly archives, I used the <code>$path_info_da</code> variable, but you could just as easily use <code>$path_info_yr</code> or <code>$path_info_mo</code> instead to allow the posts to display on less specific date-based index pages.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/04/17/hide-with-date-urls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stripping out &lt;script&gt; tags from RSS feeds</title>
		<link>http://sgp.me.uk/2005/04/16/strip-script-tags/</link>
		<comments>http://sgp.me.uk/2005/04/16/strip-script-tags/#comments</comments>
		<pubDate>Sat, 16 Apr 2005 15:06:39 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/04/16/strip-script-tags</guid>
		<description><![CDATA[It's good practice not to include <code>&#60;script&#62;</code> tags inside your <abbr title="Really Simple Syndication">RSS</abbr> feeds, and <a href="http://feedvalidator.org/" title="Validate your feeds!">feedvalidator.org</a> will <a href="http://feedvalidator.org/docs/warning/ContainsScript.html" title="foo should not contain script tag">react</a> if you include them, so here's a <a href="http://sgp.me.uk/files/strip_script_tags" title="Download strip_script_tags">plugin</a> that will do this for you.]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s good practice not to include <code>&lt;script&gt;</code> tags inside your <abbr title="Really Simple Syndication">RSS</abbr> feeds, and <a href="http://feedvalidator.org/" title="Validate your feeds!">feedvalidator.org</a> will <a href="http://feedvalidator.org/docs/warning/ContainsScript.html" title="foo should not contain script tag">react</a> if you include them, so here&#8217;s a <a href="http://sgp.me.uk/files/strip_script_tags" title="Download strip_script_tags">plugin</a> that will do this for you.</p>
<p>By default, the plugin will attempt to strip <code>&lt;script&gt;</code> tags from the <code>&#036;body</code> of your posts when <code>&#036;blosxom::flavour</code> equals &#8220;rss&#8221;.  This is configurable, of course.</p>
<p>Note that the plugin is not designed as a security precaution and so the regular expression used to try and find the tags isn&#8217;t particularly sophisticated.  It is case-insensitive but expects to find the actual tags themselves to be unbroken by white space or line breaks, however the contents of the tags can be arranged in any way you please.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/04/16/strip-script-tags/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auto escaping HTML in RSS with blosxom</title>
		<link>http://sgp.me.uk/2005/04/16/auto-escaping-html/</link>
		<comments>http://sgp.me.uk/2005/04/16/auto-escaping-html/#comments</comments>
		<pubDate>Sat, 16 Apr 2005 12:34:17 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/04/16/auto-escaping-html</guid>
		<description><![CDATA[Out of the box, blosxom comes with simple <abbr title="HyperText Markup Language">HTML</abbr> and <abbr title="Really Simple Syndication">RSS</abbr> formats built in.  In order to get the RSS 0.91 feed set-up correctly, blosxom escapes HTML tags during the story generation phase where is finds an <abbr title="eXtensible Markup Language">XML</abbr> content-type (specifically: <code>$content_type =~ m{\Wxml$}</code>).]]></description>
			<content:encoded><![CDATA[<p>Out of the box, blosxom comes with simple <abbr title="HyperText Markup Language">HTML</abbr> and <abbr title="Really Simple Syndication">RSS</abbr> formats built in.  In order to get the RSS 0.91 feed set-up correctly, blosxom escapes HTML tags during the story generation phase where is finds an <abbr title="eXtensible Markup Language">XML</abbr> content-type (specifically: <code>$content_type =~ m{\Wxml$}</code>).</p>
<p>This feature is fine until you start experimenting with your RSS feeds when it can become a bug.  For example, if you decide to provide the full text for each story in a feed enclosed in a <code>CDATA</code> section, you don&#8217;t want this escaping to take place.  So I recommend that you move the escaping section from blosxom itself and place it into a plugin where you can then call it if you need it.</p>
<p>The escaping code is lines 378-384 in the standard blosxom 2.0 script.  Just for fun I&#8217;ve made a <a href="http://sgp.me.uk/files/blosxom-noescape.patch" title="Download blosxom-noescape.patch">patch</a>, but it&#8217;s probably simpler to just open a text editor and do it by hand.  Here&#8217;s a <a href="http://sgp.me.uk/files/escape_html" title="Download escape_html">simple plugin</a> that allows you to control whether or not the code is called during the story generation phase.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/04/16/auto-escaping-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Untainting blosxom</title>
		<link>http://sgp.me.uk/2005/03/14/untainting-blosxom/</link>
		<comments>http://sgp.me.uk/2005/03/14/untainting-blosxom/#comments</comments>
		<pubDate>Mon, 14 Mar 2005 16:11:03 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Blosxom]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://sgp.me.uk/2005/03/14/untainting-blosxom</guid>
		<description><![CDATA[If you want to run <a href="http://www.blosxom.com/" title="The Blosxom homepage">Blosxom</a> in taint mode (using the <code>-T</code> switch), you'll hit some problems with 2.0 as it comes out of the box.  See below the fold for a patch.]]></description>
			<content:encoded><![CDATA[<p>If you want to run <a href="http://www.blosxom.com/" title="The Blosxom homepage">Blosxom</a> in taint mode (using the <code>-T</code> switch), you&#8217;ll hit some problems with 2.0 as it comes out of the box.  <a href="http://www.scalableinformatics.com">Joe Landman</a> posted a patch dealing with one issue on the <a href="http://groups.yahoo.com/group/blosxom/message/10344" title="link to Joe's post and patch">mailing list</a> over the weekend, but if you&#8217;re using any plugins then you&#8217;ll immediately encounter another problem when blosxom does a <code>readdir()</code> on your <code>$plugins_dir</code>.  Here&#8217;s <a href="http://sgp.me.uk/files/untaint.patch" title="untaint.patch">a patch</a> that solves both these issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://sgp.me.uk/2005/03/14/untainting-blosxom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
