Technical Details

The enVision Web interface is essentially a classic Java "paint" applet that maintains a chronologically ordered cache list of objects that have been painted on the whiteboard component. However, instead of these objects being restricted to the traditional shapes of a paint program, like boxes and ovals, enVision includes other objects specifically for mathematics, such as resizeable integrals. The cache list is also synchronized with one located on MathServer.

The first thing the enVision Web interface does when it is loaded is attempt to open a persistent TCP socket connection and authenticate itself as a valid enVision client with the designated or default MathServer. If it is unable to connect or an established connection is lost, it will keep trying to connect again. However, to avoid problems with users forgetting to close their enVision interfaces, each connection will time out after six hours.

Once properly connected, the enVision client and MathServer are ready to transmit data. Note that data transmission is not encrypted.

The fact that enVision uses persistent TCP connections allows it to be more responsive than if it were to use intermittent polling, as many chat scripts do. This does mean, however, that enVision must run on its own dedicated port and that MathServer must run for the entire length of the chat session.

MathServer is a simple Java application stored in a single 4kB Java archive (i.e., a .jar file). Its functionality is quite basic, and it does only the following:

It accepts and authenticates connections from enVision Web interface clients.

It maintains a list of all objects (until cleared) it has received from the clients, i.e. a cache list.

If it receives a new object from a client it adds it to the cache list and broadcasts it to all other connected clients.

It sends any newly connected client a list of all items in its cache list.

It can save/load cache lists to/from ".mth files" on the Web-server, if requested.

Each .mth file is a plain text file that has been gzipped, and if unzipped it can easily be edited in a text editor. Each object (of which there are about 140 different types) is stored on a separate line in the file and has the general colon-delimited format: