Exploring Perl web frameworks
Initially, what I had in mind to provide this front-end functionality was a “swarm” of micro-applications, where each little application provided one simple, specific, function, e.g., user registration, comments on content, voting and rating, sharing content, etc. There were other people thinking along these lines too, and – eventually – I came across the MicroApps project, which stated its philosophy as:
MicroApps are small REST applications that are designed from the ground up to be integrated with other applications. Usually, they are not directly useful on their own, but must be integrated into other applications (this is what differentiates a MicroApp from a regular REST application).
Unfortunately, the project appeared to be at a standstill, and my experience with Python was pretty limited. Most of my experience is with Perl, so my investigation headed in that direction, and eventually lead to the topic of this post: Perl web frameworks.
While they may not often be used for micro-applications, Web frameworks are all the rage. You’ve probably heard of Ruby on Rails, and you may have even heard of Django (a Python-based web framework) or Symphony (PHP). Put simply: these web frameworks aim to make web application development faster and commonly “bake in” some best practices.
Yes, Perl has CRUD too
Perl, though frequently dismissed by the youngsters, is not a language that likes to get left behind, and there are now several Perl web frameworks to choose from.
Around the time of thinking about micro-applications, I stumbled on Jifty. Jifty was developed by Best Practical – an established software company in the Perl world – and was used in the production and delivery of their Hiveminder application.
Fast forward to 2009. We’re underway with a number of initiatives of strategic importance to the New Internationalist – re-launching NI’s various web properties – and so it’s time to start thinking again about the technologies that will carry NI forward.
My colleague Charlie had been recently experimenting with Jifty and Catalyst, and – in the interest of the experience to be gained by getting one’s hands dirty – I also decided to jump in and re-explore the state of Perl web frameworks.
This time I thought I’d look at the three most active, or promising, options: Catalyst, Jifty, and Mojo/Mojolicious. (I also took a pretty close look at CGI::Application, but decided to pass on that for now.)
So, far from an evaluation, I thought I’d just jot down my first impressions of where these frameworks are by exploring how easy it is to get up-and-running and working through their tutorials.
My development environment for this adventure was VMware’s Fusion on a MacBook Pro and a stock Debian 5.0 “Lenny” installation.
I started with the Catalyst installation documentation and followed their instructions for an installation using aptitude. Though the basic installation went well, it seemed to leave me with many missing modules, including Catalyst::Devel (which is odd, as that appears to be a rather critical piece). After various attempts to create an application skeleton or start up the web server, I was able to get the various missing bits installed via CPAN and to get everything working. On to the documentation and tutorials…
My first impression was that the documentation was very well maintained. The tutorials are abundant and thorough, and make attempts to address the various versions of Catalyst that are out there in the wild. Thanks to the tutorials, I was able to get a simple test application set up relatively quickly.
However, what Catalyst makes up for in documentation, it lacks in simplicity. As the Catalyst documentation states:
Catalyst is designed for flexibility and power; to an extent, this comes at the expense of simplicity. Programmers have many options for almost everything they need to do, which means that any given need can be done in many ways, and finding the one that’s right for you, and learning the right way to do it, can take time. TIMTOWDI works both ways.
Compared to the competing Perl web frameworks or web frameworks in other languages, I found that Catalyst required more effort to get started and doesn’t provide an out-of-the-box experience. Not a bad thing but a consideration nonetheless.
For Jifty, this time I went with the suggested apt-get install route to get things downloaded and installed. Unfortunately, the first thing I ran into was this rather intimidating warning:
WARNING: This key is not certified with a trusted signature!
Moving right along, I installed the package anyway and tried to set up my first application. Like Catalyst, I was presented with various errors about missing modules. One Google search and several CPAN installations later, as promised, I got a Pony.
One nice thing that Jifty gives you out-of-the-box is an administration interface, making it easy to start adding test data to your model. The other really helpful thing that Jifty provides is, well, everything. Part of what makes Jifty so cool is:
Out of the proverbial box, Jifty comes with one way to do everything you should need to do: one database mapper, one templating system, one web services layer, one AJAX toolkit, one set of handlers for standalone or FastCGI servers. We work hard to make all the bits play well together, so you don’t have to.
Which means trading off options (as in the case of Catalyst) for simplicity.
Jifty’s documentation is a little rough around the edges, but the tutorials are up-to-date and I was able to get my test application running and doing fancy, AJAX-y, stuff in no time.
Mojo is a “A next generation web framework for the Perl programming language” and Mojolicious is a MVC framework built on top of Mojo. The primary author of Mojo – Sebastian Riedel – was one of the founders of Catalyst and, with Mojo, he sets out to create something more like Jifty – or, if you prefer, “the web in a box.”
Mojo was by far the easiest to install: just a straightforward tarball to download and a few Perl “make” commands and Mojo was up-and-running.
Unfortunately, the fun stops there at the moment. Mojo is very new and provides fairly limited documentation to work from. And, idling in the IRC channel, one can see lots of activity and signs that there is much work to be done before Mojo becomes a practical alternative to Catalyst or Jifty. However, once it does, it’s going to be one to watch.
So, a few parting thoughts on my exploration of Perl web frameworks:
I worry that some of the installation issues I ran into will discourage other people to try these incredibly powerful frameworks. It’s been years since I’ve looked at any of the competing frameworks in other languages, but my guess would be that most installation issues are ironed out and the process is dead-simple.
However, any time I ran into a problem, I was able to hop into the IRC channel for the project and find friendly and helpful advice. All three project’s channels are active and filled with idling contributors.
I’m anxious to see what Charlie comes up with during his explorations of the same.