 |
Andrew Peach
java.net ID: apeach
Contact e-mail: andrewpeach @ yahoo.com
Summer of Code
203 - 3D Chat environment
Status Update - 31 July 2005
org.jdesktop.lg3d.apps.chat3d
Model for Chat API: Network <-> Chat abstraction <-> UI abstraction <-> User
The Chat abstraction contains all API-specific methods so that the library can be easily changed. Currently, the implementation is based on NFC Chat. This library needs to be somewhat modified for this API. In particular, for this API, private messages are sent to one user as part of a specific group, not simply to a user. This modification allows the messages to be visually grouped. Also, a default group is added to the server of which all users are always a part.
The UI abstraction provides a standard set of callback methods when messages are received from the server. These methods include callbacks for messages and information about the status of other users. It also stores a reference to the Chat abstraction through which messages are sent.
- For the Console UI, there seem to be very few good ncurses-like APIs available for Java. CHARVA, though a cool bit of programming, is really an ncurses reimplentation of the Java AWT classes, so to use it would pretty much defeat the purpose of writing a simple console UI. I think the http://jchassis.sourceforge.net/[JChassis]] project's UI term would be a more effective demonstration.
- As far as the 3D UI, the CD organizing demo program provides a good example for the display code. Since messages are in the format [ Group, Sending User, Text ], the most effective data structure is to map the group name to a list of its users and the window associated with each user. At this point, it also seems to make sense to have an optional window for group chat similar to traditional chat rooms. This window allows for an ordered history of public chat within the group.
I realize I am behind schedule, so I will have to work to catch up. The good news is that I now feel fully motivated to work and still expect to complete it within the given timetable. As far as I am concerned, the design is pretty much set in stone; the only big quandry is whether to include file transfer capability since it is not a part of the NFC Chat specification.
Deliverables
- Chat API
- An event driven chat API in Java for use with a variety of applications. Fully documented with example code.
- 3D Chat GUI
- A Java chat client which takes full advantage of LG's 3D interface.
Description
The chat API provides a callback interface class which the application extends and passes to an initialization method. This interface includes methods that provide a user list and notifies the application when a user arrives, leaves or sends a message. The intent is to use the same API in both the 3D Chat GUI and a console interface. This part of the project necessitates contact with Looking Glass developers to discuss their requirements and wishes, particularly which protocols need to be included.
Events include get protocol type (during initialization), arriving user, leaving user and new message. Another method of API allows for messages to be sent. With this design, the API abstracts from the specific protocol, allowing the client to simply choose one.
The 3D Chat GUI takes advantage of Looking Glass to clean up the clutter of chatting with many people at once. With this interface, people are grouped so that all the chat windows are simultaneously visible. For each member of a group, all chat windows are pushed away, except for the one that has focus which is placed in the foreground at the center of the circle of inactive windows. An animation, such as a bouncing or rotating effect show the arrival of a new message in inactive windows. If there are simply too many users, inactive windows can be stacked on the side of the screen like CDs in a rack.
This circular grouping adds a visual element to the groups already found in AIM buddy lists. For example, you can have a group for friends, another for family, a third for coworkers and so forth. In addition, users can be temporarily grouped so that, for example, a group of people working on project are kept together, but still in distinct windows.
In addition, the user list can show online users on the front and offline users on the back to keep the clutter down. Also, unassigned users can be automatically grouped to allow for more than one open window.
The image below shows a very simple example of the intent of the GUI. It shows the buddy list in the upper-left corner, and four groups of windows, one of which uses a stack of windows to maximize screen efficiency.
|
| A mockup of the GUI |
Work Schedule
| Week | Task |
| 1 | Discuss needs with LG users. Begin learning LG API |
| 2 | Detailed design for API. Begin writing API |
| 3 | Write rudimentary console interface using API |
| 4 | Detailed design of GUI classes/features |
| 5 | Begin writing GUI (2 weeks) |
| 7 | Testing and debugging. First local tests, then wide area tests with other LG users |
About Me
I'm a second year Computer Science major at the University of Maryland at College Park. I've lived along the eastern seaboard all my life, ranging from North Carolina up to Massachusetts. I enjoy listening to, playing and composing classical music, playing with my cats
I've taken or been exempted from the following Computer Science related courses:
Calculus I & II
Discrete Structures
Object Oriented Programming I & II (Java)
Introduction to Low-Level Programming Concepts (ANSI C)
In high school, I took an introductory programming course in Pascal, a second course in C++ and the AP Computer Structures AB course in C++.
The largest programming project I've ever written comprised more than 3000 lines of C++. It's a relatively simple 3D space combat game. For the 2D routines, I used the WINBGIM library, a Win32 port of the Borland Graphics Interface with extensions for higher resolution, more colors and a mouse.
This game was designed to be easily portable; all of the Windows-specific code is hidden in a screen class and all of the 3D routines are done in software. It was also designed to be very extendable; I added an effective and non-cheating AI in two days once the rest of the project was completed because of the polymorphic world object design.
The largest design project I've ever participated in was for the Lemelson-MIT InvenTeams program. High school groups apply for a grant of up to $10,000 (USD) which funds the design of an invention. Our project, a lighted crosswalk to improve pedestrian visibility, is detailed on the InvenTeams website and by the Boston Globe here. My role was primarily to design and build the piezoelectric step pad used as a trigger for the crosswalk. This project began near the end of my junior year and was completed shortly after I graduated.
|