After talking with the toolchain, and Ricardo Signes, a new Test-Simple release plan has been made. The Test-Simple release will sync up with blead and the 5.22.0 release (well, kind of).
This is the perl release schedule:
2015-01-20 5.21.8 Contentious changes freeze
2015-02-20 5.21.9 User-visible changes freeze
2015-03-20 5.21.10 Full code freeze
2015-05-20 5.22.0 Stable release!
We settled on 2015-03-19 as the Test-Simple release date. The idea is to release Test-Simple AFTER the user-visible change freeze, providing a few weeks of much more rigorous adoption/testing. However We also want to release with a good amount of time before the perl-stable release so that if anything critical is found by a release it can be put into blead before 5.22.0 is out.
So on 2015-03-19 a patch will go to blead changing the version number of Test-Simple such that it will no longer be a trial. The same day a cpan release will be made marking the new internals of Test-Simple as stable.
I was a bit taken aback by Gabor's Perlweekly mention of my Bedrock blog. I guess there really are a few people that read these blogs! ;-)
Then of course, I was a little disheartened by the something from the last century reference. Having been born in the last century like many programmers today, I don't necessarily think everything that comes from the 20th century is bad, obsolete or not worthy of our attention. But, in the end, he's actually spot on.
I spent another day of prosaic adjustments to my CPAN distributions. For quite awhile the chaos of the Changes and README files have bothered me, so I wanted to think about those. And, many of the files I scheduled for deletion disappeared from PAUSE today.
So, yeah, to make me more active in the Perl community I decided to join the Pull Request Challenge. I have a quite big number of modules to maintain, but sometimes it is good to look to some other people code to learn something.
My attribution for January was Data::ObjectDriver. I am not sure, yet, what this module is about, but I learned some stuff already, dealing with Module::Install. That was enough for a simple Pull Request [see here]. Hopefully it will be useful for other people as well. Also, hope it gets accepted.
Although this is enough for the Challenge, I expect, in the next days, to prepare at least one more Pull Request. So, stay tuned.
EDIT: The second pull request [here] did not take that much time. Fixed a test that was failing given new error message on DBD::SQLite.
This trial version has been on cpan since December 28'th. No issues have been reported against this trial version. Assuming that does not change I will re-release it as stable. Now is absolutely the time to check your code against this new version.
The goal from the start has been to maintain compatibility as much as possible. That said I was not able to maintain compatibility for things that munged the internals of Test::Builder too much. However I was able to maintain support for the most common cases of monkey-patching. I also maintained the existing APIs.
If you find something that is broken by the new internals please file a bug on github. All issues will be evaluated, if the issue can reasonably be resolved by patching Test-Simple, then that will happen. However if the issue is that you replace the Test::Builder singleton, or make significant modifications to subs in Test::Builder, then you may be asked to patch your module instead.
Note: This version is also in perl-blead, and was in perl-5.21.7.
I started getting into podcasts recently and one that I heard mentioned a few times was Welcome to Night Vale. I didn't get to listen to it yet, but decided I'll try it out.
When I start with a podcast, I want to download the episodes. I don't listen on my computer, I listen on my mp3 player. (Yes, I still havhttp://commonplacebooks.com/welcome-to-night-vale/e one, and no, it's not an iPod.)
At the same time, I'm sick of going over lists of pages, opening each, and then looking for the download button, so I wrote a Perl script that downloads all episodes for this podcast.
Now that I've put Djet into production, I recon it's time I at least told about it.
Djet is a Node Based Content Management System. It's a rather advanced one, using features from modern Perl and PostgreSQL. It's meant to be used behind some kind of frontend server, e.g. Nginx, or at least a Web Cache like Varnish.
My second day of CPAN Cleaning was just the sort of work that I like: organizing a chaotic mess into something I can work with. My CPAN distributions are a mix of almost everything I've done in my history as a CPAN author. There was a CVS repository in the mix, several things left over from Sourceforge, and various ways of using Git. Even in the Git repos, many files still had CVS tags. A surprising number of files don't end in a newline, making for apparently pointless file changes.
Fixing all that up is easy; it's just work.
But then I want to ensure that all the .gitignore files have everything they need. In some repos, some .DS_Store entries snuck in, for instance. For MANIFEST.SKIP, we have a default set of includes. I went looking for the same thing for Git, and, of course, Github has a repo of sample .gitignore for many languages.
So yesterday, I started on the CPAN Pull Request Challenge. I was assigned the module Devel::StackTrace::WithLexicals, so, I read the doc and installed it.
In case you are interested I've published visitor-count numbers of some of the Perl-related sites such as search.cpan.org, metacpan.org and blogs.perl.org:
With some encouragement from Neil Bowers, I'm tidying up my CPAN footprint. Over the years I've collected modules I did not write, permissions I never used, and all sorts of other situations that muddied the data when I what to create a list of CPAN objects I want to pay attention to. On the first day of the new year (check out the sweet Julian Date converter), I set out to tidy up.
Then, I made fresh versions of the modules I want to give up so their Makefiles, docs, and READMEs note that the module is unmaintained. I upload the modules into the ADOPTME user. That gets it out of the listings in CPAN Search or MetaCPAN.
The CPAN PR Challenge is starting today. Latest polls have settled on 195 participants. People of all shapes and forms with different levels of Perl familiarity, experience, knowledge, and skill. Everyone seems excited and geared towards the challenge!
If you're participating, you might want to make use of the resources made available. I've tried to collect them here.
An interesting idea seems to be floating around the Internet ... creating a basic interactive website on how to contribute to a particular FLOSS project. After some noise on the Perl Monger Groups and Perl Propaganda lists I decided to help a few folks put together: http://whatcanidoforperl.org/ . You might have read something about it on Perl Weekly or not. If you have suggestions please create a ticket or better yet create a pull request here. Cheers!
In January more than 50 perl hackers will be starting the CPAN pull request challenge. They'll be randomly assigned a CPAN distribution and will have a month to submit at least one pull request.
Here I'll outline some things you can do to help the process, if you have distributions on CPAN, and are so inclined. Many of the particpants are relatively new to Perl, open source, and git(hub), so this is a way to help them "join in".
It's not too late to join in yourself — you can join at any time. Just email me: neil at bowers dot com.
Perhaps a misleading title. Seeing as this is not a political blog but a Perl one, I’m going to talk about method chaining, not worker’s unions.
Method chaining is the practice of consecutively calling methods on the return of a previous method. This comes in primarily two flavors. The first isn’t as common in Perl, though it is used extensively in Mojolicious, is when a method has nothing useful to return, it can return itself. This allows for say chaining setter methods $self->set_foo("FOO")->set_bar("baz"), or chaining related test methods
my $t = Test::Mojo->new;
$t->get_ok('/page/1/')
->status_is(200)
->text_like('#id' => qr/foo/);
While this is useful, it’s not my topic today. I’m going to talk about the more simple form, calling a method that returns an object, then calling a method on it, and so on.