April 23, 2009

Graph Visualization/Interaction

I'm been trying to find a good open source C#/.NET library for graph visualization and manipulation (Not charts/graphs, but graphs as in Computer Science graph theory/nodes/edges.) I have come up pretty empty handed. I'm trying to find a way to visualize and interact with a state machine library that I have. So I just need basic nodes and edges, both with labels and color, and automatic layout algorithms. I've looked and looked and come up empty handed, the best I could find were:
  • QuickGraph, which didn't seem to have any useful interactive capabilities, and depended on other libraries/code for displaying graphs.
  • NodeXL which seemed to be primarily excel based (who does that?), but did have a library component, but didn't seem to be able to even label edges of graphs.
  • Netron which seems to have existed once as open source, but is now something else (The website is very unclear about what/if they are selling), there is an older version of the open source code that has lots of components, but it doesn't appear to be geared toward library use.
  • Piccolo2D seemed promising, but also seemed to not support labeling edges, and also seemed more oriented towards alternate UI design than simple graph display and manipulation.
Since I couldn't find any compelling C# solutions, I resorted to the defacto standard for graph visualization: Graphviz. It's been around for ever and does very well at displaying graphs, but the best interface I could find was the command line app dot, which works well, but not ideal for integration into a library. I've written a small very specialized C# library that converts my state machines into simple dot files, and processes them in dot through the command line to image files. It is far from ideal, but the results are pretty good. Unfortunately the options for interacting with the graphs are limited since all I get is an image. Hopefully someone will come up with a decent graph visualization/manipulation library for C# some day. Until then, this will have to do.

P.S. Just in case anyone is wondering, I did consider using Windows Workflow Foundation for our state machines, but they seemed way to heavyweight, and since it sounds like they are rearchitecting the system for version 4.0 (To finally get it right hopefully?). I decided to steer clear.

April 14, 2009

Distributed Computing

For years now I have been running Prime95 on some of my computers. (I'm 256 on the top producers list right now). But I've decided to try branching out. I know SETI@home is one of the older projects and I decided to give it a try. I'm only a few days into it and I only have about 7,000 credits on my account. It is cool that SETI@home has a client application that is able to use the GPU. So on my quad core system, I can have 5 concurrent tasks (1 GPC, and 4 CPU).

Distributed computing has always seemed very interesting to me as a software developer. Unfortunately there are only certain projects and applications that lend themselves to this kind of architecture. Most applications are tightly coupled and even if they can be "distributed", it's likely that the best you'll get is multiple CPU's on the same host computer. Some tasks can be distributed across multiple computers that are co-located and/or have high speed interconnects like most super computers these days. But even many of these tasks require that the systems are the same hardware/OS/etc, and thinking back to my college class on parallel processing, they can be hard to write well (so they run efficiently and correctly). There really are relatively few projects that fit this mold of being able to be widely distributed across different machines that only communicate on an infrequent basis. But it is a really cool concept, that seems to be gaining more traction in the commercial world as well as these kinds of collaborative volunteer projects.

By the way, the best sites I've seen so far for monitoring stats are BOINCstats and Free-DC. They both seem to have a decent set of graphs and data to analyze my progress. But the other stats sites have some cool stuff as well (Stats 'N Stones, Synergy, The Knights, all Project Stats, Combined Statistics). If anyone else has any favorite projects let me know. I probably try branching out in the next few weeks.

UPDATE: I decided to join Einstein@Home as well, but I'm still open to other project suggestions.