| CPAN Ratings (Gamma) Reviews by Robert Rothenberg | |
| Home | Search | About | Login |
RSS | Module Info | Add a review of
4 out of 6 found this review helpful:
The Changes file has traditionally been a *human*-readable file. The last thing somebody expects when reading a history file is to see YAML. Yuck!
If you want to have a machine-readable change history, use a different filename like "Changes.yml". And generate a human-readable file from that.
Additional mini-rant:
A machine-readable Changes file won't solve the problems that it's intended to. There's no guarantee that a change marked as "security fix" or "bug fix" won't break your system anyway by introducing new bugs or fixing ones that you thought were features, nor is there a guarantee that the author tagged changes correctly. And if a security fix is mixed in with API changes, then you can't separate the two.
If you're so concerned about updates breaking your system, then you're a fool to rely on automated tools in Perl. Read the Changes file, look at version diffs, test on a different server before upgrading. (This is what a responsible sysadmin should do anyway.)
Or better yet, don't upgrade if you don't have to.
Robert Rothenberg - 2008-05-09 12:07:18
Was this review helpful to you?
Yes
No
Nitpick: Should be called Bundle::ShipIt. (If nothing else, automated testing tools can ignore it.)
Robert Rothenberg - 2008-05-03 17:41:51
Was this review helpful to you?
Yes
No
5 stars for p***ing people off. It's an Acme module, afterall. And an excellent example of one, too. If you don't like these modules, just don't include the namespace in your personal mirrors.
Robert Rothenberg - 2008-04-04 13:35:32
Was this review helpful to you?
Yes
No
This module hasn't really explained why it is better than carp: it traps the DIE and WARN handlers so that the carp "longmess" stack traces are always used. That should be made clearer. Which is nice, but...
The docs state that the current version doesn't play well with other modules that change the die/warn handlers. This is something that can be fixed easily. (It's done in Win32::EventLog::Carp -- which I wrote -- for instance.)
I'm not sure that I like warnings to always be verbose, though.
Robert Rothenberg - 2008-02-16 06:27:46
Was this review helpful to you?
Yes
No
The rationale for this tiny date module is that since it's hard to get date manipulation right, we won't do any date manipulation at all. This limits the usability of this package.
Maybe some simple manipulation functions (as long as their limits were documented) would increase the rating. (These could be auto-loaded so as to keep the core "tiny".)
That said, once I've parsed a date into year, month and day, I don't need to manipulate it much. (One can use stringified dates to compare them.) So I wouldn't call it useless at all. It's just that the OO interface might be too much overhead for something simple.
It does fill a need though: DateTime takes a long time to load and can be like using a sports car for local errands.
Robert Rothenberg - 2008-02-06 16:23:50
Was this review helpful to you?
Yes
No
I've not made use of any special features, but when you need a hash that is always sorted when you iterate over the keys, it's simple matter of tying the hash and forgetting about it.
Robert Rothenberg - 2008-01-04 09:50:23
Was this review helpful to you?
Yes
No
The function for looking up the MAC address of a device by an IP address just doesn't work.
You are better off using a system call to arping on a system that supports it.
Robert Rothenberg - 2008-01-03 07:53:04
Was this review helpful to you?
Yes
No
Tying a subroutine to a hash is a simple thing to implement, but it is nice to have it already done. It works just as it says.
Only thing lacking is the use of the STORE method to pass additional values to the subroutine. However, I don't need that feature, and I can understand why it would make the program semantics weird (but then again, the joy of Perl is in making things weird).
Robert Rothenberg - 2007-12-20 07:20:40
Was this review helpful to you?
Yes
No
It has a nice OO interface, seems well-documented, and seems to do what it says very well.
Robert Rothenberg - 2007-12-11 03:00:20
Was this review helpful to you?
Yes
No
Last updated in 2000 as a 0.01 release. Poorly documented. There's no explanation of what the format of the parsed content is. So I won't go near it.
Robert Rothenberg - 2007-12-11 02:57:03
Was this review helpful to you?
Yes
No
This seems pretty easy to use, although I had to re-read the documentation to understand how to use it. The docs lack sample code.
It lacks tests. It needs at least some tests!
It doesn't try to decode accented characters or symbols, which is great because I can throw them into TeX::Encode if I need to.
My gripes are that the plainText method assumes it's given a full document (inside document environment anyway) and that it can't do serial parsing (e.g. I feed it a line, get partially parsed output, feed another line, etc.). But there are easy workarounds for this.
A serious gripe is that it doesn't recognize some forms of math mode, using $..$ or $$..$$. That will require me to write a workaround. Grr.
I find the distinction of types between Trees and Nodes to be unnecessary. It also uses a hack to guess the arguments for a command (assumes argument is not separated by whitespace form command and that groups following commands are arguments) rather than using known or common commands with set numbers of arguments.
Still, I've got some high expectations for this.
UPDATE: it tries to be too smart in it's parsing, and so cannot parse commands for special packages or custom commands. I wanted to write a script that converts markup for one package into another. May as well write my own parser.
Robert Rothenberg - 2007-12-11 02:54:23
Was this review helpful to you?
Yes
No
Grr. No tests, and it failed because it wanted to run /usr/local/bin/ispell rather than /usr/bin/ispell.
Robert Rothenberg - 2007-12-10 17:24:18
Was this review helpful to you?
Yes
No
Looks like a bit of fun to play with, but it's got some minor problems:
The dict script requires AppConfig::Std, but the Makefile doesn't require it during install.
It fails some tests. Not sure why, if it's because the test.dict.org server had changed, or if there's a genuine problem with the module.
Robert Rothenberg - 2007-12-10 17:12:14
Was this review helpful to you?
Yes
No
No comment about this specific distribution, but about specific reviews:
* Usage advice, tips and tricks, etc. belong in cpanforum.com or annocpan.org
* Bug reports belong in rt.cpan.org
If there are quirks that make it hard to use, or bugs, then they are certainly worth mentioning in the review. But the gorey details belong in appropriate forums, not reviews.
--Rob (at the risk of having this review marked useless)
Robert Rothenberg - 2007-11-18 11:40:48
Was this review helpful to you?
Yes
No
For starters, in the description, "Nobody will ever say ''it's 11:57''. People just say ''it's noon''." Well, no. People do say ''it's 11:57''. They also say "it's almost noon", "it's about noon", or "it's just after noon", etc.
I'm not sure I agree with how time is divided up: the source code says hours 0-4 are night, and 5-7 are "early morning", for instance. Hours 11-13 are "noon", but I'd hardly call 11:01 or 13:59 "noon". Those distinctions are rather subjective.
People in the English-speaking world have different ways of describing time. In some parts of the world, people will say "half past one", others will say "half one", or "bottom of one". Or they'll say "quarter of one" or "fifteen minutes before" in place of "quarter to one".
My (albeit limited) experience is that people are so used to regional dialects with respect to time that "quarter to one" is not always universally understood as "12:45".
It's an interesting idea for a module, but the problem it's meant to solve has a lot more complexity than it can handle.
Nitpick: it belongs in the Lingua::EN namespace, since it converts time to a natural language string (English).
Robert Rothenberg - 2007-08-11 11:22:59
Was this review helpful to you?
Yes
No
Aside from defining functions that already exist in core Perl (why?), this includes other Math::* packages for representing and manipulating colours, vectors (why separate modules for 2-, 3-, and 4-d vectors?) and image sizes. So it probably belongs in the Image or Graphics namespaces.
However, I'm unsure what this package adds in terms of functionality to anything. The SEE ALSO sections generally refer to other packages in the that distribution, than to anything else on CPAN.
It makes a reference to asking the author about adding holidays to Date::Holidays::AT which is by a different author. Odd.
Robert Rothenberg - 2007-04-17 04:21:56
Was this review helpful to you?
Yes
No
While I appreciate a good sense of humour, this is just counter-productive, since it singles out the ills of a specific author. In a year's time, most will forget wha tthe joke was about, and it will just grab more namespace.
Robert Rothenberg - 2007-04-12 15:05:07
Was this review helpful to you?
Yes
No
Two namespace grabs by the same author, File::Trash and File::Recycle, for basically the same functionality. Why?!? (As someone who bothered to bring up the topic on the module authors list and reserve a namespace for a module with similar functionality, this is irksome.)
Robert Rothenberg - 2007-04-02 06:36:05
Was this review helpful to you?
Yes
No
Two namespace grabs by the same author, File::Trash and File::Recycle, for basically the same functionality. Why?!? (As someone who bothered to bring up the topic on the module authors list and reserve a namespace for a module with similar functionality, this is irksome.)
Robert Rothenberg - 2007-04-02 06:35:34
Was this review helpful to you?
Yes
No
The documentation is pretty explicit that it supports a subset of XML, and it's pretty explicit as to what that subset is. Presumably for cases where you are in control of the XML, this will do fine.
That said, I usually seem to be working on systems that already have some other XML parsing module installed, so I've not rarely had need for a lightweight alternative. So I've never had to the chance to use it for anything serious.
Robert Rothenberg - 2007-02-04 12:29:37
Was this review helpful to you?
Yes
No
The README and license.txt are POD, not plain text.
The license is absurd:
"You are forbiden [sic] to use PBS if one of the following applies to you:
* You belong to any armed group (inclusive any nation's army).
* You work for (or are) an armement [sic] designer, constructor, producer, or saler [sic].
* You, are part or, work for an entity that directely [sic] produces work or goods for any of the above."
Typos aside, this license excludes most major corporations (including software corporations) which have some connection to the arms industry, citizens of countries with universal military service requirements, people who work for any national government, and employees or students (who are a "part of") of a major university (as most have grants for some kind of arms research).
Robert Rothenberg - 2007-02-03 12:22:22
Was this review helpful to you?
Yes
No
I do with there were examples in the documentation (*), but I was able to write a simple parser to do what I needed in about 15 minutes.
The Tree, Subs and Object modules look like they might make my life easier by putting everything into hashes, objects, etc, but they are so negligibly documented that it's just easier to write a Parser as I know what it should do, versus hacking with dumps of data structures to interpret what is going on.
(*) at least as viewed in search.cpan.org, I didn't poke around very much or look closely at the samples subdirectory in the distro (shouldn't it be called "eg"?)
Robert Rothenberg - 2007-01-19 05:28:35
Was this review helpful to you?
Yes
No
I don't like packages which do things in the UNIVERSAL namespace much, but I'm not going to refuse to use a package just because the *tests* (not the running module itself) use it.
In the case of Catalyst, the dependency on Test::MockObject has been removed in the latest version.
Robert Rothenberg - 2006-12-13 16:25:06
Was this review helpful to you?
Yes
No
I needed a handy Regexp to strip some comments from a JavaScript program and found them here. Works great. My only concern (without looking at the module internals) is that I've got a lot of unused Regexp's for other comment types sitting in memory that I just don't need (40+ languages).
Alas, I tried using it for matching URIs and was dissatisfied. I can understand that it doesn't recognize unusual URI types, such as doi or svn, but it doesn't recognize https or ftps. Yuck.
Robert Rothenberg - 2006-11-25 14:27:00
Was this review helpful to you?
Yes
No
No mention of existing modules with similar functionality: Text::FixEOL, PerlIO::eol, Whitespace.
As usual, namespace nit: toplevel EOL is a bad name. Why not in the Text::* namespace?
Robert Rothenberg - 2006-10-31 13:58:35
Was this review helpful to you?
Yes
No
This is not well documented, which is an important issue since parsing is a difficult problem. Meaning is contextual.
If I say "this morning", what time does it give? Looking at the source, it assumes 8am. But what if I meant a different time?
If I say "this morning" at 1am, do I mean the morning of the day before, or the moorning which occurs later? Or do I mean the current time (which is still technically morning)?
How does it handle unknown words? If I say "this coming Friday" or vague phrases like "in a couple of days"?
Can I specify holidays? If so, words like "sabbath", "Easter", "Eid", or "Thanksgiving" are dependent on the religion, region, or country of the user.
There are no comparisons with Date::Manip, which has some similar functionality. (My own experience using Date::Manip in an application to give users flexibility in how they entered dates and times is that they had so many bizarre ways of specifying the time that it turned out to be easier for the developers and users to require a standard input format, which was eventually replaced with a drop-down menu for choosing the date and time.)
The idea behind it is nifty (in a toy kind of way), but it's strewn with pitfalls. From past experience with somehting similar, I'd not use this in a production environment.
And the obligatory namespace nitpick: should be in the Lingua::EN namespace, or at least indicate that it's English-language-specific.
Robert Rothenberg - 2006-10-25 08:43:52
Was this review helpful to you?
Yes
No
It works well, and even makes recommendations about updating links which point to referring websites. Only some minor nitpicking:
* For links to password-protected pages, it says "The link is not public. You'd better specify it." It's not clear from the documentation how one specifies for the robot that the site is password protected.
* It doesn't install through the cpan shell, so must be manually downloaded and installed.
Robert Rothenberg - 2006-10-22 14:15:30
Was this review helpful to you?
Yes
No
It generates a multiplication table, as a printable string.
No options to control layout or format, etc.
This has little use outside of an exercise from a How to Program 101 class. What is the point of uploading something like this to CPAN?
Robert Rothenberg - 2006-10-18 13:46:59
Was this review helpful to you?
Yes
No
It just compares the sizes of the source and destination files. It's better than no checks, but I'd hardly call that reliable.
Why not options to add various degrees of reliability checks, such as comparing the source and destination files, or comparing checksums of the files?
One of the stated uses is for copying over networks, where even minimal checks are needed. The flaw may be in using File::Copy as a base, rather than something else which does validation checks for each block copied, or that is network aware. How does this compare to using scp or rsync?
Robert Rothenberg - 2006-10-09 15:29:09
Was this review helpful to you?
Yes
No
Various methods which munge text strings, things like rot13, pig latin, or "censoring" words by changing vowels to asterisks. Mostly novelty use, so it should be in the Acme namespace.
Robert Rothenberg - 2006-10-08 16:06:52
Was this review helpful to you?
Yes
No
It's simple (just provides a crc32 function), and seems to do what the docs say.
No bells and whistles like OO interfaces so that one can initialize it, throw arbitrary chunks of data into it, and finalise it when ready.
But that's not needed for most cases.
I do wish the package style would be updated to modern standards, but the module is still relatively up-to-date and can still be installed using the cpan tool.
Robert Rothenberg - 2006-09-28 06:12:49
Was this review helpful to you?
Yes
No
This version appears fairly well documented, except that the TODO says "implement most of the functionality". What functionality is missing?
Having written code which examines distributions to extract information before, I understand the need for this module. There's not many tests on it, but I hope that it turns out to be portable (e.g. runs on Windows , Macs and various Nix flavors). I look forward to making use of it when (if?) I take up some old CPAN-related projects again.
Robert Rothenberg - 2006-09-28 04:10:44
Was this review helpful to you?
Yes
No
It's got unedited stub documentation created by h2xs, so it looks like a namespace grab. But there's some code that does some kind of encoding/decoding, along with one-line comments in Japanese (I'm guessing Japanese by the author's name). What's it for? What does it have to do with the web?
Robert Rothenberg - 2006-09-28 04:01:36
Was this review helpful to you?
Yes
No
This package worthless. The author falsely claims that multiple encryption increases security: that's snake oil.
It seems to be throwing in data generated by rand(). Not very secure at all.
Installation of other crypto packages with complex dependencies is a false reason for promoting this package: it's eas yto install many of them, even on a Windows machine with no compiler.
Whether other packages have more complicated interfaces is no reason to provide a simple interface with a junk algorithm.
Robert Rothenberg - 2006-09-15 12:42:03
Was this review helpful to you?
Yes
No
It's fairly easy to use, but the job it does it less than satisfactory when decoding TeX.
Some of the translations are wrong: {\L} is translated to "L" instead of L-stroke ("Ł").
It cannot distinguish between TeX markup, such as \emph{emphasized text} and unrecognized character codes, but it does remove the initial backslash. If I have to separately parse the text to handle other markup, I may as well implement a character decoder there too.
So this module is of little use for decoding.
Robert Rothenberg - 2006-08-29 04:13:17
Was this review helpful to you?
Yes
No
This review is based on using Tk for a project two years ago.
The reason the project used Tk over Wx is that it was the only thing that ran on our Windows machines. (We wanted to use something that was OS-independent, but most clients had Windows.)
The calling style is very un-Perlish. It's not even C-ish. It's Tcl-ish. Preceding argument names with dashes is a serious annoyance, especially when you are dynamically generating widgets from code templates. It's a struggle to keep code form looking like unreadable spaghetti code.
Generating widgets form code templates (that is, subroutines which generate more subroutines) was painful.
Argument names were not intuitive. The documentation was poor, and required consultation with the Mastering Perl/Tk book and a lot of searching on the Internet for examples. Some settings just never worked.
It took a lot of experimentation to learn how to use the different layout managers so that the windows were aesthetically pleasing. The code seemed kluge-fulled. Even then, the actual application looked like a no-frills X-windows application, rather than a native Windows (or Mac, or Gnome) application.
Robert Rothenberg - 2006-08-27 09:41:04
Was this review helpful to you?
Yes
No
I've used this for a project to generate BibTeX entries from a list of publications. It seems to work quite well.
But it doesn't seem to do any escaping of characters (perhaps I need to RT*M a bit more?). I also needed to convert the author list from comma-separated string to "and" separated. Not a big deal, but this is probably a common task that a module with utility functions would be helpful.
I also wish there was a "Simple" interface for generating "regular" BibTeX entries based on a hash.
Still, it saved me from writing code to generate or parse BibTeX.
Robert Rothenberg - 2006-08-24 03:52:14
Was this review helpful to you?
Yes
No
Very bad: there is already a "Cwd" module, which has been part of the core since Perl 5.000. The name "cwd" will cause problems on systems with case-insensitive file names.
Not so good either: no version number, and a default README file do not give me confidence in the module's quality.
It's not clear why this should be a pragma. Pragmas are for modules which alter Perl's functionality (even if in a limited scope). All this does is allow one to temporarily change the directory that code is running in. How this is a (better) alternatrive to using File::pushd or Sys::pushd (let alone Cwd or File::chdir)?
Robert Rothenberg - 2006-06-29 04:09:55
Was this review helpful to you?
Yes
No
This is a Bundle distribution which contains several modules! Bundles are not supposed to contain modules, but are meta-packages.
The Bundle namespace is ignored by most automated testing software. CPAN and CPANPLUS shells have problems with this package because of that.
Robert Rothenberg - 2006-06-16 12:35:32
Was this review helpful to you?
Yes
No
This is useful for generating a sequence of nonsense variables like foo, bar, baz etc.
But now it's overkill--even for an Acme module. The package has dozens of "themes" which probably belong in separate plugin packages.
Robert Rothenberg - 2006-05-15 09:54:47
Was this review helpful to you?
Yes
No
Minor nitpicking question: why does this package have a separate INI-file module, when there are already several others on CPAN?
Robert Rothenberg - 2006-05-14 08:27:43
Was this review helpful to you?
Yes
No
This package doesn't compare itself with other CSV packages such as Class::CSV, Tie::Handle::CSV, or DBD::CSV (among others). What does it do that others do not?
The name "Snail" in it does not imply confidence in its efficiency.
Robert Rothenberg - 2006-05-14 08:21:04
Was this review helpful to you?
Yes
No
I hate these "this module is misnamed" reviews, but alas...
it's a wrapper for User::pwent that checks for $HOME beforehand. I'm not sure how portable it is: it probably should make use of File::HomeDir instead.
(I would point out that Cwd's "abs_path" does the same thing, but it's buggy: works for "~user" but not "~".)
Robert Rothenberg - 2006-05-12 03:46:32
Was this review helpful to you?
Yes
No
After some ongoing bad experiences with this module, I really needed to edit my review and lower the rating.
This *should* be an important tool for verifying that distributions aren't tampered with. But the security value is limited, especially in an automated or partially-automated (CPANPLUS) environment.
It only checks that a signature is good, but does nothing to enforce that the key belongs to the author associated with the module, nor is there an option for it to enfore that the key used to sign the distribution is in a web of trust.
It has problems with end-of-line conventions when files are shared between Windows and Unix. So signatures sometimes fail for text files when checked on platforms with different end-of-line conventions. So builds fail...
It also inherits problems from GnuPG. GnuPG is unable to request subkeys from keyservers. But that's ok since some keyservers mangle subkeys anyway. But Module::Signature will let you sign a module with a subkey. Ooops.
So in order for my modules to be useful to a (important) segment of users, then I have to disable module signatures in the distribution.
It's rather sad, but a lot of work has been put into an illusion of security.
Robert Rothenberg - 2006-05-08 10:49:18
Was this review helpful to you?
Yes
No
Minimal documentation for the B:: module, and none for the Spy::* modules. What does it do? How does one use it?
Robert Rothenberg - 2006-05-04 09:13:21
Was this review helpful to you?
Yes
No
This is an easy-to-use interface for defining custom attributes. But there are several annoyances:
The documentation is not as clear as it could be. For instance, it's not obvious how to "export" attributes so that they can be used in another package. I've had to look at code in CPAN to see that the handler should be called "UNIVERSAL::Name" instead of "Name". I hate putting things in the universal namespace, and indeed that leads to conflicts. (Attribute::Handlers and Class::Std are incompatible, for instance...)
The documentation does not make it clear that the distinction between running the handler when the attribute is defined, versus a handler that mediates access to the object (as with a tied interface). Parts of the documentation imply the latter, others imply the former.
If I create an attribute name in all lowercase, I get a warning about how it might become a future reserved name in Perl. Ok, but I don't care and want to turn that warning off, specifically. How?
Robert Rothenberg - 2006-05-04 08:48:18
Was this review helpful to you?
Yes
No
Unlike Attribute::Types, you can assign types to subroutines.
But the name is inappropriate: it checks the type of the return value of the subroutine, rather than wanted value. "Strongly typed" implies compile-time checks and a degree of type safety, so it would disallow things like
$len = @list;
I tried to show a nice counterexample,
sub foo :TYPE('ARRAY') {
return (1..10);
}
$bar = foo();
Well, this doesn't work, but not for the reason you would expect. Type 'ARRAY' is an array reference, not an array. It's documented, but it's not intuitive.
It would be nice to differentiate between arrays/lists and references to them.
Robert Rothenberg - 2006-05-04 04:41:43
Was this review helpful to you?
Yes
No
I really like the idea of this module (a platform-independent means of identifying the home directory), and don't understand why this functionality wasn't added to something like File::Spec.
This new version supposedly fixes the Windows bugs from v0.06, so there should be no reason for people to roll their own home directory code. (I no longer use Windows, so I cannot test the quirks in this.)
I particularly like how the newer version adds support for "my_documents" type folders. I hope to see future versions interoperate with File::Temp and File::Basedir.
Robert Rothenberg - 2006-04-30 15:24:49
Was this review helpful to you?
Yes
No
I've only needed this for very simple queries on single tables, but it works quite well, despite the limitations of CSV (no types specified for fields).
It's particularly useful for adapting to any delimited text file.
My only gripe is that it doesn't automatically detect the end-of-line conventions. It's particularly messy when you have a CSV file shared by people using different operating systems.
Robert Rothenberg - 2006-04-02 15:12:30
Was this review helpful to you?
Yes
No
I was looking for something to extract the latest version of a file from the "rcsfiles" inside a local CVS repository.
The interface is very simple, though RCS command options are passed directly to the methods, rather than using perlish options which do the magic for you.
The package works and does what I need, quite simply and quickly.
Robert Rothenberg - 2006-03-31 08:02:44
Was this review helpful to you?
Yes
No
All I need is a simple utility to extract the latest version of a file from an RCS ",v" file.
This module doesn't seem to work. But I cannot tell if it's due to poor documentation or a bug in the system.
There's very little example code. What's there is wrong (it says to use "new RCS" instead of "new Rcs::Parser"). It seems to parse files created by "rcs", but runs into errors related to log entries and so cannot extract a version.
It chokes on files created by CVS.
The documentation does warn that it's alpha quality, but it's nearly useless.
Robert Rothenberg - 2006-03-31 05:56:38
Was this review helpful to you?
Yes
No
It adds an "iso" method to Class::Date which returns an ISO-style string.
But that ability is already in Class::Date. On just needs to set the desired format and use the string method.
I'm rather iffy on the means it uses to add the method to Clas::Date.Rather than inherit the class it specifies a new Class::Date package with the added method. (Admittedly I've never seen this style of adding a method to a class, but it seems dodgy to me.)
Robert Rothenberg - 2006-03-30 06:34:43
Was this review helpful to you?
Yes
No
No MANIFEST, no README. A typo in the POD says it's documentation for "Clas::Entity".
Why does the name Class::Entity have to do with "Object interface for relational databases"?
Robert Rothenberg - 2006-03-29 13:46:45
Was this review helpful to you?
Yes
No
tar files come in two flavors: GNUTAR and POSIX. WinZip only supports the former. Lack of WinZip support is no reason to criticize the package.
Robert Rothenberg - 2006-03-14 00:17:56
Was this review helpful to you?
Yes
No
This module does more than you'll ever need for Date-time calculations and handling. I'd call it the de facto standard, were it not for the load time. Adding a "use DateTime" statement to a script adds a quarter-second to the start-up time on my machine (admittedly it's an old machine, but it's hardly a klunker). So I'm hesitant to use it for simple date-time manipulations.
I'm also curious why there's no constructor to take the stringified date/time and reinstantiate it as a DateTime object. (Or if there is, it's not documented.) If I have to use an additional module or write my own parser, then it's less useful. Date::Calc does what I need and loads significantly faster.
Robert Rothenberg - 2006-03-01 06:53:40
Was this review helpful to you?
Yes
No
I've not given it a thorough evaluation, but it seems useful if you need the Freedesktop.org base directories. My only nitpick is that the module should have Freedesktop in the name, since it's not useful for anything else.
Robert Rothenberg - 2006-02-28 13:47:20
Was this review helpful to you?
Yes
No
The documentation is wrong: it gives an error when you give the "regular" option to the filesystems() method.
The options are disjunctive instead of conjunctive: I want a list of mounted (and) regular filesystems, but I get a list of filesystems that are either mounted or regular. Once I have a list of filesystems, there's no way to query each object in the list to see if it's mounted or regular.
So it's of limited usage.
Robert Rothenberg - 2006-02-28 12:29:52
Was this review helpful to you?
Yes
No
These are useful utilities, but I have a problem with the names of some of the functions.
"true" and "false" return counts of the number of true or false return values in code blocks operating on the lists. But reading code which uses them is confusing. One would expect them to return truth values, not numbers. A more intuitive name would be "count". (And one only needs a count-true method; false is easy to implement from that.)
One could nitpick about other function names, but they're not as critical.
Robert Rothenberg - 2006-02-25 10:29:33
Was this review helpful to you?
Yes
No
It's one of those things that you constantly find yourself writing, so why not put it in a module. I might still insist that since it's only a regex, it's not worth it as a module (especially a non-core module). But it supports void context and trimming entire lists. It also can differentiate between leading and trailing whitespace.
Regexp::Common has a whitespace module, but cannot differentiate leading and trailing whitespace.
Robert Rothenberg - 2006-02-25 07:07:02
Was this review helpful to you?
Yes
No
This module is almost great. I've implemented some classes and needed to add "cloning" ability. Rather than write complicated recursive cloning functions (which I started doing....) I found Clone. It was as simple as adding
use Clone 'clone'
to the code to add a clone method to the class, and it seems to work with no problems.
But minus one star because it doesn't make use of any serialization hooks like Storable does. So for certain kinds of objects, clone just doesn't work. Minus another star because the documentation does not reflect this, aside from a recommendation to use Storable's dclone for slower but more reliable cloning.
Since Storable is a core module now, I'd just assume use that instead.
Robert Rothenberg - 2006-02-18 09:18:23
Was this review helpful to you?
Yes
No
I needed a quick and dirty way to show a hexdump of some binary data in Perl. This module exported a HexDump function that did just what was expected: return a string of lines of hexidecimal numbers and ASCII characters from the data. Which allowed me to quickly verify whether some software was working or not.
Only downside is that the tests gave a lot of warnings about pack formats.
Robert Rothenberg - 2006-02-15 08:50:56
Was this review helpful to you?
Yes
No
I was using Pod::PlainText to convert Pod to text. Alas, it didn't support the head3 and head4 tags. Pod::Text does. It's also a drop-in replacement (in part because Pod::PlainText was branched off from it), although it's since been updated. I'm happy with it.
Robert Rothenberg - 2006-02-11 04:13:42
Was this review helpful to you?
Yes
No
Wow! Yet another INI file module, only seven days after Config::Mini released to CPAN, and yet no mention of that or of Config::IniFile, Config::Tiny, and Config::IniHash.
Ok, but *why* use this module as opposed to other modules? What does this module provide that others do not?
Robert Rothenberg - 2006-01-25 10:28:40
Was this review helpful to you?
Yes
No
Yet another module to handle INI files.
Ok, so maybe 'there is more than one way to do it' but the documentation should at least compare it with Config::IniFile, Config::Tiny, and Config::IniHash.
Robert Rothenberg - 2006-01-19 12:35:04
Was this review helpful to you?
Yes
No
This looks like an excellent package, but I've never been able to get a version which passed the tests on the Windows or Linux boxes I've used. So I'll have to disagree with the comments that this should be a replacement for LWP::UserAgent. The fact that this package often (but not always) fails tests on certain platforms makes me reticent to require it for an application.
Robert Rothenberg - 2005-12-27 11:11:38
Was this review helpful to you?
Yes
No
After using it for years, I'm still very happy with Module::Build.
It is way-better than MakeMaker. It's easier to use, allows one to specify more complex requirements and recommendations than MakeMaker allows, but it has backwards compatability so it can generate Makefile.PL as well as Build.PL.
I strongly recommend using this and as a replacement for MakeMaker.
One important and subtle hitch: it does not handle auto-splitting automatically, and the docs indicate that the autosplitting interface may change. So if you've installed an earlier version of your module (using older Makefile), it will pass tests because autoloading methods are already available, but it will fail CPAN testers.
Another nit (and the reason I've updated my review): one does need to read the docs section "Alternatives to PREFIX" before complaining about it: <http://search.cpan.org/dist/Module-Build/lib/Module/Build.pm#Alternatives_to_PREFIX>
Robert Rothenberg - 2005-12-21 12:05:52
Was this review helpful to you?
Yes
No
I'll chime in as well, but for different reasons: Clone (and Storable) cannot handle all objects, particularly onjects which do some low-level memory allocation in C.
It's not clear for certain types of objects what a clone is: should a clone have the exact internal data structure (an issue for non-deterministic algorithms), should the response times to queries be the same, or should it merely have the same data?
Bad things will happen if you rely on this to actually clone something.
Robert Rothenberg - 2005-12-20 07:32:31
Was this review helpful to you?
Yes
No
I hate to give a module a "lousy namespace" review, but...
1. There is a Term::ReadPassword module already, so a Term::ReadPasswd module is confusing.
2. It's a Win32-specific module. So it should be called something like Win32::Term::ReadPassword, or Term::ReadPassword::Win32.
That said, despite the tests of Term::Readpassword failing in reports on Win32 machines, I recall getting it to work on Win32 when I used windows. I'm not 100% sure of this and no longer use Windows, but I'm skeptical of the need for a separate module just for Windows. I am sure that there already are modules which allow one to read from the console without echoing the keystrokes, even if it isn't Term::ReadPassword.
Robert Rothenberg - 2005-12-18 17:05:04
Was this review helpful to you?
Yes
No
I think the idea behind a Date::Holidays interface is flawed:
1. Wouldn't it be better to have a wrapper that reads arbitrary iCal files (which could have anything from holidays to events for specific institutions)? There are already many published calendars which are used by calendar applications ranging from Mozilla Calendar, Mac iCalendar, KOrganizer, etc. Better to have the module use that information (which might already be available on a machine) than duplicate (and inaccurate) information?
2. Why are holidays just delineated by countries? Don't various states and provinces have their own local holidays? Don't some localities (e.g. Scottish councils) have their own holidays? Don't some institutions (e.g. schools) have their own holidays that that they honor? And what about religious holidays?
3. Differentiate holidays from noteworthy events. Daylight savings time is a noteworthy national event, but is hardly a holiday. If one boths to put this information in a module usable by a computer, then there should be meta-information about this event that the computer can use (e.g. to know whether to expect more or less activity on the network).
Robert Rothenberg - 2005-12-18 09:22:15
Was this review helpful to you?
Yes
No
There seems to be no documentation in the module. Instead it's included in a separate script. So I'm not sure what sort of new thing this module actually does.
From the synopsis it appears to allow one to add "step" statements in various locations of an algorithm, so that one can watch the various steps. There are various debugging and log packages that can do the same, but can be "turned off" when not needed.
Steps are also numbered, but that may not be applicable to certain algorithms which do not have sequential steps.
It also gives some kind of statistic metric for each step, but does
not say what the number means.
And the information is simply printed. Better that it be logged to some kind of file for processing later. Perhaps another reason that the logging system like Log::Dispatch or various debugging and benchmarking tools would make a better base for this.
Robert Rothenberg - 2005-12-17 12:21:32
Was this review helpful to you?
Yes
No
Top-level namespace with no version and no POD. Very bad.
Robert Rothenberg - 2005-12-04 11:39:23
Was this review helpful to you?
Yes
No
Top-level namespace with no version and no POD. Very bad.
Robert Rothenberg - 2005-12-04 11:38:56
Was this review helpful to you?
Yes
No
Top-level namespace with no version and no POD. Very bad.
Robert Rothenberg - 2005-12-04 11:38:12
Was this review helpful to you?
Yes
No
No rating, but just a note that there already exists a List::PowerSet module. How does this differ?
Robert Rothenberg - 2005-11-22 13:38:08
Was this review helpful to you?
Yes
No
This sounds like an excellent module, but I have a nitpick with the namespace: it sounds like it has something to do with the managzine The Perl Review.
Perhaps it should be called Devel::Review?
Robert Rothenberg - 2005-09-15 07:29:38
Was this review helpful to you?
Yes
No
I'm not sure that a Bundle module that lists personal preferences of what a fresh installation of Perl should have belongs on CPAN. Frankly it's of little use to anyone but Ovid.
It makes little sense for me or anyone else to request changes since those reflect our preferences to what should be installed, not Ovid's.
It makes little sense for me (or I think anything else) to have out own Bundle::CPANID module since what extra modules are installed depends on the machine and what it's used for.
Robert Rothenberg - 2005-09-15 07:21:50
Was this review helpful to you?
Yes
No
This module inserts fine-resolution (Time::HiRes) timestamps into log messages, but otherwise doesn't provide the capability of other logging packages for log levels or multiple destinations, such as Log::Dispatch.
Indeed, it's easy to do the same thing with Log::Dispatch by using a callback.
Also: The PREREQS in he Makefile.PL aren't properly set. -1 star.
Robert Rothenberg - 2005-08-30 13:39:39
Was this review helpful to you?
Yes
No
Since GMail gives POP access, I'm not sure if this module is needed.
Robert Rothenberg - 2005-08-23 13:16:27
Was this review helpful to you?
Yes
No
Since GMail gives POP access, I'm not sure if this module is needed.
Robert Rothenberg - 2005-08-23 13:16:09
Was this review helpful to you?
Yes
No
Since GMail gives POP access, I'm not sure if this module is needed.
Robert Rothenberg - 2005-08-23 13:15:37
Was this review helpful to you?
Yes
No
Since GMail gives POP access, I'm not sure if this module is needed.
Robert Rothenberg - 2005-08-23 13:15:05
Was this review helpful to you?
Yes
No
I can't tell what this does. There seems to be only the .pm file in the distro, with no ChangeLog, README, etc. The documentation is garbled from bad POD formatting, and perhaps an unintentional global search/replace.
The module is named Log::SimpleLog::CaptureLog, but the distro is named CaptureLog.
There's no Makefile.PL or Build.PL, or tests either!
Robert Rothenberg - 2005-08-22 19:07:12
Was this review helpful to you?
Yes
No
It just doesn't work all of the time. I can slurp one file, but then the second file it claims doesn't exist or it is unable to read anything from it.
I don't have the time to diagnose why it doesn't work. It was faster to write my own few lines which were adequate for what I needed.
Robert Rothenberg - 2005-08-19 09:41:17
Was this review helpful to you?
Yes
No
It's a lot of work just to output the Perl Config{}, environment, and server information to a web page. (There are several modules it uses for this.) One just doesn't need a module for this.
The question is, why?
The only use I can think of for this module is when one is given access to a web server that can run CGI scripts and needs to determine some information about the server and Perl installation. But that requires this module to be installed... if you can get the SysAdmin to install this module and its prerequisites, then why can't she answer your questions about the server? (And if she won't answer your questions adequately enough, why would she bother installing this module for you?)
Robert Rothenberg - 2005-08-19 09:24:52
Was this review helpful to you?
Yes
No
This does not do anything more than Log::Dispatch, and if anything is less general in that it's intended for adding debugging messages rather than logging events into various places.
Robert Rothenberg - 2005-08-16 11:27:00
Was this review helpful to you?
Yes
No
It works well enough for my purposes, although it does not use a very efficient method of obtaining the information. (It parses an HTML page rather than downloadinhg the CSV.)
One problem is that it does not list the prerequisite modules in the Makefile.PL or META.yml.
Robert Rothenberg - 2005-08-15 14:11:54
Was this review helpful to you?
Yes
No
An abstract like "The great new App::HWD!" tells me nothing about what the module does.
It's bad enough when the first release on CPAN has a description like that. But several versions later?
Robert Rothenberg - 2005-08-15 12:50:07
Was this review helpful to you?
Yes
No
Why does this module include Archive::Tar and IO::Zlib rather than list them as prereqs? The documentation for the included modues seems to be missing the copyright messages as well... are these the same as the CPAN Archive::Tar or a modified version?
The documentation for Win32::File::Summary is poorly layed out, it seems as if the author does not understand that POD parsers do the work of indenting and wrapping paragraphs etc.
Robert Rothenberg - 2005-08-07 17:13:19
Was this review helpful to you?
Yes
No
Toolkit lets you save typing or cut/paste by saying "use Toolkit" instead of "use strict; use warnings; use Acme::Whatever" and whatever other favorite modules you like to use all of the time.
It's a really neat idea. It is also a really bad idea.
It saves keystrokes. But the script or module ceases to be portable to another machine (let alone another OS), and the code is less self-documenting as to what modules it uses.
There's no tool to modify a script or module to insert the used modules in place of "use Toolkit", should one desire to see what's being used.
However, I can see cases where this would be useful: if someone has a large stock of standard modules to always be used.
I think it would be better to have some kind of "profile" configuration file that lists modules used (using "use", "no" or "require"). One could dump the module, or updated versions of Module::Build or ExtUtils::MakeMaker could include the profile file with a distribution, etc.
Robert Rothenberg - 2005-08-05 09:37:49
Was this review helpful to you?
Yes
No
This is meant to be used in the command line:
perl -MCarp::Indeed script.pl
but then one can use
perl -MCarp::verbose script.pl
for largely the same effect (the latter being part of the Core, however).
It redefines die and warn functions and forces their export but doesn't override the signal handlers, so many errors and warnings won't be caught by this. (The docs say it does muss around with the signal handlers, but it doesn't.) So it's only useful when a program calls die/warn/croak/carp.
The documentation has various rants about the meanings of words like "carp", "confess", "cluck", etc. (I suspect the author misunderstands the humor in that naming scheme) and some things about Acme::JavaTrace that make little sense.
Robert Rothenberg - 2005-08-05 09:13:33
Was this review helpful to you?
Yes
No
I'm trying to do a diff of two text files with about 40,000 lines each.
GNU diffutils finds 115 chunks but Algorithm::Diff finds one great big mega chunk.
Robert Rothenberg - 2005-08-04 14:06:42
Was this review helpful to you?
Yes
No
When I saw this module, I asked "why did somebody write a module that uses Filter::Simple, Module::Locate and Scalar::Util, all to achive what you can do with core Perl using a require or do statement?"
Filter::Include includes the text of the file before it is compiled. The require or do statements parse the file (and do so at runtime). So in theory there's nothing wrong with that, provided you know the difference. The documentation does not explain it.
Instead it links to a thread on the PerlMonks.org web site, which if one reads, it seems that the thread was started by a novice who seems not to have understood what he was doing.
The documentation needs to explain the difference between what the module does, and using require or do (and using them in BEGIN blocks for compile-time inclusion).
In the end, I'm not really sure there's a need for this module so much as the illusion of a need by users who don't realize there's a better way. (Yes, yes, there's more than one way to do it, but not all ways are worth doing.)
Robert Rothenberg - 2005-07-25 17:47:26
Was this review helpful to you?
Yes
No
I needed to create and extract zip files, and was able to do this relatively easily using this module.
The only downside is that I had to study the manual a bit. Thinking of the contents as "member" objects (rather than files) is a little off-putting but it didn't get in the way. Especially since some accessorts are for "files" rather than "members"--I don't understand the difference.
Robert Rothenberg - 2005-07-21 10:11:26
Was this review helpful to you?
Yes
No
Note: I am told by the author that the module has been completely rewritten, and many of the problems fixed. However, I am no longer working on a project that involved parsing addresses, so I cannot verify this.
Below are previous comments for for v1.11 (which was released in 2002). I do not know if they still apply.
One major problem is that (for US addresses, anyway) it doesn't work unless addresses are very simply formatted:
123 Maple Street, Anytown, ST 12345
Anything beyond that (apartment numbers, post boxes, squares and cross streets, etc.) and it returns nothing.
Often addresses don't fit a simple pattern. (If they all matched that pattern, I wouldn't care about finding a module...)
Worse: it uses Parse::RecDescent, so it takes a few seconds to parse a simple address.
If it worked for most addresses, I'd say the "interface" and "ease of use" were great. Alas...
One note: parsing addresses is a HARD problem.
Robert Rothenberg - 2005-07-21 02:32:15
Was this review helpful to you?
Yes
No
This is an excellent platform-independent layer over File::Spec.
The only downside is that it doesn't seem to have a way to update objects. So instead one must do something like $path = $path->parent.
Robert Rothenberg - 2005-05-17 20:40:48
Was this review helpful to you?
Yes
No
This is great for conditional "use" lines. It makes code a whole lot more readable than eval'd requires and import calls.
Robert Rothenberg - 2005-05-17 20:37:55
Was this review helpful to you?
Yes
No
I needed a module to process Windows SID (Security Identifier) tags and found it. This did what I needed, though there were some problems:
It doesn't automatically call the ConvertStringSidToSid function like it claims it does (or the call is broken) when converting Sid to Name.
It also doesn't seem to export functions, so I had to use Win32::Security::SID::ConvertSidToName.
Those complaints aside, I'm happy I was able to do what I needed without resorting to non-CPAN modules like Win32::AdminMisc, Win32::UserAdmin, Win32::LanMan etc.
Robert Rothenberg - 2005-05-10 03:54:45
Was this review helpful to you?
Yes
No
The documentation does not explain at all what this module is for. It even warns "The permutation of characters to letters is not very well permutated," whatever that means.
The source code makes no sense at all as to what it's doing. It *seems* to be converting arbitrary characters to letter sequences and back, but the code doesn't look right. It uses a list and hash with some ord/chr conversions. (Why not use pack/unpack?)
Does anything use this code format?
Also, the default h2xs README is there. Not helpful.
Robert Rothenberg - 2005-05-03 11:45:48
Was this review helpful to you?
Yes
No
The lack of any documentation for something as low-level and critical makes me not want to use this.
From a quick look at the XS source code it looks like it's Linux-only. If so, Linux::Defrag would be a better name.
All the interesting code is in the bin/defrag script: why aren't they in the module instead? It would be useful to have a module with a single defrag_file() function for instance.
The defrag_files() function to defrag all files uses a homegrown directory traversing scheme instead of File::Find.
I would expect a good defragmentation scheme would do a bit of analysis to see which files needed defragmenting (based on how fragmented files were, how often they are accessed or how critical they are, etc.). This version doesn't seem to do any of that.
Robert Rothenberg - 2005-05-03 11:33:43
Was this review helpful to you?
Yes
No
It was incredibly easy to subclass this to create a custom PlainText parser with special commands/behaviors that I wanted, though I did need to deviate from recommended methods to subclass in order to get it to do what I needed. (I'm not sure if it's simply due to an omission in the documentation or not, though.)
Robert Rothenberg - 2005-04-30 10:58:27
Was this review helpful to you?
Yes
No
Providing usage error messages for subroutine calls (in much the same way a