Status Report

This last month began with the release of arm 1.4.1, last minute features including better TBB compatibility and summarization/filtering of the options presented in the configuration panel. This was followed by three hotfixes for platform specific bugs in error handling and an improvement to help with Gentoo ebuilds (thanks to Fabian, Trystero, and Anthony).

Since then I’ve been diving into the connection panel source, splitting out and improving its functionality for mapping IP/ORPorts to fingerprints and identifying exit connections (this determines what information is publicly displayable or not). The pesky syshook concurrency error and among others have also been fixed.

I’ve been working weekends to make deadlines for Amazon and had a week long brush with the flu which ate a good portion of this month. I’m also scheduled for our oncall rotation next week which won’t help either. However, I’m hoping to have the connection panel rewrite finished this month and begin working on some tasty new features for it soon afterward.

Hi all. In the month of December arm saw some *sweet* improvements. Here’s what I’ve been up to:

  • Vastly Better Resolver Performance

    By far the most expensive thing that arm does is ps and netstat/lsof/etc lookups. While wandering around development forums I discovered psutil, an awesome library for cross platform resolution of system and process information. For OSX and BSD they’re using ps and lsof lookups just like arm. However, for Linux they had a very different approach, querying proc contents directly. I adapted the functions for arm and it cut the runtime for resource and connection resolution by 90%. Many thanks to the authors of psutil (Jay Loden, Dave Daeschler, and Giampaolo Rodola’)!

  • BSD Compatibility

    For a long time FreeBSD has been arm’s nemesis. Its variant of netstat can’t get connection pids, the ss resolving utility belongs to a spreadsheet program instead, and even pid resolution failed (breaking resource stats and numerous other things). However, thanks to patches and testing by Fabian Keil and Hans Schnehl arm now has BSD counterparts for all of these, plus autodetection for BSD Jails.

  • Expanded Distribution

    Peter and I have finished revisions for the arm deb and it’s now pending feedback from the Debian FTP admins. Arm is also now available on ArchLinux thanks to Spider.007 and Fabian mentioned that he might be interested in doing a FreeBSD port.

  • Volunteer Recruiting

    Being the lone developer of arm is kinda lonely. I’d love to find other people interested in hacking on the code with me. To this end, and in anticipation of GSOC 2011, I’ve added a project to Tor’s volunteer page (“Client Mode Use Cases for Arm”). I also found other island resident interested in learning Python and possibly working on both arm and OpenWrt (keeping my fingers crossed that he’ll get involved!).

Plus numerous other fixes and improvements. The next release is currently planned for next week, and for January my goal is to get arm’s connection panel rewritten, which is important to the project for a couple reasons:

  • The first couple iterations of arm were prototypes, figuring out what worked and what didn’t. As such, the maintainability and performance of the code kinda sucked. My overarching goal this year has been to rewrite the codebase to be both elegant and have the smallest resource usage possible. This rewrite is about 90% done, with the last remnants being the connection panel and controller.

  • Client side use cases and several other potential GSOC projects involve the connection panel. Hence getting this code in shape is an important prerequisite for others to be able to hack on it.

The connection panel has several potential features queued up (identification of other attached controllers, country statistics for bridge operators, etc) so in February I’ll be implementing some of those. However, there’s looming deadlines for my work with Amazon so I might need to throw some of my weekends at that instead (causing this schedule to slip).

Hi. Like the rest of the Tor developers I’ve been plenty busy throughout November. Arm advancements have included:

  • Finishing its configuration editor which lets users easily customize Tor’s configuration with reference information scraped from the man page.
  • Made a new release (1.4.0) which had numerous changes including: additional torrc validation, config panel rewrite, improved text input methods, and numerous fixes.
  • Worked with Peter on getting the arm deb in shape for Debian and the Tor repositories. Looks like we’re getting pretty close!

    Arm is also now in Gentoo’s portage repositories and, if I’m lucky, I might also find a volunteer to maintain it for BSD. Oddly, no one’s shown interest in having it on Redhat distros (despite an experimental RPM being available). Maybe no one uses Redhat anymore… : P

  • Finally got over my phobia of having a userbase and stopped hiding the project. In particular I’ve added it to:

This next month’s plans include:

  • working more with Peter to finish the deb
  • rewrite the connection panel (this and the controller are the last parts of the old codebase to be revised)
  • begin experimenting with a panel for showing details on client connections (for more information see the “client mode use cases” in arm’s TODO)
  • providing short summaries on the config panel rather than the full man descriptions
  • incorporate feedback from new users, such as to have a warning when arm cpu resource usage is high that the -b flag would be suggested (thanks to Clete)