<?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>Luke Maurits &#187; pyblosxom</title>
	<atom:link href="http://luke.maurits.id.au/blog/tag/pyblosxom/feed/" rel="self" type="application/rss+xml" />
	<link>http://luke.maurits.id.au</link>
	<description>Assorted geekery</description>
	<lastBuildDate>Sun, 06 Mar 2011 06:52:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Goodbye PyBlosxom, Hello Cherryblosxom!</title>
		<link>http://luke.maurits.id.au/blog/2008/09/goodbye-pyblosxom-hello-cherryblosxom/</link>
		<comments>http://luke.maurits.id.au/blog/2008/09/goodbye-pyblosxom-hello-cherryblosxom/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 15:08:22 +0000</pubDate>
		<dc:creator>Luke Maurits</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cherryblosxom]]></category>
		<category><![CDATA[pyblosxom]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://luke.maurits.id.au/blog/2008/09/goodbye-pyblosxom-hello-cherryblosxom/</guid>
		<description><![CDATA[As I said I would, I had a poke around the relevant PyBlosxom plugins in an attempt to figure out why the anti-spam question feature was playing havoc.  To cut a long story short, I did not succeed.  In the process of failing, I was driven near insane by what seemed like inexplicably [...]]]></description>
			<content:encoded><![CDATA[<p>As I said I would, I had a poke around the relevant <a href="http://pyblosxom.sourceforge.net/">PyBlosxom</a> plugins in an attempt to figure out why the anti-spam question feature was playing havoc.  To cut a long story short, I did not succeed.  In the process of failing, I was driven near insane by what seemed like inexplicably inconsistent behaviour by Pyblosxom.  This might be due to PyBlosxom being a low quality product or it might be due to me not understanding what I was doing.</p>
<p>Regardless of the cause, I decided that a change was due.  I wanted to use a blogging platform whose ability to &#8220;just work&#8221; I could have some degree of trust in.  I turned, first, to <a href="http://wordpress.org/">Wordpress</a>, because, well, everybody else does (mass popularity of software, in my experience, is a terrible metric for software <em>quality</em>, but generally is a good metric for &#8220;ease of just getting the damn thing to do what you basically want it to do&#8221;).  One minute through their &#8220;<a href="http://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install">famous five minute install</a>&#8221; I discovered that Wordpress <em>only</em> works with <a href="http://www.mysql.org">MySQL</a> as a backend database.  Seriously lame.  MySQL is one of the aforementioned cases of software popularity being a terrible metric for software quality.  My server uses <a href="http://www.postgresql.org">PostgreSQL</a> and I really didn&#8217;t feel like installing a second RDBMS<br />
on an already over-strained machine just for a blog.  Heck, I really didn&#8217;t want my blog to rely on a database at all.</p>
<p>So I bit the bullet and did something similar to what I threatened to do back when I first set up commenting in PyBlosxom, and wrote my own blogging platform, in Python, using <a href="http://www.cherrypy.org">CherryPy</a> to handle the HTTP request routing stuff and <a href="http://www.cheetahtemplate.org">Cheetah</a><br />
to handle the templating.  This new platform is entirely filesystem based, like PyBlosxom and <a href="http://www.blosxom.com/">Blosxom</a> before it &#8211; no databases are necessary.  I&#8217;m tentatively naming it &#8220;CherryBlosxom&#8221;, acknowledging the fact that CherryPy does all the<br />
hard stuff and that it follows in the idealogical footsteps of Blosxom and PyBlosxom, being that it tries to be as small and simple as possible.</p>
<p>If you&#8217;re reading this entry, it means that I&#8217;ve made the switch and this blog is now powered by CherryBlosxom &#8211; an extremely alpha version of CherryBlossxom, which has not been thoroughly debugged and is missing some features (like RSS and Atom feeds, which I hope to eventually provide with <a href="http://www.luke.maurits.id.au/software/feedformatter/">feedformatter</a>).  It&#8217;s entirely possible that features like archive links and tag links and commenting will not work entirely properly just yet.  I am hoping to have the most severe bugs taken care of pretty quickly, in which case I&#8217;ll call what&#8217;s there 0.1 and formally release it.  In the mean time, please try to use the blog like you usually would and if anything breaks <a href="/email.html">drop me a line</a>.  I&#8217;m looking forward to making CherryBlosxom a polished product!</p>
]]></content:encoded>
			<wfw:commentRss>http://luke.maurits.id.au/blog/2008/09/goodbye-pyblosxom-hello-cherryblosxom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Commenting feature broken</title>
		<link>http://luke.maurits.id.au/blog/2008/09/commenting-feature-broken/</link>
		<comments>http://luke.maurits.id.au/blog/2008/09/commenting-feature-broken/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 07:12:00 +0000</pubDate>
		<dc:creator>Luke Maurits</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pyblosxom]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://luke.maurits.id.au/blog/2008/09/commenting-feature-broken/</guid>
		<description><![CDATA[I&#8217;ve just noticed this morning that the anti-spam questions on this blog&#8217;s comment form are playing up, refusing to accept what are in fact correct answers and hence making it effectively impossible to comment on anything.  I have no idea what is causing this or how long this has been the situation &#8211; I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just noticed this morning that the anti-spam questions on this blog&#8217;s comment form are playing up, refusing to accept what are in fact correct answers and hence making it effectively impossible to comment on anything.  I have no idea what is causing this or how long this has been the situation &#8211; I&#8217;m working on fixing it as quickly as I can spare time for it at the moment, hopefully I&#8217;ll have something figured out soon.  Naturally, if the fix happens to be interesting I&#8217;ll post details here.  Apologies to anybody who has had comments lost on account of this.  If you desperately want to comment on something in the mean time, <a href="/email.html">email your comment to me</a> and I&#8217;ll happily add it manually for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://luke.maurits.id.au/blog/2008/09/commenting-feature-broken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pyblosxom now running as FastCGI via flup</title>
		<link>http://luke.maurits.id.au/blog/2008/08/pyblosxom-now-running-as-fastcgi-via-flup/</link>
		<comments>http://luke.maurits.id.au/blog/2008/08/pyblosxom-now-running-as-fastcgi-via-flup/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 12:42:00 +0000</pubDate>
		<dc:creator>Luke Maurits</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[flup]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[pyblosxom]]></category>
		<category><![CDATA[web technology]]></category>

		<guid isPermaLink="false">http://luke.maurits.id.au/blog/2008/08/pyblosxom-now-running-as-fastcgi-via-flup/</guid>
		<description><![CDATA[As I suggested I might a few months back, I have recently got around to running this Pyblosxom blog as a FastCGI process.  The increase in speed is really impressive.  Unless you happen to visit during a particularly busy period, the first time you hit this site a persistent Pyblosxom process will be [...]]]></description>
			<content:encoded><![CDATA[<p>As I <a href="http://luke.maurits.id.au/blog/2008/04/commenting-feature-added-pyblosxom-headaches/">suggested I might</a> a few months back, I have recently got around to running this <a href="http://pyblosxom.sourceforge.net">Pyblosxom</a> blog as a <a href="www.fastcgi.com">FastCGI</a> process.  The increase in speed is really impressive.  Unless you happen to visit during a particularly busy period, the first time you hit this site a persistent Pyblosxom process will be started and will then hang around to service your subsequent requests, making them nice and speedy.  This is made possible with Allan Saddi&#8217;s <a href="http://trac.saddi.com/flup">flup library</a>, which lets Python <a href="http://www.wsgi.org">WSGI</a> applications talk to webservers via FastCGI or SCGI.  I&#8217;ll go through the details of my setup (which uses <a href="http://www.lighttpd.net">lighttpd</a> as its webserver) for the sake of other people who want to do the same</p>
<p>There are basically two steps involved:  writing a FastCGI script which wraps the Pyblosxom WSGI app up in flup, and then configuring lighttpd to map a given URL to this script.</p>
<p>Here&#8217;s my FastCGI script (with modified paths):</p>
<pre><code> #!/usr/pkg/bin/python2.4
import sys
import Pyblosxom.pyblosxom
from flup.server.fcgi import WSGIServer

sys.path.insert(0, "/path/to/pyblosxom_config_file")
sys.path.insert(0, "/path/to/pyblosxom/codebase")
app = Pyblosxom.pyblosxom.PyBlosxomWSGIApp()
WSGIServer(app).run()
</code></pre>
<p>Pay attention to the shebang line: <tt>/usr/pkg/bin/python2.4</tt> will only work on NetBSD systems.  <tt>/usr/bin/env python</tt> should work anywhere and is better form in general.  The second call to <tt>sys.path.insert</tt> is only necessary if you have Pyblosxom itself sitting around in a directory somewhere rather than installed as a Python library in the <tt>site-packages</tt> directory.  All if this is discussed on the Pyblosxom page <a href="http://pyblosxom.sourceforge.net/1.4/manual/install_wsgi.html">here</a>, where they write a more or less identical script, minus the use of <tt>flup.server.fcgi.WSGIServer</tt>.</p>
<p>Here&#8217;s the relevant part of my lighttpd.conf:</p>
<pre><code>$HTTP["host"] == "www.luke.maurits.id.au" {
        fastcgi.server = (
                "/blog" =&gt; (
                        "script.fcgi" =&gt; (
                                "bin-path"              =&gt; "/path/to/fastcgiscript.py",
                                "socket"                =&gt; "/tmp/pyblosxom.sock",
                                "check-local"   	=&gt; "disable",
                                "disable-time"          =&gt; 1,
                                "min-procs"             =&gt; 1,
                                "max-procs"             =&gt; 32,
                                "max-load-per-proc"     =&gt; 4,
                                "idle-timeout"          =&gt; 60
                        ),
                ),
        )
}
</code></pre>
<p>This maps the URI <tt>/blog</tt> on the <tt>www.luke.maurits.id.au</tt> virtual host to to the script we wrote above.  When a request for that URI hits the server, lighttpd will run the script and talk to it through the unix domain socket specified (<tt>/tmp/pyblosxom.sock</tt> in this case).  Make sure that, wherever you choose to put your socket, your webserver has read and write permissions.  Note also that the path should be relative to any directory that you have lighttpd set to <tt>chroot</tt> into.  This instance of the script will die after 60 seconds (&#8220;<tt>idle-timeout</tt>&#8221; above) pass without any requests coming in.  Extra instances will be run, up to 32 (&#8220;<tt>max-procs</tt>&#8220;) in total, to accommodate heavy load.  A new process is created when ever there becomes more than 4 (&#8220;<tt>max-load-per-proc</tt>&#8220;) queued requests for each existing process.</p>
<p>As I mentioned, this set up is very noticeably faster than running Pyblosxom as a plain CGI process &#8211; as one would fully expect.  So far I have had a few problems where a huge number of FastCGI script processes are spawned for no apparent reason, slowing the server to a crawl and resulting in timeouts.  I&#8217;m not sure what has caused these, though logic dictates it must be a problem with lighttpd.  These seem to be over, but if they persist I will have to look into getting something other than lighttpd to span the FastCGI processes.  Hopefully this won&#8217;t happen.  Until it does, enjoy the faster browsing!</p>
]]></content:encoded>
			<wfw:commentRss>http://luke.maurits.id.au/blog/2008/08/pyblosxom-now-running-as-fastcgi-via-flup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam, spam, spam, spam&#8230;</title>
		<link>http://luke.maurits.id.au/blog/2008/05/spam-spam-spam-spam/</link>
		<comments>http://luke.maurits.id.au/blog/2008/05/spam-spam-spam-spam/#comments</comments>
		<pubDate>Sat, 03 May 2008 23:22:00 +0000</pubDate>
		<dc:creator>Luke Maurits</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pyblosxom]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://luke.maurits.id.au/blog/2008/05/spam-spam-spam-spam/</guid>
		<description><![CDATA[As you might have noticed, as of a couple of days ago this blog started getting hit pretty heavily by comment spam, composed mostly of links to Russian pornography sites.  As of this afternoon, I think I have deleted all of the offending comments.  There is a small possibility that I nuked a [...]]]></description>
			<content:encoded><![CDATA[<p>As you might have noticed, as of a couple of days ago this blog started getting hit pretty heavily by comment spam, composed mostly of links to Russian pornography sites.  As of this afternoon, I think I have deleted all of the offending comments.  There is a small possibility that I nuked a legitimate comment or two in doing so, but given the currently low frequency of real comments I&#8217;m getting, I doubt it.  Still, if you left a comment in the last three days you may want to check that it&#8217;s still there.  If it&#8217;s not, <a href="/email.html">email </a>me and I should be able to resurrect it from the notification email.</p>
<p>In an attempt to stop this from happening again, I&#8217;ve installed Menno Smits&#8217; &#8220;<a href="http://freshfoo.com/wiki/CodeIndex">spamquestion</a>&#8221; plugin, which relies on Steven Armstrong&#8217;s &#8220;<a href="http://www.c-area.ch/code/pyblosxom/plugins/">session</a>&#8221; plugin.  You now have to give a simple, one word answer to a question like &#8220;What is the opposite of hot?&#8221; to leave a comment here.  The question is randomly selected from a set of about 10.  This sort of spam protection isn&#8217;t as strong as <a href="http://en.wikipedia.org/wiki/Captcha">captchas</a>, because it&#8217;s a fairly trivial matter for a spambot to collect all 10 of the questions, have the answers provided by a person, and then spam as usual.  However, it&#8217;s perfectly adequate to protect against spam which isn&#8217;t being individually targeted against your one site (the spam I was getting came from a range of IP addresses, so I&#8217;m going to assume it was the work of a <a href="http://en.wikipedia.org/wiki/Botnet">botnet</a>) and has the advantage of working in text-based browsers and not disadvantaging visually impaired people.  Let&#8217;s hope it works here.</p>
<p>Based on my preliminary fiddlings with these plugins, it looks like there is little in the way of graceful handling of incorrect answers to the spam question &#8211; the form just gets reloaded with none of your input preserved and no explanatory message.  This is obviously unacceptable and I might get around to fixing it myself sometime soon.  For now, just be careful!</p>
]]></content:encoded>
			<wfw:commentRss>http://luke.maurits.id.au/blog/2008/05/spam-spam-spam-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pyblosxom Hack Number 1</title>
		<link>http://luke.maurits.id.au/blog/2008/04/pyblosxom-hack-number-1/</link>
		<comments>http://luke.maurits.id.au/blog/2008/04/pyblosxom-hack-number-1/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 23:12:00 +0000</pubDate>
		<dc:creator>Luke Maurits</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pyblosxom]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://luke.maurits.id.au/blog/2008/04/pyblosxom-hack-number-1/</guid>
		<description><![CDATA[Here&#8217;s my first &#8220;pyBlosxom hack&#8221;. It&#8217;s not really a hack on the
pyBlosxom system
itself, it&#8217;s more of a &#8220;usage hack&#8221;, but I think it&#8217;s a relatively
neat one.
Back when this blog was statically rendered, I used to write the
entries in Markdown, and they were
stayed that one on the file system. The statially rendered HTML
pages were in proper [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s my first &#8220;pyBlosxom hack&#8221;. It&#8217;s not really a hack on the<br />
<a href="http://pyblosxom.sourceforge.net/">pyBlosxom</a> system<br />
itself, it&#8217;s more of a &#8220;usage hack&#8221;, but I think it&#8217;s a relatively<br />
neat one.</p>
<p>Back when this blog was statically rendered, I used to write the<br />
entries in <a href=<br />
"http://pyblosxom.sourceforge.net/">Markdown</a>, and they were<br />
stayed that one on the file system. The statially rendered HTML<br />
pages were in proper HTML, however, because I used the <a href=<br />
"http://pyblosxom.sourceforge.net/registry/text/PyMarkdown.html">Markdown<br />
parser</a> for PyBlosxom. This worked just fine for static<br />
rendering, but when I went dynamic I immediatley realised a huge<br />
problem with this set up. For some reason the Markdown parser is<br />
unbelievably slow. It took literally whole minutes for pyBlosxom to<br />
render the latest 10 entries, which is obviously completely<br />
unacceptable.</p>
<p>I found this quite odd at first, because I write my articles in<br />
Markdown too, and use <a href=<br />
"http://www.freewisdom.org/projects/python-markdown/">Markdown in<br />
Python</a> to translate them to HTML. I had always assumed that<br />
PyBlosxom used the same Markdown translation code &#8211; afterall, why<br />
would someone code a Python Markdown library if there was already<br />
one out there? But it turns out that in fact this is what&#8217;s<br />
happened. The PyBlosxom renderer uses completely different &#8211; and<br />
obviously much less efficient &#8211; code to Markdown in Python.</p>
<p>The obvious solution to this problem would have been to wrap<br />
Markdown in Python up in whatever interface pyBlosxom uses for<br />
parsers, but I&#8217;ve solved it by doing something quite different<br />
which gives me a fairly powerful interface to using pyBlosxom.</p>
<p>I&#8217;ve written a python script called <tt>makeentry</tt> which<br />
does the following:</p>
<ul>
<li>Starts up <tt>vi</tt>, my editor of choice, editing a temporary<br />
file in <tt>/tmp</tt>. I use this editing session to write an entry<br />
in Markdown. Note that I write <i>just</i> the entry, without the<br />
metadata that pyBlosxom would usually want at the start, like a<br />
title or tags.</li>
<li>Upon the <tt>vi</tt> process terminating after I finish writing<br />
the entry, it starts up <a href=<br />
"http://aspell.net/"><tt>aspell</tt></a> to spell check that<br />
file.</li>
<li>After spell checking the file, it (quickly!) translates the<br />
Markdown to HTML using Markdown in Python.</li>
<li>I then get prompted to entire a title and list of tags.</li>
<li>The title, tags and translated HTML entry are then all<br />
concatenated in the expected way into a file in my pyBlosxom entry<br />
directory (the filename is automatically generated from the title<br />
by converting to lowercase and replacing spaces with<br />
underscores).</li>
</ul>
<p>This way I still get to write in Markdown, but with the<br />
following benefits over wrapping Markdown in Python up with<br />
pyBlosxom&#8217;s parser interface:</p>
<ul>
<li>I get to do do spell checking (indeed, arbitrary<br />
pre-processing) before publishing my entry.</li>
<li>pyBlosxom reads the entry of the disk in HTML, so no time at<br />
all is consumed doing a translation (which is faster than even the<br />
fastest Markdown translator possible).</li>
</ul>
<p>I quite like this usage paradigm. I&#8217;m hoping that sometime not<br />
too far off I get the chance to add another level of<br />
pre-processing: <a href="http://pygments.org/">Pygments</a> is a<br />
code colouring system (written in Python, of course), which<br />
translates code in just about any modern programming language into<br />
HTML with appropriate <tt>span</tt> tags to perform syntactic code<br />
colouration. I&#8217;d really like it if I could have my<br />
<tt>makeentry</tt> script search the HTML entry for <tt>code</tt><br />
tags nested in <tt>pre</tt> tags (using <a href=<br />
"http://docs.python.org/lib/module-HTMLParser.html"><tt>HTMLParser</tt></a><br />
from the Python standard library) and automatically replace the<br />
contents with colourised code using Pygments. This would be pretty<br />
cool and shouldn&#8217;t be too hard. Keep an eye out for it in the<br />
nearish future.</p>
]]></content:encoded>
			<wfw:commentRss>http://luke.maurits.id.au/blog/2008/04/pyblosxom-hack-number-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Commenting feature added, pyBlosxom headaches</title>
		<link>http://luke.maurits.id.au/blog/2008/04/commenting-feature-added-pyblosxom-headaches/</link>
		<comments>http://luke.maurits.id.au/blog/2008/04/commenting-feature-added-pyblosxom-headaches/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 05:41:00 +0000</pubDate>
		<dc:creator>Luke Maurits</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pyblosxom]]></category>

		<guid isPermaLink="false">http://luke.maurits.id.au/blog/2008/04/commenting-feature-added-pyblosxom-headaches/</guid>
		<description><![CDATA[As some of you may have noticed, this blog now features comments.  I set this up over last Thursday and Friday.  It wasn&#8217;t a straight forward procedure, and during these few days you may have encountered various problems with my website &#8211; even for parts of it that have nothing to do with [...]]]></description>
			<content:encoded><![CDATA[<p>As some of you may have noticed, this blog now features comments.  I set this up over last Thursday and Friday.  It wasn&#8217;t a straight forward procedure, and during these few days you may have encountered various problems with my website &#8211; even for parts of it that have nothing to do with the blog, because at one stage the internal URL rewrites that I asked lighttpd to do were stupid ones, owing to my inexperience with regular expressions.  I apologise if this caused you trouble, everything should be working fine now.</p>
<p>The entire experience has rather substantially dented my confidence in PyBlosxom as a blogging platform.  Certainly, I enjoy its flat-file simplicity and naturally far prefer to be using something written in Python rather than PHP, but the fact that the majority of its functionality is provided by third party plugins of an apparently mediocre quality &#8211; and certainly of ephemeral availability &#8211; with documentation that varies from non-existent to outright inaccurate does not give me warm fuzzy feelings.  I&#8217;ll probably write an entry or two about the problems I&#8217;ve had in the coming weeks.</p>
<p>I have been entertaining grandiose plans of writing my own Pythonic blogging platform, based on <a href="http://www.cherrypy.org/">CherryPy</a> (which looks so genuinely fantastic that I can&#8217;t wait to use it for something) and <a href="http://www.cheetahtemplate.org/">Cheetah</a>, which has served me well as part of my current home-brew system for generating this site.  I would assuredly stick with flat text files over a database, although I may use an SQLite database for some things if I thought it would afford a significant gain in performance or code simplicity without too much an increase in overall complexity.  This is probably a pipe dream anyway, and certainly not something I could throw together in a hurry.</p>
<p>Until such a time comes as I write this imaginary CherryBlog, I think I will slowly devote time to hacking on PyBlosxom in an attempt to make it more usable.  I&#8217;ll blog about anything half way decent that I come up with.</p>
<p>On a performance note, you may have noticed that the blog pages of this site are now substantially slower to load than they have been in the past.  At the moment, PyBlosxom is running as a plain old CGI process, which of course means that the whole thing<br />
is as slow as it possibly could be.  But that&#8217;s not to say it&#8217;s necessarily <em>slow</em>, of course.  Under the super light load that this blog is currently getting things are bearable.  I do intend to migrate away from CGI at some stage, if I don&#8217;t write my won system first &#8211; there is a WSGI version of PyBlosxom which I should be able to hook up to lighttpd using Allan Saddi&#8217;s <a href="http://trac.saddi.com/flup">flup library</a> and either FastCGI or SCGI.  Barry Pederson has provided a starting point for this in <a href="http://barryp.org/blog/entries/pyblosxom_scgi/">his own PyBlosxom blog</a>.  I&#8217;ve had quite enough of tinkering with this blog for a while, though, so this may not happen for a month or so.</p>
]]></content:encoded>
			<wfw:commentRss>http://luke.maurits.id.au/blog/2008/04/commenting-feature-added-pyblosxom-headaches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

