Thursday, June 17, 2010

So I've been on the receiving end of a couple of unsolicited emails regarding open positions in a couple of companies. And it is odd to get these kinds of emails, especially when they aren't from recruiters, but from the hiring manager themselves. It is a little flattering, to say the least.

That said, the one thing these emails/companies/etc have in common is that the culture that makes me the most productive just isn't there, mentioned, or encouraged. Now, one could say my workplace is a little unorthodox since we are all virtual, but in the grand scheme of things, it isn't the virtual part that matters the most. What matters the most is that our company isn't isolated from the community.

We actively participate on CPAN, IRC, message boards, and most of the major modern Perl projects mailing lists. In our day to day, our communications circle encompasses the community. We contribute to important projects. We release generic solutions to problems we've solved in the course of our business. And we make use of others' solutions as they have released them. Frankly, I don't see how we could get much done if we /didn't/ invest as heavily in the community as we do.

So when I get emails or see job postings from companies that fail to mention any level of community participation, they are placed into the round file holder. And I am not alone in this. The people that I would consider my peers, other community members, the "rockstars" for which these job postings are seeking, aren't about to jump ship from a culture of shared commons and productivity to one of isolation and take-but-not-give-back.

So in the future, if you recruiters or hiring managers wish to cater to truly senior level Perl developers, Perl developers working with the state-of-the-art, please take the time to understand that there are deeper motivations than merely salary, location, or even the business domain.

Thursday, June 10, 2010

I am pleased to announce a new release of POEx::WorkerPool and a new TRIAL release of Poke. POEx::WorkerPool is a multi-process framework for implementing the worker pattern in Perl making use of POE as the backend. All you need to do is compose the Job role and you're golden.

Poke is a monitoring framework that uses POEx::WorkerPool for its foundation. Poke gives you the ability to simply compose it's Job role, and add the job's configuration to the config.ini. Your jobs can do anything. Need to run a complex query once an hour to make sure a queue is getting cleared? No problem. Want to ping a server to see if it is alive? Easy. By default, Poke comes with simple HTTP Job that merely hits a URI to see if 200 is returned.

Poke wouldn't be much if it was just a subclass of WorkerPool, it is much more than that. Each job status is committed to a database along with start and stop times. The status of jobs can be viewed through the embedded web component that lets you view the last status result, and the previous 10 for a particular job. The system itself can be meta-monitored by tailing the syslog output. And just about every part of the system is configurable from the number of worker processes, to the level of output to syslog.

Configuring jobs is also very easy as well. Attributes in the job's config correspond to actual attributes on the job class. Your config can contain any number of uniquely named jobs each configured to fire on it's own frequency.

This is another TRIAL release because I haven't written proper tests and fully documented the guts. Some things are still in flux as well when it comes to the embedded web portion. There are some features in HTML::Zoom and Web::Simple that haven't reached release yet and I didn't want to depend on git versions to run this release. Ultimately, I'd like to be able to control job execution from the web portion (pause, one-time run, delete, add), but I am not sure that will be in the initial finished release.

Please feel free to download the TRIAL release and play with it. It comes with an example config. From the project directory, simply run perl -Ilib bin/poked --config example.ini --no_fork 1 and monitor daemon syslog output, and connect to http://localhost:12345/ to see the web output.