100% Test Coverage?

OK, you know how it works. Everybody who's really comfortable with testing often offers the following advice:

  • Use Devel::Cover
  • Don't strive for 100% coverage

This advice is absolutely correct, but misleading. It leaves you with an obvious question: what coverage do I want? This is where the danger lies.

New functionality in Cantella::Worker

I just released a new version of Cantella::Worker and I'm really happy with the improvements. I updated Cantella::Worker::Manager::Prefork and added a couple of options to add a little more fine-grained controls to the worker processes, such as whether the workers should detach from the manager's session or not and a way to adjust the priority of worker processes. More importantly, I added the "program name" attribute and functionality and I made children automatically shut down if their manager dies, so that you never have an unsupervised worker pool. Special thanks to Rocco Caputo for his help. So, here's an example so you can see the progress made:

Measuring the Progress of UI

Lately I've been learning ExtJS (which I might write about separately sometime) to try and create a UI for a small application I'm writing for a friend.

The application uses Dancer and KiokuDB. They're both easy to work with and I spent little time working on the backend. The problem lies in the frontend, where I need some UI. I've chosen ExtJS because it has built-in widgets.

I've played with tutorials, general documentation and (tried to) read the not-as-friendly-as-I-thought API. I was able to create a grid, a form and even a viewport. However, it kept feeling like it's stuck. Not stuck as in "this is going slow", but stuck as in "not moving at all".

New Safe.pm fixes security hole

Safe.pm, originally released with perl 5.002, has been an experiment to bring compile-time safety to perl. It allows to compile a (usually user-provided) snippet of perl code and execute it, while forbidding a configurable list of operations -- for example, all perl built-ins that would require disk or operating system access. Moreover, Safe "chroots" perl's main:: namespace, so the real program's variables can't be overwritten by the ones created by the code executed from Safe.

It's pretty clear that Safe does not provide absolute safety. For once, even overly restricted, it can be abused to execute code that allocates gigabytes of RAM, or goes into an infinite loop. Also, Safe is forced to share a small list of variables and functions with the main program; $_ is an obvious example, being the default topic for a lot of built-ins; functions from the UNIVERSAL:: and utf8:: namespaces also come to mind.

Really?

P****, the P*** I**, apparently has a blog. Unfortunately, it has a "please socially network me" crapstain (1) on every post, and requires Javascript and cookies to post. Color me not surprised.

(1) http://imgur.com/kmupS.png

Perl in Germany · My CeBIT Recap

I had the opportunity to help out the Perl::Staff at this years CeBIT. There was lots of interest in Perl, and we had lots of talks with people about what they are using Perl for, and how to bring the community and the companies using Perl closer together. This is quite a long post so I’ll put it behind the jump.

Dancer 1.160

Major release of Dancer finally out. You can read about it on Alexis' blog.

Basically this version provides a lot of improvements to Dancer:
  • Alexis Sukrieh worked hard on refactoring and optimizing.
  • David Precious did a lot of awesome work on documentation: we now have a cookbook and a deployment manual for various situations you might encounter. He also added a session backend with clean recursive dumps.
  • I added the route caching, which shows a significant speed improvement!
  • We have a mailing list
  • We have a new main domain (perldancer.org) and it's the first project to use a perlprojects.net subdomain: dancer.perlprojects.net.

I want to thank Sukriah and David for all their work and being great guys to work with.

Bust a move!

Compiling a full C library using Perl tools

ExtUtils::CBuilder supports C code compilation mechanisms whenever a C compiler is available. That is true on most Mac OS X installations and other UNIX flavors like Linuxes. Unfortunately that is not so common for Windows, but Strawberry Perl includes a GCC-based C compiler and a standard libc library.

This means that if a C compiler is available it should be possible to compile a C program, and to compile a C library. And that is true. Unfortunately ExtUtils::CBuilder includes method to compile bundle libraries and not common dynamic libraries. If you do not know what that means, probably you are using a common Linux. For Mac OS X we have that difference: the libraries created by standard Perl modules are bundles and not full featured libraries.

What's the Mad Doctor Doing?

In case you were wondering what Damian been's doing lately (and don't you dare say "Damian Who?" -- unless your name is Damian), he's been writing a series of articles for IBM Developer Works about the Vim editor.

On an unrelated note, one of my brothers is a psychiatric nurse. He often has to deal with patients in the Conway Ward. Coincidence?

Separation of Concerns

In the world of Perl programming, nothing annoys me more than opening up a module and finding a bunch of POD interleaved with code. I've heard people argue in favor of this atrocious practice, saying that it allows the documentation for a function to be next to its implementation. But if I'm reading the code at all, it's only because I've already read the documentation and it wasn't good enough. That's not meant to be an insult -- maybe I was trying something weird that the author didn't intend, or trying to track down a bug that the author was not aware of.

perl: bug-compatible with DOS 1.0!

On DOS, this:

A:\> WIBBLE/BOING

is equivalent to:

A:\> WIBBLE /BOING

that is to say, even with no space in between them, it finds and executes the WIBBLE program, passing it the /BOING argument.

It's only reasonable that perl's system(SCALAR) should do the same. But it's not reasonable that system(LIST) should. And yet it does. This:

system(qw(wibble/boing foo bar))

which on sane systems executes wibble/boing with arguments foo and bar, on Win32 is equivalent to:

