shack community visualiser

a force-based shacknews visualisation built in XNA for CMPS161 by Malcolm Crum

The final project for CMPS161 involves importing raw data, interpreting that data, and representing it in a way that improves readability and provides insight.

Data

I'm a frequent visitor of Shacknews, a gaming community with a very active threaded forum system. Every day several thousand posts are written by "shackers" in the "chatty", either as unique posts or as responses to other posts. Such threads form trees, able to be navigated by users familiar with the system but somewhat cumbersome when taken as a whole, or when found by newbies to the site.

Several shackers have made APIs available that cache a local copy of Shacknews's discussions and provide it to third parties in easily read formats. All data available on the primary site is accessible via these APIs; current root topics, who is posting in them, content of individual threads, and more. It is this information that I plan on using live for my visualisation.

Visualisation

I intend to use force-based graphs to represent current active topics on the Shack chatty. Here is a rough plan of modeled entities and their relationships to each other:

  • Root post - likely the center of the diagram, exerts an attracting force on all posts attached to it. Multiple root posts will be shown. Colour will indicate category of thread.
  • Replies - Attracted to its parent and children posts, and to any other posts made by its author. Size, or perhaps colour intensity, will indicate size of post.
  • Shackers - I may represent individual users, hovering around posts they are more active in
  • In addition, all posts and replies will exert a repelling force on all other posts and replies, to ensure a visually uncluttered diagram.

I expect to see trees branching web-like around root posts, and related threads shifting closer to one another, as posts by the same user nudge closer to one another.

Technology

I plan on coding using XNA, as it offers quick prototyping, strong 2D drawing libraries, and I'm familiar with it from previous classes.

Shack APIs are available in JSON and XML format; I will likely use the latter as C# includes an XML reader.

The diagram should be interactive: users will be able to watch posts shuffle around as they resolve positions, click posts for additional details or content, and drag posts around to manipulate the visualization. A refresh button should clear the graph, import fresh posts, and display them.

Timeline

  • Prototype: Completed - Over the last two weeks I have built a simple XNA program that gets some data from Shacknews and displays it in a limited manner.
  • Internal data layout: Feb 15th - At this point I'd like to be reading all relevant data from Shacknews and storing it in objects linked to one another. In other words: Get the data and connect it where appropriate.
  • Force diagram complete: Feb 27th - Force diagram of latest threads should be complete at this point, able to be manipulated by the user, and should be a clear representation of the final product.
  • Polish + UI enhancements: Mar 15th - Should attract/repel constants be adjusted for clearer representation? Any alternative ways to represent minor data such as reply count or post size? Consider allowing zooming on a single thread for detail.