Reviews by David Precious


Dancer-Plugin-DirectoryView (0.02) *****

Useful stuff - Just Works (tm).

Thanks :)

Dancer-Plugin-DebugDump (0.02)

It should be pointed out that this module is no longer all that useful, as Dancer's Logger interface now automatically serialises references passed to it, so you can, without any extra plugins or anything, say e.g.:

debug "Data is", \%data;

I will probably release a version of this module with a deprecation notice at some point.

Bot-BasicBot-Pluggable-Module-TwitterFriendsStatus (0.2)

This module in its current form is of very little use.

I took on maintainership to fix some bugs and get it working; unfortunately, since Twitter no longer allows authentication with usernames and passwords, it needs some fairly major reworking to either authenticate via OAuth, or replace authentication with a simple mechanism to just add a list of users to follow.

I'll try to work on it when I have time; patches welcome.

Dancer (1.3060) *****

YAWF (Yet Another Web Framework), but looks promising so far.

I like Catalyst, but also find it rather bloated and overkill for small web apps, and to some degree feel like it forces me to code "the Catalyst way".

Dancer, on the other hand, strikes me as a smaller, easier framework, to which I can hand over drudgery, but maintain control and write my own code, my way.

Friendly, responsive and approachable developers also instils confidence in this project.

I think Dancer will be my future first choice for smaller webapp projects.

[EDIT: For disclosure, I'm now part of the Dancer core dev team; at the time of writing this review I was not, I was just an interested user; since then, I started contributing, and became a member of the team. I decided I should leave the comment as it stands, but add this disclosure to explain.]
[EDIT 2: editing the review has changed the datestamp to today's date. For reference, the original review was posted 2010-02-10 07:35:39]

Scrappy (0.62) *****

Cute, and makes web scraping dead easy. Fetching, spidering, and clean & easy parsing all wrapped up together!

Given sane HTML with classes/IDs you can look for, you can get what you want with stunningly little code and ease!

Dancer-Plugin-Email (0.01) *****

Excellent stuff, makes sending email from Dancer applications staggeringly simple, exactly as it should be, and reading default settings from the config file is very sensible.

Spreadsheet-Read (0.39) *****

Excellent stuff - makes reading data from spreadsheets dead simple, without caring what kind of spreadsheet you've been given.

Even if you're writing code with the expectation of it only ever being given an Excel spreadsheet, it still makes sense to use this module for its interface, and so that, if your code is expected to deal with other spreadsheet formats in future, it will Just Work.

App-Todo (0.97) *****

Hiveminder rocks, and reviewing/adding/editing tasks straight from a terminal with makes it rock even more.

I do wish it would give you the ID of newly-created tasks, though.

Nagios-Plugin (0.33) *****

Excellent stuff, takes care of the tedious parts of writing Nagios plugins, making it a five-minute job to rock up a plugin to monitor whatever it is you want to monitor.

SQL-Abstract (1.61) *****

Excellent way to make database work less tedious; writes your SQL for you, so you don't have to think about it.

May start to become awkward when your needs become more in-depth and you need big hairy queries, but for your average database work, this will handle it all with ease, and the interface is sane enough to avoid making you think.

Crypt-SaltedHash (0.05) *****

Good stuff - just what I was looking for. Generating a salt, hashing a password with it, and validating it is pretty simple stuff, but common stuff that gets re-written far too often; this module takes care of it nicely.

Digest-SHA (5.48) *****

Dead easy to use, secure password handling made easy.

Devel-Modlist (0.801) *****

Excellent stuff, does exactly what I needed in an easy way.

What could be easier than:

perl -d:Modlist=cpan,nocore ./

perl -d:Modlist=cpan,nocore -MSomeModule -e0

Pod-Server (1.09) *****

A nice little tool should you want to be able to list all installed modules and view their installation locally via a browser rather than using perldoc.

A lot of dependencies (via Squatting, mainly), but overall, nice.

File-Find-Rule (0.32) *****

A clean and simple way to describe a set of files you're interested in, and get a list of them. Way nicer to use than File::Find.

The price for this simplicity is that the module chugs away constructing the entire list of files first, before you can then work with them. Fine on a reasonably small set of files, but if you're going to be working with a lot of files, this can be a pain.

HTML-TableExtract (2.10) *****

An excellent module to handle the fairly common task of extracting data from a HTML table; no need for ugly scraping code, you can just tell this module "Here's some HTML; find me a table with headings named $headers, then get me the data. If the page changes, no problem - as long as the table still has the same column headings (even if their order changes), it'll still be found with no issues.

You can also identify the table you want by name/id or various attributes, if you need to.

An essential part of your toolkit for screen-scraping.

DateTime (0.53) *****

The cleanest, sanest module for manipulating dates within Perl I've seen so far - a DateTime object has become my first choice for most date operations within Perl.

It's slightly slow (on one of my systems, perl -MDateTime took about 0.4s, compared to 0.1s for Date::Calc), but in most cases, I think it's worth the impact for easy, clean code. So, DateTime is my first choice, Date::Calc is my choice when speed is of the essence, and for working with date ranges, I'll occasionally turn to Date::Range.

Date-Range (1.40) *****

A nice clean way to handle ranges of dates. DateTime is my normal choice for date maths, but I've found this module good for clean and easy ways to, for instance, get a list of dates between $start_date and $end_date with minimal effort.

Text-Sequence (0.25) *****

Excellent stuff - did exactly what I needed.

Net-Google-Calendar (0.95) *****

Excellent stuff. Does exactly what I wanted to do, and with a sane interface too.

I think the documentation could do with a bit of cross reference though; for instance, when mentioning that a Net::Google::Calendar::Entry object is expected or emitted, a link to the appropriate documentation would be nice. (Yes, it's easy to go find it yourself, but easier still if there's a clickable link :) )

Parallel-ForkManager (0.7.5) *****

Takes the drudgery out of forkery, leaving more readable code. Good stuff.

Getopt-Lucid (0.17) *****

Excellent stuff.

I was fed up with using Getopt::Long and was looking for a decent Getopt::* module which could flexibly handle options the way I wanted them, and handle targets neatly too, regardless of the order they're given (e.g. ./script --option=foo filename, or ./script filename --option=foo), and most importantly, just get out of the way and DWIM.

Getopt::Lucid does everything I want, including verifying that required params were given, and as the name would suggest, allows the option-grabbing code to clearly show at a glance what options it takes.

Data-Validate-Domain (0.09) *****

Perfect, just what I was looking for.

This is a wheel that doesn't need to be re-invented, especially when there's a nice, round, very usable wheel like this ready to bolt on :)

