2010-07-27 12:53:14
You can grab the 0.7.10 release from the download page.
- Add canto-inspect.1 manpage
- Fix other manpages
- Fix some 2.6 incompatible abuse
- Add workaround for bad feed data caused by switching between the system feedparser and the builtin.
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:
-
Server / client (as mentioned above).
-
Blocking event-based architecture = 0% CPU usage when not in use.
-
INI style config, that can be machine manipulated. (Although Python extension will be worked in.)
-
Built-in interface command line.
-
Supports traditional text-cursor in addition to new commands making it trivial to do massive batch operations and use the interface without the text-cursor.
-
Filters / sorts in arbitrary, persistently loaded binaries.
-
All around more efficient methods for practically everything.
The basic gist you should take away from this post is that it's time for Canto to level up.
- Jack