Perl::Critic Has New Home And New Look

Perl::Critic has been improving code and irritating developers for almost 10 years! To celebrate, has been moved to new hardware and completely rewritten.

The back end is now written in Modern Perl™ using Mojolicious. And the front end uses Bootstrap and jQuery to create a productive and fun user experience.

The source code is on GitHub as Perl-Critic/Perl-Critic-Jed and I welcome pull requests. If you're looking for an opportunity to contribute to a public site, this is a great place to start.

Check it out now:

Creating Missions in Veure

Creating missions in Veure is probably the most challenging issue in the game. Not only is it technically complex, but in terms of game design, it's very easy to get wrong. If you get missions wrong, it's easy for the game to be a dud. So today I'm going to talk about how World of Warcraft got their missions (er, quests), so very wrong, yet still became the most wildly successful MMORPG of all time.

See that quest on the right? That's a level 6 quest named "A Putrid Task". All you have to do is bring seven "Putrid Claws" to Deathguard Dillinger in Brill. There is nothing challenging about this. Go out, find the claws, pick 'em up and bring 'em back. However, this is where it gets interesting. Let's jump ahead to a typical level 42 quest in World of Warcraft.

Imager::Draw::Hexagon - Draw hexes easily using Imager -

Imager::Draw::Hexagon - Draw hexes easily using Imager - :

After I gave my Tour of Imager talk last week I ended up releasing my own Imager module: Imager::Draw::Hexagon. It allows you to easily calculate the points of a hexagon of any size and draw it or outline it into your image. 

[From my blog.]

Web sites with source code for hacking

Once in a while people ask me what open source projects could the contribute to? I can point them to any module on CPAN, but it can be a lot more fun to contribute to a project where the contribution has immediate and visible impact.

I don't mean projects like Bugzilla which is downloaded and run by the end user, but projects like MetaCPAN, or the web site of Rex.

I've started to create a list of web sites where the source code is available, and of course that is is written in in Perl. I tried to group them according to the level of activity of the project and where I could, I also mentioned the framework used for the project.

I got a lot of input from people on Reddit, but I am sure there are plenty of other sites. Please suggest more sites, or even send me pull requests.

Using Minion with a REST API

Minion is a job queue for the Mojolicious real-time web framework. Below is example usage that sends an email using a REST API. The email address is handed off to minion and then minion processes the task. Everything is in a self-contained file as a Mojolicious::Lite app.

In addition, a config file is shared between minion and the web app.

One cool thing about Minion is that it has support for a Postgres backend using Mojo::Pg. Given that, workers can be running jobs on different physical boxes as long as they use a compatible "Pg" connect string.

The web app is started like so:

$ /opt/perl daemon

A Minion worker is started with:

$ /opt/perl minion worker

Example usage:

Parsing: top-down versus bottom-up

[ This is cross-posted by invitation, from its home on the Ocean of Awareness blog. ]

Comparisons between top-down and bottom-up parsing are often either too high-level or too low-level. Overly high-level treatments reduce the two approaches to buzzwords, and the comparison to a recitation of received wisdom. Overly low-level treatments get immersed in the minutiae of implementation, and the resulting comparison is as revealing as placing two abstractly related code listings side by side. In this post I hope to find the middle level; to shed light on why advocates of bottom-up and top-down parsing approaches take the positions they do; and to speculate about the way forward.

Top-down parsing

The basic idea of top-down parsing is as brutally simple as anything in programming: Starting at the top, we add pieces. We do this by looking at the next token and deciding then and there where it fits into the parse tree. Once we've looked at every token, we have our parse tree.

Git-Like Menus

[Pleased as I was to get mentioned in a lightning talk in this year’s YAPC, I noted that my mention was in the context of writing blog posts that “don’t contain much code.”1  Well, fair enough: I’m a verbose bugger, and a wannabe writer, so my prose does tend to ramble.  But I can do code, dammit.  So, you know ... here’s some code.]

The other day I was working on my music library scripts,2 and I needed a menu for something.  Now, there are oodles and oodles of modules on CPAN to help you write menus.  I’ve looked at most of them, and tried quite a few, but long ago I settled on using the -menu option in IO::Prompter, by the Damian.  For a nice, pretty menu layout—say, something you do as a central feature for a program—it’s tough to beat.  It’s not perfect, by any stretch, but it offers some very nice features, such as (optionally) not requiring ENTER after a menu choice.

But that’s not what I wanted in this case.  What I was looking for here was a quick, compact menu ... sort of like what you get when you’re interactively staging a commit in git (that is, git add -p, or, probably more commonly, git add -i then choose “patch”).  Specifically, the features I wanted were:

Buftabline – forget Vim tabs, now you can have buffer tabs

I just released Buftabline, a Vim plugin that takes over the tabline and renders the buffer list in it instead of a tab list. It is designed with the ideal that it should Just Work, and has no configurable behaviour: drop it into your configuration and you’re done.

There are comparisons with several alternative plugins in the README, as well as an explanation of why you probably want this rather than using Vim’s built-in tabs.

Share and enjoy.

About is a common blogging platform for the Perl community. Written in Perl and offering the modern features you’ve come to expect in blog platforms, the site is run by Dave Cross and Aaron Crane, with a design donated by Six Apart, Ltd.