system('wibble', '/boing', 'foo', 'bar')

If open(), unlink() and all their friends and relations can understand wibble/boing properly, then system(LIST) should too.

Modern Perl and Archaic Codebases

I work with a small team (in a large company) to maintain a widely used and system critical test automation framework developed in-house. This framework was developed when perl 5.6 was considering cutting-edge, and the archaic techniques of the C programmers who designed the system are readily apparently. As an ardent supporter of Modern Perl this frustrates me on a daily basis.

This framework, and the tests written to use it, encompass nearly 2.5 million lines of code. Because of the horrendous design of the framework, I would imagine that at least a million lines of that (and probably more) is boilerplate. The organization places on on this code and any efforts made to actually improve the sad state of affairs, are almost always rebuffed.

SF.pm meeting - Simple form validation with Data::FormValidator

As the first talk in series of talks on form validation, Fred Moyer will present an overview of Data::FormValidator. Real world code examples will be presented, and you'll see how you can use Data::FormValidator to implement form validation for legacy codebases as well as new code. Data::FormValidator is a loosely coupled, highly flexible, and easy to use form validation module written by Mark Stosberg.

This meeting will take place on Tuesday, March 23rd at 7pm at Six Apart World Headquarters.

RSVP at Meetup - http://www.meetup.com/San-Francisco-Perl-Mongers/calendar/12793946/

Fred Moyer's CPAN page:
http://search.cpan.org/~phred/


Data::FormValidator on CPAN:
http://search.cpan.org/dist/Data-FormValidator/

Announcement posted via App::PM::Announce

CPAN Testers Summary - February 2010 - The Wake

You might recall we made an announcement a few months ago, regarding a deadline. The deadline, 1st March 2010, was the date we had to switch from SMTP to HTTP for report submissions. Since December there has been a lot of work behind the scenes, and some public changes too. Much of the publicly visible work has been done that can be done, while the remaining backend pieces are completed. David Golden has been posting regarding his progress on the Metabase, which will stand as a core component of CPAN Testers in the future.

Sub::WrapPackages 2.0 released

Sub::WrapPackages 2.0 is a fairly substantial rewrite from the previous version, and may introduce some minor incompatibilities. But what you get in exchange makes it worth it.

  • The code is now marginally less batshit-insane;
  • It uses Devel::Caller::IgnoreNamespaces, which I factored out of Hook::LexWrap, so caller() works;
  • It is better tested;
  • It protects its magic @INC subroutine from 'use lib'

next::method in bash scripts

In Pre-commit hooks and breaking the build, I wrote a little wrapper around 'svn' to ensure that I could locally alter how it functions. However, I hard-coded the name to the actual executable. I should actually be doing the equivalent of $self->next::method to find the next executable in my path. So I wrote the following bash function to give this a try.

São-Paulo.pm Vernal Equinox Calendar

The sao-paulo.pm group is releasing this month the vernal equinox calendar, with daily articles until the day and night are equally long :). The articles are in Portuguese and the idea is spread modern web development using Perl to Portuguese speakers.

There are already five articles at: http://sao-paulo.pm.org/equinocio/2010

Introducing Dist::Zilla::Plugin::MetaNoIndex

A quick announcement. A couple of months ago I brought up a problem with Dist::Zilla in that it had no way to stop modules from being indexed that are included in the distribution for testing or example purposes only. Ricardo gave me a work around, but I decided it was time to actually implement a real fix. So today I've released Dist::Zilla::Plugin::MetaNoIndex.

Adding this to your dist.ini:

[MetaNoIndex]
folder = author.t

Will add a section to your META.yml file like this:

no_index:
	directories:
		- author.t

Which will stop PAUSE/CPAN from complaining at you about Foo.pm or whatever other classes you might have created for testing.

Search::GIN 0.04 finally out!

I'm excited about this for a few reasons:
  • I just started using Search::GIN a while ago and it's a lot of fun. It's also an amazing example of how to write code correctly, using roles, abstraction and introspection. Reading the source is illuminating.
  • Search::GIN 0.04 has a few fixes that existed for a while in the Github repo but were not uploaded to CPAN.
  • There is now some docs on writing queries to help beginners. Hopefully I'll get around to documenting the extractors and write up some usage examples.

A major thanks goes to Stevan Little which helped me understand KiokuDB and Search::GIN and Yuval Kogman for writing these great tools. :)

Making blogs.perl.org work better for you

Based on an explanation from Aristotle which has worked for me, here's one way you can make blogs.perl.org work a bit better for you. I've approved these and they seem to be OK.

As you may know, anonymous commenters are getting "Text was entered wrong" errors. This is because of a currently undiagnosed error with ReCaptcha. To work around this:

  • Log in
  • Click "POST"
  • On the next page, select "Comment" from the preferences menu
  • At the top, where it says "Immediately approve comments from", make sure that "Trusted commenters only" is selected
  • Further down where it says "E-mail Notification", select "On".
  • Near the bottom where it says "CAPTCHA Provider", select "None"
  • Now select "Registration" from the "Preferences" menu.
  • For "Authentication Methods", make sure "Anonymous Comments" is checked.

Whenever someone posts to your blog, you should be emailed notification. If they're "not trusted", you'll have to approve their posts. When you do, you'll have the option to make them a trusted commenter and not have to approve their posts again.

About blogs.perl.org

blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.