I’ve started a sort of book club here in Philly. It works like this: it’s for people who want to do computer programming. We pick books that have programming problems, especially language-agnostic books, and then we commit to showing up to the book club meeting with answers for the exercises. There, we can show off our great work, or ask for help because we got stuck, or compare notes on what languages made things easier or harder. We haven’t had an actual meeting yet, so I have no idea how well this is going to go.
Once again, it is spring in the northern hemisphere, and so time for the Perl Toolchain Summit, aka the QA Hackathon. I’ve made it to most of these, and have usually found them to be productive and invigorating. Everybody shows up with something to do, most of the people you need to help you are there, and everybody is interested in what everybody else is doing and will offer good feedback, advice, or just expressions of appreciation (or sympathy, as the case may require).
Writing tests is great, but sometimes you’re not sure what you’re looking for. Maybe you don’t know what will happen at all if you try something new. Maybe you know it fails, but not how or where. This is the kind of thing where normally I’d fire up the perl debugger. The debugger is too often ignored by programmers who could solve problems a lot faster by using it. I love adding print statements as much as the next person – maybe more – but the debugger is a specialized tool that is worth bringing out now and then.
All that Module::Faker and Getopt work was really in furtherance of PAUSE work. When I arrived in Marlow, I had been given just request by Neil: sort out PAUSE!320, a change in behavior we’ve been slowly getting right for years now.
In 2008, I wrote Module::Faker. In fact, I wrote it at the first QA Hackathon! I’d had the idea to write it because at Pobox, we were writing a PAUSE-like module indexer for changing our internal deployment practices. It became clear that we could use it for testing actual PAUSE as well as other code, and I got to work. Since then, I’ve used it (and the related CPAN::Faker) quite a lot for testing, especially of PAUSE. At first, it was just a quick way to build a tarball that contained something that looked more or less like a CPAN distribution, with the files in the right places, the package statements, the version declarations, and so on.
One non-PAUSE thing I worked on was Getopt::Long::Descriptive. I added a small new feature. It supports something like this:
For several reasons, I had considered not going to this year’s PTS. Going was a good idea, and I’m glad I did it, and I definitely got valuable things accomplished, but the main reason I decided wasn’t the morale boost I’d get from writing code. It was Marlow, the town where the event was hosted. Marlow is Neil Bowers’ home town, and I’ve heard about quite a bit over the years. PTS was an opportunity to see it in person, to have a bit of a visit with Neil, to see the oft-praised Marlow Bookshop, and as I learned fairly late into the planning, to eat at a two Michelin star restaurant. I knew that the price of doing this would be hard work at the summit and I accepted it. Fortunately, I got to do all those things, they were great, and then the hard work was rewarding on its own. Two thumbs up.
The last time I wrote in this journal was in January, and I felt committed, at the time, to make regular updates. Really, though, my first half 2018 has been pretty overwhelming, and journal posts are one of the many things I planned that didn’t really happen. I’m hoping I can get back on track for the second half, for reasons I’ll write about sometime soon. Maybe?
It has been almost a year since my last blog post, in which I complained that Slack silently drops some messages for people using the IRC gateway. That bug was about a year old then, and it’s about two years old now. I’m still annoyed… but that’s not why I’m here. I’m here to summarize what I did this year, since I forgot to post anything about it during the year.
So, imagine the following exchange in private message with one of your team members: