<?xml version="1.0" encoding="iso-8859-1"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title type="text">Menno's Musings</title>
<subtitle type="html"><![CDATA[
software | life | whatever
]]></subtitle>
<id>http://freshfoo.com/blog/index.atom</id>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog" />
<link rel="self" type="application/atom+xml" href="http://freshfoo.com/blog/index.atom" />


<author>
<name>Menno Smits</name>
<uri>http://freshfoo.com/blog/index.atom</uri>
<email>menno AT freshfoo DOT com</email>
</author>
<rights>Copyright 2009 Menno Smits</rights>
<generator uri="http://pyblosxom.sourceforge.net/" version="1.4.1 7/27/2007">
PyBlosxom http://pyblosxom.sourceforge.net/ 1.4.1 7/27/2007
</generator>

<updated>2010-01-30T19:07:00Z</updated>
<!-- icon?  logo?  -->

<entry>
<title type="html">TypeError: object.__init__() takes no parameters</title>
<category term="" />
<id>http://freshfoo.com/blog/2010/01/30/object__init__takes_no_parameters</id>
<updated>2010-01-30T19:07:00Z</updated>
<published>2010-01-30T19:07:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/object__init__takes_no_parameters" />
<content type="html">&lt;p&gt;At my employer we are in the process of migrating from Python 2.4 to
2.6. When running some existing code under Python 2.6 we started
getting DeprecationWarnings about &amp;quot;object.__new__() takes no
parameters&amp;quot; and &amp;quot;object.__init__() takes no parameters&amp;quot;.&lt;/p&gt;
&lt;p&gt;A simple example that triggers the warning:&lt;/p&gt;
&lt;div class=&quot;highlight&quot; &gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MyClass&lt;/span&gt;(&lt;span class=&quot;nb&quot;&gt;object&lt;/span&gt;):

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__new__&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;cls&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;):
        &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;MyClass.__new__&amp;#39;&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;cls&lt;/span&gt;).&lt;span class=&quot;n&quot;&gt;__new__&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;cls&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;)

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;__init__&lt;/span&gt;(&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;):
        &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;MyClass.__init__&amp;#39;&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
        &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;, &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;).&lt;span class=&quot;n&quot;&gt;__init__&lt;/span&gt;(&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;)

&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;(&lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;, &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;)
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This gives:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
$ python2.4 simple-warning.py
MyClass.__new__ 6 7
MyClass.__init__ 6 7

$ python2.6 simple-warning.py
MyClass.__new__ 6 7
simple-warning.py:5: DeprecationWarning: object.__new__() takes no parameters
  return super(MyClass, cls).__new__(cls, a, b)
MyClass.__init__ 6 7
simple-warning.py:9: DeprecationWarning: object.__init__() takes no parameters
  super(MyClass, self).__init__(a, b)
&lt;/pre&gt;
&lt;p&gt;It turns out that a &lt;a class=&quot;reference external&quot; href=&quot;http://svn.python.org/view?view=rev&amp;amp;revision=54539&quot;&gt;change to Python&lt;/a&gt; for 2.6 (and 3) means that
object.__new__ and object.__init__ no longer take arguments - a
TypeError is raised when arguments are passed. To avoid breaking too
much pre-existing code, there is a special case that will cause a
DeprecationWarning instead of TypeError if both __init__ and __new__
are overridden. This is the case we were running into with our code at
work.&lt;/p&gt;
&lt;p&gt;The reason for this change seems to make enough sense: object doesn&apos;t
do anything with arguments to __init__ and __new__ so it shouldn&apos;t
accept them. Raising an error when arguments are passed highlights
code where the code might be doing the wrong thing.&lt;/p&gt;
&lt;p&gt;Unfortunately this change also breaks Python&apos;s multiple inheritance in
a fairly serious way when cooperative &lt;a class=&quot;reference external&quot; href=&quot;http://docs.python.org/library/functions.html#super&quot;&gt;super&lt;/a&gt; calls are used. Looking
at the &lt;a class=&quot;reference external&quot; href=&quot;http://bugs.python.org/issue1683368&quot;&gt;ticket&lt;/a&gt; for this change, this issue was thought about but
perhaps the implications were not fully understood. Given that using
super with multiple inheritance is common and &amp;quot;correct&amp;quot; practice, it
would seem that this change to Python is a step backwards.&lt;/p&gt;
&lt;a href=&quot;http://freshfoo.com/blog/object__init__takes_no_parameters&quot;&gt;Read more...&lt;/a&gt;</content>
</entry>

