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.
|
Screenshot of several Shacknews threads
Prototype showing several topics with attached shackers
|