Tiling addiction

So I have this problem ... Well it's not really a problem - I can stop whenever I want, really I can. My problem is that I have a thing for tiling window managers (WMs) [1]. I love the efficient window management, keyboard focussed operation, extensive customisability and lightweight feel that most tiling WMs offer. For the X Window System [2] there's an awful lot to choose from, and I've been obsessed for some time now with finding a great tiling WM that works for me and then configuring it to perfection.

Read more…

Somewhat over-engineered blinking LEDs

My Raspberry Pi arrived a couple of weeks ago and I've been working on turning it into a mini-audio server to connect to the home stereo in the living room.

As part of the project I'd like to drive an analog VU meter from the sound signal.

This week my (enthusiastic!) wife and I played around with attaching some basic electronics to the GPIO ports so that we could get more comfortable the Raspberry Pi. Our electronics knowledge is more than a little rusty but surprisingly everything we tried worked first go.

Read more…

IMAPClient 0.9 released

I'm pleased to announce version 0.9 of IMAPClient, the easy-to-use and Pythonic IMAP client library.

Highlights for this release:

  • Support for Gmail's label API. Thanks to Brian Neal for the patches for this.
  • Significant cleanup and refactoring in preparation for Python 3 compatibility.
  • The "livetest" module can now be safely used against IMAP accounts with real data. Previously it could only be used with dummy accounts due to the destructive nature of the tests.
  • Fixed handling of IMAP servers that return all-digit folder name without quotes. Thanks to Rhett Garber for the bug report.
  • Much improved test coverage (again, in preparation for Python 3 support)
  • Fixed rename live test so that it uses folder namespaces
  • Parse STATUS responses robustly - fixes folder_status() with MS Exchange.
  • Numerous livetest fixes to work around oddities with the MS Exchange IMAP implementation.

The NEWS file and manual have more details on all of the above.

As always, IMAPClient can be installed from PyPI (pip install imapclient) or downloaded from the IMAPClient site.

The main focus of the next release (0.10) will be Python 3 support as this is easily the most requested feature. Watch this space for more news on this.

Introducing elemental

The first release of my first Elisp project is out. The project is called "elemental" and the intro from the README goes:

elemental is a set of Emacs Lisp functions for intelligently jumping between and transposing list/tuple/dictionary/function-parameter elements. These functions are primarily useful when editing software source code.

It's probably easier to get an understanding what it does by demonstration so I've uploaded a quick screencast to Youtube.

The project is hosted on GitHub: https://github.com/mjs/elemental

Feedback and patches welcome!

IMAPClient 0.8.1 released

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.

This release also contains a few small documentation updates and packaging fixes. The NEWS file has more details.

As always, IMAPClient can be installed from PyPI (pip install imapclient) or downloaded from the IMAPClient site.

IMAPClient 0.8 released

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.

Highlights for 0.8:

  • OAUTH authentication support
  • IDLE support (example)
  • Full NOOP support
  • Comprehensive Sphinx based docs. A HTML version of the docs is included in the source distribution. They are also hosted online at http://imapclient.readthedocs.org/
  • Folder rename support
  • New "debug" property to simplify protocol debugging
  • Live test and interactive shell features are now part of the imapclient Python package and can be called from the command-line. (For example: python -m imapclient.interact ...)
  • New normalise_times attribute allows caller to select whether datetimes returned by fetch() are native or not
  • interactive shell now works with both IPython 0.10 and 0.11 (and later)
  • BODY/BODYSTRUCTURE parsing fixes
  • Programmer friendly version information now available (imapclient.version_info)

The NEWS file and main documentation has more details on all of the above.

As always, IMAPClient can be installed from PyPI (pip install imapclient) or downloaded from the IMAPClient site.

Domain renewal scam

Domain Renewal Group letter

My domain is up for renewal soon and I recently received a very official looking letter 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.

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

Plenty of others 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.

IMAPClient 0.7 released

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.

This release is earlier then planned because IMAPClient is featured in the IMAP chapter of Brandon Rhodes' new edition of the book Foundations of Python Network Programming. 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.

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.

Highlights for 0.7:

  • 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.
  • the live test scripts and the unit tests have been converted to use the excellent unittest2 framework. This makes writing tests easier, improves test failure output and, for the live tests, provides significant improvement over the previous crude test script.
  • 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.
  • support for the NAMESPACE command IMAP added
  • fetch() now supports optional modifiers. These are required for extensions such as RFC 4551 (conditional store). Thanks to Thomas Jost for the patch.
  • the live tests now work with the FastMail.fm IMAP implementation. Some special casing was required for some tests.

The NEWS document has more details on all the above.

Proper documentation is also on its way. I've been slowly making headway with Sphinx based documentation.

As always, IMAPClient can be installed from PyPI (pip install imapclient) or downloaded from the IMAPClient site.

IMAPClient 0.6.2 is out

This release fixes some parsing issues when dealing with FETCH items that include square brackets (eg. "BODY[HEADER.FIELDS (From Subject)]") and includes the example when the package is installed using PyPI.

Also, IMAPClient now uses the excellent Distribute instead of setuptools.

As always, IMAPClient can be installed from PyPI (pip install imapclient) or downloaded from the IMAPClient site.

In the pipeline now is better (Sphinx based) documentation, cleaning up the tests, OAUTH support and Python 3 support.