An RSS/Atom newsreader that sucks less

Canto | Details

Updated for 0.7.x. Older versions here
HOMENEWSFAQSCREENSHOTSDOWNLOADGETTING STARTEDCONFIGGITWEBBUG TRACKERCONTACT
0.7.10 and plans
2010-07-27 12:53:14

You can grab the 0.7.10 release from the download page.

This is basically a maintenance release, mostly thanks to Canto having a new Debian maintainer (thanks Vincent!). Essentially some immaterial cleanups that won't make a difference to most. Some better Python practices (particularly string exceptions that apparently have always been buggy and now are not supported int 2.6+).

I would like this to be the last 0.7.x release, and thus consider it to be in maintenance mode. xulos and jaacoppi from IRC still have some nasty bugs, but try as I might I can't get them to reproduce. Resolving these bugs would be the only thing that would prompt an 0.7.11 release.

0.8.0 Plans

So, as I've mentioned before, Canto was basically the first piece of Python that I wrote. I've learned everything I know about Python from building it and every version from 0.4.1 to this latest 0.7.10 has been organically grown from the same codebase.

As a result 0.7.10 is about 30% a product of the beginner Pythonista I was, 50% the result of the intermediate Pythonista I came to be not recognizing the poor design, and 20% of the expert Pythonista I am now thrashing to salvage anything.

Now I reached the point where I stopped thrashing, evaluated the codebase on its merits versus the amount of effort to start again and found that, easily, it made more sense to start from scratch.

0.7.x evolved into a multi-process monster with canto-fetch flying around in a cronjob. Its insides were twisted around to communicate with a gimpy form of Python only picklable socket protocol. The dividing line between work that needed to be done in the interface and needed to be done in the backend was blurry and information that needed to cross the boundary ill-defined.

In short, it became a huge mess, but that's what happens when you start with the idea of threading and (through necessity, thanks to the Python GIL) end-up with processes. Among other bad choices.

0.8.0 rectifies the situation.

Instead of a hideously twisted gimp protocol of 0.7.x, a real, genuine socket protocol is being used to communicate with a (gasp!) daemon. Because the daemon exists, canto-fetch is history. As are slow exits, bouncing CPU usage, confusing macro systems, eye glazing Python based configs, pointless lock hammering on the filesystem, delayed updates, and lost information.

Most of the heavy lifting is done in the daemon, which is properly multi-threaded such that multiple clients could be running at once and cooperate. Not only that, but because it uses a simple text based protocol (instead of Python-only pickles), it would be trivial to write a GTK or a Qt based frontend to canto and still take advantage of its filters, sorts and other configuration all in any language that's smart enough to talk to a socket (read: all of them).

0.8.0 will be a great simplification.

Current Status

As of this writing, I have about half of the server functionality complete and about a third (although it's the hard third) of the client done. Neither are up yet for public consumption, but as soon as I start giving IRC users alphas, there will be another post and the project will appear in the usual gitweb.

I'm not sure how long it will take for that to happen, but I'm hoping to put out the initial 0.8.0 release before the end of the year (loose enough timeline for you?).

A short list of notable changes:

The basic gist you should take away from this post is that it's time for Canto to level up.


Send all bug reports to canto-reader [at] codezen [dot] org
Or come to discuss in #canto on irc.freenode.net