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

<!-- name="generator" content="pyblosxom/1.4.3 01/10/2008" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
<channel>
<title>Menno's Musings   </title>
<link>http://freshfoo.com/blog</link>
<description>software | life | whatever</description>
<language>en</language>
<item>
  <title>IMAPClient 0.8.1 released</title>
  <link>http://freshfoo.com/blog/IMAPClient-0.8.1</link>
  <description><![CDATA[
<p>Version 0.8.1 of IMAPClient has just been released. This version works around a
subtle bug in distutils which was preventing installation on Windows from
working. Thanks to Bob Yexley for the bug report.</p>
<p>This release also contains a few small documentation updates and packaging
fixes. The <a class="reference external" href="http://imapclient.freshfoo.com/browser/NEWS">NEWS</a> file has more details.</p>
<p>As always, IMAPClient can be installed from PyPI (<tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span>
<span class="pre">imapclient</span></tt>) or downloaded from the <a class="reference external" href="http://imapclient.freshfoo.com/">IMAPClient site</a>.</p>

]]></description>
</item>

<item>
  <title>IMAPClient 0.8 released</title>
  <link>http://freshfoo.com/blog/IMAPClient-0.8</link>
  <description><![CDATA[
<p>Version 0.8 of IMAPClient is out! Although I didn't get everything
into this release that I had hoped to, there's still plenty
there. Thanks to Johannes Heckel and Andrew Scheller for their
contributions to this release.</p>
<p>Highlights for 0.8:</p>
<ul class="simple">
<li>OAUTH authentication support</li>
<li>IDLE support (<a class="reference external" href="http://imapclient.freshfoo.com/browser/imapclient/examples/idle_example.py">example</a>)</li>
<li>Full NOOP support</li>
<li>Comprehensive Sphinx based docs. A HTML version of the docs is
included in the source distribution. They are also hosted online at
<a class="reference external" href="http://imapclient.readthedocs.org/">http://imapclient.readthedocs.org/</a></li>
<li>Folder rename support</li>
<li>New &quot;debug&quot; property to simplify protocol debugging</li>
<li>Live test and interactive shell features are now part of the imapclient Python
package and can be called from the command-line. (For example:
<tt class="docutils literal"><span class="pre">python</span> <span class="pre">-m</span> <span class="pre">imapclient.interact</span> <span class="pre">...</span></tt>)</li>
<li>New normalise_times attribute allows caller to select whether
datetimes returned by fetch() are native or not</li>
<li>interactive shell now works with both IPython 0.10 and 0.11 (and
later)</li>
<li>BODY/BODYSTRUCTURE parsing fixes</li>
<li>Programmer friendly version information now available (imapclient.version_info)</li>
</ul>
<p>The <a class="reference external" href="http://imapclient.freshfoo.com/browser/NEWS">NEWS</a> file and <a class="reference external" href="http://imapclient.readthedocs.org/">main documentation</a> has more details on all of
the above.</p>
<p>As always, IMAPClient can be installed from PyPI (<tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span>
<span class="pre">imapclient</span></tt>) or downloaded from the <a class="reference external" href="http://imapclient.freshfoo.com/">IMAPClient site</a>.</p>

]]></description>
</item>

<item>
  <title>Fibonacci Quilt</title>
  <link>http://freshfoo.com/blog/fib-quilt</link>
  <description><![CDATA[

<p>
A quilt incorporating the starting numbers of the 
<a href="http://en.wikipedia.org/wiki/Fibonacci_number">Fibonacci
sequence</a>. Designed by me, expertly crafted by Susanna and adorably
used by Amelia.
</p>

<p>

<a href="/images/blog/quilt1.jpg">
<img src="/images/blog/quilt1-thumb.jpg" width="200">
</a>

<a href="/images/blog/quilt2.jpg">
<img src="/images/blog/quilt2-thumb.jpg" width="200">
</a>

</p>


]]></description>
</item>

<item>
  <title>Domain renewal scam</title>
  <link>http://freshfoo.com/blog/domain-renewal-group</link>
  <description><![CDATA[

<div>

<a href="/images/blog/domain-renewal-group-scaled.png">
<img src="/images/blog/domain-renewal-group-thumb.png" 
     alt="Domain Renewal Group letter"
     height="200" width="124"
     style="float: left">
</a>

<p>
My domain is up for renewal soon and I recently received a <a
href="/images/blog/domain-renewal-group-scaled.png">very official
looking letter</a> from a company called Domain Renewal Group. On the
surface it looks like a renewal notice from my registrar but if you
read more closely mention that the letter "isn't an invoice" and that
if you return the form and pay them you'd be transferring the domain
from your current registrar to them. Never mind that the price they're
asking is almost 5 times higher than what my actual register wants for
an annual renewal.
</p>

<p>
I bet this catches plenty of people out - that's what their business
model depends on. Bottom feeding scum.
</p>

<p> <a href="http://www.google.com/search?q=domain+renewal+group+scam">Plenty
of others</a> have blogged about these guys as well, but I thought I'd
add my voice. As more people learn about these kinds of scams they become less effective.
</p>

</div>

]]></description>
</item>

