Informant 0.01
Informant grew out of an idea for a neat hack to alert users of a CVS commit via CVSToys. With help of some of the Twisted hackers at PyCon DC 2003, the very first version was created. Then, I realized that this could be something even more generic and useful. From this, Alerts Applet, recently renamed Informant, was born.
Informant currently resides at:
http://www.travishartwell.net/projects/informant/
Any questions, comments, or patches should be sent to nafai (at) travishartwell (dot) net.
What is it?
Informant is a set of utilities for keeping a user informed of events. It consists of an informant, which is the means by which the user is alerted to the occurrence of the said event, and a number of sources that "whisper" an alert to the informant when the event occurs.
Currently, the informant is implemented as a Gnome Panel applet or a stand alone Gtk program. When an alert has been whispered by a source, the text of the applet or Gtk program changes from "No alerts" to "New Alerts". The user can click on the text and a window will pop up containing a list of the alerts received and the time they were received. The sources provided are the original CVSToys source, an e-mail filter source and a daemonized version of it, an RSS feed source (relying on TouRSSt), a web page change monitoring source, and a simple command line source that can be called from anything else. The code for each of these sources is simple enough to follow that new sources can be written quite easily.
What's the motivation?
Though the idea came from a neat hack just to play with Python, Twisted, and Gnome, it paved the way for other ideas. I find myself allowing the computer and the Internet to distract me: "I wonder what e-mail I have? I checked it 10 minutes ago, maybe something new has come! I had better check to see if Joe Schmo has updated his blog, even though I checked it 2 hours ago." I would waste time doing such things out of habit. The computer became something I was enslaved to, not something that was a tool for me.
I consider myself a toolsmith and a creator, so this is the beginning of a set of tools to help me effectively use a computer to enhance my life. I wanted something that would alert me of these conditions, but not distract me if I was in the middle of coding or writing or whatever. A simple glance at the panel at the top of my screen will suffice to see if any of the desired events have occurred. I now configure my e-mail source to watch for e-mail messages I am expecting or e-mail from special individuals. I now use the RSS source to watch the various blogs that I read so I will only check them when they actually have changed. For web pages that don't provide RSS feeds, the web page monitor is quite useful. And, for any other random event -- say I am in the middle of a long compile on a machine other than my laptop -- I just use the whisperalert program to let me know when it is finished.
Where from here?
This is part of a greater set of tools and functionality I am just beginning to piece together in my mind. For specific future implementation plans, see the file TODO in this directory. Ultimately, though, I want my computer to be a tool that works for me. I want to make it easy to tell my computer to let me know when certain things need to be done. For example, to watch my usage of my cell phone minutes via logging into my wireless provider's website and then letting me know when I am within a certain threshold of the limit. Another example is to utilize a tool like Remind (http://www.roaringpenguin.com/products/remind/index.php) to remind me to pay a bill every day for 3 days up until the day the bill is due. Or to remind me of someone's birthday or other event.
I would also like to integrate this with some sort of IRC bot that would alert me -- when I am not currently connected to my proxied IRC session -- when someone sends me a private message or mentions my name or some other watched for phrase. Another possible use would be to watch system logs for certain phrases and to let me know when they occur.
Also, some way of prioritizing alerts is an intriguing idea. Then, BY utilizing some method such as color, though I know that is not ideal because of potential color blind users, each alert will be displayed by its priority. The informant would change the way it indicated new alerts have arrived based on the highest priority alert. At a quick glance the user could tell, "Oh, it's only a low priority alert, I'll finish coding this class before I check it" or "This is a very high priority alert! I had better check it -- perhaps there is a problem with one of my servers." Extending this, it could be configured that when an event over a certain priority occurs, automatically do something. For example, send a text message to my cell phone with the alert message on it.
Finally, each alert could have associated with it an action. The alert text displayed would be turned into a hyperlink for the given action. An action could be Python code or some program to execute. On my system, an e-mail alert action would switch me to my mail program so I could read the message. Or an RSS alert action would switch me to the web browser and bring up the corresponding web page in a new tab. The action for an alert from a remote server might be bringing up an xterm with an ssh session to the server.
