What happens at a hackathon?
The H wanted to know what goes on at a hackathon so we sent Piers Cawley along to the recent QA Hackathon to participate.
by Piers Cawley
Last weekend, the Birmingham Perl Mongers group hosted and was main financial sponsor of the 2009 QA Hackathon, which was held at the Birmingham City Inn. Key developers in the Perl Quality Assurance world flew in from as far afield as Sydney, Portland, OR and Birmingham itself to spend 3 days hacking on all aspects of the Perl and CPAN toolchain. If the hackathon proved anything, it's that while Internet time is fast, face time is faster.
Winning on aggregate
Take Curtis Poe, for example. If you check out his author directory on CPAN, you'll find a varied collection of software, from jeux d'esprits like Acme::Code::Police to more useful work like Test::Aggregate. Before the hackathon, Curtis was working with a test suite which ran thousands of individual tests. Without Test::Aggregate, they took 52 minutes to run. After Test::Aggregate, they took 11 minutes. So, Test::Aggregate is a huge win. However, it could be better. Because of the nature of the Test Anything Protocol (TAP), the text based heart of the Perl QA toolchain, it was hard for the tools to spot when test scripts had halted suddenly.
Nesting TAP streams?
Adrian Howard had a similar problem. Adrian maintains Test::Class, which puts an xUnit face on the Perl testing libraries. There's a bit of cognitive dissonance between a pure xUnit approach to testing and the way Test::Class works. If it were possible to nest one TAP stream inside another, then Test::Class could present its results in a way that would make more sense. Nestable TAP would help solve Curtis's problems with Test::Aggregate as well.
Michael Schwern is the maintainer of the Test::Builder TAP producer library. Unlike Curtis and Adrian, Schwern doesn't have a direct need for nested TAP, but Test::Builder will need changing to support it.
Andy Armstrong maintains Test::Harness and 'prove'. These are the tools which most Perl users use to handle running their tests, summarising them, and sanity checking installations as part of the CPAN installation process. Andy likes the idea of nested TAP, but it's vital that any proposals for it be backward compatible and sanely parseable.
Nested TAP is a long standing and annoying problem - a loose thread that people have been meaning to sort out for ages. It's annoying because it affects so many people. There were four immediate stakeholders at the hackathon, never mind all those who simply use CPAN to install the modules they need to get their job done.
By lunchtime on the Saturday of the Hackathon, Curtis had pretty much cracked it. He'd forked Test::Builder on Github, implemented his idea and walked his laptop back and forth between Schwern, Adrian, Andy and me a few times for sanity checking before incorporating our suggestions and pushing the changes to Github. By the end of the day, those changes had made it into Schwern's developer release of Test::Builder and Adrian Howard was grinning from ear to ear as he ripped out chunks of code from Test::Class before turning his attention to other annoyances with the library. By the end of the weekend, Andy was a good way along the road to having proper support (different from simply 'not breaking') for nested TAP implemented in Test::Harness.