Annagram
Concurrent Text Editor

Annagram Home

Overview
Features
 Architecture Downloads



More Senior Projects
Find the full list of Penn's 2006 CSE Senior Projects at SEAS.



   
Architecture

Annagram Architecture


Annagram's architecture utilizes C# & .NET, Managed C++, Libjingle, XMPP & XML, and the Jupiter Collaboration Algorithim. Additional components include the GIPS Voice Engine Lite & Expat XML Parser.

C# & .NET

The C# language, utilizing the .NET Framework, was utilized for all GUI development (i.e. non-networking & Libjingle).

Libjingle

Libjingle is a Google Talk Voice and P2P Interoperability Library. It is a set of C++ components that can be used to build a variety of communication and collaboration applications. Libjingle implements Jingle, a proposed extension to XMPP for P2P connectivity.

Annagram utilizes Libjingle for all networking capabilities (chat, VoIP, and Document Sharing). Annagram uses a Managed C++ wrapper that encapsulates Libjingle for access via other .NET languages, such as C#.

XMPP & XML

Annagram uses XMPP as its protocol for establishing all network sessions. Once a document is connected to, a P2P connection (non-XMPP) with XML messages is used to pass messages.

Jupiter Algorithim

Annagram relies on a modified version of the Jupiter Collaboration System, developed at Xerox PARC and extended by Zafer (2001). The algorithm is a distributed operational transformation algorithm. The system is optimistic in that all local document changes are applied immediately, allowing for reduced latency and immediate user response. It does not rely on a locking measure of any kind. When remote messages are received, it transforms these messages via a transformation function so that the documents are kept in sync. The algorithm tracks the client state and the server state in order to know how to transform the messages. The Jupiter Algorithm relies on 2-dimensional state spaces, ensuring that all clients will reach the same state (although most likely via different paths). An example is below: