The good news was I didn't have to install anything but `apt-get install scala` and an Emacs package manager (!) so I could grab a Scala mode Emacs package. The base capabilities of the language were plenty for this little toy. The other good news is that it runs 100x faster than the piece of software (graphviz) which consumes the output, so it is by definition sufficiently fast (10-20 seconds on a 6.6MB input, depending on the compilation time).

The ugly:Having a compiler barf at you when you do something stupid is pretty great, but the errors are very non-intuitive. Also, at first I pretty consistently generated a runtime error on a .toDouble call, the text of which was zero help.The syntax for creating tuples is simple and "right". The syntax for consuming tuples as arguments to functions seems backasswards. I'm still not convinced there isn't a more elegant way to do it lurking somewhere in the language, but I couldn't find it while drinking a Double Mountain IRA last night.The abomination that is the }) really needs to be dragged out into the street and hanged.At first I tried producing my output with a map, but evidently that is a no-no. Something about side effects? Not sure.I would have never in a thousand years come up with that XML parsing syntax, but it's starting to grow on me. I worry about how expensive it is.

ToDo:I need to control the number of digits printed out in the label.I need to limit the number of taillabels to the number of systems.

Implemented all the stuff on the old ToDo list and cleaned it up a bit.

Dicking around with flatMap made me realize I really haven't ever tried to program systems using higher-order functions since college.

Anyway, much of the increase in LOC here is trying to prune away significant parts of the universe. In this case, I'm eliminating all links between system except those in a narrow shell between 1.9 & 2.0 light years (with exceptions for key systems specified via command line argument) to get something approximating a human-legible graph.

ToDo List 2.0:Collapse the systems adjacent to the key systems before calculating any links between anything.