Bot-BasicBot (0.7) *****

Great stuff - IRC bots made simple.

Bot-BasicBot-Pluggable (0.50) *****

Excellent stuff, makes quickly whipping up useful, extensible IRC bots a breeze.

It does have a dependency chain that seems to span half of CPAN, but it's worth it :)

Config-Auto (0.20) *****

Supporting so many different types of config files might be somewhat overkill, but it's sheer DWIMmy joy to not have to think. It Just Works. :)

Devel-NYTProf (2.03) *****

Tried this today to find a slowdown in some code, and was amazed by the detailed but easy-to-use output.

An excellent tool!

Test-MockObject (1.09) *****

Excellent stuff, really useful when writing decent test scripts. For code that relies on external systems, mocking up whatever objects it uses to communicate with them makes in-depth, reliable testing easy.

libnet (1.22) *****

Excellent - Net::FTP has a sane interface and makes it quick and easy to knock up a script to interact with an FTP server, with little thought required.

This is what CPAN is all about :)

Net-Twitter (1.14) *****

Great stuff - does exactly what I needed, and with a clear, sane interface.

HTML-Table (2.07b) ****

Useful stuff - makes simple report scripts a lot cleaner and quicker to write.

The only thing I don't like is the un-Perlish camelCased method names - I'd much prefer to write, e.g., $table->add_row(...) - but that's not enough to put me off :)

WWW-Comic (1.06) *****

I was considering writing something to fetch multiple comics, then found this, and it does exactly what I want :)

Good interface, easily extended with plugin modules - just what I was looking for.

WWW-Mechanize (1.34) *****

An awesome module that makes screen-scraping and programatically interacting with websites fun instead of a chore.

A well thought-out interface which allows you to just get on with coding what you want to do, quickly and cleanly.

Template-Toolkit (2.19) *****

Just tried Template::Toolkit after using HTML::Template for a fair while. H::T is good, but got in my way a little (especially when wanting to loop through an array - having to turn that simple array into an array of hashrefs was annoying).

Got T::T installed and converted over a (admittedly fairly small) project to use T::T within about half an hour and... my God, it has no right to be *this* good :)