<item>
  <title>IMAPClient 0.7 released</title>
  <link>http://freshfoo.com/blog/IMAPClient-0.7</link>
  <description><![CDATA[
<p>The next version of IMAPClient was quietly released on the
weekend. I've been pretty busy so I'm just getting to telling the
world about it now.</p>
<p>This release is earlier then planned because IMAPClient is featured in
the IMAP chapter of <a class="reference external" href="http://rhodesmill.org/brandon/">Brandon Rhodes</a>' new edition of the book
<a class="reference external" href="http://www.amazon.co.uk/Foundations-Python-Network-Programming-Comprehensive/dp/1430230037">Foundations of Python Network Programming</a>. Brandon had made
several bug reports and feature requests while working on the book and
some of the examples in the book relied on unreleased changes to
IMAPClient. IMAPClient 0.7 works with book's examples.</p>
<p>What this does mean is that IMAPClient 0.7 doesn't have Python 3
support. I have been making headway with this however and with a
little luck and a little more time, 0.8 should be Python 3 compatible.</p>
<p>Highlights for 0.7:</p>
<ul class="simple">
<li>BODY and BODYSTRUCTURE FETCH response parsing was fixed. Previously,
the object returned for multipart messages was difficult to deal
with reliably (and not really correct). Existing code that makes
BODY/BODYSTRUCTURE FETCH requests with IMAPClient may need to be
updated.</li>
<li>the live test scripts and the unit tests have been converted to use
the excellent <a class="reference external" href="http://pypi.python.org/pypi/unittest2">unittest2 framework</a>. This makes writing tests
easier, improves test failure output and, for the live tests,
provides significant improvement over the previous crude test
script.</li>
<li>livetest.py now takes an INI file for the IMAP account parameters to
test against instead of requiring that they are passed on command
line.</li>
<li>support for the NAMESPACE command IMAP added</li>
<li>fetch() now supports optional modifiers. These are required for
extensions such as RFC 4551 (conditional store). Thanks to Thomas
Jost for the patch.</li>
<li>the live tests now work with the FastMail.fm IMAP
implementation. Some special casing was required for some tests.</li>
</ul>
<p>The <a class="reference external" href="http://imapclient.freshfoo.com/browser/NEWS">NEWS</a> document has more details on all the above.</p>
<p>Proper documentation is also on its way. I've been slowly making
headway with Sphinx based documentation.</p>
<p>As always, IMAPClient can be installed from PyPI (<tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span>
<span class="pre">imapclient</span></tt>) or downloaded from the <a class="reference external" href="http://imapclient.freshfoo.com/">IMAPClient site</a>.</p>

]]></description>
</item>

<item>
  <title>IMAPClient 0.6.2 is out</title>
  <link>http://freshfoo.com/blog/IMAPClient-0.6.2</link>
  <description><![CDATA[
<p>This release fixes some parsing issues when dealing with FETCH items
that include square brackets (eg. &quot;BODY[HEADER.FIELDS (From
Subject)]&quot;) and includes the example when the package is installed
using PyPI.</p>
<p>Also, IMAPClient now uses the excellent <a class="reference external" href="http://packages.python.org/distribute/">Distribute</a> instead of
setuptools.</p>
<p>As always, IMAPClient can be installed from PyPI (<tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span>
<span class="pre">imapclient</span></tt>) or downloaded from the <a class="reference external" href="http://imapclient.freshfoo.com/">IMAPClient site</a>.</p>
<p>In the pipeline now is better (Sphinx based) documentation, cleaning
up the tests, OAUTH support and Python 3 support.</p>

]]></description>
</item>

<item>
  <title>IMAPClient 0.6.1 released</title>
  <link>http://freshfoo.com/blog/IMAPClient-0.6.1</link>
  <description><![CDATA[
<p>I've just released IMAPClient 0.6.1.</p>
<p>The only functional change in the release is that it now automatically
patches imaplib's IMAP4_SSL class to fix <a class="reference external" href="http://bugs.python.org/issue5949">Python Issue 5949</a>. This is
a bug that's been fixed in later Python 2.6 versions and 2.7 but still
exists in Python versions that are in common use. Without fix this you
may experience hangs when using SSL.</p>
<p>The patch is only applied if the running Python version is known to be
one of the affected versions. It is applied when IMAPClient is
imported.</p>
<p>The only other change in this release is that I've now marked
IMAPClient as &quot;production ready&quot; on PyPI and have updated the README
to match. This was prompted by a request to clarify the current status
of the project and seeing that all current functionality is solid and,
I don't plan to change the existing APIs in backwards-incompatible
ways, I've decided to indicate the project as suitable for production
use.</p>
<p>As always, IMAPClient can be installed from PyPI (<tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span>
<span class="pre">imapclient</span></tt>) or downloaded from the <a class="reference external" href="http://imapclient.freshfoo.com//">IMAPClient site</a>. Feedback, bug
reports and patches are most welcome.</p>

]]></description>
</item>

