Perl QA hackathon 2013 wrapup

I've been back from the Perl QA 2013 hackathon for a few days and I'm probably overdue to write about the trip. I'm intimidated by last years writeup — I must have been feeling a lot peppier on the plane a year ago.

I've also been busying writing up the notes from the "Lancaster Consensus" discussions, so I'll keep this update on the shorter side.

Wednesday: Day -1

This year I flew in a day early to try to get over the worst of the jet lag before the hackathon started. In my stupor, I converted File::Temp from Module::Build to Dist::Zilla to avoid a circular dependency and make my life a bit easier. That required a bit of yak shaving: a pull request for Dist::Zilla::Plugin::DualLife.

That evening, Ian and Claire took me out for awesome tapas and then put me up in their guest room. Thank you, guys!

Thursday: Day 0

I started the day with a lovely English breakfast then meandered back to Chez Shadowcat for a day alternating between hacking and crushing exhaustion. I shipped File::Temp, reviewed the PAUSE case-insensitivity fix that Ricardo Signes and I worked on at the hackathon in March. I also fixed a Path::Tiny bug and discovered a Perl 5.16 regression.

I met several arriving hackers for lunch, caught up with friends, got myself checked into the hotel and then we all met up for great Indian dinner.

Friday: Day 1

I sent a pull request on to make the default mirror, making autoconfiguration practically instant. I talked to Matthew Horsfall about his BackPAN indexing project. I helped Ricardo nail down a loose-end in the case-sensitivity PAUSE fix.

Then it was time for Day 1 of the Lancaster Consensus discussions, covering toolchain issues. We had a group of about 20 talking intensely for about 2 hours. Great progress, but I was pretty wiped afterwards.

I finished up the day by rebasing my massive refactoring work from Paris up to the current master. Ouch. After a year of atrophy, that meant a lot of painful merge conflict resolution.

Saturday: Day 2

With the refactoring done, I also revived my Paris work on support for "recommends" and "suggests" prerequisites. Then I wrapped it all up into one massive pull request for Andreas.

Next, I led Day 2 of the Lancaster Consensus discussions covering PAUSE and META issues. Again, we had a crowd of about 20 people and talked for a couple hours.

Afterwards, through my haze of exhaustion, I started reviewing some abandoned work I had for improving how does index lookups. I also caucused with Andreas and Ricardo to discuss ideas for better coordinating between the perl core, the distribution, and the App::Cpan distribution.

I grabbed Schwern to discuss how Path::Tiny should implement move/copy features. And I debugged a weird META validation/conversion issue that Tux had with Spreadsheet::Read.

Sunday: Day 3

In the morning, I wrote up the App::Cpan discussions in an email for brian d foy and dug into some PAUSE issues. The latter resulted in a PAUSE pull request to close a security hole related to the perl distribution.

I then led Day 3 of the Lancaster discussion, covering testing and some toolchain issues held over from Day 1. Again, we went about two hours before wrapping up.

I then started work designing a new common CPAN index lookup module. That led me to send another PAUSE pull request to get 01mailrc sorted. I patched CPAN::Meta::Spec to clarify the 'provides' key per Lancaster Consensus discussions.

I also spend a bunch of time on Sunday at the venue and at dinner getting sucked into conversations with Liz about how to use PAUSE/CPAN for Perl 6 and about the semantics of Perl 6 module loading (which is lexical and thus supposed to allow loading different author/versions of the same module to be loaded).

Post-hackathon, but related

I wrote a draft patch for the Perl regression bug I found and sent it to perlbug. And I wrote a PAUSE patch to encourage new authors to use PrePAN, per the Lancaster Consensus discussions.

I've also been writing up the Lancaster Consensus results and hope to post that soon.


This was my fourth hackathon and I was thrilled to have another chance to attend.

I want to thank the organizers, Mark, Ian and Claire, for putting together a great conference -- we were taken care of very well and they provided everything we needed to allow for a hugely productive weekend.

I want to specially thank Wendy van Dijk for her tireless work scribing (and typing up) the notes from over 6 hours of Lancaster Consensus discussions. Awesome!

I would also like thank the hackathon sponsors whose generosity made the hackathon possible and enabled me to attend. (If you'd like to donate, it's not too late and will help support next year's QA hackathon.)

These companies and organizations support Perl. Please support them: cPanel, Dijkmat, Dyn, Eligo, Evozon, $foo, Shadowcat Systems Limited, Enlightened Perl Organisation and Mongueurs de Perl

Finally, thank you to all my fellow attendees! I hope to see you again at the next one!

Posted in cpan, perl programming, toolchain | Tagged , , , , , | Comments closed


At the Perl QA Hackathon, I and others were constantly tripping over how to pronounce CPXXXAN — David Cantrell's family of platform-specific or Perl version-specific subsets of CPAN.

Some people suggested we pronounce it "spandex" for some reason, but that's already a better fit for Chris Williams' CPANIDX modules.

Only on the final night did I realize the right thing to do is to play off the "XXX" in the name and just pronounce it "SexPAN".

Posted in cpan, perl programming | Tagged , , | Comments closed

UNIVERSAL::new for command line MU

Years ago, chromatic released Acme::UNIVERSAL::new. It was a joke. This is not.

Using object-oriented modules from the command line can be a PITA. I have to type the module name twice: once to load it and once to construct objects with it. In a program, that's not huge overhead, but in a one-liner, it annoys me every time.

So I wrote UNIVERSAL::new and a handy alias U. It lets you call "new" on a module name and have it loaded on the fly. Like this:

$ perl -MU -we 'HTTP::Tiny->new->mirror("", "perl.html")'

If the module can't be loaded, or if the module doesn't have a "new" method, things just die in the usual way.

Of course, messing with UNIVERSAL is naughty, so save this for the one-liners, OK?

Posted in hacks, perl programming | Tagged , , , | Comments closed

How I've started managing GitHub pulls

I don't like GitHub's pull interface. They make merge commits, which suck. And I want to work from the command line, not the web site.

When I noticed that I was losing on the scoreboard, I wrote a quick and dirty script to list open pull requests for a repository from the command line: github-list-pulls.

You'll need a GitHub token, as I describe in "How to move CPAN RT tickets to Github". And you'll need to put it and your user name in your ~/.gitconfig file. Or you need to edit my code to store those another way.

It works like this:

$ cd ~/git/path-iterator-rule
$ github-list-pulls

  2013-02-28T21:48:19Z Implementation for line_match and contents_match rules

    Includes test cases and documentation.


    git-fetch-branch git:// master

That last line lets me copy and paste the command for another script I have that creates a local review branch of a pull: git-fetch-branch.

Here's how that one works:

$ git-fetch-branch git:// master
Fetched git:// master -> review/tobyink-master

Then I can work with the local review/tobyink-master branch to inspect it, rebase it, cherry-pick it, amend it, run tests or whatever.

I'm glad the pull requests and related discussions are on GitHub, but I like working with them locally. Now I can.

Posted in git, perl programming | Tagged , , , | Comments closed

The GitHub pulls scoreboard says I'm losing

I'm embarrassed to admit that I just fixed a bug, shipped the module, and then discovered a 2-year old pull request that fixed it better. Oops.

I hate things like that!

Fortunately, I just discovered that GitHub offers a pull request scoreboard with two views:

Unfortunately, the scoreboard says I'm losing:

Pll request scoreboard

My Pull request scoreboard

I'll have to do something about that.

Posted in git, perl programming | Tagged , , , , | Comments closed

© 2009-2014 David Golden All Rights Reserved