Caucus Chat Tool
(Last revised 22 October 2003.)
Caucus 4.5 supports a real-time "chat" and whiteboard tool. It is an optional add-on package that is automatically integrated with Caucus, and is based on a powerful open-source tool called Babylon. Babylon is a free (GPL'd) java applet that is well-written and easily extensible. The original author of Babylon is Andy McLaughlin (see the Babylon link for details).
We have modified Babylon somewhat, and integrated it with Caucus as an add-on module. In this form, it adds a powerful real-time element to the traditional "asynchronous" Caucus conversations. See Using Caucus Chat for details of installation, and how Babylon is invoked from Caucus. You can see the chat tool in action within Caucus in our Technical Support conference -- follow the link to caucuscare/com/caucus/technical_support/37 for more information.
In keeping with both the letter and the spirit of the GPL, our modifications to Babylon are described (and available) here. Detailed comments in the java source files specify the precise changes that were made. While most of our modifications relate to making Babylon easier to use within Caucus, anyone is free to download and use our modifications for any purpose, according to the terms of the GPL. The actual Caucus code that makes use of Babylon, however, is a commercial, proprietary add-on product to a Caucus license -- for more information, please contact us at firstname.lastname@example.org.
(Note: the Caucus software 'launches' Babylon as a separate program, and is not in any way linked -- in the software meaning of the term -- with Babylon, and therefore is not itself affected by the GPL.)
To download the integrated chat tool package, contact us directly at email@example.com.
To download the "most original" Babylon source, currently version 2.1.BETA, see visopsys.org/andy/babylon/download.html.
Our modified version of the Babylon source is based on 2.1.BETA, and is numbered 2.1_B.2. You may download it as babylon21B2.tar.gz. We strongly recommend you read the rest of this document to understand precisely what you are getting.
We find it best to compile Babylon with the 1.3 Java SDK. Later versions seem to run into problems with Microsoft's JVM in IE 6.0. (Probably the result of legal tussles between Microsoft and Sun -- see this ZDnet story.)
The rest of this document describes our modifications in more detail, for the curious. For information about actually using the chat tool in Caucus, please see Using Caucus Chat.
III. Formatting and Comments
We found the particular indentation and brace style used in Babylon to be less than ideal. A quick run through Jalopy reformatted it to our liking (3 spaces per indent level, opening braces on the same line as the if, while, etc. statement). Our distribution applies this indentation change to all of the Babylon source files.
There are also precious few comments (other than the GPL) itself inside Babylon. Fortunately, the object names and usage are quite clear, readable, and logical, so finding the places to make changes is pretty easy. We have added modification comments (again, per the GPL) as appropriate.
IV. New Features
- To make the chat logs more useful, we've made three changes:
- Each distinct chat session gets written to a different log file. The logfile name now includes the epoch time, in seconds, of when the chat session started (e.g. "mychatroom.1058377880.chatlog"). It's up to the local sysadmin to clean out old logs as needed.
- A new (optional) startup parameter, "-chatlogdir", is parsed by the chat server. It specifies the full pathname of a directory: chat logs are written there. (If not specified, they go in the default directory).
- Each line in a chat logfile begins with the epoch time when the comment was made, e.g. 1058377699 roth> OK, so we're in. Now what?
Eventually we expect to provide automatic import of the logged chats into Caucus "items", so that asynchrous users can follow exactly what happened in the chat as if it were a regular Caucus item.
- We've also added a "launch URL" feature that can be very useful when Babylon is used as a teaching tool. Any user may type "launch (someurl)" (and only that text) as a comment, and all applet clients in that chat room pop-up a browser window pointed to someurl. The "http://" is optional.
A better interface design would probably add this feature as a button, rather than a command to be typed. That change may follow in a subsequent version.
- Many buttons were simply removed (commented out). Since most of the business of launching Babylon, connecting to a chat room, knowing about the users, etc. is intended to be handled by Caucus, we stripped out many of the standard Babylon buttons and displays.
Other buttons were made optional. The new applet parameters "help", "ignore", "im", "pageuser" have values of "yes" or "no" to control the display of the "Help", "Ignore user(s)", "Instant Messaging", and "Page user(s)" buttons.
- The width and height applet parameters now properly set the size of the applet. (This is a bug fix.)
- In babylonLanguage_en.properties, we added 'welcome_to', and changed messaging, manual, about, aboutBabylon, and aboutString (clarified source of original and modified versions). MANUAL.TXT was greatly trimmed down, to become a help file for applet users only.
- Caucus has an option to pass a user's "full name" (e.g. "Charles Roth") to Babylon as the username. However, since Babylon expects usernames to be one word, we encode blanks in the username as control-A characters before sending it to Babylon. We've therefore modified certain portions of Babylon to reverse the translation (from control-A back to blank) on output. This is still kind of messy, and experimental.
V. Future Thoughts
Things we'd like to do with Babylon in the future...
- Hook up "save whiteboard" in a way that can be pulled into Caucus as a GIF or JPEG.
- Make "launch URL" a field or pop-up dialog -- and allow the original launcher the ability to keep pasting new URL's into that field, so the other participants can follow the navigation.
- Colorize certain parts of the chat display (such as user's name/id) to make it easier to read.
- Find a better sound to replace that dang screeching monkey! <g>
- Try splitting babylon.jar into a server file and a pure applet, in the hope of reducing the applet download time for modem users.
- Investigate cut-and-paste to/from the chat text subwindow. There's a good intro article on using the clipboard at www.javaworld.com/javaworld/javatips/jw-javatip61.html.