Try this awesome trick to make your language toolchain better
Get the lead developers together in a hotel for four days. Remove all distractions. Feed them. Stand back and watch bugs get fixed, problems get solved, and new ideas implemented.
Earlier this month 38 Perl toolchain developers assembled in Lyon for the Perl Toolchain Summit, the event previously known as the QA Hackathon. This is an annual gathering where we pull together the lead developers of the core systems and tools in the CPAN ecosystem. We aim to provide an environment where for four days they can work on the tools we all rely on, with the right people around them.
This blog post is a summary of the summit. We can't cover everything, but our goal is to give you a flavour of the work that went on, and hopefully get across why the attendees typically rate this as their favourite event to attend. You can read more of the individual accomplishments on the results page of the event wiki.
The attendees came from around the world and started arriving in Lyon a few days ahead of the summit. On Wednesday night most of us went to L'Épicerie for reunion toasts (meaning both cheerful drinks and nice food on top of toasted bread). This meal is a chance to catch up with old friends and start getting in the mood.
The summit proper ran from Thursday through Sunday. We kicked off at 9 am with a stand-up. There are always new attendees every year, so everyone introduced themselves and went through what they were planning to work on. We had a stand-up every morning at 9 am. This gives people a chance to report anything of note from the day before, and also to ask for help.
PAUSE is one of the foundation stones on which CPAN is built. It's how authors release their distributions to CPAN. It also generates the indexes used by CPAN clients, search engines, and many other tools. It was created by Andreas König more than 20 years ago, and he comes to the summit every year to work on it. This year one of the primary goals was fixing two security errors. Pete Sergeant (left) created a test case for one of the issues, after discussing it with Graham Knop, who had already started working on it. Andreas fixed both bugs, and released the fixes to production during the summit. Kenichi Ishigaki fixed another PAUSE bug, worked on a Mojolicious port of PAUSE, added a new CPANTS metric, and participated in various group discussions.
One of the great things about the summit is that someone might say "we've been playing with this idea", and before you know it people are helping them get it into production. Todd Rinaldo (on the right) and Nicolas Rochelemagne (on the left) had created a prototype tool for grepping CPAN, inspired by grep.cpan.me and their frustration at it regularly being down. The MetaCPAN team offered to host it, and before the end of the summit we had grep.metacpan.org (see Todd's blog post about this).
Others turn up with a specific list of things to work on, and work on them they do. Ingy and Tina had held a YAML summit in Germany before coming to Lyon, so they arrived already fired up. They worked on a new version of the YAML module, which will use the best available YAML module. They also discussed YAML with Tony O'Dell, which resulted in a Perl 6 binding for libyaml. Read more in Ingy's blog post and Tina's.
One of the big benefits of the summit is that you can discuss toolchain issues with a bunch of "the right people". Through the weekend there were numerous group discussions, some of them scheduled and some of them impromptu. The first one was to discuss how CPAN is impacted by the change in Perl 5.26 that drops '.' (the current directory) from @INC. You can read more about this session in Todd's blog post about it.
Karen Etheridge (aka ETHER) maintains a lot of toolchain related modules and worked on quite a few of them during the summit: Dist::Zilla plugins, Moose, Module::Load, and more! She was also involved in most of the discussions. Leon Timmermans (LEONT) worked on a range of build and release tools, including App::ModuleBuildTiny, CPAN::Upload::Tiny, and ExtUtils::HasCompiler.
Philippe Bruhat (BOOK, known for his large collection of pink shirts) was lead organiser and host, Lyon being his hometown. In addition to a wide range of organiser duties, he worked with Mickey on getting information about third party packages for CPAN distributions into MetaCPAN (Debian, which he worked on last year in Rugby, and Cygwin, with the help of Laurent).
Paul Johnson (PJCJ) is the author of Devel::Cover, a module that looks at the coverage of a distribution's test suite. He worked on tickets and pull requests, ultimately releasing a new version of Devel::Cover. He also worked on his CPAN Cover service, which runs Devel::Cover on all new CPAN releases, providing a service like CPAN Testers, but for test coverage. Paul blogged daily through the summit: Thursday, Friday, Saturday, and Sunday.
The MetaCPAN table now seems to be a thing. Not only is MetaCPAN the search of choice for most CPAN authors, but many of us use the underlying API, and it powers many other CPAN tools. Every year we try to ensure Olaf Alders (OALDERS, the leader of the project) attends. He was joined on the table by Leo Lapworth and Mickey Nasriachi. Leo did a lot of infrastructure related tasks, including helping to set up grep.metacpan.org; read more in his blog post. Mickey did some releases of MetaCPAN::Client and worked on the MetaCPAN's Elasticsearch indexes. Olaf worked on the excellent new permissions interfaces, which he blogged about during the summit. You can read about the other things Olaf did in his blog post. Graham Knop (mentioned above) also helped out on some MetaCPAN stuff..
The Perl 6 contingent warranted a table this year as well. Tadeusz (bottom left) worked on a lot of Panda issues, making sure the deprecation of panda in favour of zef would be as smooth as possible. Liz (top left) worked on a range of packaging and toolchain issues, and laid out the groundwork for reporting system information to CPAN Testers reports. Stefan (aka nine) worked on metadata for Perl 6 distributions, and worked on Perl 6 support in PAUSE with Andreas (read more in his blog post). In one of the stand-ups, Stefan commented that in a single day of discussions and hacking, they worked through some issues that might have taken a year to work through otherwise. Nick Logan (aka ugexe) worked on dependency resolution, and with various people on Perl 6 support in CPAN Testers and uploading Perl 6 modules to PAUSE. Tony O'Dell (aka tonyo) worked on dependency resolution with Nick and also wrote the initial support for libyaml in Perl 6.
On the Thursday night we had a group meal out at an Ethiopian restaurant. This is a good opportunity to talk to people you might not be working with, and learn about the other things being worked on. Our thanks to cPanel, who sponsored the group meal.
The CPAN Testers crew were Doug Bell (the project lead), Joel Berger (on the right), and Garu (centre). They worked a new report format, one of the steps required for Perl 6 support. The code for submitting test reports was updated to the new format, and CPAN client support was refactored. They worked with a number of people from other areas of the toolchain, as CPAN Testers has interests everywhere. Doug's blog post and Joel's have more details. Matt Horsfall (left) was an interloper on the MetaCPAN table. He worked on Devel::PPPort and code that lets you test CPAN distributions which rely on a module you're changing. This was used to help test the release of PPI that Christian did at the summit.
Christian Walde (on the right) worked on PPI for a lot of the weekend, eventually releasing a new version on Sunday (read his blog post about that). This is a module for parsing Perl, and it's used by a number of tools, for example to identify dependencies on other modules. He's also one of our resident Windows experts. I think in this picture he was helping Abe Timmerman with some Windows issues affecting Test::Smoke. Test::Smoke is the module used to test Perl 5, and every year Abe comes along to work on it. This year he fixed a lot of Win32 issues, and closed about 10 tickets in RT. The hacking didn't stop at 5 pm. People might grab a beer and kick back a little, but the Perl continued.
ExtUtils::MakeMaker is another one of the lynchpins of CPAN. Many distributions use this on installation and for building releases. Chris Williams (laptop with lots of stickers) and Ed (aka Mohawk, on the right) worked on this for most of the weekend, fixing bugs, and adding features. Chris also worked on a number of other parts of the toolchain. Read Mohawk's blog post.
Neil Bowers (at the back, sitting between two lamps) was one of the organisers, but also managed to fit in some hacking, and chaired some discussion sessions. The one on the left was about how to maximise the value that the community, individuals, and sponsors get out of the Toolchain Summit. A separate blog post on this will be coming soon.
Merijn "Tux" Brand has been to every QA Hackathon and Toolchain Summit. His main area of interest each year is the Configure system for Perl 5, but he also found a couple of bugs in the CPAN client, worked with various people, and also did some work on Text::CSV for Perl 6. Barbara Veloso has come along to the past two summits. She's a talented interface designer, which has turned out to be a useful skill to have with us. She worked with Leo on the perl.org redesign (which she was discussing with Tux, in this photo), helped with the interface design for grep.metacpan.org (mentioned above), created a prototype UI for river position in MetaCPAN, and a bunch more besides. Also, she created a short video to try and give a feeling of what the Toolchain Summit is like.
Here are Sawyer X (on the right) and Aaron Crane working together to create a pure-Perl version of Ref::Util. Ref::Util provides useful functions for working with references, but until now it was an XS module. Now there are both pure Perl and XS versions, which increases portability of code that uses Ref::Util. Read more in Sawyer's blog post about Ref::Util. And then you can read Sawyer's report on the summit.
This year we had a photographer in residence. Lee Johnson is working on a project to photograph Perl events over a number of years. He came on his own dime, and in addition to taking photos, he did some toolchain work as well. Together with Sawyer he has set up an Instagram account for Perl events, which you can read about in his blog post.
Slaven (left) and Andreas (centre) provide a number of invaluable services to CPAN authors. In addition to the CPAN Testers matrix and analysis services, they test new releases of Perl against all of CPAN, and report bugs on any issues. At the summit Slaven worked on the matrix, started smoke-testing first release candidate for Perl 5.26, and as a result submitted a lot of bug reports.
Laurent (on the right), was one of the organisers. He was "the money man" for the event: he dealt with invoicing and transfers with the sponsors, and handled reimbursements for attendees.
There were many discussions on the CPAN Index through the weekend. On the left is just one of them. Aristotle (second from the left) worked on tests for Test::DoneTesting, continue work on his Perl::ReleaseInfo module, and worked on a patch for the base pragma. He joined in many of the planned and impromptu discussions.
Shoichi Kaji was one of those who crossed the divide, working on a range of both Perl 5 and Perl 6 tools. He worked on: making CPAN::Common::Index fatpack friendly; cpanm v2; a CPAN uploader for Perl 6; the Minilla authoring tool, and more besides. This was his first time at the summit, but I suspect he'll be back.
At the start of this article, we said that part of the trick to running a successful event like this is feeding the attendees. That's where our fourth organiser came in. Wendy shopped for fresh food every day, then washed and cut up fruit and vegetables, laid out bread, cheeses, meats, juice, and other things besides. And she did all that while trying to recover from pneumonia! At events like these people often just stuff themselves with pizza, but many attendees commented that they were eating much more healthily than usual. In our guide to running events like this, we've added: "you need a Wendy". Here you can see her right after we presented a bottle of Chartreuse V.E.P., as a token of our gratitude. You can read Wendy's perspective on the summit in her blog post.
Sadly, all good things must come to an end.
Thirty-eight people assembled for four days to make CPAN and the associated ecosystem better for Perl developers everywhere. What brings us back every year is how much fun it is, working hard with similarly motivated people around you, knowing that together we can make a difference.
Two security bugs were fixed in PAUSE, grep.metacpan.org was launched, the Perl 6 toolchain took many steps forward, new permissions pages were added to MetaCPAN, new versions of Devel::Cover and PPI were released, Perl 5.26RC1 was released and smoke testing started, the perl.org redesign was launched, Ref::Util doesn't require a compiler, a new report format was added to CPAN Testers, and YAML evolution continued. And in addition to the many other achievements, people went home fired up for another year of community work, and with todo lists that were longer than when they arrived!
Next year you could be in the group photograph. All you have to do is start helping out on the toolchain today. There is always lots to do, and and more contributors are always welcome.
As with most of the Perl community, all of the people above are volunteers. We can only run an event like this with the support of our awesome sponsors. Thank you to Booking.com, ActiveState, cPanel, FastMail, MaxMind, Perl Careers, MongoDB, SureVoIP, Campus Explorer, Bytemark, CAPSiDE, Charlie Gonzalez, Elastic, OpusVL, Perl Services, Procura, XS4ALL, Oetiker+Partner.
Thank you to Lee for his photos. Two photos were taken by Wendy (the first and the one of Lee), and two were taken by Neil. All other photos were taken by Lee. You can see all of Lee's PTS photos on flickr.