Twoverse, the universe of August 23, 1966
This post is part of a series describing the August 23, 1966 project.
The software core of the August 23, 1966 project is a Java software system named “Twoverse,” a parallel universe that exists only in the digital realm.
The Twoverse architecture can be split into three levels - server, client and input. This diagram (full size) includes some unimplemented elements, such as input from a sound sensor.
System Design
The broad concept of Twoverse includes mechanics and partial system specifications for a massively multiplayer online game. The scope was minimized due to time constraints and to better fit the gallery installation. However, even with a smaller scope, a complete vertical slice of the entire system was implemented and used. Downsized from a universe of many types of objects, the system currently supports a universe made of stars with a few properties, and constellations that connect them with meta-objects known as links. Extensibility was considered from the beginning of development, so adding new objects will require a minimal amount of work.
Server
The system relies on a central server to provide the following:
- A persistant database of all objects in the universe and their current state, using MySQL
- User account management, as well as authenticated session negotiation
- A public API for interacting with the universe, via Apache XML-RPC
- Client pull style updates for minimizing bandwidth requirements, via an XML feed
- A browser based frontend to view the status of objects in the universe, via PHP
Client
Using the XML-RPC API, many types of clients are possible. This includes graphical, text-based, mobile, e-mail, etc. The clients implemented for the gallery installation are graphical clients written using the Processing development environment and include the following features:
- Users can scroll and zoom around a graphical universe of glowing stars
- Users can click on an individual star to view a close-up view and additional details about its creation and properties
- Users can create a new star in the universe, and watch a 3D visualization of their star’s formation
- Users can draw constellations that connect the stars in the universe, and leave them for other users to see
- Users can visit the gallery website to view a table of all of the stars in the universe, their properties and current status
The graphical client uses the XML-RPC API as defined by the server, and updates its local cache of the universe via the server’s XML feed.
A screenshot of the star chart in a web browser during the time the gallery was open:
Library
The client and server for Twoverse share many common functions, and were designed to inherit from the same code hierarchy. They both stem from a Twoverse Java library, which includes many utility classes, shared functionality and the server executable. The Twoverse library provides these features and many others:
- Database wrapper for a persistent universe - could be used to run SQL database client-side. (Revisiting this, a more established ORM should be used.)
- XML-RPC servlet for serving XML-RPC requests
- Thread-safe universal object manager for maintaining the state of the universe
- User session manager
- Small unit test suite for core classes
- Processing camera wrapper for simplifying the elusive camera() function
- Flexible 2D/3D point coordinate class
Additional documentation is available as Javadoc comments with the source code.
Interface Screenshots
A screenshot of the multi-touch Client with a group of stars displayed at the default zoom level. The lines connecting the stars are constellations drawn by a user.
A screenshot of the multi-touch Client viewing the details of a single star.
A screenshot of the multi-touch Client zoomed in for a closer look at a cluster of stars.
Continue to the next section, details of the multi-touch table.