<entry>
<title type="html">rst_break plugin for PyBlosxom</title>
<category term="" />
<id>http://freshfoo.com/blog/2010/01/30/rst_break-plugin</id>
<updated>2010-01-30T15:29:00Z</updated>
<published>2010-01-30T15:29:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/rst_break-plugin" />
<content type="html">&lt;p&gt;I just scratched an itch by writing a small plugin for PyBlosxom that
allows the &lt;a class=&quot;reference external&quot; href=&quot;http://pyblosxom.sourceforge.net/registry/text/rst.html&quot;&gt;rst&lt;/a&gt; (&lt;a class=&quot;reference external&quot; href=&quot;http://docutils.sourceforge.net/rst.html&quot;&gt;reStructured Text&lt;/a&gt;) and &lt;a class=&quot;reference external&quot; href=&quot;http://pyblosxom.sourceforge.net/registry/display/readmore.html&quot;&gt;readmore&lt;/a&gt; plugins to work
together &lt;a class=&quot;footnote-reference&quot; href=&quot;#id2&quot; id=&quot;id1&quot;&gt;[1]&lt;/a&gt;. It defines a reST &amp;quot;break&amp;quot; directive which gets transformed
into the breakpoint string the readmore plugin looks out for. This
allows for &amp;quot;Read more...&amp;quot; breaks to be inserted in for reST based
articles.&lt;/p&gt;
&lt;p&gt;For further information see the &lt;a class=&quot;reference external&quot; href=&quot;/code/&quot;&gt;Code&lt;/a&gt; page here and at the top of the
&lt;a class=&quot;reference external&quot; href=&quot;/hg/pyblosxom-plugins/trunk/raw-file/9afdcd2bf738/rst_break/rst_break.py&quot;&gt;plugin&lt;/a&gt; itself.&lt;/p&gt;
&lt;table class=&quot;docutils footnote&quot; frame=&quot;void&quot; id=&quot;id2&quot; rules=&quot;none&quot;&gt;
&lt;colgroup&gt;&lt;col class=&quot;label&quot; /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign=&quot;top&quot;&gt;
&lt;tr&gt;&lt;td class=&quot;label&quot;&gt;&lt;a class=&quot;fn-backref&quot; href=&quot;#id1&quot;&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Yes, the audience for this plugin is probably tiny!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
</entry>

<entry>
<title type="html">IMAPClient 0.5.2</title>
<category term="" />
<id>http://freshfoo.com/blog/2010/01/24/IMAPClient-0.5.2</id>
<updated>2010-01-24T17:58:00Z</updated>
<published>2010-01-24T17:58:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/IMAPClient-0.5.2" />
<content type="html">&lt;p&gt;IMAPClient 0.5.2 has just been released. This release fixes 2 bugs
(&lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/ticket/28&quot;&gt;#28&lt;/a&gt; and &lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/ticket/33&quot;&gt;#33&lt;/a&gt;).  Much thanks to Fergal Daly and Mark Eichin for
reporting these bugs.&lt;/p&gt;
&lt;p&gt;Install from the &lt;a class=&quot;reference external&quot; href=&quot;/projects/IMAPClient/IMAPClient-0.5.2.tar.gz&quot;&gt;tarball&lt;/a&gt; or &lt;a class=&quot;reference external&quot; href=&quot;/projects/IMAPClient/IMAPClient-0.5.2.zip&quot;&gt;zip&lt;/a&gt; or upgrade using easy_install or pip.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">A little thing about cron</title>
<category term="" />
<id>http://freshfoo.com/blog/2010/01/12/crontab-updates</id>
<updated>2010-01-12T13:20:00Z</updated>
<published>2010-01-12T13:20:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/crontab-updates" />
<content type="html">&lt;p&gt;Here&apos;s something I just learned the hard way.&lt;/p&gt;
&lt;p&gt;If you edit a crontab with &amp;quot;crontab -e&amp;quot;, cron won&apos;t reload the updated
crontab immediately. Changes will be read at 1 second past the next
minute boundary. For example, if you change the crontab at 10:54:32,
cron will reload it at 10:55:01. This means if you&apos;re trying to test
how something runs under cron and you&apos;re impatient so you set that
thing to run at the next minute, you won&apos;t see it run!&lt;/p&gt;
&lt;p&gt;I spent a good half hour chasing my tail on this one. Set the
test entry to run 2 minutes ahead instead.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">IMAPClient Trac instance now allows for user registrations</title>
<category term="" />
<id>http://freshfoo.com/blog/2009/12/26/IMAPClient-Trac_AccountManagerPlugin</id>
<updated>2009-12-26T15:54:00Z</updated>
<published>2009-12-26T15:54:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/IMAPClient-Trac_AccountManagerPlugin" />
<content type="html">&lt;p&gt;I&apos;ve had several requests over the last few weeks to open up the
IMAPClient Trac instance so that anyone can submit tickets. Initially
I changed access levels so that anoymous users could create
tickets. This turned out to be fairly inflexible: it doesn&apos;t allow
people to add attachments or modify tickets later. This approach also
resulted in one strange ticket being created where all fields were
filled with random characters - a bot looking for buffer overruns?&lt;/p&gt;
&lt;p&gt;Since then, I&apos;ve disabled anonymous ticket creation and have set up
the fantastic &lt;a class=&quot;reference external&quot; href=&quot;http://trac-hacks.org/wiki/AccountManagerPlugin&quot;&gt;AccountManagerPlugin&lt;/a&gt; which allows people to register
accounts for themselves. Once someone has created an account and
logged in they can create and modify tickets. I have a feeling I&apos;m
going to have to turn on the optional CAPTCHA support, but I&apos;m willing
to see how it goes for a while first.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">IMAPClient 0.5.1</title>
<category term="" />
<id>http://freshfoo.com/blog/2009/12/15/IMAPClient-0.5.1</id>
<updated>2009-12-15T22:05:00Z</updated>
<published>2009-12-15T22:05:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/IMAPClient-0.5.1" />
<content type="html">&lt;p&gt;I&apos;ve just made a quick point release of IMAPClient. &lt;a class=&quot;reference external&quot; href=&quot;http://python.net/crew/skippy/&quot;&gt;Mark Hammond&lt;/a&gt; is
interested in using it for a &lt;a class=&quot;reference external&quot; href=&quot;https://mozillalabs.com/raindrop&quot;&gt;project&lt;/a&gt; he&apos;s working on but the licenses
(GPL and MPL) were incompatible. I was thinking about &lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/ticket/8&quot;&gt;relaxing the
license&lt;/a&gt; of IMAPClient anyway so this presented a good opportunity to
make the switch.&lt;/p&gt;
&lt;p&gt;Work on the 0.6 release is coming along. This version will fix a
number issues with parsing of FETCH responses - the FETCH parsing code
is being completely rewritten. This is the first time that IMAPClient
will bypass most of &lt;a class=&quot;reference external&quot; href=&quot;http://docs.python.org/library/imaplib.html&quot;&gt;imaplib&lt;/a&gt; for some functionality. It&apos;s looking like
that at some point IMAPClient may not use imaplib at all.&lt;/p&gt;
&lt;p&gt;IMAPClient can be installed from PyPI using &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;pip&lt;/span&gt; &lt;span class=&quot;pre&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;pre&quot;&gt;IMAPClient&lt;/span&gt;&lt;/tt&gt;
or &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;easy_install&lt;/span&gt; &lt;span class=&quot;pre&quot;&gt;IMAPClient&lt;/span&gt;&lt;/tt&gt;. It can also be downloaded from the
&lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com&quot;&gt;IMAPClient project page&lt;/a&gt;. As
always, feedback and patches are most welcome.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">PyBlosxom to Disqus import script</title>
<category term="" />
<id>http://freshfoo.com/blog/2009/11/25/disqus-import-script</id>
<updated>2009-11-25T15:58:00Z</updated>
<published>2009-11-25T15:58:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/disqus-import-script" />
<content type="html">&lt;p&gt;I&apos;ve had a few requests for the little hack I created to import comments from
PyBlosxom into Disqus. A cleaned up version of disqus-import.py is now on the
&lt;a class=&quot;reference external&quot; href=&quot;/code/&quot;&gt;Code&lt;/a&gt; page. There&apos;s some docs at the top of the file.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Setting PYTHON_EGG_CACHE when deploying Python apps using FastCGI</title>
<category term="" />
<id>http://freshfoo.com/blog/2009/11/19/fastcgi-python-egg-cache</id>
<updated>2009-11-19T17:48:00Z</updated>
<published>2009-11-19T17:48:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/fastcgi-python-egg-cache" />
<content type="html">&lt;p&gt;I recently sorted out an issue with the &lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/&quot;&gt;IMAPClient&lt;/a&gt; Trac instance
that&apos;s been bugging me for a while.&lt;/p&gt;
&lt;p&gt;The problem was that whenever the web server logs were rotated
logrotate would restart &lt;a class=&quot;reference external&quot; href=&quot;http://www.lighttpd.net/&quot;&gt;Lighttpd&lt;/a&gt;. The web server restart would in
turn restart the Trac (FastCGI) processes. Unfortunately, the Trac
processes would fail to start with the following error.&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
pkg_resources.ExtractionError: Can&apos;t extract file(s) to egg cache

The following error occurred while trying to extract file(s) to the Python egg
cache:

  [Errno 13] Permission denied: &apos;/root/.python-eggs&apos;

The Python egg cache directory is currently set to:

  /root/.python-eggs
&lt;/pre&gt;
&lt;p&gt;Bang, no &lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/&quot;&gt;IMAPClient&lt;/a&gt; web site (the rest of the site was ok). To band-aid
the problem when it happened (and I noticed!) I issue a &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;sudo&lt;/span&gt;
&lt;span class=&quot;pre&quot;&gt;/etc/init.d/lighttpd&lt;/span&gt; &lt;span class=&quot;pre&quot;&gt;restart&lt;/span&gt;&lt;/tt&gt; and everything would be fine again.&lt;/p&gt;
&lt;p&gt;After some investigation I found that running &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;/etc/init.d/lighttpd&lt;/span&gt;
&lt;span class=&quot;pre&quot;&gt;restart&lt;/span&gt;&lt;/tt&gt; as root always triggered the problem where-as restarting
using sudo always worked. My guess is that restarting when logged in
as root was leaving $HOME at /root even after Lighttpd had dropped to
its unprivileged user account. The unprivileged user isn&apos;t allowed to
write to /root so Trac blows up. setuptools seems to use $HOME
instead of looking up the actual home directory of the current user.&lt;/p&gt;
&lt;p&gt;The fix for me was to set the PYTHON_EGG_CACHE environment variable
for the FastCGI processes to somewhere they are allowed to write
to. This is done with the bin-environment option if you&apos;re using
Lighttpd like me.&lt;/p&gt;
&lt;p&gt;I imagine similar problems can happen with any Python app deployed
using FastCGI.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Why I chose Disqus Comments</title>
<category term="" />
<id>http://freshfoo.com/blog/2009/11/05/disqus</id>
<updated>2009-11-05T19:49:00Z</updated>
<published>2009-11-05T19:49:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/disqus" />
<content type="html">&lt;p&gt;I recently moved my blog comments away the &lt;a class=&quot;reference external&quot; href=&quot;http://pyblosxom.sourceforge.net/&quot;&gt;PyBlosxom&lt;/a&gt; &lt;a class=&quot;reference external&quot; href=&quot;http://pyblosxom.sourceforge.net/registry/input/comments/comments.html&quot;&gt;comments&lt;/a&gt; plugin
to a hosted system. The main driver was the ability for people to
subscribe to comments for an article using email or RSS. It&apos;s a pain
for people to have to check back to the site to see if someone has
replied to their comments. I was also keen on
user-experience-enhancing features such as integration with external
systems like OpenID, Twitter and Yahoo.&lt;/p&gt;
&lt;p&gt;My criteria were:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;email subscription, RSS a bonus&lt;/li&gt;
&lt;li&gt;support for pre-formatted text sections in comments (essential for
code samples)&lt;/li&gt;
&lt;li&gt;an import mechanism for existing comments&lt;/li&gt;
&lt;li&gt;threading of comments to allow commenters to respond to each other
sensibly&lt;/li&gt;
&lt;li&gt;clean look with some ability to customise&lt;/li&gt;
&lt;li&gt;support for a variety of authentication/profile systems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a number of hosted comment systems out there. The most
popular options seem to be &lt;a class=&quot;reference external&quot; href=&quot;http://disqus.com/&quot;&gt;Disqus&lt;/a&gt;, &lt;a class=&quot;reference external&quot; href=&quot;http://js-kit.com/&quot;&gt;JS-Kit Echo&lt;/a&gt; and
&lt;a class=&quot;reference external&quot; href=&quot;http://www.intensedebate.com/&quot;&gt;IntenseDebate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;IntenseDebate was eliminated first because it doesn&apos;t seem to provide
an import mechanism for custom websites. Import only seems to be
supported for well known blog platforms such as Wordpress. There&apos;s no
comment API either. The approach seems to be to leave your old comment
system in place and just have new comments go into IntenseDebate. Not
good enough, I wanted to completely replace the existing comments
system.&lt;/p&gt;
&lt;p&gt;After some deliberation I decided on JS-Kit Echo for one tiny reason:
it supports the &amp;lt;pre&amp;gt; tag. The closest Disqus supported was the
&amp;lt;code&amp;gt; tag which doesn&apos;t preserve white-space (useless for Python code
samples).&lt;/p&gt;
&lt;p&gt;So I paid my US$12 (it&apos;s the only service that doesn&apos;t have a free
option) and started looking at how to import my existing comments
using their API ... and quickly found that it sucks. Comments can be
submitted but you can&apos;t specify a timestamp so they are dated with the
import date. Far from ideal. Then there&apos;s the API for retrieving
comments: it returns the data as JavaScript code (no not JSON)! It&apos;s
pretty clear that the API is what they use with the JavaScript for
Echo itself and geared for that use only. They&apos;ve just thrown it out
there and documented it, warts and all.&lt;/p&gt;
&lt;p&gt;Back to the drawing board.&lt;/p&gt;
&lt;p&gt;The only showstopper for Disqus was the lack of &amp;lt;pre&amp;gt;. Everything else
about it was great: it met all my requirements and the API was clean
and comprehensive. If only there was a way to have properly formatted
source code in the comments.&lt;/p&gt;
&lt;p&gt;Light bulb moment: use a CSS hack to make &amp;lt;code&amp;gt; in comments behave
like &amp;lt;pre&amp;gt;. The trick is to turn code into a block element and change
how white-space is handled. The CSS snippet looks like:&lt;/p&gt;
&lt;div class=&quot;highlight&quot; &gt;&lt;pre&gt;.dsq-comment-message code {
  display:block;
  white-space:pre;
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Works great.&lt;/p&gt;
&lt;p&gt;With the only blocker gone, I wrote a Python script with the help of
Ian Lewis&apos; excellent &lt;a class=&quot;reference external&quot; href=&quot;http://code.google.com/p/disqus-python-client/&quot;&gt;disqus-python-client&lt;/a&gt; package to pull in the
existing comments from the old system. Within an hour or so it was
ready to go.&lt;/p&gt;
&lt;p&gt;Hopefully this article saves someone else some time if they decide to
use one of these systems. Getting things running chewed up a lot more
time then I had expected.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">IMAPClient has a new home</title>
<category term="" />
<id>http://freshfoo.com/blog/2009/10/18/new-imapclient-site</id>
<updated>2009-10-18T16:12:00Z</updated>
<published>2009-10-18T16:12:00Z</published>
<link rel="alternate" type="text/html" href="http://freshfoo.com/blog/new-imapclient-site" />
<content type="html">&lt;p&gt;I&apos;ve just (finally) finished setting up a proper website for
IMAPClient. The new home for the project is
&lt;a class=&quot;reference external&quot; href=&quot;http://imapclient.freshfoo.com/&quot;&gt;http://imapclient.freshfoo.com/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&apos;s a Trac instance with Mercurial support that monitors the main
trunk repository. All items from the TODO file in the source have been
converted to tickets in the bug tracker. I&apos;ve even created a hokey
little logo.&lt;/p&gt;
&lt;p&gt;Let me know me know if anything looks broken.&lt;/p&gt;
&lt;p&gt;Time to work on some long-standing bugs...&lt;/p&gt;
</content>
</entry>
</feed>
