Chronos is a multiparty chat application that demostrates our work on sync (high level idea is similar to ccnx sync, but the design is slightly different).

Chronos will have binary package for Mac OS X 10.7 and 10.8 hopefully by the time of the next retreat. However, it's too much work to do binary packaging for different flavors of Linux, so Linux users will have to compile by their own.

Note that after you click to close Chronos, it will be running on your system tray. To restore it to normal size window, you have to click on the system tray icon (normally on the upper right corner of your screen). Clicking on the dock won't work for now and is still on the to-do list (because I'm using qt for gui, not the native Cocoa framework).

You need pkg-config, protobuf, boost, and qt to compile this app. All of them can be installed through macports.
The following command should do it:
$ sudo port install pkg-config protobuf-cpp boost qt4-mac 

To compile this app:
1. in the top directory, check out the "sync" submodule
$ git submodule update --init

2. go to sync directory, do:
$ ./waf configure
$ ./waf
$ sudo ./waf install

3. back to the top directory, set up environment for pkg-config, make sure libsync.pc is searchable, this is mine:
$ export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig

4. compile Chronos:
$ qmake
$ make

Congratulations! Chronos.app is ready to use (on a Mac).

To run the app, you should provide your nick and the chatroom you want to join, and also the prefix for your data (this should be auto-discovered by retreat time). For example, if you are using spurs.ucla.edu as your testbed hub, you should use "/ndn/ucla.edu" as your prefix.