<item>
  <title>IMAPClient 0.6 released</title>
  <link>http://freshfoo.com/blog/IMAPClient-0.6</link>
  <description><![CDATA[
<p>IMAPClient 0.6 is finally out! Highlights:</p>
<ul class="simple">
<li>Completely new response parsing code. Complex response items like
BODYSTRUCTURE and ENVELOPE are now handled properly and interaction
with the Gmail and MS Exchange IMAP implementations works correctly.</li>
<li>Support for the COPY command</li>
<li>Support for the XLIST extension (used by Gmail)</li>
<li>select_folder() now returns a parsed response containing all
reported details about the selected folder.</li>
<li>the return value from list_folders(), list_sub_folders() and
xlist_folders() now include the IMAP folder flags and
folder delimiter.</li>
<li>Handling of internationalised folder names has been cleaned
up. Folder names now are always returned as unicode strings.</li>
<li>Many bug fixes.</li>
</ul>
<p>Be aware that there have been several API changes with this
release. See the <a class="reference external" href="http://imapclient.freshfoo.com/browser/NEWS">NEWS</a> file for further details.</p>
<p>IMAPClient can be installed from PyPI (<tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">imapclient</span></tt>) or
downloaded from the <a class="reference external" href="http://imapclient.freshfoo.com//">IMAPClient site</a>. As always, feedback, bug
reports and patches are most welcome.</p>
<p>Special thanks goes to <a class="reference external" href="http://starship.python.net/~skippy/">Mark Hammond</a>. He has contributed a
significant amount of code and effort to this release. Incidentally,
Mark is using IMAPClient as part of the backend for the <a class="reference external" href="https://mozillalabs.com/raindrop">Raindrop</a>
Mozilla Labs project.</p>

]]></description>
</item>

<item>
  <title>Thunderbird 3 attachment reminder</title>
  <link>http://freshfoo.com/blog/tb3-attachment-reminder</link>
  <description><![CDATA[
<p>I've been using Thunderbird 3 for a while now and one of the features that I
really like is the attachment reminder. It works by looking for specific keywords
you've typed in in the body text.</p>
<div align="center" class="align-center"><img alt="TB3 attachment reminder goodness" class="align-center" src="/images/blog/tb-attached.png" style="width: 584.0px; height: 357.0px;" /></div>
<p>So far I've found that &quot;attached&quot;, &quot;attachment&quot; and &quot;CV&quot; all trigger the
reminder. It's been well thought out in that it is visually obvious but doesn't
get in the way and doesn't steal focus.</p>
<p>Thanks Thunderbird developers. I'm sure this will save me more than once.</p>

]]></description>
</item>

<item>
  <title>TypeError: object.__init__() takes no parameters</title>
  <link>http://freshfoo.com/blog/object__init__takes_no_parameters</link>
  <description><![CDATA[
<p>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 &quot;object.__new__() takes no
parameters&quot; and &quot;object.__init__() takes no parameters&quot;.</p>
<p>A simple example that triggers the warning:</p>
<div class="highlight"><pre><span class="k">class</span> <span class="nc">MyClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>

    <span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
        <span class="k">print</span> <span class="s">&#39;MyClass.__new__&#39;</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span>
        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">MyClass</span><span class="p">,</span> <span class="n">cls</span><span class="p">)</span><span class="o">.</span><span class="n">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
        <span class="k">print</span> <span class="s">&#39;MyClass.__init__&#39;</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span>
        <span class="nb">super</span><span class="p">(</span><span class="n">MyClass</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>

<span class="n">obj</span> <span class="o">=</span> <span class="n">MyClass</span><span class="p">(</span><span class="mf">6</span><span class="p">,</span> <span class="mf">7</span><span class="p">)</span>
</pre></div>
<p>This gives:</p>
<pre class="literal-block">
$ 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)
</pre>
<p>It turns out that a <a class="reference external" href="http://svn.python.org/view?view=rev&amp;revision=54539">change to Python</a> 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.</p>
<p>The reason for this change seems to make enough sense: object doesn't
do anything with arguments to __init__ and __new__ so it shouldn't
accept them. Raising an error when arguments are passed highlights
code where the code might be doing the wrong thing.</p>
<p>Unfortunately this change also breaks Python's multiple inheritance in
a fairly serious way when cooperative <a class="reference external" href="http://docs.python.org/library/functions.html#super">super</a> calls are used. Looking
at the <a class="reference external" href="http://bugs.python.org/issue1683368">ticket</a> 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 &quot;correct&quot; practice, it
would seem that this change to Python is a step backwards.</p>
<a href="http://freshfoo.com/blog/object__init__takes_no_parameters">Read more...</a>
]]></description>
</item>

</channel>
</rss>

