Blip
Blip (previously known as Pulse) is a system for tracking your projects and the resources you use by crawling around sources of information and telling you useful stuff. It was originally designed to serve as a documentation tracker for Gnome to help writers and editors see what needs to be worked on. It has grown into a system that can provide useful information to programmers, translators, testers, and just about anybody else involved in making software work.
Note that we don't run the crawler on www.gnome.org, so this instance is only updated sporadically when Shaun gets around to it.
You can get Blip from Gitorious with the following command:
git clone git://gitorious.org/blip/blip.git
Blip is developed primarily by Shaun McCance.
Planning
We are always looking to add useful new functionality to Blip. Occasionally, we like to add useless functionality as well, if it's fun. Here are some ideas:
How Blip Works
Blip consists of two components: a crawler and a web application. The crawler, called pulsate, is what's responsible for finding information, filling up the database, generating graphs, etc. Its functionality is provided by Python modules, each of which does a particular task.
The web application is responsible for displaying information to the user. It is largely a read-only system, although it does modify the database for certain account-related stuff.
Blip recently switched to Storm for its database access. Previously it used Django's ORM, and long ago it used SQLObject.
Blip outputs pages using a custom-made object-oriented page construction module. It is designed to encourage consistency throughout Pulse's page and reduce the amount of display logic throughout the rest of the code. No, Blip does not use a template system for output. No, I'm not really interested in having it do so.
The general trend in Blip is to separate functionality into smaller pluggable modules. This allows us to teach Blip about different types of systems without modifying its core. That said, our approach is to get stuff working first, then figure out how to abstract. Premature abstraction is the other root of all evil.