Saturday, June 18, 2005

My Google Summer of Code Proposal

Implement Remote Logging for Gaim
Abtin Forouzandeh

SYNOPSIS
The objective of this project is to implement a system by which gaim will communicate with a web server for the purposes of storing log files. This will be done by implementing a plugin for gaim which will use HTTP POST to send data to a website. A reference website will also be developed and deployed.

THE PROBLEM
I communicate with my employer and my users over IM and logs of these conversations are invaluable. The problem arises because I use gaim from multiple locations (home, work, laptop). Logs are distributed between these locations and therefore log recollection is cumbersome and frequently impossible.

BENEFITS
  1. Logs are useful for serious uses of IM, such as coordinating work and school tasks. Centralized, searchable logs would increase the usefulness. For example, at my job, my department conducts meetings over IM. It would be beneficial to be able to integrate IM logs with our project management website.
  2. Gaim with a log website could become a form of answering machine. You could leave your computer running gaim and go on vacation, leaving an away message that indicates you will check your message periodically. All you would have to do is log onto the website from any computer to access your unread chat logs. With some basic development of the website, you could even respond and send new messages.
  3. An open method for sending logs over HTTP will lead to unforeseen integration
    1. A trivial use would be a new style of blogging. People post pictures to the web right now, why not IMs and chats?
    2. What if transcripts of online meetings could be integrated with groupware?
    3. Though gaim is not the ideal platform, it could be used as a method for posting irc logs to the web.
    4. Perhaps it could even be integrated with a system like cellphone text messages.
  4. If a centralized log website becomes popular, it could potentially become a source of revenue for the gaim project by hosting googlestyle ads.
DELIVERABLES
  1. A plugin will be developed for gaim which will intercept message/chat send/receive events and post them to a website.
  2. A website will be developed which will receive input from the plugin, authenticate users, search and retrieve logs.

PROJECT DETAILS
  1. GAIM DEVELOPMENT
    1. Functionality will primarily be implemented as a plugin. Every attempt will be made so the plugin will be crossplatform.
      1. The plugin will have a preferences UI frame, which will use GtkWidgets for controls. Options specified by the user will be: web server to which logs will be sent, user name and password for that server, and whether the user would like to log either or both IMs and chats.
      2. The plugin will subscribe to the "sent-im-msg", "received-im-msg", "sent-chat-msg", and "received-chat-msg" signals. The corresponding callback for each signal will check preferences and decide if it should log the event (for example, if the user elected to not record chats, then the callback will simply return). This is the same method which is used in the state notification plugin (statenotify.c).
      3. When one of the signals are triggered, the callback will build string (herein called poststring) containing the user's name, password, account type(jabber, aim, etc), account name, and data. The callback will then make a call to a function which will be defined in util.c.
      4. The function (which might be named HTTPPost) in util.c will handle POSTing the data. It will require two parameters: one specifying the web server to which the string should be sent and the other being the actual poststring. The response to the POST request will indicate whether the log entry was successfully added or if it failed.
  2. WEBSITE
    1. The objective of the website is to give users the ability to see the advantages of remote logging and therefore motivate others to begin more advanced projects like integration various websites.
    2. The website will be developed using either PHP or RubyOnRails.
    3. Users will goto a website and create an account. They will receive a user name and password, which will then be used to configure the gaim plugin and to log into the website.
    4. Users will not need to specify their accounts. They will automatically be identified when logs are posted.
    5. Users will be able to retrieves logs by account/contact. They will also be able to search the logs using basic keywords.
    6. The website will be backed by a database, which will probably be MySQL.
    7. Schema - this was a table in the pdf i originally submitted. I'll post it if anyone so requests.
  3. PROTOCOL
    1. The structure of the POST string will be precisely defined so that others may implement websites which take advantage of the plugin.

Potential Followup Projects
  1. Security
    1. Use SSL to transmit the POST message.
    2. Encrypt the text portion of the message prior to sending it.
  2. Advanced Preferences
    1. Permit the user to define on a peraccount, perchannel basis which logs they would like sent to the web server.
    2. Or more generally, permit the user to specify a different server for each account they have. That way, logs from a connections to a corporate chat server can be sent to a corporate log website and personal logs can be sent a different log website.
  3. Improvements to existing gaim log viewer
    1. Add a feature to send existing logs to a website.
    2. Add the ability to view remote logs from within gaim.

Bio of Abtin Forouzandeh
I recently began my doublemajor in math and computer science at San Francisco State University. From 20012002, I led development of a proprietary PalmPilot VNC client for a small startup firm. Presently, I actively code and lead a small team developing CRM and other internal software at a wholesale distributer.