My Perl QA Hackathon 2016

While I have hung out on the fringes of the p5p and toolchain communities for a few years now, my largest “qualifying” contribution has been Alien::Base, which has largely been handed off to Graham Ollis (plicease). Therefore I was a little surprised but very honored to be invited to the 2016 Perl QA Hackathon held in Rugby, England.

Overall it was an incredible experience. Day after day the energy in the room was palpable. Everyone was creating and improving the code that we would all get to use one way or the other. People hacking on PAUSE and MetaCPAN and CPANTesters, on ExtUtils::MakeMaker, on Test2 and Test::More.

Someone would encounter a bug and someone across the room would know the fix. Another person would accidentally trigger a problem elsewhere in the toolchain but the person with the keys would be two seats away ready to help. Having so much talent in one place like this is invaluable.

I actually felt quite a bit of pressure (only self imposed) to contribute as much as I could. But this is a good thing, it keeps you going and striving for more.

I am certainly most well known in the Perl community for my advocacy of Mojolicious as well as being part of its core development team. As part of this advocacy I have also built and/or advocated for some of its relevant modules. Two of these, Test::Mojo::Role::Phantom (my own) and Minion (Mojolicious’ lead dev Sebastien Riedel’s) also factor into my work at QAH.

Test2 Advocacy

Because of my work on Test::Mojo::Role::Phantom I became aware of the Test2 effort very early on. As Chad Granum (Exodist) has continued to improve Test2, I have sought to advocate for him and for the project. My thoughts on Test2 that were originally meant for this article became too large and really diverged from a QAH recap; so I have extracted that into its own blog post. In that article you will see that there was an effort to compile the list of all modules that had been impacted by Test::Builder-on-Test2, even if only that they needed to be upgraded. My small actual contribution to the Test2 effort at QAH was to help Chad compile this list and help in implementing the list as a pseudo-test during installation.

I like to think that my non-code contributions are exemplified in that post. I have and will continue to spread the word of how useful Test2 is and dispel concerns surrounding it. If you have any questions, please feel free to ask (though perhaps commenting on that post is more directed).

Module::Build Successors

The aforementioned Alien::Base is a subclass of Module::Build and as such I have had some experience inside its internals. I took a brief hack at an MB refactor of my own but the mechanism was very flawed and I have abandoned it. Since then I have taken an interest in Module::Build::Tiny and its authoring tool App::ModuleBuildTiny. These tools of Leon Timmermans’ (leont) construction are very minimalistic but still very capable for small/common distributions. I have tried to encourage Leon to make it more usable by the general public and contributed some small ideas to it. To that end, I had hoped to spend some of my time working on these tools with him at the QAH.

As it was we didn’t do too much. A patch I had expected to help shepherd in turns out to already have been merged. That left discussion of his new modules which unlike Module::Build::Tiny aren’t so … tiny. Leon has modules already essentially in alpha stage which would represent an actual successor to Module::Build. A pure-perl build framework (not relying on make) but architected with both module installers (users) and extension authors in mind. Now after sitting with him, seeing what they are capable of, learning something about the architecture and discussing the future plans, I’m really excited to help him make this project a reality. Hopefully sooner than later.


One table I didn’t expect to spend so much time at was the MetaCPAN table. I heard relatively early on in the event that MetaCPAN was moving a lot of its indexing load to a job queue. Not just any job queue, Minion, the Mojolicious spin-off project. I volunteered my services immediately.

But it is more than just being able to help with minion integrations. The hardest part of helping out is knowing how to get started, especially in a system like this where there are several related services. While the guys were working to upgrade their Elasticsearch backend they graciously took the time to help me install and learn their vagrant development stack. (It really is quite easy once you know the layout, if you are interested in helping ping me or them in #metacpan.) Once I had that running I started to get other ideas of ways I could help since they had their work cut out for them!

The one task I took through to completion was related to Neil Bowers’ work on “River of CPAN” statistics. If A requires B and B requires C then C has two downstream dependencies. With the total number of downstream dependencies known one can start to get a picture of level of care that a module requires. Any breakage in a module with large numbers of downstream dependencies is a big deal since so much code is affected. The River of CPAN analogy (explained further here and here) places modules along a river, the distance upstream is quantified partially by this total number of downstreams. Any pollution which enters the river up near the top of the river pollutes proportionally more of the river than were it to enter farther downstream.

Many authors are unaware of their modules position on the river and it can take a lot of effort to know. Lets say you were the author of C in the above example. Currently it is easy to see that your module has one reverse dependency but unless you drill down you might now see that A is in your river path too. Even worse is when a new module begins to depend (even indirectly) on yours, it brings in all of those modules that depend on it. In this way an author have one of his modules move rapidly upstream and completely without his knowledge.

To support several of his projects (including the Pull Request Challenge) Neil determines the aggregate number of downstream dependencies for each module on CPAN. If MetaCPAN can show statistics like this is can help an author gauge the impact of future changes to a given modules. It was discussed that in order to help an author be aware of the their module’s position on the river he could share that information on MetaCPAN.

While he works on an webservice that MetaCPAN can use to fetch this data, I took his expected format and built tool for MetaCPAN to use to fetch and insert that data. Once back home I hope to continue by adding display of the information to the MetaCPAN front-end as well as helping to do the service integration once Neil is ready.

There are several other items upon which I hope to help MetaCPAN, including injecting reindexing jobs into minion when CPAN reindexes a distribution for example. Also as fellow member Doug Bell (preaction) is beginning to take over for Barbie at CPANTesters our meeting “office hours” can be used to continue the integration of those services as well.

In Conclusion and With Thanks

Of course there is huge value to getting p5p and toolchain people into one room together purely for the efficiency of it. Bugs that pop up in one corner of the room can often be diagnosed or fixed by people across the room, even if they occur in other modules. That said, I think for myself this QAH was most valuable for me to be able to learn how to contribute to other projects from the authors themselves.

At my day job I love to pair with my coworkers; at the same desk if possible, on video/screenshare if not. IRC is great but to really iterate with someone, whether learning or fixing bugs or planning for the future, I find it is easier if you can talk to the other person or people. To hear their voice, to see how they go about their coding, is invaluable and an incredible foothold, especially when ramping up on something new. To those people, especially Chad, Leon, Olaf and Mickey, thank you so much for letting me sit next to you and learn from you.

I had plenty of opportunities to chat with so many great people! Over food or drinks or strawberries or laptops; thank you to everyone who indulged me in conversation.

Of course I want to thank Neil, JJ, Barbie and anyone else who had a hand in organizing this event. It is spectacular and though I’m sure it took huge amounts of effort you made it look effortless.

I would be remiss without thanking Rik Signes for his term as Pumpking! He has done an excellent job in what must be an incredibly trying job. I also want to extend congratulations to our new Pumpking Sawyer! I wish you best of luck and if I may be of any help I hope that you will please ask early and often (to borrow phrase from my native Chicago).

Most importantly I want to thank the sponsors. Without their support, no matter how much we would all want to gather to work together we could never afford the travel, accommodations, or venue to do so. These companies show their love for open source and Perl not just with their words but with their budgets and that is greatly appreciated. Thank you, thank you, thank you!

Their contribution made possible this event which produces such incredible results for the Perl community.

I also want to thank my employer ServerCentral for giving me the time and support to attend!

Leave a comment

About Joel Berger

user-pic As I delve into the deeper Perl magic I like to share what I can.