Reviews by Michael G Schwern


Moo (1.006001) *****

With the addition of Types::Standard, I finally like Moo.

Moo's implementation of Moose is complete enough that I don't miss whatever features are missing, fast enough that I don't see it showing up as a bottle neck in profiling, and stable enough that I rarely run into a bug.

Moo's meta class is compatible with Moose. That is, Moo classes and roles can extend Moose classes and roles and vice versa. Moo is measurably faster than Moose, this allows you to write some performance sensitive classes in Moo but still cleanly interoperate with the rest of your Moose classes.

Its support for Type::Tiny (via Types::Standard) really makes Moo shine. Types::Standard provides Moo with Moose compatible types and more. It fixes many of the ambiguities which plague Moose's type system.

Pithub (0.01027) *****

[Disclosure: I patched and released version 0.01027]

A very complete, consistent interface to the Github API without too much sugar gumming things up. It works well with Github pagination and provides ample access to the HTTP layer for debugging and error handling (for example, you can check for a 404 code rather than parsing a "not found" message). If any API call is missing you can easily write your own request.

Version 0.01027 introduces support for request caching (aka "conditional requests") to reduce API calls on the same resource.

Term-ReadLine-EditLine (v1.1.0) *****

Since OS X decided to pretend that libedit was libreadline I've had innumerable problems with Term::ReadLine. Installing this fixes them. Fantastic!

MooseX-Method-Signatures (0.44) ***

(Full disclosure, I am the author of a competing module called Method::Signatures.)

Feature wise, this is an incredible module that I hope to recommend without reservation in the future.

It has one glaring problem: it is extraordinarily slow. How slow? At least 500x slower than a normal method call, and that's before argument checks.

My Macbook can crank through 3-4 million simple method calls a second. It can only manage 6000 with MXMS (MooseX::Method::Signatures). This is "method no_args {}", an empty subroutine with no type checks.

The empty method benchmark presents a maximum performance limit for your code if you use MXMS: 6000 methods per second [YMMV] and never more.

Large, expensive methods can use MXMS without affecting performance. Small ones get hit hard and the user is tempted to remove argument checks for micro-performance. The programmer is placed in the position to choose between performance and good practice.

Perl6-Say (0.16) *****

Does what it says on the tin.

This module is a very clever and reliable hack to bring in 90% of say to 5.8 users of which there are still "many" x 10 such as my current paying client. Now one does not have to make the decision between the convenience of say and 5.8 compatibility.

A small improvement would be to make this module a pass through to 'use feature "say"' when running under 5.10 similar to other feature compatibility modules.

Devel-Cover (0.79) *****

The best coverage tool for Perl, bar none. Paul Johnson has created and maintained an invaluable development resource on par with Devel::NYTProf. The HTML display is friendly, informative and easy.

I cannot count the number of times good test coverage, determined by Devel::Cover, has let me make aggressive changes and saved my ass.

bareword-filehandles (0.003) *****

Does what it says on the tin.

Turns off an outdated feature that causes subtle bugs. It's lexical, so you're not inflicting it on other people's code, and it makes exceptions for the built in filehandles you must use as barewords (STDOUT, STDERR, etc...).

ExtUtils-MakeMaker-Dist-Zilla-Develop (0.02) *****

This is the perfect solution for Dist::Zilla distributions that don't want to baffle casual developers with "where's the Makefile.PL?"

Any-Moose (0.13) *****

Does what it says on the tin.

Text-Balanced (v2.0.0) ****

I thought Method::Signatures was sunk when I realized I need to detect Perl strings in the signature. Text::Balanced to the rescue!

Does What It Says On The Tin and keeps me from trying to do the same (badly).

Carp-Always (0.09) *****

I love this thing! It lets me dig out the context of those mysterious warnings from deep down in the module without having to pull out the debugger or edit code.

autobox-Core (0.3) *****

autobox::Core is the missing piece of allowing you to call built-in functions on unblessed references as methods. This cleans up a lot of grotty dereferencing syntax.



Acme-Raise_my_kwalitee (0.02) *****

Like Acme::BadExample this module is a sample pathological case. It points out a fundamental flaw/axiom in the CPANTS Kwalitee system as currently implemented.

Kwalitee != Quality.

It also serves as a negative benchmark for how well the Kwalitee system is mirroring actual Quality. If a low-Quality module like this gets a high-Kwalitee rating something is wrong. If it gets a low-Kwalitee rating, something is right.

Point is, this module serves a small, sharp purpose like a good module should. And its in the Acme namespace so nobody's supposed to take it seriously.

Filter-Indent-HereDoc (1.01) ****

Ok, I'm biased. I wrote the RFC upon which this module is based. Happy to see somebody ran with it! It really is a good idea to allow indented here-docs.

I give it a four because the simplistic "look for any <<" filtering logic makes me nervous about using this module in production.

IO-Toolkit (1.0.00010) *

An odd grab bag of functions that really have nothing to do with each other and very little to do with IO or log files. This is not a module but a collection of functions somebody found useful and smashed together into a single file.

Docs-US_DOD-STD2167A (0.06) ***

I, too, am very happy that someone bothered to churn through the Department of Defense software coding standards, repackage it as POD and released it to CPAN. This means if you ever have to write code for the DoD (don't laugh, they're a HUGE employeer of programmers) you have their horrible, horrible standards.
It also means someone is actively pushing Perl in the DoD.

Contrary to the sentiments of other reviewers, I have no problem with documentation-only on CPAN. And the horrid layout and prose isn't the fault of the author but of the DoD standard he must follow.

However, much of the documentation is unfinished stubs. Also, it *really* needs a clear and unambiguous README and some sort of overview. Documenting DoD standards using DoD standards is sort of like writing a "Learn Spanish" book in Spanish with no pictures.

A good start though. Keep at it!

Acme-VerySign (1.00) *****

A briliant parody. I gave its documentation a 4 because there's no white paper! :)