<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

	<title>Planet Perl</title>
	
	<link href="http://planet.perl.org/" />
	<id>http://planet.perl.org/atom.xml</id>
	<updated>2011-03-21T02:05:37+00:00</updated>
	<generator uri="http://www.planetplanet.org/">http://intertwingly.net/code/venus/</generator>

	<feedburner:info uri="planetperl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://planet.perl.org/atom.xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fplanet.perl.org%2Fatom.xml" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fplanet.perl.org%2Fatom.xml" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fplanet.perl.org%2Fatom.xml" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://planet.perl.org/atom.xml" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fplanet.perl.org%2Fatom.xml" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fplanet.perl.org%2Fatom.xml" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fplanet.perl.org%2Fatom.xml" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry>
		<title type="html" xml:lang="en-US">Planet Perl is going dormant</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/r0ANVUjJGGY/planet-perl-is-going-dormant.html" />
		<id>http://log.perl.org/2011/03/planet-perl-is-going-dormant.html</id>
		<updated>2011-03-21T02:04:36+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;&lt;a href="http://planet.perl.org/" target="_self"&gt;Planet Perl&lt;/a&gt; is going dormant.  This will be the last post there for a while.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planet.perl.org/planetperl.png" style="float: right;"&gt;&lt;img alt="image from planet.perl.org" border="0" class="asset  asset-image at-xid-6a00e54ecbd4ae8833014e86dafe4e970d" src="http://a6.typepad.com/6a00e54ecbd4ae8833014e86dafe4e970d-800wi" style="margin: 0px 0px 5px 5px;" title="image from planet.perl.org" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Why?  There are better ways to get your Perl blog fix these days.&lt;/p&gt;
&lt;p&gt;You might enjoy some of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/" target="_self"&gt;blogs.perl.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.perlsphere.net" target="_self"&gt;PerlSphere&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ironman.enlightenedperl.org/" target="_self"&gt;Iron Man Perl Blogging Challenge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.perl.com/" target="_self"&gt;Perl.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Will Planet Perl awaken again in the future?  It might!  The universe is a &lt;a href="http://www.nasa.gov/audience/foreducators/5-8/features/F_How_Big_is_Our_Universe.html" target="_self"&gt;big place&lt;/a&gt;, filled with interesting places, people and things.  You never know what might happen, so &lt;a href="http://www.google.com/search?q=keep+your+towel+handy" target="_self"&gt;keep your towel handy&lt;/a&gt;.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/r0ANVUjJGGY" height="1" width="1"/&gt;</content>
		<author>
			<name>Robert</name>
			<uri>http://log.perl.org/</uri>
		</author>
		<source>
			<title type="html">Perl NOC</title>
			<subtitle type="html">the perl.org infrastructure weblog</subtitle>
			<link rel="self" href="http://log.perl.org/index.rdf" />
			<id>http://log.perl.org/</id>
		</source>
	<feedburner:origLink>http://log.perl.org/2011/03/planet-perl-is-going-dormant.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-us">improving on my little wooden "miniatures"</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/XpA8ctPqmLo/1878" />
		<id>http://rjbs.manxome.org/rubric/entry/1878</id>
		<updated>2011-03-21T00:47:28+00:00</updated>
		<content type="html">&lt;p&gt;A few years ago, I wrote about &lt;a href="http://rjbs.manxome.org/rubric/entry/1717"&gt;cheap wooden discs as D&amp;amp;D
minis&lt;/a&gt;, and I've been using them
ever since.  They do a great job, and cost nearly nothing.  For the most part,
we've used a few for the PCs, marked with the characters' initials, and the
rest for NPCs and enemies, usually marked with numbers.&lt;/p&gt;

&lt;p&gt;With D&amp;amp;D 4E, we've tended to have combats with more and more varied enemies.
(Minions are wonderful things.)  Numbering has become insufficient.  It's too
hard to remember what numbers are what monster, and to keep initiative order
separate from token numbers.  In the past, I've colored a few tokens in with
the red or green whiteboard markers, and that has been useful.  So, this
afternoon I found my old paints and painted six sets of five colors.  (The
black ones I'd already made with sharpies.)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/rjbs/5544041490/" title="D&amp;amp;D tokens: now in color by rjbs, on Flickr"&gt;&lt;img alt="D&amp;amp;D tokens: now in color" height="374" src="http://farm6.static.flickr.com/5260/5544041490_83bf0df98a.jpg" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm not sure what I'll want next:  either I'll want five more of each color or
I'll want five more colors.  More colors will require that I pick up some white
paint, while more of those colors will only require that I re-match the
secondary colors when mixing.  I think I'll wait to see which I end up wanting
during real combats.&lt;/p&gt;

&lt;p&gt;These colored tokens should work together well with my previous post about
&lt;a href="http://rjbs.manxome.org/rubric/entry/1876"&gt;using a whiteboard for combat
overview&lt;/a&gt;.  Like-type monsters will
get one color, and will all get grouped to one slot on initiative.  Last night,
for example, the two halfling warriors were red and acted in the same
initiative slot.  The three halfling minions were unpainted, and acted in
another, later slot.  Only PCs get their own initiative.&lt;/p&gt;

&lt;p&gt;I think that it did a good amount to speed up combat, and that's even when I
&lt;em&gt;totally forgot&lt;/em&gt; to bring the combat whiteboard (and the &lt;em&gt;character sheets&lt;/em&gt;!)
with me.  Next time, we'll see how it works when it's all brought together.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/XpA8ctPqmLo" height="1" width="1"/&gt;</content>
		<author>
			<name>rjbs</name>
			<uri>http://rjbs.manxome.org/rubric</uri>
		</author>
		<source>
			<title type="html">Rubric: rjbs's entries with a body</title>
			<subtitle type="html">Rubric</subtitle>
			<link rel="self" href="http://rjbs.manxome.org/rubric/entries/user/rjbs/has_body/1?format=rss" />
			<id>http://rjbs.manxome.org/rubric</id>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1878</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Perl Vogue T-Shirts</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/DBPJyEL6Y18/" />
		<id>http://perlhacks.com/?p=258</id>
		<updated>2011-03-20T12:02:27+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href="http://perlhacks.com/wp-content/uploads/2011/03/is-plack-the-new-black_design.png"&gt;&lt;img align="left" alt="Is Plack the new Black?" class="alignleft size-thumbnail wp-image-259" height="150" src="http://perlhacks.com/wp-content/uploads/2011/03/is-plack-the-new-black_design-150x150.png" title="Is Plack the new Black?" width="150" /&gt;&lt;/a&gt;In Pisa I gave a lightning talk about &lt;a href="http://www.youtube.com/watch?v=WquECQnnCq4"&gt;Perl Vogue&lt;/a&gt;. People enjoyed it and for a while I thought that it might actually turn into a project.&lt;/p&gt;
&lt;p&gt;I won’t though. It would just take far too much effort. And, besides, a couple of people have pointed out to be that the real &lt;a href="http://www.vogue.com"&gt;Vogue&lt;/a&gt; are rather protective of their brand.&lt;/p&gt;
&lt;p&gt;So it’s not going to happen, I’m afraid. But as a subtle reminder of the ideas behind Perl Vogue I’ve created some t-shirts containing the article titles from the talk. You can get them from my &lt;a href="http://davorg.spreadshirt.co.uk/perl-C191447"&gt;Spreadshirt shop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/DBPJyEL6Y18" height="1" width="1"/&gt;</content>
		<author>
			<name>Dave Cross</name>
			<uri>http://perlhacks.com</uri>
		</author>
		<source>
			<title type="html">Perl Hacks</title>
			<subtitle type="html">Just another Perl Hacker's blog</subtitle>
			<link rel="self" href="http://perlhacks.com/feed/" />
			<id>http://perlhacks.com</id>
		</source>
	<feedburner:origLink>http://perlhacks.com/2011/03/perl-vogue-t-shirts/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-US">Big CPAN.org update</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/33pUsbW6qQE/big-cpanorg-update.html" />
		<id>http://log.perl.org/2011/03/big-cpanorg-update.html</id>
		<updated>2011-03-20T09:10:50+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;&lt;a href="http://www.cpan.org/" target="_self"&gt;CPAN&lt;/a&gt; has gotten its first real update in a while tonight; the content is from the &lt;a href="https://github.com/perlorg/cpanorg" target="_self"&gt;cpanorg git repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We tried to get &lt;a href="http://www.cpan.org/misc/cpan-faq.html" target="_self"&gt;the FAQ&lt;/a&gt; cleaned up a bit (though there's plenty of work left) and Leo Lapworth pretty heroically also did a first pass on cleaning up the &lt;a href="http://www.cpan.org/ports/" target="_self"&gt;ports page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You might also notice a search box for search.cpan.org which we find appropriate, a list of recently uploaded modules on the homepage and a new page on &lt;a href="http://www.cpan.org/misc/how-to-mirror.html" target="_self"&gt;how to mirror CPAN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you read the latter page, you'll see that the master mirror is now cpan-rsync.perl.org::CPAN (rsync only).  In the coming weeks we'll work on encouraging the CPAN mirrors to switch to mirror from here to ease the load on FUnet, the sponsor of the master mirror for the last 15 years.&lt;/p&gt;
&lt;p&gt;Work is also coming along well on the &lt;a href="https://github.com/perlorg/cpanorg/wiki/Instant-update-mirroring" target="_self"&gt;instant update mirroring&lt;/a&gt; system.&lt;/p&gt;
&lt;p&gt; - ask&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/33pUsbW6qQE" height="1" width="1"/&gt;</content>
		<author>
			<name>Ask Bjørn Hansen</name>
			<uri>http://log.perl.org/</uri>
		</author>
		<source>
			<title type="html">Perl NOC</title>
			<subtitle type="html">the perl.org infrastructure weblog</subtitle>
			<link rel="self" href="http://log.perl.org/index.rdf" />
			<id>http://log.perl.org/</id>
		</source>
	<feedburner:origLink>http://log.perl.org/2011/03/big-cpanorg-update.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">With LWP 6, you probably need Mozilla::CA</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/KutPpm-c5Wk/" />
		<id>http://www.dagolden.com/?p=1395</id>
		<updated>2011-03-19T02:57:54+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href="http://p3rl.org/LWP"&gt;LWP&lt;/a&gt; 6 makes hostname verification the default -- so note this from &lt;a href="http://p3rl.org/LWP::UserAgent"&gt;LWP::UserAgent&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If hostname verification is requested, and neither SSL_ca_file nor SSL_ca_path is set, then SSL_ca_file is implied to be the one provided by Mozilla::CA. &lt;strong&gt;If the Mozilla::CA module isn't available SSL requests will fail&lt;/strong&gt;. Either install this module, set up an alternative SSL_ca_file or disable hostname verification.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;If you use LWP and want SSL, you need &lt;a href="http://p3rl.org/IO::Socket::SSL"&gt;IO::Socket::SSL&lt;/a&gt; (recommended) &lt;strong&gt;and&lt;/strong&gt; &lt;a href="http://p3rl.org/Mozilla::CA"&gt;Mozilla::CA&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/KutPpm-c5Wk" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1395/with-lwp-6-you-probably-need-mozillaca/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Perl News</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/815qzV9Ah-I/" />
		<id>http://perlhacks.com/?p=253</id>
		<updated>2011-03-17T14:01:43+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Remember &lt;a href="http://use.perl.org/"&gt;use.perl&lt;/a&gt;? It’s moth-balled now, but for years it provided two valuable services to the Perl community.&lt;/p&gt;
&lt;p&gt;Firstly it provided a hosted blog platform which many people used to write about many things – sometimes even Perl. Of course we now have &lt;a href="http://blogs.perl.org/"&gt;blogs.perl.org&lt;/a&gt; which provides a very similar service.&lt;/p&gt;
&lt;p&gt;And secondly, it provided a place where people could submit stories related to Perl and then editors would approve the stories and publish them on the front page. Since use.perl closed down, the Perl community hasn’t really had a centralised site for that.&lt;/p&gt;
&lt;p&gt;Over the last eighteen months or so I’ve had conversations with people about building a site that replaced that part of use.perl. But there’s always been something more interesting to work on.&lt;/p&gt;
&lt;p&gt;Then, at  the start of this week, &lt;a href="http://blogs.perl.org/users/leo_lapworth/"&gt;Leo&lt;/a&gt; asked if I knew of a good Perl news feed that he could use on the front page of &lt;a href="http://perl.org/"&gt;perl.org&lt;/a&gt;. And I realised that I’d been putting it off so too long. A few hours of &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt; configuration and &lt;a href="http://perlnews.org/"&gt;Perl News&lt;/a&gt; was ready to go.&lt;/p&gt;
&lt;p&gt;So if you have any interesting Perl news to share, please &lt;a href="http://perlnews.org/submit/"&gt;submit it to the site&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/815qzV9Ah-I" height="1" width="1"/&gt;</content>
		<author>
			<name>Dave Cross</name>
			<uri>http://perlhacks.com</uri>
		</author>
		<source>
			<title type="html">Perl Hacks</title>
			<subtitle type="html">Just another Perl Hacker's blog</subtitle>
			<link rel="self" href="http://perlhacks.com/feed/" />
			<id>http://perlhacks.com</id>
		</source>
	<feedburner:origLink>http://perlhacks.com/2011/03/perl-news/</feedburner:origLink></entry>

	<entry>
		<title type="html">New Perl news site launches</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/kbLK19AW8o4/new-perl-news-site-launches.html" />
		<id>tag:blogs.perl.org,2011:/users/leo_lapworth//12.1568</id>
		<updated>2011-03-17T13:44:41+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href="http://perlnews.org/"&gt;http://perlnews.org/&lt;/a&gt; has just launched and will be providing a source for major announcements related to The Perl Programming Language (&lt;a href="http://www.perl.org/"&gt;http://www.perl.org/&lt;/a&gt;). Find out more at &lt;a href="http://perlnews.org/about/"&gt;http://perlnews.org/about/&lt;/a&gt; - or if you have a story submit it &lt;a href="http://perlnews.org/submit/"&gt;http://perlnews.org/submit/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All stories are approved to ensure relevance.&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;

&lt;p&gt;The Perl News Team.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/kbLK19AW8o4" height="1" width="1"/&gt;</content>
		<author>
			<name>Ranguard</name>
			<uri>http://blogs.perl.org/users/leo_lapworth/</uri>
		</author>
		<source>
			<title type="html">Leo Lapworth</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/leo_lapworth/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/leo_lapworth//12</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/leo_lapworth/2011/03/new-perl-news-site-launches.html</feedburner:origLink></entry>

	<entry>
		<title type="html">80% Hacks</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/otyu22pcetA/80-hacks.html" />
		<id>tag:blogs.perl.org,2011:/users/ovid//11.1567</id>
		<updated>2011-03-17T09:33:25+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href="http://overseas-exile.blogspot.com/"&gt;I'm still blogging five days a week&lt;/a&gt;, but obviously not here. That's largely because &lt;a href="http://www.flickr.com/photos/publius_ovidius/5482032899/"&gt;my new daughter&lt;/a&gt; is forcing me to choose where I spend my time and I can't blog too much about what I do lest I reveal trade secrets. So, just to keep my hand in, here's an ugly little "80% hack" that lets me find bugs like mad in OO code. I should really combine this with my &lt;a href="http://blogs.perl.org/users/ovid/2011/01/warningsunused-versus-ppi.html"&gt;warnings::unused hack&lt;/a&gt; and start building up a tool find find issues in legacy code.&lt;/p&gt;

        &lt;p&gt;First, an "80% Hack" is based on the &lt;a href="http://en.wikipedia.org/wiki/Pareto_principle"&gt;Pareto Principle&lt;/a&gt; which states that 80% of the results stem from 20% of the effort. So I often write what I call 80% hacks which are simply quick and dirty tools &lt;em&gt;which get things done&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple. In legacy OO code where we're not using Moose, we have a nasty tendency to reach inside a blessed hashref. However, as classes start getting old and crufty, particularly in legacy code which is earning the company a ton of money, it's easy for someone to either misspell a hash key or refer to keys which are no longer used. What I've done is assume that each of these keys are used once and only once and I also assume they look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$self-&amp;gt;{ foo }
$_[0]  -&amp;gt;  { "bar" } # yeah, we need arbitrary whitespace
shift-&amp;gt;{'something'} # and quotes
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Yes, this code could be improved tremendously, but 80% hacks are personal hack which I simply don't pour a lot of time and effort into. Besides, they're fun.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/env perl                                                                                                                                                                                                                       

use strict;
use warnings;
use autodie ':all';
use Regexp::Common;

my $module = shift or die "usage: $0 pm_file";

#my $module = '/home/cpoe/git_tree/main/test_slot';

my $key_found = qr/
    (?: \$self | \$_\[0\] | shift )  # $self or $_[0] or shift
    \s* -&amp;gt;                         # -&amp;gt;
    \s* {                          # { 
    \s* ($RE{quoted}|\w*)          # $hash_key
    \s* }                          # }
/x;

open my $fh, '&amp;lt;', $module;

my %count_for;
while (&amp;lt;$fh&amp;gt;) {
    while (/$key_found/g) {
        my $key = $1;
        $key =~ s/^["']|['"]$//g;    # try and strip the quotes

        no warnings 'uninitialized';
        $count_for{$key}{count}++;
        $count_for{$key}{line} = $.;
    }
}

foreach my $key ( sort keys %count_for ) {
    next if $count_for{$key}{count} &amp;gt; 1;
    print "Possibly unused key '$key' at line $count_for{$key}{line}\n";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I run that with a .pm file as an argument and I get a report like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Possibly unused key '_key1' at line 1338
Possibly unused key '_key2' at line 5325
...
Possibly unused key '_keyX' at line 4031
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It's amazing how many bugs I've found with this.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/publius_ovidius/5482032899/" title="Leïla and Lilly-Rose. Lilly-Rose is 3 weeks old in this photo. by curtis_ovid_poe, on Flickr"&gt;&lt;img alt="Leïla and Lilly-Rose. Lilly-Rose is 3 weeks old in this photo." height="240" src="http://farm6.static.flickr.com/5135/5482032899_95e55893bd_m.jpg" width="160" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can't blog as much as I used to, but they make it all worth it.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/otyu22pcetA" height="1" width="1"/&gt;</content>
		<author>
			<name>Ovid</name>
			<uri>http://blogs.perl.org/users/ovid/</uri>
		</author>
		<source>
			<title type="html">Ovid</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/ovid/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/ovid//11</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/ovid/2011/03/80-hacks.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Recreating a Perl installation with MyCPAN</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/YH6bWKvWDKs/recreating-a-perl-installation-with-mycpan.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1566</id>
		<updated>2011-03-17T08:37:57+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;A goal of the MyCPAN work was to start with an existing Perl distribution and work backward to the MiniCPAN that would re-install the same thing. I hadn't had time to work on that part of the project until this month.&lt;/p&gt;

&lt;p&gt;The first step I've had for awhile. I've created a database of any information I can collect about a file in the 150,000 distributions on BackPAN. There are about 3,000,000 candidate Perl module or script files. That includes basics such as MD5 digest of the file, the file size, the Perl packages declared in the file, and the package versions.&lt;/p&gt;

&lt;p&gt;The next step is what I've been doing this week: collect the same information on the files in a Perl installation, which is much easier to do. There's not wacky distribution stuff involved.&lt;/p&gt;

&lt;p&gt;Putting those two together should find the distributions that could make up the installation. With that list of distros, it's just a matter of creating the right 02packages file that a CPAN client can use. Easy peasy, I thought.&lt;/p&gt;

&lt;p&gt;But, it's not that easy. Each file in the existing installation might have come from several distributions. That is, between different versions of a distribution, it's likely that many of the modules didn't change. So, looking at a single file doesn't lead to a single distribution. It might list several possible distributions. &lt;/p&gt;

&lt;p&gt;But that's a start. Other files from that distribution should be present, and they each might come from several distributions even if one of them changed. If there's any file that only belongs to one distribution, that collapses everything for that distribution. If not, I have to find the overlap in possible distributions. There should be one distribution that overlaps more than all of the others, and that should be the right distribution.&lt;/p&gt;

&lt;p&gt;That's not quite right either though, because some distribution versions don't change the module files. They update a test or the build file or something besides whatever is in lib. You'd think that at least the &lt;code&gt;$VERSION&lt;/code&gt; would change, but think of any exception and you'll probably find it on BackPAN. That's not as horrible as it seems though. If all of the module files are the same, it doesn't matter which distribution I use, does it?&lt;/p&gt;

&lt;p&gt;But then, there are some files that not only might come from more than one version of a particular distribution, but might also be in a completely different distribution. Some distributions have lifted files from other distributions. Files from the URI and LWP modules show up in other distributions. How should I figure out which one should be the candidate distribution? &lt;/p&gt;

&lt;p&gt;The database I was using was just an extract of all of the information I have on each distribution and it's oriented to individual files. I select records to match up MD5 digests. However, when I get records back with different distributions, which one might be installed? If an installed file might have come from both Foo-Bar and Baz-Quux, I have to remove one of the distributions somehow. In that case, I have to step back to look at what else either distribution might have been installed. If the other files from Foo-Bar aren't there, it's probably not Foo-Bar.&lt;/p&gt;

&lt;p&gt;That might be the end of the story, but what if both Foo-Bar and Baz-Quux are installed? That part I haven't figured out, but it's likely that the previous step will be inconclusive since the files from both distributions will all be there. However, there's also the chance that an older version of Foo-Bar and a newer Baz-Quux is there. If they both install a Foo.pm file, the older version in Foo-Bar might have been over written by an updated version from Baz-Quux. So, Every file except one from Foo-Bar is there. That means that there's possibly some path independence there so I would have to make sure I install modules in the right order to recreate the installation.&lt;/p&gt;

&lt;p&gt;If the module installation order matters, I think that might rule out creating a Task::* distribution, which can't guarantee the installation order, I think. A Bundle::* might be able to do it though.&lt;/p&gt;

&lt;p&gt;So, you think that's the end of it? Think about &lt;code&gt;configure_requires&lt;/code&gt; and &lt;code&gt;build_requires&lt;/code&gt;. Anything those need to be in the MiniCPAN too, even if they aren't in the installation. You have the option of not permanently installing those modules, so you might not see them in the analysis. Even when I get a list of distributions, I then have to check their dependencies to see if there's anything extra I need to add.&lt;/p&gt;

&lt;p&gt;So, not so bad.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/YH6bWKvWDKs" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/03/recreating-a-perl-installation-with-mycpan.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Who Are the Perl 5 Core Docs For?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/sjYZ2jXnVms/who-are-the-perl-5-core-docs-for.html" />
		<id>tag:blog.urth.org,2011://2.168</id>
		<updated>2011-03-16T20:13:57+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I've been spending a fair bit of time working on Perl 5 core documentation. I started by editing and reorganizing some of the documents related to core hacking. This update will be in 5.14, due to be released in April. I'm also working on replacing the existing OO tutorials and updating the OO reference docs, though this won't make it into the 5.14 release.&lt;/p&gt;

&lt;p&gt;There's been a lot of discussion on my OO doc changes, some of it useful, some of it useless, and some of it very rude (welcome to p5p!). Many of the people in the discussion don't have a clear vision of who the docs are for. Without that vision, it's really not possible to say whether a particular piece of documentation is good or not. A piece of documentation has to be good &lt;em&gt;for a particular audience&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There's a number of audiences for the Perl 5 core docs, and they fall along several axes. Here are the axes I've identified.&lt;/p&gt;

&lt;h2&gt;Newbies vs experienced users&lt;/h2&gt;

&lt;p&gt;Newbie-ness is about being new &lt;em&gt;to a particular concept&lt;/em&gt;. You could be an experienced Perl user and still be new to OO programming in general, or new to OO in Perl.&lt;/p&gt;

&lt;p&gt;For my OO docs, I'm writing for two audiences. First, I'm writing for people who are learning OO. That's why the document starts with a general introduction to OO concepts. Second, I'm writing for people who want to learn more about how to do OO in Perl 5. For those people, the tutorial points them at several good OO systems on CPAN.&lt;/p&gt;

&lt;p&gt;I'm &lt;em&gt;not&lt;/em&gt; writing for people who already know Perl 5 OO and want to learn more, that's what the perlobj document is for.&lt;/p&gt;

&lt;p&gt;From the discussion on p5p, I can see that many people there have trouble understanding how newbies think. I like how chromatic addresses these issues in a &lt;a href="http://www.modernperlbooks.com/mt/2011/03/on-the-hostility-of-user-documentation.html"&gt;couple&lt;/a&gt; of his &lt;a href="http://www.modernperlbooks.com/mt/2011/03/why-modern-perl-teaches-oo-with-moose.html"&gt;blog posts&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;How the reader uses Perl&lt;/h2&gt;

&lt;p&gt;Perl is used for lots of different tasks, including sysadmin scripts, glue code in a mostly non-Perl environment, full app development, etc.&lt;/p&gt;

&lt;p&gt;Ideally, we'd have tutorial documents that are appropriate for each of these areas. I think the OO tutorial is most likely to be of interest to people writing full Perl applications. If you're just whipping up some glue code, OO is probably overkill.&lt;/p&gt;

&lt;p&gt;It would also be great to see some job-focused tutorials, like "Basic Perl Concepts for Sysadmins" or "Intro to Web Dev in Perl 5". Yes, I know there are books on these topics, but having at least some pointers to modules/books/websites in the core docs is useful.&lt;/p&gt;

&lt;h2&gt;Constraints on the reader's coding&lt;/h2&gt;

&lt;p&gt;If you're doing green field development, you have the luxury of using the latest and greatest stuff on CPAN. If you're maintaining a 10-year old Perl web app (I'm so sorry), then you probably don't. Some readers may not be able to install CPAN modules. Some readers are stuck with in house web frameworks.&lt;/p&gt;

&lt;p&gt;People stuck with old code need good reference docs that explain all the weird shit they come across. People writing new code should be guided to modern best practices. They don't need to know that you can implement Perl 5 OO by hand using array references, ties, and lvalue methods&lt;/p&gt;

&lt;p&gt;My OO tutorial is obviously aimed toward the green field developers. It's all about pointing them at good options on CPAN. As I revise perlobj, I'm trying to make sure that I cover every nook and cranny so that the poor developer stuck with (2001 Perl OO code can understand what they're maintaining.&lt;/p&gt;

&lt;p&gt;(Sadly, that's probably &lt;em&gt;my&lt;/em&gt; code they're stuck with.)&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I'd like to see more explicit discussion of who the intended readers are when we discuss core documentation. Any major doc revision should start with a vision of who the docs are for.&lt;/p&gt;

&lt;p&gt;There's probably other axes we can think about when writing documentation as well. Comments on this are most welcome.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/sjYZ2jXnVms" height="1" width="1"/&gt;</content>
		<author>
			<name>Dave Rolsky</name>
			<uri>http://blog.urth.org/</uri>
		</author>
		<source>
			<title type="html">House Absolute(ly Pointless)</title>
			<subtitle type="html">Unsubstantiated Opinions and Meaningless Blather</subtitle>
			<link rel="self" href="http://blog.urth.org/atom.xml" />
			<id>tag:blog.urth.org,2008-08-19://2</id>
		</source>
	<feedburner:origLink>http://blog.urth.org/2011/03/who-are-the-perl-5-core-docs-for.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Facebook Authentication with Perl and Facebook::Graph</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/pqsKcK_cS3Y/facebook-authentication-with-perl-and-facebookgraph.html" />
		<id>tag:www.perl.com,2011:/pub//2.1944</id>
		<updated>2011-03-15T18:36:19+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Basic integration of software and web sites with Facebook, Twitter, and
other social networking systems has become a litmus test for business these
days. Depending on the software or site you might need to fetch some data, make
a post, create events, upload photos, or use one or more of the social
networking sites as a single sign-on system. This series will show you how to
do exactly those things on Facebook using &lt;a href="http://search.cpan.org/perldoc?Facebook::Graph"&gt;Facebook::Graph&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This first article starts small by using Facebook as an authentication
mechanism. There are certainly simpler things to do, but this is one of the
more popular things people want to be able to do.  Before you can do anything,
you need to have a Facebook account. Then &lt;a href="http://apps.facebook.com/developer"&gt;register your new application&lt;/a&gt;
(Figure 1).&lt;/p&gt;

&lt;p&gt;&lt;img alt="registering a Facebook application" height="209" src="http://www.perl.com/pub/2011/03/15/register_app.png" width="696" /&gt;&lt;br /&gt;&lt;em&gt;Figure 1. Registering a Facebook
    application.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then fill out the "Web Site" section of your new app (Figure 2).&lt;/p&gt;

&lt;p&gt;&lt;img alt="registering your application's web site" height="224" src="http://www.perl.com/pub/2011/03/15/register_website.png" width="740" /&gt;&lt;br /&gt;&lt;em&gt;Figure 2. Registering your
    application's web site.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Registering an application with Facebook gives you a unique identifier for
your application as well as a secret key. This allows your app to communicate
with Facebook and use its API. Without it, you can't do much (besides screen
scraping and hoping).&lt;/p&gt;

&lt;p&gt;Now you're ready to start creating your app. I've used the &lt;a href="http://perldancer.org/"&gt;Dancer web app framework&lt;/a&gt;, but feel free
to use your favorite.  Start with a basic Dancer module:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;package MyFacebook;

use strict;
use Dancer ':syntax';
use Facebook::Graph;

get '/' =&amp;gt; sub {
  template 'home.tt'
};

true;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's sufficient to give the app a home page. The next step is to force
people to log in if they haven't already:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;before sub {
    if (request-&amp;gt;path_info !~ m{^/facebook}) {
        if (session-&amp;gt;{access_token} eq '') {
            request-&amp;gt;path_info('/facebook/login')
        }
    }
};&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This little bit of Dancer magic says that if the path is not
&lt;code&gt;/facebook&lt;/code&gt; and the user has no access_token attached to their
session, then redirect them to our login page. Speaking of our login page,
create that now:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;get '/facebook/login' =&amp;gt; sub {
    my $fb = Facebook::Graph-&amp;gt;new( config-&amp;gt;{facebook} );
    redirect $fb-&amp;gt;authorize-&amp;gt;uri_as_string;
};&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This creates a page that will redirect the user to Facebook, and ask them if
it's ok for the app to use their basic Facebook information. That code passes
&lt;code&gt;Facebook::Graph&lt;/code&gt; some configuration information, so remember to add
a section to Dancer's &lt;em&gt;config.yml&lt;/em&gt; to keep track of that:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;facebook:
    postback: "http://www.madmongers.org/facebook/postback/"
    app_id: "XXXXXXXXXXXXXXXX"
    secret: "XXXXXXXXXXXXXXXXXXXXXXXXXXX"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Remember, you get the app_id and the secret from Facebook's developer
application after you create the app. The postback tells Facebook where to post
back to after the user has granted the app authorization. Note that Facebook
requires a slash (/) on the end of the URL for the postback. With Facebook
ready to post to a URL, it's time to create it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;get '/facebook/postback/' =&amp;gt; sub {
    my $authorization_code = params-&amp;gt;{code};
    my $fb                 = Facebook::Graph-&amp;gt;new( config-&amp;gt;{facebook} );

    $fb-&amp;gt;request_access_token($authorization_code);
    session access_token =&amp;gt; $fb-&amp;gt;access_token;
    redirect '/';
};&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;NOTE: I know it's called a postback, but for whatever reason Facebook does
the &lt;code&gt;POST&lt;/code&gt; as a &lt;code&gt;GET&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Facebook's postback passes an authorization code—a sort of temporary
password. Use that code to ask Facebook for an access token (like a session
id). An access token allows you to request information from Facebook &lt;em&gt;on
    behalf of the user&lt;/em&gt;, so all of those steps are, essentially, your app
logging in to Facebook.  However, unless you store that access token to use
again in the future, the next request to Facebook will log you out.  Therefore,
the example shoves the access token into a Dancer session to store it for
future use before redirecting the user back to the front page of the site.&lt;/p&gt;

&lt;p&gt;NOTE: The access token we have will only last for two hours. After that, you
have to request it again.&lt;/p&gt;

&lt;p&gt;Now you can update the front page to include a little bit of information
from Facebook. Replace the existing front page with this one:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;get '/' =&amp;gt; sub {
    my $fb = Facebook::Graph-&amp;gt;new( config-&amp;gt;{facebook} );

    $fb-&amp;gt;access_token(session-&amp;gt;{access_token});

    my $response = $fb-&amp;gt;query-&amp;gt;find('me')-&amp;gt;request;
    my $user     = $response-&amp;gt;as_hashref;
    template 'home.tt', { name =&amp;gt; $user-&amp;gt;{name} }
};&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This code fetches the access token back out of the session and uses it to
find out some information about the current user. It passes the name of that
user into the home template as a template parameter so that the home page can
display the user's name. (How do you know what to request and what responses
you get? See the &lt;a href="http://developers.facebook.com/docs/reference/api/"&gt;Facebook Graph
    API documentation&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;While there is a bit of a trick to using Facebook as an authentication
system, it's not terribly difficult.  Stay tuned for Part II where I'll show
you how to post something to a user's wall.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/pqsKcK_cS3Y" height="1" width="1"/&gt;</content>
		<author>
			<name>JT Smith</name>
			<uri>http://www.perl.com/pub/</uri>
		</author>
		<source>
			<title type="html">Perl.com</title>
			<link rel="self" href="http://www.perl.com/pub/atom.xml" />
			<id>tag:www.perl.com,2010-07-21:/pub//2</id>
		</source>
	<feedburner:origLink>http://www.perl.com/pub/2011/03/facebook-authentication-with-perl-and-facebookgraph.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Metabase SSL Certificate</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/XowiQ-_AiH8/metabase-ssl-certificate.html" />
		<id>tag:blogs.perl.org,2011:/users/cpan_testers//73.1559</id>
		<updated>2011-03-15T14:08:29+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;For anyone who may have been affacted by the upgrade to LWP, the situation should now be resolved. David has put in place a 3rd party verified SSL certificate on the Metabase server, so all submissions should now be able to resolve certificate authenticity.&lt;/p&gt;
&lt;p&gt;If you have implemented any short term fixes, you may need to remove them, before accepting the new certificate.&lt;/p&gt;
&lt;p&gt;We now return you to your scheduled programming :)&lt;/p&gt;
&lt;p&gt;Cross-posted from the &lt;a href="http://blog.cpantesters.org/diary/109"&gt;CPAN Testers Blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/XowiQ-_AiH8" height="1" width="1"/&gt;</content>
		<author>
			<name>CPAN Testers</name>
			<uri>http://blogs.perl.org/users/cpan_testers/</uri>
		</author>
		<source>
			<title type="html">CPAN Testers</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/cpan_testers/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/cpan_testers//73</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/cpan_testers/2011/03/metabase-ssl-certificate.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Fixed CPAN Testers reporting with LWP 6</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/fdBpiTYGoKI/" />
		<id>http://www.dagolden.com/?p=1391</id>
		<updated>2011-03-15T13:19:27+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;As &lt;a href="http://blog.cpantesters.org/diary/108"&gt;Barbie reported&lt;/a&gt;, CPAN Testers broke under&lt;a href="http://p3rl.org/LWP"&gt; LWP version 6&lt;/a&gt;, as this version of LWP now defaults to rejecting unverifiable SSL connection (e.g. self-signed certificates).  That meant that CPAN Testers upgrading their LWP could no longer submit reports (at least via https).  The quick and obvious solution was to buy an SSL certificate and that's now done.  If you visit &lt;a href="https://metabase.cpantesters.org/"&gt;https://metabase.cpantesters.org/&lt;/a&gt;, you can see the new certificate in action.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/fdBpiTYGoKI" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1391/fixed-cpan-testers-reporting-with-lwp-6/</feedburner:origLink></entry>

	<entry>
		<title type="html">Mangling Exchange GUIDs</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/ZzXBw9XOA1Y/mangling-exchange-guids.html" />
		<id>tag:blogs.perl.org,2011:/users/bingos//129.1555</id>
		<updated>2011-03-14T13:50:44+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I spent a good few hours today attempting to use the &lt;a href="http://msdn.microsoft.com/en-us/library/aa144765%28v=exchg.65%29.aspx"&gt;&lt;em&gt;MailboxGUID&lt;/em&gt;&lt;/a&gt; returned from the WMI Exchange provider to search for the associated Active Directory account, using the &lt;a href="http://technet.microsoft.com/en-us/library/aa996437%28EXCHG.65%29.aspx"&gt;&lt;em&gt;msExchMailboxGuid&lt;/em&gt;&lt;/a&gt; attribute.&lt;/p&gt;

&lt;p&gt;Here's two functions I came up with in the end. One to convert &lt;em&gt;MailboxGUID&lt;/em&gt; to something that a search on &lt;em&gt;msExchMailboxGuid&lt;/em&gt; will like:&lt;/p&gt;

&lt;pre&gt;sub exch_to_ad {
  my $guid = shift;
  $guid =~ s/[\{\}]+//g;
  my $string = '';
  my $count = 0;
  foreach my $part ( split /\-/, $guid ) {
    $count++;
    if ( $count &amp;gt;= 4 ) {
      $string .= "\\$_" for unpack "(A2)*", $part;
    }
    else {
      $string .= "\\$_" for reverse unpack "(A2)*", $part;
    }
  }
  return $string;
}
&lt;/pre&gt;

&lt;p&gt;And another to take a &lt;em&gt;msExchMailboxGuid&lt;/em&gt; field, which is a byte array, and convert it to a &lt;em&gt;MailboxGUID&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;sub ad_to_exch {
  my $guid = shift;
  my @vals = map { sprintf("%.2X", ord $_) } unpack "(a1)*", $guid;
  my $string = '{';
  $string .= join '', @vals[3,2,1,0], '-', @vals[5,4], '-', 
     @vals[7,6], '-', @vals[8,9], '-', @vals[10..$#vals], '}';
  return $string;
}
&lt;/pre&gt;

&lt;p&gt;Hopefully this should save other people some time.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/ZzXBw9XOA1Y" height="1" width="1"/&gt;</content>
		<author>
			<name>bingos</name>
			<uri>http://blogs.perl.org/users/bingos/</uri>
		</author>
		<source>
			<title type="html">bingos</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/bingos/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/bingos//129</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/bingos/2011/03/mangling-exchange-guids.html</feedburner:origLink></entry>

	<entry>
		<title type="html">LWP v6.00 &amp;amp; Self-signed Certificates.</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Uq6GLpRdH_Y/lwp-v600-self-signed-certificates.html" />
		<id>tag:blogs.perl.org,2011:/users/cpan_testers//73.1553</id>
		<updated>2011-03-14T09:08:41+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;If you're an existing CPAN Tester, and have recently upgraded LWP, you may have noticed that your report submissions have been failing. The reason being that LWP::UserAgent now requires that any https protocol request, needs to verify the certificate associated with it. With the Metabase having a self-signed certificate, this doesn't provide enough verification and so fails.&lt;/p&gt;
&lt;p&gt;In the short term if you don't need to update LWP (libwww-perl), refrain from doing so for the time being. For those that have already done so, or have recently built test machines from a clean starting point, you will either need to wait until we have put a long term solution in place, or may wish to look at a solution from &lt;em&gt;Douglas Wilson&lt;/em&gt;. Douglas has created a "hypothetical distribution", which you can see via &lt;a href="https://gist.github.com/867743"&gt;a gist&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Others have also blogged about the problem, and have suggests and insights as to how to overcome this for the short term:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://somethingdoug.com/thoughts/2011/03/13/cpanreporter-transportmetabase-and-libwww-lwp-6/"&gt;CPAN::Reporter, Transport::Metabase, and libwww-lwp 6&lt;/a&gt; by Douglas Wilson&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/users/randy_stauner/2011/03/cpanreporter-fails-to-send-through-metabase-with-new-lwp-6.html"&gt;CPAN::Reporter fails to send through Metabase with new LWP 6&lt;/a&gt; by Randy Stauner&lt;/li&gt;
&lt;li&gt;&lt;a href="http://colinnewell.wordpress.com/2011/03/11/ssl-host-checking-and-lwpuseragent"&gt;SSL host checking and LWP::UserAgent&lt;/a&gt; by Colin Newell&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will have more details of the longer term solution soon.&lt;/p&gt;            
&lt;p&gt;Cross-posted from the &lt;a href="http://blog.cpantesters.org/diary/108"&gt;CPAN Testers Blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Uq6GLpRdH_Y" height="1" width="1"/&gt;</content>
		<author>
			<name>CPAN Testers</name>
			<uri>http://blogs.perl.org/users/cpan_testers/</uri>
		</author>
		<source>
			<title type="html">CPAN Testers</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/cpan_testers/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/cpan_testers//73</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/cpan_testers/2011/03/lwp-v600-self-signed-certificates.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Dancer release codename "The Schwern Cometh"</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/VorsRQ6UuR4/dancer-release-codename-the-schwern-cometh.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1552</id>
		<updated>2011-03-14T08:32:15+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;We've decided we're gonna start releasing Dancer under codenames that relate to people who've worked on the release.&lt;/p&gt;

&lt;p&gt;This release (1.3020) we've seen the continued (and blessed!) involvement of a one "Michael G. Schwern". To some of you he might just be a "mike" or "michael" (or perhaps "the schwern"), but none of us in the core knew Schwern personally before his involvement with Dancer, and this came as a very welcomed and pleasant surprise.&lt;/p&gt;

&lt;p&gt;Considering the storm of issues and pull requests done by Schwern, we decided the next version should be named after him, hence "The Schwern Cometh". :)&lt;/p&gt;

&lt;p&gt;The latest version is only a week-or-so of development but carries the following statistics:&lt;br /&gt;
&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;6 contributors&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;6 bug fixes&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;12 features and enhancements&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;10+ issues closed&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I really do see this as exceptional work. Other than Schwern I also want to thank Naveed Massjouni and Maurice Mengel for their contributions to this release (and any previous release!).&lt;/p&gt;

&lt;p&gt;In the near future we'll also unveil the most elaborate hooks subsystem in the micro web framework world. I already know whose names will be splashes on that release. :)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/VorsRQ6UuR4" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/03/dancer-release-codename-the-schwern-cometh.html</feedburner:origLink></entry>

	<entry>
		<title type="html">What Makes for a Perfect OO Tutorial Example?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/tbMYO6Y_AnE/what-makes-for-a-perfect-oo-tutorial-example.html" />
		<id>tag:blog.urth.org,2011://2.167</id>
		<updated>2011-03-13T22:33:55+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Recently I've been working on revising the Perl 5 core OO documentation,
starting with a new OO tutorial.&lt;/p&gt;

&lt;p&gt;My first draft used Person and Employee as my example classes, where Employee
is a subclass of Person. After I posted the first draft, several people
objected to these particular classes. I realized that I agreed with their
objections, but I wasn't able to come up with anything better.&lt;/p&gt;

&lt;p&gt;I brought this up on the #moose IRC channel, and we had a really interesting
discussion. Mostly it consisted of people coming up with various ideas and me
shooting them down. The rejected suggestions included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Person/Employee&lt;/li&gt;
&lt;li&gt;Number/Integer&lt;/li&gt;
&lt;li&gt;Real/Complex (numbers)&lt;/li&gt;
&lt;li&gt;Window/ScrollableWindow&lt;/li&gt;
&lt;li&gt;Animal/Moose&lt;/li&gt;
&lt;li&gt;CD/Single&lt;/li&gt;
&lt;li&gt;Assessment/Survey (in the context of teaching assessments)&lt;/li&gt;
&lt;li&gt;Others I'm probably forgetting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's go through my criteria and talk about why each of these examples was
rejected.&lt;/p&gt;

&lt;h2&gt;No Abstract Base Classes&lt;/h2&gt;

&lt;p&gt;The base class must be meaningful on its own. It must be something you might
instantiate. This ruled out Animal/Moose, we don't want instantiate a generic
Animal. Our understanding of animals is always more specific. At the very
least, we recognize them as Birds, Mammals, Fish, and so on, if not as
specific species.&lt;/p&gt;

&lt;p&gt;Instead, Animal is really more of a role. In fact, thinking back to high
school biology, deciding whether something is an animal is based entirely on
its behavior (its interface).&lt;/p&gt;

&lt;p&gt;If the parent class is better as a role, the suggestion doesn't work.&lt;/p&gt;

&lt;p&gt;The other suggestions all passed this test.&lt;/p&gt;

&lt;h2&gt;Must Not Be Too Domain Specific&lt;/h2&gt;

&lt;p&gt;The example classes should not require domain knowledge to understand. The
Real/Complex and Assessment/Survey suggestions are clearly too domain
specific. The Window/ScrollableWindow suggestion may also fail this. Yes,
everyone knows that some windows scroll and some don't, but very few people
would know how that's implemented.&lt;/p&gt;

&lt;p&gt;The example needs to be something that any programmer can be expected to
understand.&lt;/p&gt;

&lt;h2&gt;Must Lend Itself to Example Methods&lt;/h2&gt;

&lt;p&gt;I need an example that lends itself well to writing small example methods. The
Window/ScrollableWindow suggestion fails this criterion. The actual
implementation of a windowing toolkit is quite complex, and &lt;em&gt;extremely&lt;/em&gt;
domain-specific.&lt;/p&gt;

&lt;h2&gt;The Subclass's Specialization Must Be Intrinsic to Its Nature&lt;/h2&gt;

&lt;p&gt;This one is best explained through an example that doesn't pass the test,
Person/Employee. Being a Person is intrinsic to the class. However, when a person
is an Employee, that's not really intrinsic to the Employee, it's just
something a Person does. A Person can also be a spouse, a parent, a child,
etc.&lt;/p&gt;

&lt;p&gt;In other words, these are all &lt;em&gt;roles&lt;/em&gt; that a Person plays. Clearly, this
example is better implemented through roles.&lt;/p&gt;

&lt;h2&gt;Must Not Be Useless&lt;/h2&gt;

&lt;p&gt;The classic shapes example used in so many books falls into this
category. It's really hard for me to imagine a program where I need to model
Ellipse and Circle classes. I suppose I might do this if I were writing MS
Paint.&lt;/p&gt;

&lt;p&gt;The shapes example is useful for illustrating some technical ideas, but it's
too abstract for a good tutorial.&lt;/p&gt;

&lt;h2&gt;Must Not Raise the Idea of Specialization By Constraint&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://c2.com/cgi/wiki?SpecializationByConstraint"&gt;Specialization by
constraint&lt;/a&gt; is an object
orientation concept defined by Chris Date and Hugh Darwen in their book &lt;a href="http://www.thethirdmanifesto.com/"&gt;&lt;em&gt;The
Third Manifesto&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is a complex idea perhaps best illustrated by an example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;my $number = Number-&amp;gt;new(3.9);
$number-&amp;gt;add(0.1);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Under the system proposed by Date and Darwen, the &lt;code&gt;$number&lt;/code&gt; object would
automatically become an Integer object when that is appropriate.&lt;/p&gt;

&lt;p&gt;This is a fascinating idea, but something that's best left out of a basic OO
tutorial.&lt;/p&gt;

&lt;p&gt;As an aside, if you're interested in DBMS theory and design, you should really
read &lt;em&gt;The Third Manifesto&lt;/em&gt;, which I think has now been renamed as &lt;em&gt;Databases,
Types and the Relational Model&lt;/em&gt; (their website is horrible and confusing).&lt;/p&gt;

&lt;h2&gt;The Subclass Should Add Attributes and Behavior&lt;/h2&gt;

&lt;p&gt;The Number/Integer suggestion fails in this regard because the subclass &lt;em&gt;takes
away&lt;/em&gt; an attribute.&lt;/p&gt;

&lt;h2&gt;The Subclass Should Not Be Better As an Attribute&lt;/h2&gt;

&lt;p&gt;The CD/Single suggestion fails this criterion, since there's really no
behavior or attribute difference between a CD and a Single. Instead,
"single-ness" is better modeled as a simple attribute on a CD class.&lt;/p&gt;

&lt;h2&gt;The Winner&lt;/h2&gt;

&lt;p&gt;So after a lot of discussion, Jesse Luehrs (doy) suggested
File/File::MP3. This example satisfies (almost) every criteria.&lt;/p&gt;

&lt;p&gt;The File/File::MP3 example works really well in a number of ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The base class is not abstract.&lt;/li&gt;
&lt;li&gt;A generic File makes perfect sense.&lt;/li&gt;
&lt;li&gt;We can expect every programmer to understand the nature of the classes.&lt;/li&gt;
&lt;li&gt;It lends itself well to simple example methods.&lt;/li&gt;
&lt;li&gt;The subclass's nature is intrinsic. Files have one specific type, or we don't know their type. Yes, I know it's possible to have a file that satisfies multiple format requirements, but that's a bizarre special case.&lt;/li&gt;
&lt;li&gt;It is clearly not useless, and is in fact something you might find yourself writing in real world code.&lt;/li&gt;
&lt;li&gt;The subclass adds behavior (track title attribute, &lt;code&gt;play()&lt;/code&gt; method, etc.).&lt;/li&gt;
&lt;li&gt;The subclass is clearly not better modeled as an attribute.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only negative is that this example does bring up the idea of
specialization by constraint. In a real world implementation, you might have a
File factory that looked at the file's contents and returned an appropriate
File subclass.&lt;/p&gt;

&lt;p&gt;There's no perfect example, but this one is significantly better than
Person/Employee, and it's what I'll be using in my work on the core docs.&lt;/p&gt;

&lt;p&gt;Thanks, Jesse!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/tbMYO6Y_AnE" height="1" width="1"/&gt;</content>
		<author>
			<name>Dave Rolsky</name>
			<uri>http://blog.urth.org/</uri>
		</author>
		<source>
			<title type="html">House Absolute(ly Pointless)</title>
			<subtitle type="html">Unsubstantiated Opinions and Meaningless Blather</subtitle>
			<link rel="self" href="http://blog.urth.org/atom.xml" />
			<id>tag:blog.urth.org,2008-08-19://2</id>
		</source>
	<feedburner:origLink>http://blog.urth.org/2011/03/what-makes-for-a-perfect-oo-tutorial-example.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Fedora and Centos CPAN RPMs</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/M4k7NiOR6SY/" />
		<id>http://perlhacks.com/?p=249</id>
		<updated>2011-03-13T17:15:50+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Today I’ve updated my spreadsheets of the CPAN modules that are available as RPMs from various repositories for &lt;a href="https://spreadsheets.google.com/pub?hl=en_GB&amp;amp;hl=en_GB&amp;amp;key=0AuW8ZdOQ_GW1dFZvU2xhWVUxU0dvdnd3alYwZnF0OVE&amp;amp;output=html"&gt;Fedora&lt;/a&gt; and &lt;a href="https://spreadsheets.google.com/pub?hl=en_GB&amp;amp;hl=en_GB&amp;amp;key=0AuW8ZdOQ_GW1dGVic2x4akhRY1lWRzRCUjBxSE9lTHc&amp;amp;output=html"&gt;Centos&lt;/a&gt;. I see that in many cases the “official” repos are now more up to date than &lt;a href="http://rpm.mag-sol.com/"&gt;my own repo&lt;/a&gt; (which I originally set up because the official repos are sometimes out of date).&lt;/p&gt;
&lt;p&gt;This is all a precursor to doing a lot more work on my repo. I need to know which RPMs are being kept up to date by other people so that I can ignore those modules.&lt;/p&gt;
&lt;p&gt;But I thought that other people might find the data useful or interesting.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/M4k7NiOR6SY" height="1" width="1"/&gt;</content>
		<author>
			<name>Dave Cross</name>
			<uri>http://perlhacks.com</uri>
		</author>
		<source>
			<title type="html">Perl Hacks</title>
			<subtitle type="html">Just another Perl Hacker's blog</subtitle>
			<link rel="self" href="http://perlhacks.com/feed/" />
			<id>http://perlhacks.com</id>
		</source>
	<feedburner:origLink>http://perlhacks.com/2011/03/fedora-and-centos-cpan-rpms/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Parallel make for perlbrew</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/yLB21X-8vok/" />
		<id>http://www.dagolden.com/?p=1384</id>
		<updated>2011-03-12T20:52:12+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;If you've ever built &lt;a href="http://perl.org/"&gt;Perl&lt;/a&gt; from scratch, you probably know how much faster it can be to make and test in parallel.  On the other hand, if you use &lt;a href="http://p3rl.org/App::perlbrew"&gt;perlbrew&lt;/a&gt; on a multi-core processor, you probably already figured out that it wasn't using all your processors.&lt;/p&gt;
&lt;p&gt;I was very pleased to discover an undocumented '-j' option in perlbrew 0.17 that switches on parallel make:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;$ perlbrew -j 5 install perl-5.12.3
&lt;/pre&gt;
&lt;p&gt;Currently, this only runs make in parallel, but I've submitted a patch to make it switch on parallel testing as well (for recent Perl's that support it).  The patch also documents the option.&lt;/p&gt;
&lt;p&gt;I hope the new version will be out soon, but if you have 0.17, you can already start using '-j' for a small speed boost.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/yLB21X-8vok" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1384/parallel-make-for-perlbrew/</feedburner:origLink></entry>

	<entry>
		<title type="html">A rough draft of Learning Perl 6th Edition</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/INvDNU876KE/a-rough-draft-of-learning-perl-6th-edition.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1547</id>
		<updated>2011-03-12T13:37:17+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;We're almost finished with the updates to &lt;a href="http://oreilly.com/catalog/9781449303587/"&gt;Learning Perl, 6th Edition&lt;/a&gt;. The big changes for this edition are beginner-appropriate features up to Perl 5.14 and a lot more Unicode. I've keep keeping a diary of my progress at &lt;a href="http://www.learning-perl.com/"&gt;www.learning-perl.com&lt;/a&gt;. Now that we are mostly done, it's time for some tech reviewers to catch any lies (outright or by omission) that we've told. If you've done that for me before and would like to do it again, let me know and we'll make the proper arrangements.&lt;/p&gt;

&lt;p&gt;In previous editions, we've also let let watch the progress of the book by reading the sources as we worked on them. Since then, we converted to the O'Reilly DocBook system that allows us to turn our work into PDF files that look very close to what the final book will present. Those PDF files are available to subscribers to &lt;a href="http://www.theperlreview.com"&gt;The Perl Review&lt;/a&gt; in the &lt;a href="http://www.theperlreview.com/Subscribers/InProgress"&gt;Works in Progress section&lt;/a&gt;. Not only can you see the book as it stands now, in the middle of editing warts and all, but you can give us feedback before the book actually commits to dead trees.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/INvDNU876KE" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/03/a-rough-draft-of-learning-perl-6th-edition.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">London.pm Tech Meeting</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/0WXZnyI4FaE/" />
		<id>http://perlhacks.com/?p=241</id>
		<updated>2011-03-12T08:55:36+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;On Thursday we had the first London.pm tech meeting for a rather long time. But it was well worth the wait. We were at &lt;a href="http://www.net-a-porter.com/"&gt;Net-A-Porter&lt;/a&gt;‘s very nice offices above the Westfield shopping centre. There were four interesting talks. Pete Sergeant talked about &lt;a href="http://www.slideshare.net/petersergeant/highlevel-web-testing"&gt;High Level Web Testing&lt;/a&gt;, Zefram explained the New Extensibility Features Coming in Perl 5.14, Dave Hodgkinson talked about using &lt;a href="http://www.davehodgkinson.com/blog/2011/03/hudson-and-selenium-experiences/"&gt;Perl, Hudson and Selenium&lt;/a&gt; together and finally James Laver introduced us to his form processing tool, &lt;a href="http://jameslaver.com/presentations/spark/"&gt;Spark&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What impressed me most about the evening was the size of the turn-out. I’m told that eighty people signed up for the meeting and it seemed that most of them turned up. Perl is certainly thriving in London. In fact it seems that there are a number of companies who are struggling to find all of the Perl programmers that they need. A couple of the speakers ended with “we’re hiring” adverts.&lt;/p&gt;
&lt;p&gt;And from a couple of conversations I had during the evening, it seems that the scarcity of good Perl in London is starting to push Perl rates up. Seems that it’s a pretty good time to be a Perl programming in London.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/0WXZnyI4FaE" height="1" width="1"/&gt;</content>
		<author>
			<name>Dave Cross</name>
			<uri>http://perlhacks.com</uri>
		</author>
		<source>
			<title type="html">Perl Hacks</title>
			<subtitle type="html">Just another Perl Hacker's blog</subtitle>
			<link rel="self" href="http://perlhacks.com/feed/" />
			<id>http://perlhacks.com</id>
		</source>
	<feedburner:origLink>http://perlhacks.com/2011/03/london-pm-tech-meeting/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-us">low-tech combat and character tracker</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/1EbevjOmhoc/1876" />
		<id>http://rjbs.manxome.org/rubric/entry/1876</id>
		<updated>2011-03-11T02:12:49+00:00</updated>
		<content type="html">&lt;p&gt;I see lots of people talk about using software on their laptops or smartphones
for tracking combat in D&amp;amp;D.  Mostly, people talk about tracking initiative.
This always struck me as weird:  I just write down everybody in order on a
scrap of paper and throw it out later.&lt;/p&gt;

&lt;p&gt;I have seen some tools that show you everyone's defenses and hit points, and
that's good, but the programs I've seen generally stink.  I was always happy
with my scrap of paper with "Orc - 12" and so on.  At the most recent game,
though, I think I must've said, "What's your reflex defense, again?" about two
dozen times.  I've been trying to find ways to avoid combat getting boring and
repetitive, and eliminating that question seemed like a good way.  I'm also
rereading the chapters on the fundamentals in DMG and DMG2, and making quick
references was encouraged there, too.&lt;/p&gt;

&lt;p&gt;The web character builder prints out a little quick ref panel, but it had some
things I didn't want and was missing some things that I did.  The last thing I
wanted was having to deal with visual clutter while trying to speed up a
complex combat.  I figured it would be easy to make my own cards, and it was.&lt;/p&gt;

&lt;p&gt;I used OmniGraffle to make a roughly 2" x 6" form, and printed it, two up, on
4x6 glossy photo stock that I had sitting around.  After a few iterations, I
was happy with the result.  I bought a small magnetic whiteboard.  I'm going to
keep the character cards on the board and organize them by initiative.  Monster
notes can be scribbled onto a 3x5 card and put into the initiative order, too.
The exposed whiteboard surface is useful for noting who is bloodied, stunned,
or whatever else.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/rjbs/5516421576/" title="new D&amp;amp;D combat tracking technology by rjbs, on Flickr"&gt;&lt;img alt="new D&amp;amp;D combat tracking technology" height="500" src="http://farm6.static.flickr.com/5139/5516421576_daa3368772.jpg" width="374" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've ordered new magnetic clips to hold the cards so that I can move them with
one hand.  I think this is going to be a nice improvement, and I look forward
to finding out whether or not I'm right.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/1EbevjOmhoc" height="1" width="1"/&gt;</content>
		<author>
			<name>rjbs</name>
			<uri>http://rjbs.manxome.org/rubric</uri>
		</author>
		<source>
			<title type="html">Rubric: rjbs's entries with a body</title>
			<subtitle type="html">Rubric</subtitle>
			<link rel="self" href="http://rjbs.manxome.org/rubric/entries/user/rjbs/has_body/1?format=rss" />
			<id>http://rjbs.manxome.org/rubric</id>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1876</feedburner:origLink></entry>

	<entry>
		<title type="html">Mojolicious 1.12: IPv6 goodness</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/qnnCxp5Oxa4/mojolicious-112-ipv6-goodness" />
		<id>http://blog.kraih.com/mojolicious-112-ipv6-goodness</id>
		<updated>2011-03-10T10:10:00+00:00</updated>
		<content type="html">&lt;p&gt;
	&lt;/p&gt;&lt;p&gt;I'm very happy to announce &lt;a href="http://mojolicio.us"&gt;Mojolicious&lt;/a&gt; 1.12, the latest maintenance release in the "&lt;span style="font-size: 12px; color: #424037; line-height: 21px;"&gt;Smiling Cat Face With Heart-Shaped Eyes&lt;/span&gt;" series. And which in preparation for the &lt;a href="http://isoc.org/wp/worldipv6day/"&gt;World IPv6 Day&lt;/a&gt; later this year, is bringing back full IPv6 support. All you need is a recent Perl and the excellent &lt;a href="http://search.cpan.org/dist/IO-Socket-IP/lib/IO/Socket/IP.pm"&gt;IO::Socket::IP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% ./myapp.pl daemon --listen http://[::1]:3000&lt;/div&gt;&lt;div class="line" id="LC2"&gt;Thu Mar 10 11:26:59 2011 info Mojo::Server::Daemon:316 [1576]: Server listening (http://[::1]:3000)&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Config files come in many flavors, to make adding new formats trivial we've built a very minimalistic and Perl-ish config plugin that can be easily extended with more advanced parsers like &lt;a href="http://mojolicio.us/perldoc?Mojolicious/Plugin/JsonConfig"&gt;JSON&lt;/a&gt; or &lt;a href="http://search.cpan.org/dist/Mojolicious-Plugin-YamlConfig/lib/Mojolicious/Plugin/YamlConfig.pm"&gt;YAML&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="data type-perl"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;span id="L15" rel="#l15"&gt;15&lt;/span&gt;
&lt;span id="L16" rel="#l16"&gt;16&lt;/span&gt;
&lt;span id="L17" rel="#l17"&gt;17&lt;/span&gt;
&lt;span id="L18" rel="#l18"&gt;18&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;# myapp.conf&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  &lt;span class="n"&gt;foo&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;  &lt;span class="n"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'baz'&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c1"&gt;# myapp.pl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::&lt;/span&gt;&lt;span class="n"&gt;Lite&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="n"&gt;plugin&lt;/span&gt; &lt;span class="s"&gt;'config'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s"&gt;'/'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'root'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="bp"&gt;__DATA__&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="nv"&gt;@@&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="n"&gt;Foo:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;config&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And i'm sure many of you will be happy to hear that the experimental status has finally been removed from &lt;a href="http://mojolicio.us/perldoc?Mojo/Server/Hypnotoad"&gt;Hypnotoad&lt;/a&gt; and the &lt;a href="http://mojolicio.us/perldoc?Mojolicious/Plugin/TagHelpers"&gt;TagHelper plugin&lt;/a&gt;, so you can use both in good conscience for new projects from now on.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="data type-plain"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&amp;lt;%= form_for login =&amp;gt; begin %&amp;gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;  Name:&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  &amp;lt;%= text_field 'name' %&amp;gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;  Password:&lt;/div&gt;&lt;div class="line" id="LC5"&gt;  &amp;lt;%= password_field 'password' %&amp;gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;  &amp;lt;%= submit_button %&amp;gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;lt;% end %&amp;gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I'm also making good progress on the "full-stack plugin" and there should be some exciting news coming up during the next few weeks, stay tuned. ;)&lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.kraih.com/mojolicious-112-ipv6-goodness"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.kraih.com/mojolicious-112-ipv6-goodness#comment"&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/qnnCxp5Oxa4" height="1" width="1"/&gt;</content>
		<author>
			<name>Sebastian Riedel</name>
			<uri>http://blog.kraih.com</uri>
		</author>
		<source>
			<title type="html">Sebastian Riedel about Perl and the Web</title>
			<subtitle type="html">Most recent posts at Sebastian Riedel about Perl and the Web</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/kraih" />
			<id>http://blog.kraih.com</id>
		</source>
	<feedburner:origLink>http://blog.kraih.com/mojolicious-112-ipv6-goodness</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-US">CPAN Phishing</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/zRprR3NiBLg/cpan-phishing.html" />
		<id>http://log.perl.org/2011/03/cpan-phishing.html</id>
		<updated>2011-03-08T05:54:07+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;You may recently have received an email that looks like the one below.  In poor English, it asks for your "CPAN password" and birthday.  We're pretty sure that none of you would actually have replied, but if you did, you've been caught by a &lt;a href="http://www.google.com/search?q=phishing" target="_self"&gt;phishing&lt;/a&gt; attack.  Change your password ASAP!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We will never-ever-ever ask for your password via email.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our friends at &lt;a href="http://www.pobox.com/" target="_self"&gt;pobox.com&lt;/a&gt; have produced a great &lt;a href="http://blog.pobox.com/2010/07/all-about-spam-phish-food-for-thought.html" target="_self"&gt;summary&lt;/a&gt; of phishing.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;Comprehensive Perl Archive Network Support Desk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;ATTN:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;This is to inform you that we are carrying out a site upgrade, as a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;mailbox Subscriber, we are carrying out a (inactive email-accounts)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;Clean-up process to enable service upgrade efficiency.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;Please be informed that we will delete all mail accounts that are non&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;functioning. You are to provide your mail account details as&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;follows(This will confirm your Cpan mailbox Login/usage Frequency):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;*User name:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;*Password:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;*Date of birth:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;Any user who fails to send the above information will be regarded as an illegal&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;user and will Have his/her account deleted from our DATA BASE and we will not&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;be responsible for the loss Of your account.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;Thanks for using Cpan Email service as it is toward Serving you better&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new', courier; font-size: 8pt;"&gt;Copyright  © 2010 Comprehensive Perl Archive Network, Inc. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/zRprR3NiBLg" height="1" width="1"/&gt;</content>
		<author>
			<name>Robert</name>
			<uri>http://log.perl.org/</uri>
		</author>
		<source>
			<title type="html">Perl NOC</title>
			<subtitle type="html">the perl.org infrastructure weblog</subtitle>
			<link rel="self" href="http://log.perl.org/index.rdf" />
			<id>http://log.perl.org/</id>
		</source>
	<feedburner:origLink>http://log.perl.org/2011/03/cpan-phishing.html</feedburner:origLink></entry>

	<entry>
		<title type="html">What should be core in Perl 5.16?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/VmNhN1KIRhY/what-should-be-core-in-perl-516.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1532</id>
		<updated>2011-03-07T21:36:18+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;What are the Perl modules you immediately install when you get a new Perl? &lt;s&gt;Jesse Vincent, the Perl 5 pumpking, opened the door, albeit slightly, to possibly considering maybe thinking about provisionally expanding the Standard Library. Is that modally weak enough for you?&lt;/s&gt; (Jesse tells me I misread him, so, maybe the door is not open and never was).&lt;/p&gt;

&lt;p&gt;Larry designed Perl 5 to be extensible, which is another way of saying that he designed basic Perl 5 to be small. CPAN is great, but we also know that through various social and technical factors, mere mortals struggle with the idea of having to get their wheels, fenders, and mirrors separately once they buy a car. Distributions such as ActivePerl and Strawberry and popular partly because they come with the extra bits. Non-perl people with their fingers in the pie tend to think about those included parts differently than the "third-party" parts.&lt;/p&gt;

&lt;p&gt;Now, the trick is that many tasks have their own sets of modules. There is some overlap, but I bet that many areas have modules that only they use. Aristotle said somewhere recently (probably in comment) that there are at least five major application areas for Perl and that they have different needs and goals. Core Perl should try its best to satisfy everyone (although that doesn't mean it actually needs to satisfy everyone).&lt;/p&gt;

&lt;p&gt;You also have to consider that ever addition to core is another task on the maintainers to-do list. Recently, p5p have made great advances in managing dual-lived modules, but that still doesn't mean it's painless. Also, anything dual-lived needs its prereqs to be dual-lived. That can be a huge amount of extra work piled on a numerically-stable group of workers, as well as tickle down effects to dual-lived module maintainers. However, that shouldn't prevent us from at least daydreaming.&lt;/p&gt;

&lt;p&gt;I have my own set that I immediately install because they relate to the work I do, which is a lot of data discovery and organization. Just because I immediately install them doesn't imply I think they should be in core. If most people immediately install them, that's a different story:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DBI with the mysql, postgres, and sqlite drivers.
&lt;/li&gt;&lt;li&gt;LWP
&lt;/li&gt;&lt;li&gt;JSON modules
&lt;/li&gt;&lt;li&gt;XML::*, especially XML::Twig
&lt;/li&gt;&lt;li&gt;HTML::Parser and various subclasses
&lt;/li&gt;&lt;li&gt;WWW::Mechanize
&lt;/li&gt;&lt;li&gt;YAML::*
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;There are other things I don't use but I know will make Standard Perl much more useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Class::MOP - there is noise about making MOP part of "built-in" Perl. A boy can dream, after all.
&lt;/li&gt;&lt;li&gt;cpanminus - people like it and it solves most people's needs.
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;I'll update this list as I think about it more.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/VmNhN1KIRhY" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/03/what-should-be-core-in-perl-516.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Announcing Module::Build 0.3800</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/nIwB1sHx9n0/" />
		<id>http://www.dagolden.com/?p=1378</id>
		<updated>2011-03-07T11:33:11+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I'm pleased to announce the release of Module::Build 0.3800, available on a CPAN Mirror near you.&lt;/p&gt;
&lt;p&gt;The major enhancement since the 0.36XX series is support for CPAN Meta Spec version 2 files (MYMETA.json and META.json).  Also, if you haven't kept up with Module::Build, the 0.3607 release was nearly a year ago and there have been over 20 development releases, mostly fixing various bugs.  Here is an excerpt from the last year of Changes:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;0.3800 - Sat Mar  5 15:11:41 EST 2011

  Summary of major changes since 0.3624:

    [ENHANCEMENTS]

    - Generates META.json and MYMETA.json consistent with version 2 of the
      CPAN Meta Spec. [David Golden]

  Also in this release:

  [BUG FIXES]

  - Autogenerated documentation no longer includes private actions from
    Module::Build's own release subclass. [Report by Timothy Appnel,
    fix by David Golden]

0.37_06 - Mon Feb 28 21:43:31 EST 2011

  [BUG FIXES]

  - prerequisites with the empty string instead of a version are
    normalized to "0".  (RT#65909)

  [OTHER]

  - More Pod typo/link fixes [Hongwen Qiu]

0.37_05 - Sat Feb 19 20:43:23 EST 2011

  [BUG FIXES]

  - fixes failing ppm.t in perl core

  [OTHER]

  - Pod typo fixes [Hongwen Qiu]

0.37_04 - Wed Feb 16 15:27:21 EST 2011

  [OTHER]

  - moved scripts/ to bin/ for less confusing porting to bleadperl

0.37_03 - Wed Feb 16 09:54:05 EST 2011

  [BUG FIXES]

  - removed an irrelevant test in t/actions/installdeps.t that was causing
    failures on some Cygwin platforms

  [OTHER]

  - dropped configure_requires as some CPAN clients apparently get
    confused by having things in both configure_requires and requires

  - bumped Parse::CPAN::Meta build prereq to 1.4401

  - bumped CPAN::Meta prereq to 2.110420

  - Pod typo fixes [Hongwen Qiu]

0.37_02 - Mon Feb  7 21:05:30 EST 2011

  [BUG FIXES]

  - bumped CPAN::Meta prereq to 2.110390 to avoid a regression in 2.110360

0.37_01 - Thu Feb  3 03:44:38 EST 2011

  [ENHANCEMENTS]

  - Generates META.json and MYMETA.json consistent with version 2 of the
    CPAN Meta Spec. [David Golden]

  [BUG FIXES]

  - t/signature.t now uses a mocked Module::Signature; this should be
    more robust across platforms as it only needs to confirm that
    Module::Build is calling Module::Signature when expected

  [OTHER]

  - Added CPAN::Meta and Parse::CPAN::Meta to prerequisites and dropped
    CPAN::Meta::YAML

0.3624 - Thu Jan 27 11:38:39 EST 2011

  - Fixed pod2html directory bugs and fixed creation of spurious blib
    directory in core perl directory when running install.t (RT#63003)
    [Chris Williams]

0.3623 - Wed Jan 26 17:45:30 EST 2011

  - Fixed bugs involving bootstrapping configure_requires prerequisites
    on older CPANPLUS clients or for either CPAN/CPANPLUS when using
    the compatibility Makefile.PL

  - Added diagnostic output when configure_requires are missing for
    the benefit of users doing manual installation

0.3622 - Mon Jan 24 21:06:50 EST 2011

  - No changes from 0.36_21

0.36_21 - Fri Jan 21 11:01:28 EST 2011

  - Changed YAML::Tiny references to the new CPAN::Meta::YAML module
    instead, which is the YAML-variant that is going into the Perl core

0.36_20 - Fri Dec 10 15:36:03 EST 2010

  *** DEPRECATIONS ***

  - Module::Build::Version has been deprecated.  Module::Build now depends
    directly upon version.pm.  A pure-perl version has been bundled in inc/
    solely for bootstrapping in case configure_requires is not supported.
    M::B::Version remains as a wrapper around version.pm.

  - Module::Build::ModuleInfo has been deprecated.  Module::Build now
    depends directly upon Module::Metadata (which is an extraction of
    M::B::ModuleInfo intended for general reuse).  A pure-perl version has
    been bundled in inc/ solely for bootstrapping in case
    configure_requires is not supported. M::B::ModuleInfo remains as a
    wrapper around Module::Metadata.

  - Module::Build::YAML has been deprecated.  Module::Build now depends
    directly upon YAML::Tiny.  M::B::YAML remains as a subclass wrapper.
    The YAML_support feature has been removed, as YAML is now an ordinary
    dependency.

0.36_19 - Tue Dec  7 13:43:42 EST 2010

  Bug fixes:

  - Perl::OSType is declared as a 'configure_requires' dependency, but is
    also bundled in inc (and loaded if needed) [David Golden]

0.36_18 - Mon Dec  6 16:46:49 EST 2010

  Changes:

  - Added dependency on Perl::OSType to refactor and centralize
    management of OS type mapping [David Golden]

  - When parsing a version number out of a file, any trailing alphabetical
    characters will be dropped to avoid fatal errors when comparing version
    numbers.  These would have been dropped (with a warning) anyway during
    an ordinary numeric comparison. (RT#56071) [David Golden]

  Bug fixes:

  - A Perl interpreter mismatch between running Build.PL and running Build
    is now a fatal error, not a warning (RT#55183) [David Golden]

  - Bundled Module::Build::Version updated to bring into sync with CPAN
    version.pm 0.86 [David Golden]

  - No longer uses fake user 'foo' in t/tilde (RT#61793) [David Golden]

  - Won't fail tests if an ancient Tie::IxHash is installed
    [Christopher J. Madsen]

  - Correctly report missing metafile field names [David Golden]

  - Suppress uninitialized value errors during Pod creation
    on ActiveState Perl [David Golden]

  - Return to starting directory after install action; this is
    an attempt to fix an install.t heisenbug (RT#63003) [David Golden]

  - A broken version.pm load won't cause Module::Build::Version to
    die trying to install itself as a mock version (RT#59499)
    [Eric Wilhelm and David Golden]

  - PERL_DL_NONLAZY is now always set when tests are run
    (RT#56055) [Dmitry Karasik]

  - 'fakeinstall' will use .modulebuildrc actions for 'install' if
    no specific 'fakeinstall' options are provided (RT#57279)
    [David Golden]

  - Add install*script to search path for installdeps client
    and search site, then vendor, then core paths

  - Skip noexec tmpdir check on Windows (RT#55667) [Jan Dubois]

  - Arguments with key value pairs may now have keys with "-" in them
    (RT#53050) [David Golden]

  - Add quotemeta to t/tilde.t test to fix Cygwin fails
    [Chris Williams and David Golden]

  - Build script now checks that M::B is at least the same version
    of M::B as provided in 'configure_requires' in META
    (RT#54954) [David Golden]

0.36_17 - Wed Oct 27 18:08:36 EDT 2010

  Enhancements:

  - Added 'distinstall' action to run 'Build install' inside the
    generated distribution directory [Jeff Thalhammer]

0.36_16 - Thu Aug 26 12:44:07 EDT 2010

  Bug fixes:

  - Better error message in case package declaration is not found
    when searching for version. [Alexandr Ciornii]

  - Skips 'release_status' tests on perl &amp;lt; 5.8.1 due to buggy
    treatment of dotted-decimal version numbers [David Golden]

0.36_15 - Wed Aug 25 10:41:28 EDT 2010

  Bug fixes:

  - Added a mock Software::License to prevent t/properties/license.t
    from failing.

0.36_14 - Sun Aug 22 22:56:50 EDT 2010

  Enhancements:

  - Adds 'release_status' and 'dist_suffix' properties in preparation
    for adding CPAN Meta Spec 2 support.  'dist_suffix' will be set
    to 'TRIAL' automatically when necessary. [David Golden]

  - Makes 'license' more liberal.  You can now specify either a license
    key from the approved list (c.f. Module::Build::API) or just a
    Software::License subclass name (e.g. 'Perl_5').  This should
    provide better support for custom or proprietary licenses.
    [David Golden]

0.36_13 - Wed Jul 28 22:40:25 EDT 2010

 Bug-fixes:

 - Bundled Module::Build::Version updated to bring into sync with CPAN
   version.pm 0.82 [David Golden]

0.36_12 - Tue Jul 27 00:08:51 EDT 2010

  Enhancements:

  - Module::Build::Compat will now convert dotted-decimal prereqs into
    decimal rather than dying (and will warn about this). [Apocalypse]

  Bug fixes:

  - Caches case-sensitivity checks to boost performance, fixes
    RT#55162 and RT#56513 [Reini Urban]

  - Won't try to use ActivePerl doc generation tools without confirming
    that they are indeed installed. [David Golden]

  - Sets temporary $ENV{HOME} in testing to an absolute path, which fixes
    some issues when tested as part of the Perl core [Nicholas Clark]

  - Module::Build::ModuleInfo now warns instead of dying when a module
    has an invalid version.  -&amp;gt;version now just returns undef
    (RT#59593) [David Golden]

  Changes:

  - When authors do not specify Module::Build in configure_requires and
    Module::Build is automatically added, a warning will be issued
    showing the added prerequisite [David Golden]

  - Moved automatic configure_requires generation into get_metadata()
    and added an 'auto' argument to toggle it (on for META and off
    for MYMETA) [David Golden]

0.36_11 - Thu May 27 09:41:23 EDT 2010

  Bug fixes:

  - Handle META/MYMETA reading and writing within Module::Build to ensure
    utf8 mode on filehandles.  Now passes/gets only strings to YAML::Tiny
    or Module::Build::YAML

0.36_10 - Wed May 19 18:36:06 EDT 2010

  Bug fixes:

  - Fix failing t/manifypods.t on Windows from 0.36_09 changes [Klaus
    Eichner]

0.36_09 - Tue May 11 09:19:12 EDT 2010

  Bug fixes:

  - Improve HTML documentation generation on ActivePerl (RT#53478)
    [Scott Renner and Klaus Eichner]

0.36_08 - Mon Apr 26 08:00:15 EDT 2010

 Enhancements:

 - Give a list of valid licenses when given one we don't recognize
   (RT#55951) [Yanick Champoux]

 - Added 'Build manifest_skip' action to generate a default MANIFEST.SKIP
   [David Golden]

 Changes:

 - When temporarily generating a MANIFEST.SKIP when none exists, it will
   be removed on exit instead of hanging around until 'Build clean'.  This
   is less surprising/confusing and the 'Build manifest_skip' action
   is now available instead to bootstrap the file [David Golden]

 Bug fixes:

 - Fixed runtime error on cygwin when searching for an executable command
   during installdeps testing [David Golden]
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/nIwB1sHx9n0" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1378/announcing-modulebuild-0-3800/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-us">getting the band (of demihuman heroes) back together</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/NlIumHLvitI/1875" />
		<id>http://rjbs.manxome.org/rubric/entry/1875</id>
		<updated>2011-03-06T19:55:50+00:00</updated>
		<content type="html">&lt;p&gt;Last night was the first session of my otherwise long-running tabletop RPG game
in over a year.  Our old venue had become unavailable, last year, then other
complications came up, and finally when things seemed like we could get things
moving, there was just a lot of inertia to overcome.  Finally, I sent out a
grumpy, "Should we just call things off forever, or what?"  Fortunately, I got
quick responses from everyone: no, the previously mentioned date is good.
Unfortunately, the date was in just a few days, and I only had the next session
planned in broad strokes.&lt;/p&gt;

&lt;p&gt;I had basically planned a dungeon crawl.  Dungeon crawls are fun, but I find
them difficult to run successfully.  Producing a dungeon is, for me, quite a
lot of work.  I never quite feel like I've made the place plausible enough, and
I don't think I end up with rooms of the right size, shape, or layout for
particularly interesting encounters.  I've begun to think that the right course
of action is to start stealing liberally from published (and well-liked)
modules.  I've picked a few to read through, to see if the encounters and maps
can be stolen.  One complication is that I generally prefer to run games with
my own bestiary, but 4th Edition makes it fairly easy to reskin whatever
monsters they chose with something I'm happy with.&lt;/p&gt;

&lt;p&gt;In the meantime, I started with the &lt;a href="http://donjon.bin.sh/dungeon/"&gt;donjon random dungeon
generator&lt;/a&gt;, futzed with settings for a long
time, loaded it into &lt;a href="http://www.dungeonographer.com/"&gt;Dungeonographer&lt;/a&gt;, and
made some corrections.  The problem with that approach is that then I've got to
start with a blank map and rationalize each room.  After making a pass at that,
I started to realize that the room sizes were all sort of bizarre, and placing
furniture was a mess.  I ended up with a furniture-free map, which made combat
just a little more bland.  Next time, I'm going to start in Dungeonographer and
design it all myself -- which means I'll probably start with a list of planned
locations and encounters, and then add just enough connecting material to keep
things sensible.&lt;/p&gt;

&lt;p&gt;Planning encounters is tough, too.  Interesting encounters are hard to build.
In 4E, almost all combat encounters are long.  (I have yet to actually try out
Sly Flourish's &lt;a href="http://slyflourish.com/designing-30-minute-skirmishes-in-4e/"&gt;30 Minute
Skirmishes&lt;/a&gt;
ideas.)  If the encounter isn't interesting and dynamic, the players will get
bored, and by the end everyone will more or less be droning, "I use cleave on
the one next to me" every round.  The DMG advice to build encounters with
monsters of different roles is really important advice.  I need to get a much
better feel for what groups of monsters make for an interesting encounter, and
how to roll them out over an encounter.  (I want to complain that this would be
easier if there was a greater selection of low-level monsters -- but while I
wish there was a better selection, I don't think I'd actually be any better for
having more to choose from.)&lt;/p&gt;

&lt;p&gt;We didn't finish the entire dungeon, unfortunately.  We started later than we
used to start, and there was a lot of small talk, as usual -- especially
because we hadn't been together in one place for so long.  Even if we'd started
an hour or two earlier, we couldn't have finished things up in time.  I need to
get a better handle on the speed at which things go.  It's really important
because I'm trying to keep a good balance between having the overall campaign
move at a reasonable pace, while not having each session be a rush through a
seemingly-meaningless set of events.  This is especially difficult because
we play, at best, every three weeks.  Having to split one adventure up over two
nights delays the whole storyline by three weeks or more, which can be
frustrating, at least to me.&lt;/p&gt;

&lt;p&gt;I've been thinking about running an online campaign for a long time.  I
couldn't find any online battle mat that I liked, and this was a serious
blocker for me to get started.  A few weeks ago, Nick Perez (who had been
complaining that I kept teasing him with the prospect of this game) took up the
challenge and found &lt;a href="http://sourceforge.net/projects/gametable/"&gt;Gametable&lt;/a&gt;,
which has a weird, sort of ugly interface, but does absolutely everything I
needed.  The chances of this online game happening are greatly improved.  I'm
also excited by the notion that I'll be able to use Dungeonographer and
Hexographer to build maps for the game, especially once a &lt;a href="http://inkwellideas.com/hexographer_forum/index.php?topic=287.0"&gt;small feature
request for
Dungeonographer&lt;/a&gt;
is fulfilled.&lt;/p&gt;

&lt;p&gt;Before the game starts, though, I think I'll be able to use Gametable for a
dual purpose:  I can get used to running games with it, and I can run short
one-combat sessions to try out new encounter ideas.  All I need to do is plan
some encounters, conscript some players, and carve out some time!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/NlIumHLvitI" height="1" width="1"/&gt;</content>
		<author>
			<name>rjbs</name>
			<uri>http://rjbs.manxome.org/rubric</uri>
		</author>
		<source>
			<title type="html">Rubric: rjbs's entries with a body</title>
			<subtitle type="html">Rubric</subtitle>
			<link rel="self" href="http://rjbs.manxome.org/rubric/entries/user/rjbs/has_body/1?format=rss" />
			<id>http://rjbs.manxome.org/rubric</id>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1875</feedburner:origLink></entry>

	<entry>
		<title type="html">So there's this TelAviv.pm meeting, right?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/044JxLzeZtQ/so-theres-this-telavivpm-meeting-right.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1529</id>
		<updated>2011-03-06T08:36:07+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I wanted to write up on the February TA.pm meeting we had two weeks ago but kept delaying it. I think it's about time!&lt;/p&gt;

&lt;p&gt;As with every TA.pm meeting, we try to mix both beginner and advanced talks, in order to have something for everyone. It's proven very effective so far. We've also started doing lightning talks, which I really wanted to do for a while.&lt;/p&gt;

&lt;p&gt;The beginner talk was done by Gabor Szabo, giving an introduction on how to get started contributing to an open source project. There were a lot of laughs and a lot of fun. We also got to see new faces, and that's always great.&lt;/p&gt;

&lt;p&gt;Then we had a round of lightning talks, one by Shlomi Fish on how to solve a very specific problem in a ton of different ways, and one by no speaker at all, on how to write a nifty website in under a minute using &lt;a href="http://perldancer.org"&gt;Dancer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Shlomi's talk was a hell of a lot of fun. Considering how difficult it is for Shlomi to do a talk, I think he was very brave at attempting a lightning talk and I think it really paid off. People were really enjoying themselves and having a blast. I would attribute it to a good-spirited crowd and an amused - yet humble - speaker.&lt;/p&gt;

&lt;p&gt;After the lightning talk, I gave a talk on the differences in Perl variable definitions, mainly explaining each of (and the difference between) "my", "our", "local" and "state".&lt;/p&gt;

&lt;p&gt;When the talks ended, we went to a local restaurant to enjoy a dinner and have some more fun.&lt;/p&gt;

&lt;p&gt;I want to thank the speakers and everyone who came. I hope to see you all (and those who didn't come last time) in the next meeting!!&lt;/p&gt;

&lt;p&gt;Slides:&lt;br /&gt;
&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;
        &lt;li&gt;&lt;a href="http://www.shlomifish.org/lecture/Perl/Lightning/Too-Many-Ways/slides/"&gt;There are too many ways to do it&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://www.slideshare.net/xSawyer/your-first-website-in-under-a-minute-with-dancer"&gt;Your first website in under a minute with Dancer&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
        &lt;li&gt;&lt;a href="http://www.slideshare.net/xSawyer/our-local-state-my-my-understanding-perl-variables"&gt;Our local state, my, my&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;If you fancy doing a talk, whether beginner or advanced or a lightning talk, hit me up.&lt;/p&gt;

&lt;p&gt;Here's to more fun!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/044JxLzeZtQ" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/03/so-theres-this-telavivpm-meeting-right.html</feedburner:origLink></entry>

	<entry>
		<title type="html">CPAN Testers Summary - February 2011 - A Saucerful of Secrets</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/_POSg6s29nk/cpan-testers-summary---february-2011---a-saucerful-of-secrets.html" />
		<id>tag:blogs.perl.org,2011:/users/cpan_testers//73.1522</id>
		<updated>2011-03-04T15:40:58+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Much of February was taken up with monitoring updates and watching for any unfortunate consequences. Thankfully the improvements seem to have done their job. The report submissions in January dropped from previous months, which is normal going on past experience, and sure enough the submissions increased again last month. Despite this the builder has managed to stay on top of the page requests. Some fine tuning has taken place and currently the builder stays at most about 2-3 days behind, but is average in only 1-2 days behind. We'd prefer to have updates even more frequent than this, so over the next few months we'll investigate further what improvements can be made.&lt;/p&gt;
&lt;p&gt;Recently David Golden had cause to investigate a problem that was surfacing with Module::Build. Some reports to CPAN Testers were highlighting a particular issue that was proving hard to track down. Thankfully, &lt;strong&gt;Chad Davis&lt;/strong&gt; went the extra miles to try and provide David with as much context as possible to understand the problem. It is worthwhile reading David's full post, appropriately title '&lt;a href="http://www.dagolden.com/index.php/1354/how-to-replicate-a-failure/"&gt;How to replicate a failure&lt;/a&gt;', as it provides a good example of how testers and authors can work together to solve problems.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://2011.qa-hackathon.org"&gt;2011 QA Hackathon&lt;/a&gt; is now firmed up, and although work integrating perl smoke test reports into the Metabase is planned, there is nothing specific to CPAN Testers. This is mainly due to David and myself being unable to attend in person, although we both hope to be online at some point during the event.&lt;/p&gt;
&lt;p&gt;To end off this summary, the mappings this month included 8 total addresses mapped, of which 7 were for newly identified testers. It seems testers are getting used to reusing their metabase profile, rather than creating a new one every time they change email address, as this was the intention behind the profile, allowing us to more easily attribute reports to a particular tester.&lt;/p&gt;
&lt;p&gt;If you have any CPAN Testers related news, blog posts or if you are planning any CPAN Testers related talks at your local Perl Monger group or at a workshop or conference, please let us know, and we'll promote you here on the blog. Until next time...&lt;/p&gt;            
&lt;p&gt;Cross-posted from the &lt;a href="http://blog.cpantesters.org/diary/107"&gt;CPAN Testers Blog&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/_POSg6s29nk" height="1" width="1"/&gt;</content>
		<author>
			<name>CPAN Testers</name>
			<uri>http://blogs.perl.org/users/cpan_testers/</uri>
		</author>
		<source>
			<title type="html">CPAN Testers</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/cpan_testers/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/cpan_testers//73</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/cpan_testers/2011/03/cpan-testers-summary---february-2011---a-saucerful-of-secrets.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-03-03</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/V_1YWsvNuZc/180502a.html" />
		<id>http://taint.org/2011/03/03/180502a.html</id>
		<updated>2011-03-03T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.rockpapershotgun.com/2011/03/02/old-man-murray-deleted-from-wikipedia/" target="_blank" title="Old Man Murray Deleted From Wikipedia | Rock, Paper, Shotgun"&gt;Old Man Murray Deleted From Wikipedia | Rock, Paper, Shotgun&lt;/a&gt;
: more idiotic deletionism from Wikipedia.  when will someone fork WP with a saner community?&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/wikipedia"&gt;wikipedia&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/deletionpedia"&gt;deletionpedia&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/deletion"&gt;deletion&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/gaming"&gt;gaming&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/history"&gt;history&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/old-man-murray"&gt;old-man-murray&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/web"&gt;web&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/community"&gt;community&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/asshats"&gt;asshats&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.telegraphindia.com/1110303/jsp/frontpage/story_13661408.jsp" target="_blank" title="The Telegraph - Calcutta (Kolkata) | Frontpage | A lesson for colony cousin"&gt;The Telegraph – Calcutta (Kolkata) | Frontpage | A lesson for colony cousin&lt;/a&gt;
: So much win in one article. (a) the Bengali equivalent of “craic” is, roughly, “phatiphati”; (b) “In Irish pubs, amid the tiddly-doo music, this is a craic”; (c) wtf Gadaffi references; (d) shared post-colonialist glee&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/craic"&gt;craic&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/funny"&gt;funny&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/colonialism"&gt;colonialism&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/bengali"&gt;bengali&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/phatiphati"&gt;phatiphati&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/tiddly-doo"&gt;tiddly-doo&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/libya"&gt;libya&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/india"&gt;india&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/cricket"&gt;cricket&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://protectourchildren.o2.co.uk/Block18PlusContent.jsp" title="O2's page on their new "&gt;O2’s page on their new “block 18+ content on mobile internet” policy&lt;/a&gt;
: O2 UK have just instituted a mandatory block for all “18+” content, which is only removed once the customer pays a UKP1 fee via credit card (which is immediately refunded).  Twitter is *full* of angry UK O2 users right now&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/o2"&gt;o2&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/uk"&gt;uk&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/content"&gt;content&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/credit-cards"&gt;credit-cards&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/filtering"&gt;filtering&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/censorship"&gt;censorship&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/adult"&gt;adult&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/V_1YWsvNuZc" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/03/03/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">A faster memory cache for CHI</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/rPMSMc7zuxk/" />
		<id>http://www.openswartz.com/?p=178</id>
		<updated>2011-03-02T23:35:03+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I’ve released &lt;a href="http://search.cpan.org/perldoc?CHI"&gt;CHI 0.41&lt;/a&gt; with a &lt;a href="http://search.cpan.org/perldoc?CHI::Driver::RawMemory"&gt;RawMemory&lt;/a&gt; driver. It’s like the regular &lt;a href="http://search.cpan.org/perldoc?CHI::Driver::Memory"&gt;Memory&lt;/a&gt; driver except that data structure references are stored directly instead of serializing / deserializing. This makes the cache faster at getting and setting complex data structures, but unlike most drivers, modifications to the original data structure &lt;em&gt;will&lt;/em&gt; affect the data structure stored in the cache, and vica versa. e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   my $cache = CHI-&amp;gt;new( driver =&amp;gt; 'Memory', global =&amp;gt; 1 );
   my $lst = ['foo'];
   $cache-&amp;gt;set('key' =&amp;gt; $lst);   # serializes $lst before storing
   $cache-&amp;gt;get('key');   # returns ['foo']
   $lst-&amp;gt;[0] = 'bar';
   $cache-&amp;gt;get('key');   # returns ['foo']

   my $cache = CHI-&amp;gt;new( driver =&amp;gt; 'RawMemory', global =&amp;gt; 1 );
   my $lst = ['foo'];
   $cache-&amp;gt;set('key' =&amp;gt; $lst);   # stores $lst directly
   $cache-&amp;gt;get('key');   # returns ['foo']
   $lst-&amp;gt;[0] = 'bar';
   $cache-&amp;gt;get('key');   # returns ['bar']!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should work well as a short-lived &lt;a href="http://search.cpan.org/perldoc?CHI#L1_cache"&gt;L1 cache&lt;/a&gt; in front of memcached, for example.&lt;/p&gt;
&lt;p&gt;I was motivated to create this by Yuval Kogman’s &lt;a href="http://search.cpan.org/perldoc?Cache::Ref"&gt;Cache::Ref&lt;/a&gt;, which is still a little faster (not having some of the overhead of CHI’s metadata and features). See the &lt;a href="http://search.cpan.org/perldoc?CHI::Benchmarks"&gt;CHI benchmarks&lt;/a&gt;, also new with this release.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/rPMSMc7zuxk" height="1" width="1"/&gt;</content>
		<author>
			<name>Jonathan Swartz</name>
			<uri>http://www.openswartz.com</uri>
		</author>
		<source>
			<title type="html">Open Swartz</title>
			<subtitle type="html">Perl and open source development</subtitle>
			<link rel="self" href="http://www.openswartz.com/feed/" />
			<id>http://www.openswartz.com</id>
		</source>
	<feedburner:origLink>http://www.openswartz.com/2011/03/02/a-faster-memory-cache-for-chi/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-03-02</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/CynNYHFqwVU/180502a.html" />
		<id>http://taint.org/2011/03/02/180502a.html</id>
		<updated>2011-03-02T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.yourtechstuff.com/techwire/2011/02/dear-enda-and-eamon-the-outgoing-government-which-you-trounced-last-friday-has-put-together-a-few-documents-in-prepar.html" target="_blank" title="TechWire: Don't do it, Enda and Eamon"&gt;TechWire: Don’t do it, Enda and Eamon&lt;/a&gt;
: Adrian Weckler with a plea for the incoming govt regarding the attempt to rush through ‘3 Strikes’ by the outgoing one: ‘Such a law will have absolutely no effect on the practice of illegal filesharing. None. Zero. It hasn’t worked in France. It hasn’t worked in Britain. And it certainly won’t work in Ireland. On the other hand, it may well send a signal to huge, jobs-creating digital IT companies that Ireland is a place that tries to legislate away personal digital freedoms.’&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/3-strikes"&gt;3-strikes&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/ireland"&gt;ireland&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/adrian-weckler"&gt;adrian-weckler&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/politics"&gt;politics&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/filesharing"&gt;filesharing&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/piracy"&gt;piracy&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/filtering"&gt;filtering&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/internet"&gt;internet&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/freedom"&gt;freedom&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.pcgamer.com/2011/03/02/notch-on-piracy-if-a-pirated-game-is-a-lost-sale-should-bad-reviews-be-illegal/" target="_blank" title="Notch on piracy: “if a pirated game is a lost sale, should bad reviews be illegal?” | PC Gamer"&gt;Notch on piracy: “if a pirated game is a lost sale, should bad reviews be illegal?” | PC Gamer&lt;/a&gt;
: wish more “piracy = theft” people would think about this viewpoint.  mind you, fwiw, I buy my games, and have paid for Minecraft ;)&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/piracy"&gt;piracy&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/gaming"&gt;gaming&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/games"&gt;games&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/minecraft"&gt;minecraft&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/notch"&gt;notch&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/CynNYHFqwVU" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/03/02/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Your Fantasy Perl Conference schedule</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/oH5rvGVe6vE/your-fantasy-perl-conference-schedule.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1519</id>
		<updated>2011-03-02T14:42:00+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;What talks do you want to hear at conferences? I recently finished going through the proposals for OSCON, and the ones I thought were really good were the ones the Perl committee solicited or helped to develop. That is, instead of waiting to see what speakers suggested and lived with that, we went out to get what we wanted. And, I think this is going to be a pretty good OSCON for Perl.&lt;/p&gt;

&lt;p&gt;At Frozen Perl, Chris Prather, one of the organizers for YAPC::NA 2011, was telling me about their plan to schedule talks first and find speakers later. I was just checking the YAPC::Rīga website, and &lt;a href="http://yapceurope.lv/ye2011/talks/"&gt;They are doing the same thing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a frequent speaker, I've lately been asking the conference to suggest topics to me. It's more challenging for me that way and raises my game a bit. Maybe that will work for other speakers as well.&lt;/p&gt;

&lt;p&gt;So, imagine your fantasy conference (unrestrained Perl conference schedule, not conference about fantasies). You're the organizer. What would you put in the schedule and who would you assign the talks to?&lt;/p&gt;

&lt;p&gt;I have a long list, but I'll give you a couple of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Surviving Perl and Unicode (Tom Christiansen)
&lt;/li&gt;&lt;li&gt;Fast data with PDL (???)
&lt;/li&gt;&lt;li&gt;Perl and the new HTML5 (???)
&lt;/li&gt;&lt;li&gt;Git Boot Camp (Scott Chacon)
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Suggest your own three topics, maybe with speakers attached, and perhaps the organizers can twist some arms. Chris did mention that he initially had to twist arms but his targets eventually relented.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/oH5rvGVe6vE" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/03/your-fantasy-perl-conference-schedule.html</feedburner:origLink></entry>

	<entry>
		<title type="html">A Module::CoreList for vendor distributions</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/6qMk8DcLy2A/a-modulecorelist-for-vendor-distributions.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1517</id>
		<updated>2011-03-02T13:04:43+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;How much do perl distributions diverge from or augment the Standard Library? Lately I've been doing a lot of work with distributions that augment their standard Perl installations, so although I'm restricted to the distribution's Perl and its modules, most of the good stuff is already there. However, we don't have a tool like &lt;a href="http://search.cpan.org/dist/Module-CoreList"&gt;Module::CoreList&lt;/a&gt; that knows about vendor distributions.&lt;/p&gt;

&lt;p&gt;Although I don't have the time to write it myself, I'd really like to have a tool that can report module presence and version for either the current operating system or any that I name:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ corelistng --debian -a Scalar::Util

$ corelistng --macosx -v 5.10.0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This would be pretty handy when I have to put together a private MiniCPAN.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/6qMk8DcLy2A" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/03/a-modulecorelist-for-vendor-distributions.html</feedburner:origLink></entry>

	<entry>
		<title type="html">My Frozen Perl 2011 Keynote</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/xL2unW1hIMQ/my-frozen-perl-2011-keynote.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1516</id>
		<updated>2011-03-02T12:56:03+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I've uploaded the &lt;a href="http://www.slideshare.net/brian_d_foy/frozen-perl-2011-keynote"&gt;slides for my Frozen Perl 2011 keynote&lt;/a&gt;, in which I answer one part of the question "What are five things I hate about Perl?" &lt;/p&gt;

&lt;div align="center" id="__ss_7118439" style="width: 425px;"&gt;&lt;/div&gt;

&lt;p&gt;You may remember that I first asked that question in the introduction to &lt;a href="http://blogs.perl.org/users/brian_d_foy/"&gt;Mastering Perl&lt;/a&gt;, so I've been thinking about this since 2005. I posted it on &lt;a href="http://use.perl.org/~brian_d_foy/journal/32556"&gt;use.Perl&lt;/a&gt; in 2007 and &lt;a href="http://blogs.perl.org/users/brian_d_foy/"&gt;Stackoverflow&lt;/a&gt; in 2008 (and Jeff Atwood picked up on for &lt;a href="http://blog.stackoverflow.com/2009/11/podcast-73/"&gt;Stackoverflow Podcast #73 (around minute 47)&lt;/a&gt;, although I'm not sure that. I might have picked it up from &lt;a href="http://wonko.com/post/5_things_i_hate_about_ruby"&gt;5 things I hate about Ruby&lt;/a&gt;, which is about the same time that I would have been writing that for &lt;i&gt;Mastering Perl&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Almost everyone fails this question though (and Jeff's answers are very weak). Most people don't think about it long enough, so they answer with very superficial, stylistic things that don't prevent them from doing anything but that is just their pet peeve.&lt;/p&gt;

&lt;p&gt;In my keynote, I note that this interview question evaluates three things at once: real experience, depth &amp;amp; reach, and workarounds. How much have you actually thought about it, how much does that item actually affect the language and what you can do with it, and how you workaround it.&lt;/p&gt;

&lt;p&gt;My answer is how &lt;code&gt;use&lt;/code&gt; works. It takes a namespace and translates it into a filename, then traverses &lt;code&gt;@INC&lt;/code&gt; looking for that filename, using the first one it finds. This has far reaching consequences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can only load a module that lives in a file of the corresponding name.
&lt;/li&gt;&lt;li&gt;The direct correlation to a particular filename makes it virtually intractable to store multiple version of a module at the same time (a goal for Perl 6).
&lt;/li&gt;&lt;li&gt;The filename is sometimes related to the distribution name, but sometimes not. For instance, how many people know which distribution HTTP::Request is in? How would you find out just by looking at the file?
&lt;/li&gt;&lt;li&gt;Since you have to have a particular filename, your distribution structure is &lt;s&gt;in&lt;/s&gt;affected
&lt;/li&gt;&lt;li&gt;Since they are just files, once installed you can't really tell which ones come from the same distribution. 
&lt;/li&gt;&lt;li&gt;We have to have PAUSE permissions to control who gets to create a file through a distribution through a CPAN client.
&lt;/li&gt;&lt;li&gt;Since a distribution name is not necessarily related to the filename of the module, CPAN clients need a way to translate that. PAUSE jumps through a lot of hoops to index distributions, and CPAN clients have to get at that data (although cpanm does an end run in what I think is ultimately unsustainable).
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;So, a small design decision impacts quite a bit. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/xL2unW1hIMQ" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/03/my-frozen-perl-2011-keynote.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Parrot Embed Grant Update #3 : Now with Dragons</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/ZdydkJ28s5M/parrot-embed-grant-update-3-now-with-dragons.html" />
		<id>tag:leto.net,2011:/dukeleto.pl//9.241</id>
		<updated>2011-03-01T21:37:16+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;
The quest to improve test coverage for src/extend_vtable.c has continued. Some dragons
were slayed, a few trolls were paid tolls to cross creaky bridges of abstraction and
many siren calls to hack on other code were dutifully ignored (mostly).

&lt;/p&gt;
&lt;p&gt;
This &lt;a href="http://perlfoundation.org"&gt;TPF&lt;/a&gt; grant has forced me to become very familiar with Parrot vtables (virtual tables),
which is basically an API for talking to Parrot &lt;a href="https://github.com/parrot/parrot/blob/master/docs/pdds/pdd17_pmc.pod"&gt;PMCs&lt;/a&gt; 
(really just objects with a funny
name). PMC can stand for Parrot Magic Cookie or PolyMorphic Container. Take your pick.

&lt;/p&gt;
&lt;p&gt;
Firstly, vtable is already slang for "vtable function", which expands to "virtual table function."
What the junk is a "virtual table function" ? I find that the simplest way to think about
it is that every PMC has &lt;i&gt;slots&lt;/i&gt; or &lt;i&gt;buckets&lt;/i&gt; with standardized names such as
&lt;b&gt;get_bool&lt;/b&gt; (get Boolean value) or &lt;b&gt;elements&lt;/b&gt; (how many elements does this PMC have?)

&lt;/p&gt;
&lt;p&gt;
All PMCs inherit sensible defaults for most vtables, but they are allowed to
override them. Why would you want to override them? As a simple example, let us assume there is a vtable called &lt;b&gt;length&lt;/b&gt; (there isn't actually, but it makes an easy example to explain these concepts). Our &lt;b&gt;length&lt;/b&gt; vtable will act just like &lt;b&gt;elements&lt;/b&gt; and tell us how many elements a PMC has.

If we had a complex number PMC that was really just an &lt;a href="https://github.com/parrot/parrot/blob/master/src/pmc/fixedfloatarray.pmc"&gt;FixedFloatArray PMC&lt;/a&gt; 
of two
numbers underneath, the &lt;b&gt;length&lt;/b&gt; would always return 2 for every complex
number. Not very useful.

&lt;/p&gt;
&lt;p&gt;
A much more useful &lt;b&gt;length&lt;/b&gt; vtable would use the coefficients &lt;b&gt;a&lt;/b&gt; and
&lt;b&gt;b&lt;/b&gt; from &lt;b&gt;a + b*i&lt;/b&gt; and compute the Euclidean distance (length from
the origin) &lt;b&gt;sqrt(a^2 + b^2)&lt;/b&gt;. Hopefully you now have a taste for what
what vtables are about. Parrot PMCs have over 100 vtables that can be
overridden to provide custom functionality.

&lt;/p&gt;
&lt;p&gt;
I recently ran across the &lt;b&gt;hashvalue&lt;/b&gt; vtable and couldn't find any tests
for it in Parrot core (outside of the test that I had written for it in
extend_vtable.t) or any use of it in &lt;a href="http://rakudo.org"&gt;Rakudo Perl 6&lt;/a&gt;. Oh noes! It seemed like an
unused/untested feature, so I created a &lt;a href="http://trac.parrot.org/parrot/ticket/2027"&gt;Trac Ticket&lt;/a&gt; to mark it as deprecated so it could
be removed in a future release.

&lt;/p&gt;
&lt;p&gt;
The discussion about the ticket was fierce. &lt;a href="https://github.com/NotFound"&gt;NotFound++&lt;/a&gt; explained why the vtable
was important and the mighty coding robot known as &lt;a href="https://github.com/bacek"&gt;bacek++&lt;/a&gt; manifested tests quickly.
&lt;/p&gt;

&lt;p&gt;
Yet another case of this grant work having a positive impact on the Parrot codebase,
even outside the embed/extend interface. I also &lt;a href="https://github.com/parrot/parrot/commit/612ec787dc975c4d570fb9b95d5f9fbd2993e92a"&gt;improved an error message in the PMCProxy PMC&lt;/a&gt;,
which arises when something goes bad during a partial re-compile. Yay for improved debuggability!
&lt;/p&gt;
&lt;p&gt;
According to the current &lt;a href="http://tapir2.ro.vutbr.cz/cover/latest-c_cover/src-extend_vtable-c.html"&gt;code coverage statistics&lt;/a&gt;,
extend_vtable.c is up to 54% coverage from 43%,
which is not quite where I predicted from my last update. No doubt this has something to
do with me packing and preparing to move to a new house this month. My velocity didn't
decrease so much as the amount of time that I had to work on this grant.
&lt;/p&gt;
&lt;p&gt;
I am greatly enjoying working on this grant and even if it is going a bit slower than I had planned, I am very confident that it will be completed in the next few months and hopefully sooner.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/ZdydkJ28s5M" height="1" width="1"/&gt;</content>
		<author>
			<name>Jonathan Leto</name>
			<uri />
		</author>
		<source>
			<title type="html">Jonathan Leto</title>
			<link rel="self" href="http://leto.net/parrot.xml" />
			<id>http://leto.net/parrot.xml</id>
		</source>
	<feedburner:origLink>http://leto.net/dukeleto.pl/2011/02/parrot-embed-grant-update-3-now-with-dragons.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-03-01</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/kIGEkjgV5jc/180502a.html" />
		<id>http://taint.org/2011/03/01/180502a.html</id>
		<updated>2011-03-01T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://nakedsecurity.sophos.com/2011/02/28/uk-government-agency-wants-your-email-scams-but-is-doing-it-the-right-way/#IDComment131650035" target="_blank" title="UK Government Agency wants your spam, but filters the submission address"&gt;UK Government Agency wants your spam, but filters the submission address&lt;/a&gt;
: doh (via Graham Cluley)&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/via:gcluley"&gt;via:gcluley&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/spam"&gt;spam&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/uk"&gt;uk&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/filtering"&gt;filtering&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/anti-spam"&gt;anti-spam&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/doh"&gt;doh&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/funny"&gt;funny&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/kIGEkjgV5jc" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/03/01/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Slouching towards Module::Build 0.38</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/pxiOVvwnkzI/" />
		<id>http://www.dagolden.com/?p=1374</id>
		<updated>2011-03-01T03:07:34+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I've just released the latest development release of &lt;a href="http://p3rl.org/Module::Build/"&gt;Module::Build&lt;/a&gt;, version 0.37_06.  You can install it from your favorite client as &lt;code&gt;DAGOLDEN/Module-Build-0.37_06.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I am not aware of any more issues blocking the release of 0.38, so unless something new and serious comes up, I plan to release the next stable Module::Build around the end of the week.&lt;/p&gt;
&lt;p&gt;If you use Module::Build and have not tested your distributions with any of the 0.37_XX releases, please do so now as this may be your last chance.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/pxiOVvwnkzI" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1374/slouching-towards-modulebuild-0-38/</feedburner:origLink></entry>

	<entry>
		<title type="html">A logo for Perl 5</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Sd6Q55GLMJI/a-logo-for-perl-5" />
		<id>http://blog.kraih.com/a-logo-for-perl-5</id>
		<updated>2011-02-28T14:22:00+00:00</updated>
		<content type="html">&lt;p&gt;
	
&lt;/p&gt;&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding: 0px;"&gt;Last week Mark Keating from the Enlightened Perl Organization &lt;a href="http://mdk.per.ly/2011/02/25/i-need-your-help/"&gt;asked for help&lt;/a&gt; creating marketing material for Perl. So in response to that i've decided to spend the weekend doing something i wanted to do for quite some time now, design a logo for Perl 5.&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;You might remember &lt;a href="http://blog.kraih.com/a-logo-for-perl"&gt;this post&lt;/a&gt; from last year when i tried the same for Perl 6, it sadly did not turn out so well due to lack of interest from the decision makers and ultimately ended up driving me away from that community. This time however the overall experience was much better and i was positively surprised by how pleasant working together with the EPO folks has been. I'm sure there will be more cooperation in the future.&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;With its 23 years Perl is already one of the older programming languages, some have even called it a dinosaur and dead. But there has been no great dying in the world of programming languages and the Perl community is actually healthier than ever.&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;So lets assume Perl was a dinosaur that survived to dominate the food chain. It surely has to be a carnivore judging by its razor-sharp regular expressions, and the 20.000 distributions on CPAN show us that it hunts in packs. After a careful review of Jurassic Park i've come to the conclusion that Perl has to be a Velociraptor, and that's what i'm basing the logo on!&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;&lt;/p&gt;&lt;div class="p_embed p_image_embed"&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-02-27/HujcGbcigkGnhvdesmEhzmophojlDIdJCHtAHaodIwnGyrCttcJsyDdIcDjx/perl5logo.png.scaled1000.png"&gt;&lt;img alt="Perl5logo" height="135" src="http://posterous.com/getfile/files.posterous.com/temp-2011-02-27/HujcGbcigkGnhvdesmEhzmophojlDIdJCHtAHaodIwnGyrCttcJsyDdIcDjx/perl5logo.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;Raptors are not just dinosaurs, they are pretty damn badass dinosaurs and have already been used on marketing material for the London Perl Workshop in the past. Here's also a little &lt;a href="http://mojolicio.us"&gt;Mojolicious&lt;/a&gt; poster demonstrating its proper use in marketing material.&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;&lt;/p&gt;&lt;div class="p_embed p_image_embed"&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-02-27/sJhpuDbjBJyrjcdGBoxvrIdktejybrkwfBAqonoveruhjHibvCBwyzvzGlqf/mojoliciousposter.png.scaled1000.png"&gt;&lt;img alt="Mojoliciousposter" height="586" src="http://posterous.com/getfile/files.posterous.com/temp-2011-02-27/sJhpuDbjBJyrjcdGBoxvrIdktejybrkwfBAqonoveruhjHibvCBwyzvzGlqf/mojoliciousposter.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;The logo has already been &lt;a href="https://github.com/kraih/perl-raptor"&gt;released to GitHub&lt;/a&gt; under the &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/"&gt;CC-SA&lt;/a&gt; license, that means it is open and as long as you attribute it properly you are free to do pretty much whatever you want with it. More formats and sizes will be added over time.&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;&lt;/p&gt;&lt;div class="p_embed p_image_embed"&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-02-28/rvmjxbnvCukIdeCEJdGEkInegnHCIeFhnbzCCIGyiceaFgxIlexsneisCeDC/shirts.png.scaled1000.png"&gt;&lt;img alt="Shirts" height="275" src="http://posterous.com/getfile/files.posterous.com/temp-2011-02-28/rvmjxbnvCukIdeCEJdGEkInegnHCIeFhnbzCCIGyiceaFgxIlexsneisCeDC/shirts.png.scaled500.png" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;I've also prepared a few t-shirts, you should &lt;a href="http://kraih.spreadshirt.net"&gt;take a look&lt;/a&gt; (americans go &lt;a href="http://kraih.spreadshirt.com"&gt;here&lt;/a&gt;). :)&lt;/p&gt;
&lt;p style="margin-top: 15px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; padding: 0px;"&gt;&lt;span style="font-size: xx-small;"&gt;Disclaimer: Some parts of this story might be fiction.&lt;/span&gt;&lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.kraih.com/a-logo-for-perl-5"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.kraih.com/a-logo-for-perl-5#comment"&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Sd6Q55GLMJI" height="1" width="1"/&gt;</content>
		<author>
			<name>Sebastian Riedel</name>
			<uri>http://blog.kraih.com</uri>
		</author>
		<source>
			<title type="html">Sebastian Riedel about Perl and the Web</title>
			<subtitle type="html">Most recent posts at Sebastian Riedel about Perl and the Web</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/kraih" />
			<id>http://blog.kraih.com</id>
		</source>
	<feedburner:origLink>http://blog.kraih.com/a-logo-for-perl-5</feedburner:origLink></entry>

	<entry>
		<title type="html">More stupid testing tricks</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/xhFtHHe7J_Q/more-stupid-testing-tricks.html" />
		<id>tag:blogs.perl.org,2011:/users/ovid//11.1514</id>
		<updated>2011-02-28T09:31:31+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;For the guy who wrote the test harness currently ships with Perl and has commit rights to an awful lot of the Perl testing toolchain, I sure do seem to do a lot of &lt;a href="http://blogs.perl.org/users/ovid/2011/02/is-almost.html"&gt;stupid things while testing&lt;/a&gt;. That being said, sometimes I &lt;em&gt;need&lt;/em&gt; to do those stupid testing tricks. That's because there seem to be roughly two types of developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Those who work in a perfect world&lt;/li&gt;
&lt;li&gt;Those who work in the real world&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I say the latter with a bit of bitterness because invariably I keep hearing &lt;strong&gt;&lt;em&gt;YOU MUST DO X AND NOTHING ELSE&lt;/em&gt;&lt;/strong&gt; where "X" is a practice that I often agree with, but it's the "and nothing else" bit that really frosts my Pop Tart (tm).&lt;/p&gt;

        &lt;p&gt;I'm in the rather unfortunate position of having an NDA so I can't exactly explain what's driving a particular use case, but I have a fantastic job which nonetheless has some serious constraints which I'm not in a position to deviate from. So not only am I not in a position to follow best practices in what I'm about to describe, I'm not even in a position to tell you why. Suffice it to say that I have an &lt;em&gt;enormous&lt;/em&gt; system which I'm faced with and many things which I would take for granted in other environments are not the case here, so I'm forced to improvise. (Note that I didn't say it's a bad system. It's a different system and there is at least one fundamental assumption about software development which doesn't apply here, but I can't say more)&lt;/p&gt;

&lt;p&gt;So let's say that you have a rather large dataset you're testing and you have some contraints you must face:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You have no control over the actual data&lt;/li&gt;
&lt;li&gt;You cannot mock up an interface to that data&lt;/li&gt;
&lt;li&gt;The data is volatile&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How do you test that? Let's say a function returns a an array of array refs. At first, I tried writing &lt;a href="http://blogs.perl.org/users/ovid/2011/02/is-almost.html"&gt;something like the Levenshtein edit distance for data structures&lt;/a&gt;, but our data is so volatile that instead of having the tests fail the day after they're written (the data I test against is more-or-less stable for one day), I could have them last several days before failure hits.&lt;/p&gt;

&lt;p&gt;Still, coming back a week later and still having the tests fail is not good. Further, by the time the data bubbles up to me, the criteria by which it's assembled and sorted is not present, so I have no way of duplicating that in my test (and it's complex enough that I wouldn't want to duplicate it).&lt;/p&gt;

&lt;p&gt;Thus, I'm stuck with the awful problem of tests which are going to break quickly. I thought about the excellent &lt;a href="http://search.cpan.org/dist/Test-Deep/"&gt;Test::Deep&lt;/a&gt;, but that can let me validate the structure of the data, not the meaning. &lt;a href="http://search.cpan.org/dist/Test-AskAnExpert/"&gt;Test::AskAnExpert&lt;/a&gt; could let me know the meaning by punting to the human (me, in this case), but this doesn't do anything about the data being so volatile.&lt;/p&gt;

&lt;p&gt;So I've written the abysmally stupid &lt;a href="http://search.cpan.org/dist/Test-SynchHaveWant/"&gt;Test::SynchHaveWant&lt;/a&gt;. The idea is that the results you want are in the &lt;tt&gt;__DATA__&lt;/tt&gt; section of your .t file and if the test(s) fail, you can look at the failures and if they're not really failures, you can then "synch" your "wanted" results to the new results and watch them pass again. We do this by writing the synched results to the &lt;tt&gt;__DATA__&lt;/tt&gt; section.&lt;/p&gt;

&lt;p&gt;For example: let's say that commit X on Feb 3rd is a known good commit, but your tests are now failing on Feb 27th. Roll your code back to X and rerun the tests. If they fail in the same way, you can assume that it's merely data changes. Simply "synch" your test data, rerun the test to verify, then checkout "head" again and make sure the tests pass.&lt;/p&gt;

&lt;p&gt;This is an incredibly bad idea for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simply asserting that the results you want are the results you got is begging for laziness and false positives.&lt;/li&gt;
&lt;li&gt;Rewriting your source code on disk is very stupid.&lt;/li&gt;
&lt;li&gt;The data you want is now in the &lt;tt&gt;__DATA__&lt;/tt&gt; section, pulling it away from the code which should have it, masking the intent.&lt;/li&gt;
&lt;li&gt;It's still a lot of manual work when there are failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All things considered, this is probably one of the dumbest testing ideas I've had, but it's working. I've a few more ideas to make it easier to use, but I'm still trying to figure out a cleaner way of making this work.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/xhFtHHe7J_Q" height="1" width="1"/&gt;</content>
		<author>
			<name>Ovid</name>
			<uri>http://blogs.perl.org/users/ovid/</uri>
		</author>
		<source>
			<title type="html">Ovid</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/ovid/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/ovid//11</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/ovid/2011/02/more-stupid-testing-tricks.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Fixing screen brightness on Thinkpad X201 and Ubuntu 10.10</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/_U6EbwW6heM/" />
		<id>http://www.dagolden.com/?p=1361</id>
		<updated>2011-02-27T21:05:31+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I just tried installing &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; 10.10 on my &lt;a href="http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/catalog.workflow:category.details?current-catalog-id=12F0696583E04D86B9B79B0FEC01C087&amp;amp;current-category-id=4F2AFFFF52964FE2BCF0CC608A649A77&amp;amp;action=init"&gt;Thinkpad X201&lt;/a&gt;. For the most part, everything worked right away and on an SSD drive, it felt blazingly fast.&lt;/p&gt;
&lt;p&gt;However, the screen brightness controls did not work.  Some online research suggested adding &lt;code&gt;acpi_osi=Linux&lt;/code&gt; to the kernel boot parameters and I also found a tip in the &lt;a href="http://www.mjmwired.net/kernel/Documentation/laptops/thinkpad-acpi.txt"&gt;thinkpad-acpi driver documentation&lt;/a&gt; for how to force-enable it (over the native Linux ACPI driver).&lt;/p&gt;
&lt;p&gt;First, edit your &lt;code&gt;/etc/default/grub&lt;/code&gt; file to add &lt;code&gt;acpi_osi=Linux&lt;/code&gt; and &lt;code&gt;acpi_backlight=vendor&lt;/code&gt; arguments to &lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/code&gt;.  It should look something like this:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux acpi_backlight=vendor"
&lt;/pre&gt;
&lt;p&gt;Then run &lt;code&gt;sudo update-grub&lt;/code&gt; to enable the new arguments. After a reboot, my brightness controls were working.&lt;/p&gt;
&lt;p&gt;The other thing I noted was a strange error on boot: "failed to get i915 symbols".  I &lt;a href="http://www.ge.ubuntuforums.org/showpost.php?p=10494101&amp;amp;postcount=86"&gt;found a solution&lt;/a&gt; for that, too:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;sudo -s
echo "i915" &amp;gt;&amp;gt; /etc/initramfs-tools/modules
update-initramfs -k all -u
reboot
&lt;/pre&gt;
&lt;p&gt;For more general information about Linux on the Thinkpad X201, see &lt;a href="http://www.thinkwiki.org/wiki/Category:X201"&gt;ThinkWiki&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/_U6EbwW6heM" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1361/fixing-screen-brightness-on-thinkpad-x201-and-ubuntu-10-10/</feedburner:origLink></entry>

	<entry>
		<title type="html">http://yapc.eu/ - thanks to all involved</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/XD0aFQM6qSQ/httpyapceu---thanks-to-all-involved.html" />
		<id>tag:blogs.perl.org,2011:/users/leo_lapworth//12.1505</id>
		<updated>2011-02-26T13:25:25+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I'd like to publicly thank Bram, the previous owner of &lt;a href="http://yapc.eu/"&gt;http://yapc.eu/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I asked if we could transfer it over to the Perl NOC team so that it becomes an official community resource (he was already redirecting it to the yapceurope.org domain).&lt;/p&gt;

&lt;p&gt;He was more than happy to do so, and has been so helpful in the process.&lt;/p&gt;

&lt;p&gt;At the same time I'd like to thank the &lt;a href="http://noc.perl.org/"&gt;Perl NOC&lt;/a&gt; guys for taking this on. You probably don't realise just how much infrastructure these two guys run on our behalf, and how much more they are taking on!&lt;/p&gt;

&lt;p&gt;I'd also like to thank the &lt;a href="http://act.mongueurs.net/"&gt;ACT&lt;/a&gt; team who run most of the Perl conferences websites and have setup yapc.eu on their server.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://yapc.eu/"&gt;http://yapc.eu/&lt;/a&gt; - points to the &lt;a href="http://www.yapceurope.org/"&gt;http://www.yapceurope.org/&lt;/a&gt; site.&lt;/p&gt;

&lt;p&gt;http://yapc.eu/&lt;strong&gt;year&lt;/strong&gt; will redirect you to the relevant historical sites.&lt;br /&gt;
&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2000"&gt;http://yapc.eu/2000&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2001"&gt;http://yapc.eu/2001&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2002"&gt;http://yapc.eu/2002&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2003"&gt;http://yapc.eu/2003&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;2004 - http://belfast.yapc.org/ no longer active&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2005"&gt;http://yapc.eu/2005&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2006"&gt;http://yapc.eu/2006&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2007"&gt;http://yapc.eu/2007&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2008"&gt;http://yapc.eu/2008&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2009"&gt;http://yapc.eu/2009&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2010"&gt;http://yapc.eu/2010&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href="http://yapc.eu/2011"&gt;http://yapc.eu/2011&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I hope that for 2012 and future YAPC EU's the site can be hosted directly off this domain and that having this consistency will help everyone remember (and advertise) a single address (improving google and awareness in general).&lt;/p&gt;

&lt;p&gt;Thanks for being such a great community to be a part of.&lt;br /&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/XD0aFQM6qSQ" height="1" width="1"/&gt;</content>
		<author>
			<name>Ranguard</name>
			<uri>http://blogs.perl.org/users/leo_lapworth/</uri>
		</author>
		<source>
			<title type="html">Leo Lapworth</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/leo_lapworth/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/leo_lapworth//12</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/leo_lapworth/2011/02/httpyapceu---thanks-to-all-involved.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">How to replicate a failure</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/eitD0XtQ0So/" />
		<id>http://www.dagolden.com/?p=1354</id>
		<updated>2011-02-23T05:27:14+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Whenever I get a bug report or a &lt;a href="http://www.cpantesters.org/"&gt;CPAN Testers&lt;/a&gt; FAIL report and the issue is not obvious right away, the first thing I try to do is replicate the failure.  Without it, I'm left to diagnose with hunches and release new code that I hope fixes that problem.  &lt;strong&gt;That's not software engineering, it's software faith healing.&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
Today, I had &lt;strong&gt;a wonderful experience that I want to hold up as an example&lt;/strong&gt; of what makes my life much easier.  For a while now, I've been getting &lt;a href="http://www.cpantesters.org/cpan/report/968bcc16-3b8d-11e0-a0be-13248a2f2f5b"&gt;very bizarre FAIL reports&lt;/a&gt; for the latest &lt;a href="http://p3rl.org/Module::Build/"&gt;Module::Build&lt;/a&gt; development releases from one particular CPAN tester, Chad Davis.  The symptom is that an outdated module is picked up in Chad's &lt;a href="http://p3rl.org/local::lib"&gt;local::lib&lt;/a&gt;, even though &lt;a href="http://p3rl.org/CPAN"&gt;CPAN.pm&lt;/a&gt; appears to have detected (and satisfied) the missing dependency.  What is particularly weird is that Chad later reported that an explicit "test ..." of the dependency followed by "test ..." of the Module::Build development release then passes all tests.&lt;/p&gt;
&lt;p&gt;My first attempts at replication failed, so after a few emails back and forth, &lt;strong&gt;Chad sent me detailed instructions for replication&lt;/strong&gt;.  Here is an excerpt from his email (used with his permission):&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;I setup a new user, and deleted his .bashrc, leaving only the stock
Ubuntu 10.10 /etc/bash.bashrc in the environment. Then I created this
three-line ~/.bashrc :

perl5=/tmp/tmplib
lib="$perl5/lib/perl5"
eval $(perl -I"$lib" -Mlocal::lib="$perl5")

So, the environment now resolves to:

PERL5LIB=/tmp/tmplib/lib/perl5/x86_64-linux-gnu-thread-multi:/tmp/tmplib/lib/perl5
PERL_LOCAL_LIB_ROOT=/tmp/tmplib
PERL_MB_OPT='--install_base /tmp/tmplib'
PERL_MM_OPT=INSTALL_BASE=/tmp/tmplib
&lt;/pre&gt;
&lt;p&gt;Notice that Chad describes the setup in detail, and even went to the trouble of &lt;strong&gt;replicating it with a "clean" user&lt;/strong&gt;.  This made it very easy to set up exactly the same situation on my development machine.&lt;/p&gt;
&lt;p&gt;Next, Chad walked me through how to replicate the issue and even confirmed it on a &lt;strong&gt;fresh virtual machine&lt;/strong&gt;!&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;Then I installed Parse::CPAN::Meta 1.42 (with CPAN 1.9402 and
local::lib 1.008), then I tested MB 0.37_04 which gave the same
errors. Then I quit the cpan shell, restart it, first do an explit
test of PCM 1.4401 before running a test of MB and all tests pass, as
before.

I also verified the same behavior on a virtual machine with a
fresh ubuntu 10.10 (with updates) and the same three-line .bashrc and
got the same behavior. I'm surprised that you cannot reproduce this.
At this point I don't believe there is anything left that is specific
to my environment.
&lt;/pre&gt;
&lt;p&gt;With those clear instructions, I was able to replicate the issue.&lt;/p&gt;
&lt;p&gt;Chad then took me through variations and outcomes:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;I then upgraded CPAN to 1.94_65 but have the same errors on MB 0.37_04
unless I explicitly test PCM 1.4401 first.

And I have the same problems with MB version 0.37_05 as well, which
also works after an explicit test of PCM 1.4401

I tried to start working backwards a bit, MB 0.3624 is fine,
presumably because it doesn't depend on PCM.
However, MB 0.3701 fails, despite the fact that it only depends on PCM
1.42, which is the one that's installed, according to pmvers.  It
looks to be the same issue in each case: the existing PCM is not always detected.
&lt;/pre&gt;
&lt;p&gt;Now I have a fact base that I can test and confirm. Finally, Chad did some further digging into the problem:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;Then I looked at t/mymeta.t and traced back to CPAN::Meta and looked
at it dependencies in Makefile.PL to find that PCM 1.44 is listed both
as prereq and as a build prereq, which, being a novice, looked a bit
funny to me. Taking out the build prereq and leaving the prereq then
allowed me to test MB without errors.
&lt;/pre&gt;
&lt;p&gt;And with that, I've got a decent workaround solution, as well as a hint as to what's going wrong in CPAN.pm.  I haven't &lt;em&gt;fixed&lt;/em&gt; CPAN.pm yet, but with this start, it's going to be much, much easier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I want to thank Chad for his responsiveness and the incredible detail of his report.&lt;/strong&gt;  I hope it can be a lesson to anyone reporting bugs or responding to questions about failure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Describe your environment in detail&lt;/strong&gt;.  If you can, replicate the error with a "clean" user or even on a clean install of the OS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Describe the exact steps you took to replicate the failure&lt;/strong&gt;.  Take notes as you do it, so you can be as specific as possible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Describe any variations you tried&lt;/strong&gt; that &lt;em&gt;did&lt;/em&gt; work, or any workarounds you used to deal with the problem.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That seems like common sense, but few bug reports or failure investigations I get are as thorough and constructive as the example above.  Thank you, Chad!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/eitD0XtQ0So" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1354/how-to-replicate-a-failure/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-us">wherein I continue to fail at being a dungeon master</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/uppoH8i2GTo/1874" />
		<id>http://rjbs.manxome.org/rubric/entry/1874</id>
		<updated>2011-02-23T03:40:59+00:00</updated>
		<content type="html">&lt;p&gt;In 2005 or so, I started running a science fiction role-playing game, and it
ran for a little under five years.  I had a lot of fun, and I think the game
had some merit, but I got frustrated with a lot of its failures and wrote a
post mortem in which I put most of the blame on myself for a lot of problems
that I brought down on my own.  Below, I reproduce most of my report to the
players:&lt;/p&gt;

&lt;h2&gt;(cut here)&lt;/h2&gt;

&lt;p&gt;Two thousand nine, year of the ox!  Then begins our D&amp;amp;D game.  I am excited
about it.  It is much better planned than Deliverance was, not only in general,
but also because I have attempted to prepare a game that will address the
specific problems with Deliverance.&lt;/p&gt;

&lt;p&gt;Let's try and make sure I know what all those problems are, though, shall we?&lt;/p&gt;

&lt;p&gt;Read the whole thing before starting to reply, if you're going to reply.
"Campaign changes" is my phrase below for, "addressed by changes in the
narrative structure of the game."&lt;/p&gt;

&lt;h3&gt;PACING: too much downtime in too many places&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;too much "real" time in the game when you are powerless&lt;/li&gt;
&lt;li&gt;too much time spent in port going, "anything else you want to do here?"&lt;/li&gt;
&lt;li&gt;too much pre-game smalltalk (especially given the during-game smalltalk)&lt;/li&gt;
&lt;li&gt;large quantities of downtime eliminate any sense of the clock or calendar moving in game; how long since Game 1, in game? who knows? nobody? ugh.&lt;/li&gt;
&lt;li&gt;dead time also contributes to a lack of a sense of distance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;solutions:&lt;/strong&gt; firmer hand with declarations of bullshit; campaign changes;
players must be more proactive in declaring what random stuff they want to do
with no "anything else?"&lt;/p&gt;

&lt;h3&gt;PACING: character advancement nearly non-existent&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;nearly nobody ever spends XP&lt;/li&gt;
&lt;li&gt;no character has much of a personal plot beyond backstory&lt;/li&gt;
&lt;li&gt;the party itself has not advanced much in its position or renown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Partly, this is due to pacing issues.  It takes so long to get through one
story that advancement would be doomed to be slow.  It's also the case that
when the story slows down, the first thing to get dropped are per-character
plotlines.&lt;/p&gt;

&lt;p&gt;There has also been a failure to acquire what I'll call, here, "henchmen."
Opportunities have arisen and been mostly passed by, and other opportunities,
persued, failed because of changes made to cope with pacing issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solutions:&lt;/strong&gt; D&amp;amp;D has better built-in advancement mechanics; campaign changes;
revaluation of XP (see below)&lt;/p&gt;

&lt;h3&gt;GAME PER SE: XP has no value&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;XP is given little importance&lt;/li&gt;
&lt;li&gt;no reason is given as to why (or &lt;em&gt;that&lt;/em&gt;) XP has been rewarded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I really wanted to run a game in which XP rewards were special and valued,
but I did not commit to that up front, so not only do people not know how
much XP they have, or want any to spend, people don't even realize when or
why they receive XP.  This is a major problem, because XP both drives
character advancement and serves as a carrot to reward good play.  This is a
massive problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solution:&lt;/strong&gt; I will return to my original plan and make XP rewards more
public, important, and meaningful.  Also, D&amp;amp;D nearly makes this mandatory.&lt;/p&gt;

&lt;h3&gt;SETTING: nobody can remember a damn thing&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"You have an incoming call from Major Plot Actor." // "Who?"&lt;/li&gt;
&lt;li&gt;"Wait, what's the place where we performed Massive Task?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This has two root causes, I think: too much information, and too lazy
players.  I think that I have an easier time keeping track of everything in
my head than you guys, partly because I have written it down.  This leads to
a lot of "wait, who is X again?" and then I get annoyed because X is so
important and has shown up so often.&lt;/p&gt;

&lt;p&gt;Sometimes I think the problem is that I have provided so many names and places,
and sometimes I think it's because nobody is making an effort to keep track of
the story apart from me.  Maybe that's unfair, but it really seems that way to
me.  I've dropped a lot of minor characters and plotlines and other things both
because of (again) pacing issues and to reduce the number of things to know,
but this campaign just has a lot of balls in the air.  When Odes Tem or Angu
Treech become "who was that guy?" I feel like either I have utterly failed to
tell a memorable story of like nobody was paying attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The D&amp;amp;D game will be radically simplified, and I will only provide as many details as are vitally important -- unless you look for more.&lt;/li&gt;
&lt;li&gt;The players will keep notes.  I don't care how this works.  Maybe one person will take them down and type them up.  Maybe there will be a notebook that rotates between players for note taking.  This isn't negotiable, though.  I'm happy to answer questions about obscure points, but when the question is "Who was that Evil Emperor character again?" the players should be able to have this answer on hand.  Failing this, I would rather just run a campaign from published modules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;SETTING: the desperate need for a map&lt;/h3&gt;

&lt;p&gt;This is stupid, but significant.  I have a map.  I use it all the time.  I just
never, ever, ever remember to bring it to the table.  I need to do that.  I
need to build a map up front of vague details available to all player
characters, provide it to each player, leave a few extra copies at the gaming
venue, and then let the player notetaker add information as we go along.&lt;/p&gt;

&lt;p&gt;Travelling fewer vast distances to exotic places with many cities will help
too.&lt;/p&gt;

&lt;h3&gt;GAMEPLAY: too few challenges (not enough combat or die rolling)&lt;/h3&gt;

&lt;p&gt;This contributes to the devaluation of XP, character advancement, and skills.
In the average game, for various reasons (including dead time) there are not
enough die rolls.  There is not enough chance to fail, meaning there is not
enough chance to triumph.  There are not enough conflicts in which the
success or failure is clear: yes, you killed the guy; no, you didn't bypass
the security system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solutions:&lt;/strong&gt; more combat, more clear-cut challenges, tie re-valued XP to
these challenges; campaign changes&lt;/p&gt;

&lt;h3&gt;SETTING: players do not know what their characters would know&lt;/h3&gt;

&lt;p&gt;Unlike many fantasy settings, the nature of things in the current game's
setting are not a known quantity.  Difficult-to-answer questions include,
"what lies within the realm of common technology?" and "what is the average
person's day like?" and "what do people believe is the truth about some
well-known entity?".  This leads to the Defragulation Problem, where
something that should be obvious to the PCs is not obvious to the player's.&lt;/p&gt;

&lt;p&gt;I have tried to address this with the current game as we go along, but it is
a very difficult problem, especially in a sci-fi setting.  In a fantasy
setting, the basics make this easier: obvious physical possibilities are
possible (yes, you can throw a rock) and magic makes &lt;em&gt;absolutely anything
else&lt;/em&gt; possible.  The parameters of magic's abilities are known only to magic
users, if that.  With no magic users in the party, it is totally reasonable
that nobody knew that Meepo the Magician could shoot dragons from his nose.
Even with magic users, things are pretty clear: anything is possible, and
harder things require someone more powerful than simpler things.&lt;/p&gt;

&lt;p&gt;I am going to make sure that setting specific information (deities, commerce,
etc) are explained to each player sufficiently, but for the most part:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solutions:&lt;/strong&gt; fantasy setting instead of sci-fi setting solves this&lt;/p&gt;

&lt;h2&gt;(cut here)&lt;/h2&gt;

&lt;p&gt;The D&amp;amp;D game that followed was on hiatus for 2010, for various reasons,
but we're going to start back up again, so I've been working on my notes
and planning again, and I've begun to realize that in almost every way,
I have failed to follow through on my plans to right my mistakes.&lt;/p&gt;

&lt;p&gt;After about ten sessions of the new game, I can't name a single
recurring NPC of note.  There has been one reused location, to call it a
reused setting is stretching the truth.  In almost all ways, the game's
improvements have been due to the switch to fantasy rather than science
fiction.  Meanwhile, I think I have made worse mistakes with character
and setting than I made previously.  Part of this has been related to
pacing.  I expected the half of the heroic tier to take about half as
long as it did, and I did nothing to compensate for the fact that it
really stretched out.&lt;/p&gt;

&lt;p&gt;The rest, though, is just foolishness on my part.  I took my eyes off of
my design priorities, and I ended up letting the party do a lot of
noodling around that didn't really establish any plot or setting
advancement that the players could understand.  The really silly thing
is that when I was running the sci-fi game, for much of the time I was
running two groups.  One was a group of itinerant mercenaries, and the
other was a special operations group working in one city.  The special
ops group was a clear demonstration of the power of familiarity.  They
established safehouses, got to know neighborhoods, and got more and more
of a sense of place.  Meanwhile, the mercenaries never spent much time
in any one place, and the game felt like a bunch of disconnected and
unreal locations.&lt;/p&gt;

&lt;p&gt;As I work on planning the rest of my D&amp;amp;D game's heroic tier (using
&lt;a href="http://www.literatureandlatte.com/scrivener.php"&gt;Scrivener&lt;/a&gt;, which is a
fantastic tool for the job), I've been making one index card per likely
session, and on each one I've tried to make reference to a location that
can be reused, NPCs who can remain relevant, and other hooks that will
help make the game world seem like an organic whole.  It's not good
enough that I, the DM, know how things fit together.  The players need
to get a sense for it, too.&lt;/p&gt;

&lt;p&gt;More than that, they need to get the sense, more and more, that they
aren't just moving in the game world, but that they are directing it.
At first, of course, they're going to be smacked around by fate and
kobolds, but as they climb in level, you can't just replace kobolds with
demons and have the heroes spend all their time getting kicked around.
They have to be &lt;em&gt;heroic&lt;/em&gt;, and that means that people need to stand in
awe of them.  For that to happen, there have to be people, and they
can't just be shopkeepers who seem impressed.  I'm trying to make sure
that the PCs will have ample opportunity to feel awesome.  Smackdowns
need only occur once in a while, and will be much more fun when they do.&lt;/p&gt;

&lt;p&gt;I think I'm going to end up having to do quite a lot of revision to my
current plans to make things work, but I think it is going to be
extremely rewarding -- if the darn game ever starts up again.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/uppoH8i2GTo" height="1" width="1"/&gt;</content>
		<author>
			<name>rjbs</name>
			<uri>http://rjbs.manxome.org/rubric</uri>
		</author>
		<source>
			<title type="html">Rubric: rjbs's entries with a body</title>
			<subtitle type="html">Rubric</subtitle>
			<link rel="self" href="http://rjbs.manxome.org/rubric/entries/user/rjbs/has_body/1?format=rss" />
			<id>http://rjbs.manxome.org/rubric</id>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1874</feedburner:origLink></entry>

	<entry>
		<title type="html">Perl memory management...</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/FJzpa4mB4pA/perl-memory-management.html" />
		<id>tag:blogs.perl.org,2011:/users/leo_lapworth//12.1491</id>
		<updated>2011-02-23T00:32:24+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Does Perl run out of memory?&lt;/p&gt;

&lt;p&gt;Today I got an email from someone saying “I was told by a person who used Perl for computational genomics applications that it was running out of memory, so he switched to C++. What’s your thoughts on running out of memory in Perl?”&lt;/p&gt;

&lt;p&gt;Just for posterity here is my reply (please note I’m no expert on this sort of thing and have never had the problem) was…&lt;/p&gt;

        &lt;hr /&gt;

&lt;p&gt;Perl has a great garbage collector. But of course if you read in a 1 GB file into memory, then you are using 1 GB, whatever language you use.&lt;/p&gt;

&lt;p&gt;So the trick is to read in line by line and process the information that is required. This isn’t always possible, but there could be a few other issues which your college didn’t understand. For example you should not pass large data structures around, you should pass references to them, otherwise they get copied.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;my @a_big_list = qw(lots of stuff);
bad(@a_big_list);
good(\@a_big_list);

sub bad {
  my @copy_of_list = @_;
  foreach my $thing (@copy_of_list) { ... }
}

sub good {
  my $list_reference = shift;
  foreach my $thing (@$list_reference) { ... }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The other one is if you use global variables all the time, instead of locally scoped variables (which are garbage collected when they go out of scope) you will have lots of extra memory used.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="http://www.onyxneon.com/books/modern_perl/"&gt;http://www.onyxneon.com/books/modern_perl/&lt;/a&gt; (free) — see “Array References” section for more info.&lt;/p&gt;

&lt;p&gt;Programs will run out of memory if the coder doesn’t fully understand what they are doing, no matter what language.&lt;/p&gt;

&lt;p&gt;You may also be interested in checking out &lt;a href="http://www.bioperl.org/"&gt;http://www.bioperl.org/&lt;/a&gt; and asking questions on &lt;a href="http://www.bioperl.org/wiki/IRC"&gt;their IRC channel&lt;/a&gt;. Perl is used for mass data processing by these guys so they might have further insights.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/FJzpa4mB4pA" height="1" width="1"/&gt;</content>
		<author>
			<name>Ranguard</name>
			<uri>http://blogs.perl.org/users/leo_lapworth/</uri>
		</author>
		<source>
			<title type="html">Leo Lapworth</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/leo_lapworth/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/leo_lapworth//12</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/leo_lapworth/2011/02/perl-memory-management.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Announcing Mason 2</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/7gE9QHaCBSQ/" />
		<id>http://www.openswartz.com/?p=165</id>
		<updated>2011-02-21T17:19:56+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I’m pleased to announce &lt;a href="http://search.cpan.org/perldoc?Mason"&gt;Mason 2&lt;/a&gt;, the first major version of Mason in ten years.&lt;/p&gt;
&lt;p&gt;For those not familiar with it, Mason is a templating framework for generating web pages and other dynamic content. Mason 2 has been rearchitected and reimplemented from the ground up, to take advantage of modern Perl techniques (&lt;a href="http://search.cpan.org/perldoc?Moose"&gt;Moose&lt;/a&gt;, &lt;a href="http://plackperl.org"&gt;Plack/PSGI&lt;/a&gt;) and to correct long-standing feature and syntax inadequacies. Its new foundations should allow its performance and flexibility to far exceed Mason 1.&lt;/p&gt;
&lt;p&gt;Though little original code or documentation remains, Mason’s core philosophy is intact; it should still “feel like Mason” to existing users.&lt;/p&gt;
&lt;p&gt;I’ve talked about plans for Mason 2 here &lt;a href="http://www.openswartz.com/2009/09/01/what-mason-2-0-would-look-like/"&gt;before&lt;/a&gt;, but as things have changed in the past year and a half, here’s an updated summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;. The name is now Mason, instead of &lt;a href="http://search.cpan.org/perldoc?HTML::Mason"&gt;HTML::Mason&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Component classes&lt;/strong&gt;. Each component is represented by its own (Moose) class, rather than just an instance of a common class. This means that components have their own namespaces, subroutines, methods, and attributes, and can truly inherit from one other. See &lt;a href="http://search.cpan.org/perldoc?Mason::Manual::Components"&gt;Mason::Manual::Components&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Filters&lt;/strong&gt;. A single powerful filter syntax and mechanism consolidates three separate filter mechanisms from Mason 1 (filter blocks, components with content, and escape flags). See &lt;a href="http://search.cpan.org/perldoc?Mason::Manual::Filters"&gt;Mason::Manual::Filters&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;. Moose roles are utilized to create a flexible plugin system that can modify nearly every aspect of Mason’s operation. Previously core features such as caching can now be implemented in plugins. See &lt;a href="http://search.cpan.org/perldoc?Mason::Manual::Plugins"&gt;Mason::Manual::Plugins&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Web integration&lt;/strong&gt;. Mason 1’s bulky custom web handling code (&lt;code&gt;ApacheHandler&lt;/code&gt;, &lt;code&gt;CGIHandler&lt;/code&gt;) has been replaced with a simple &lt;a href="http://search.cpan.org/perldoc?Mason::Plugin::PSGIHandler"&gt;PSGI handler&lt;/a&gt; and with plugins for web frameworks like &lt;a href="http://search.cpan.org/perldoc?Catalyst::View::Mason2"&gt;Catalyst&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Dancer::Template::Mason2"&gt;Dancer&lt;/a&gt;. The core Mason distribution is now completely web-agnostic. See &lt;a href="http://search.cpan.org/perldoc?Mason::Plugin::PSGIHandler"&gt;Mason::Plugin::PSGIHandler&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;File naming&lt;/strong&gt;. Mason now facilitates and enforces (in a customizable way) standard file extensions for components: .m (top-level components), .mi (internal components), and .pm (pure-perl components).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href="http://search.cpan.org/perldoc?Mason::Manual::UpgradingFromMason1"&gt;Mason::Manual::UpgradingFromMason1&lt;/a&gt; for a more detailed list of changes.&lt;/p&gt;
&lt;p&gt;Mason 2 is obviously still in alpha status, but it has a fair sized test suite and I’m eager to start building web projects with it. I hope you’ll give it a try too! Post feedback here or on the &lt;a href="https://lists.sourceforge.net/lists/listinfo/mason-users"&gt;Mason user’s list&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/7gE9QHaCBSQ" height="1" width="1"/&gt;</content>
		<author>
			<name>Jonathan Swartz</name>
			<uri>http://www.openswartz.com</uri>
		</author>
		<source>
			<title type="html">Open Swartz</title>
			<subtitle type="html">Perl and open source development</subtitle>
			<link rel="self" href="http://www.openswartz.com/feed/" />
			<id>http://www.openswartz.com</id>
		</source>
	<feedburner:origLink>http://www.openswartz.com/2011/02/21/announcing-mason-2/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-US">Now hosting the master mirror for CPAN</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/JOamTVI237Q/now-hosting-the-master-mirror-for-cpan.html" />
		<id>http://log.perl.org/2011/02/now-hosting-the-master-mirror-for-cpan.html</id>
		<updated>2011-02-21T01:02:54+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;15 years ago &lt;a href="http://search.cpan.org/~jhi/" target="_self"&gt;Jarkko Hietaniemi&lt;/a&gt; started CPAN; now arguably the most important feature of Perl.  For all that time the canonical CPAN has been hosted at &lt;a href="http://www.nic.funet.fi/" target="_self"&gt;FUnet&lt;/a&gt;, with (now more than 600) mirrors around the world.  Having made much of my living using Perl I'm incredibly grateful to Jarkko and FUnet for having built and maintained this incredible resource for such a long time.&lt;/p&gt;
&lt;p&gt;A few months ago Jarkko started passing the baton for looking after CPAN on to others in the community and as part of that we at perl.org are taking over the task of being the "master mirror" for CPAN.  Currently almost 500 of the CPAN mirrors are mirroring straight from FUnet which is an incredible resource drain for the master mirror.&lt;/p&gt;
&lt;p&gt;The new system will be using the &lt;a href="http://search.cpan.org/dist/File-Rsync-Mirror-Recent/" target="_self"&gt;rrr tool&lt;/a&gt; for rapid mirroring to a set of "tier 1" mirrors so we more easily can scale to support anyone who wants to mirror CPAN.  File::Rsync::Mirror::Recent is already in use by some of the mirrors to get "instant" updates from &lt;a href="http://pause.perl.org/" target="_self"&gt;PAUSE&lt;/a&gt;. &lt;a href="http://search.cpan.org/~andk/" target="_self"&gt;Andreas König&lt;/a&gt; (the inventor and long time maintainer of PAUSE) is working on some improvements to make it work better for cpan.org in general.&lt;/p&gt;
&lt;p&gt;We're also working on getting things in place so the static pages on &lt;a href="http://www.cpan.org/" target="_self" title="CPAN"&gt;cpan.org&lt;/a&gt; more easily can be maintained and updated by the community.&lt;/p&gt;
&lt;p&gt;If you are interested in helping with testing the mirroring process or anything else, please subscribe to the &lt;a href="http://lists.perl.org/list/cpan-workers.html" target="_self"&gt;cpan-workers&lt;/a&gt; mailing list.&lt;/p&gt;
&lt;p&gt;- Ask&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/JOamTVI237Q" height="1" width="1"/&gt;</content>
		<author>
			<name>Ask Bjørn Hansen</name>
			<uri>http://log.perl.org/</uri>
		</author>
		<source>
			<title type="html">Perl NOC</title>
			<subtitle type="html">the perl.org infrastructure weblog</subtitle>
			<link rel="self" href="http://log.perl.org/index.rdf" />
			<id>http://log.perl.org/</id>
		</source>
	<feedburner:origLink>http://log.perl.org/2011/02/now-hosting-the-master-mirror-for-cpan.html</feedburner:origLink></entry>

	<entry>
		<title type="html">It's the fact that the smoke machine had an old...</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/B4dndFqSHQ4/18929.html" />
		<id>tag:dreamwidth.org,2009-05-20:370822:18929</id>
		<updated>2011-02-19T10:27:52+00:00</updated>
		<content type="html">(but not crotchety) CPU that caused the problems with Math::BigInt::GMP.&lt;br /&gt;&lt;br /&gt;The fix is to change out the libgmp library, and this will be tested later today.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://hg.curtisjewell.name/Perl-Dist-Strawberry/rev/68bfeebf36f0"&gt;http://hg.curtisjewell.name/Perl-Dist-Strawberry/rev/68bfeebf36f0&lt;/a&gt; or &lt;a href="https://fisheye2.atlassian.com/changelog/cpan?cs=13768"&gt;https://fisheye2.atlassian.com/changelog/cpan?cs=13768&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;In other news, we've fixed the 'missing-README' bug - the README file (and a few links, as well) were accidental casualties of the 'pluggable-Perl-version' move.&lt;br /&gt;&lt;br /&gt;So hopefully I'll be able to build a Beta 1 this weekend.&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/B4dndFqSHQ4" height="1" width="1"/&gt;</content>
		<author>
			<name>csjewell</name>
			<uri>http://csjewell.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Curtis Jewell's Perl stuff</title>
			<subtitle type="html">There really IS more than one way to do it, even on Windows!</subtitle>
			<link rel="self" href="http://csjewell.dreamwidth.org/data/atom" />
			<id>tag:dreamwidth.org,2009-05-20:370822</id>
		</source>
	<feedburner:origLink>http://csjewell.dreamwidth.org/18929.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Perl and Parsing 7: Do List Operators have Left/Right Precedence?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/ZT7gWu8AQJ4/perl-and-parsing-7-do-list-operators-have-leftright-precedence.html" />
		<id>tag:blogs.perl.org,2011:/users/jeffrey_kegler//63.1473</id>
		<updated>2011-02-18T20:20:28+00:00</updated>
		<content type="html" xml:lang="en">&lt;h1&gt;Chiral Operators&lt;/h1&gt;
In actual usage,
the syntax of Perl's list operators is quite natural.
Descriptions of that syntax, however, tend to be awkward.
&lt;p&gt;The current practice is to describe this syntax in terms of "left precedence"
and "right precedence".
In other words, list operators are said to be chiral.
I have
problems with the Chiral Interpretation of list operators.
The most serious of these: the Chiral Interpretation
does not actually account for the behavior
of expressions that contain list operators.
&lt;/p&gt;&lt;p&gt;In this post, I assume you have a working knowledge of one or more
list operators (examples are &lt;var&gt;join&lt;/var&gt; and &lt;var&gt;sort&lt;/var&gt;).
The most authoritative account of the Chiral Interpretation
is in
&lt;a href="http://perldoc.perl.org/perlop.html#Terms-and-List-Operators-(Leftward)"&gt;the perlop man
page&lt;/a&gt;.
&lt;/p&gt;&lt;h1&gt;Our Example&lt;/h1&gt;
The rest of this post will use a single example:
&lt;pre&gt;&lt;code class="prettyprint"&gt;
sub f { say $_[0]; return $_[0]; }
say join ';', $a = f(1), $b = join ',', $c = f(2),
    $d = join '-', $e = f(3), $f = f(4);
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
Here's the output:
&lt;/p&gt;&lt;pre&gt;&lt;code class="prettyprint"&gt;
1
2
3
4
1;2,3-4
&lt;/code&gt;
&lt;/pre&gt;
&lt;h1&gt;What is Precedence?&lt;/h1&gt;
Precedence is a concept familiar from ordinary arithmetic.
In school we learned that, in the expression
&lt;pre&gt;&lt;code class="prettyprint"&gt;
   1+2*3+4

&lt;/code&gt;
&lt;/pre&gt;
the 2*3 should be multiplied out first to yield 6, before either of the
two additions are performed.
Multiplication has higher prececedence than addition.
&lt;p&gt;Precedence is a hierarchy.
There is an order, from high to low,
and each operator has a distinct place.
&lt;/p&gt;&lt;p&gt;Some cases are tricky.
The same symbol is often both a unary operator and a binary
operator.
It's very common for the ASCII hyphen-minus sign ("-") to act as both a unary
negation operator, and as a binary subtraction operator.
The precedence of the unary operator can
be different from the precedence of the binary
operator,
and often is.
But while the unary and binary operators may share the
same symbol, they are considered to be distinct operators.
&lt;/p&gt;&lt;p&gt;If we accept that list operators have a left
and a right precedence,
as the &lt;var&gt;perlop&lt;/var&gt; man page does,
that would be an outright exception
to the hierarchical ordering of operators by precedence.
This points to a potential problem in defining left and right
precedence.
But that is not the most serious issue with the Chirality Interpretation.
So that I can go straight to my main point,
let's assume that there are
&lt;b&gt;no issues in defining left and right precedence&lt;/b&gt;.
For now,
let's just say that "I can't tell you what the difference between left and
right precedence is, exactly, but I know it when I see it".
&lt;/p&gt;&lt;p&gt;Let's ask instead about the precedence of
&lt;b&gt;operators other than the list operators&lt;/b&gt;
in expressions which contain list operators.
&lt;/p&gt;&lt;h1&gt;Comma Operators versus Assignments&lt;/h1&gt;
&lt;p&gt;Look at the assignment and comma operators in the example above.
Ask this question:
Does the comma have a higher or
lower precedence than the assignment operator?
&lt;/p&gt;&lt;p&gt;According to the &lt;var&gt;perlop&lt;/var&gt; man page,
assignment has a higher precedence than
the comma operator.
But in the example above, this is &lt;b&gt;not&lt;/b&gt; always true.
Here are
values of the variables after
the example is executed:
&lt;/p&gt;&lt;pre&gt;&lt;code class="prettyprint"&gt;
$a=1
$b=2,3-4
$c=2
$d=3-4
$e=3
$f=4
&lt;/code&gt;
&lt;/pre&gt;
For the assignments to
&lt;var&gt;$a&lt;/var&gt;,
&lt;var&gt;$c&lt;/var&gt;,

&lt;var&gt;$e&lt;/var&gt;,
and &lt;var&gt;$f&lt;/var&gt;,
things are as &lt;var&gt;perlop&lt;/var&gt; says -- those assignment operators
have higher precedence than all the commas.
&lt;p&gt;But for the assigment operators in the assignments to
&lt;var&gt;$b&lt;/var&gt;,
and &lt;var&gt;$d&lt;/var&gt;,
things do &lt;b&gt;not&lt;/b&gt; behave as advertized.
True, those assignments still have higher precedence than the
commas to their left.
&lt;b&gt;But the assignment of $b
has lower precedence than the
commas to its right.&lt;/b&gt;
The same is true of the assignment to &lt;var&gt;$d&lt;/var&gt;.
&lt;/p&gt;&lt;h2&gt;Chirality is Contagious?&lt;/h2&gt;
&lt;p&gt;What seems to be happening
is that not only are list operators showing chirality,
but that chirality is spreading to other operators.
The &lt;var&gt;perlop&lt;/var&gt; man page does not really prepare us for
this.
&lt;/p&gt;&lt;h1&gt;The Grouping Operator Interpretation&lt;/h1&gt;
&lt;p&gt;Now let's add parentheses, so that they clarify the syntactic groupings
without changing them:
&lt;/p&gt;&lt;pre&gt;&lt;code class="prettyprint"&gt;
say join ';', $a = f(1), $b = (join ',', $c = f(2),
    $d = (join '-', $e = f(3), $f = f(4))); 
&lt;/code&gt;
&lt;/pre&gt;

With this the conceptual problems disappear.
Why?
Because parentheses are recognized as a &lt;b&gt;grouping operator&lt;/b&gt;.
That is, we know that, regardless of the precedence hierarchy among
operators,
operations inside parentheses will take precedence over operations
outside the parentheses.
Parentheses also have two different precedences, but they
are not chiral -- parentheses have an internal and an external precedence.
&lt;p&gt;The parentheses
suggest a better way to describe
Perl's list operators.
We can think of the list operators as a special kind of grouping operator.
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Just as a grouping begins before a left parenthesis,
a grouping starts just before the list operator.
&lt;/li&gt;&lt;li&gt;Just as with parentheses, operations inside a grouping
take precedence over those outside.
&lt;/li&gt;&lt;li&gt;Unlike parentheses, the grouping begun by a list operator is
not closed explicitly.
The grouping started by a list operator ends just
before the next operator
which has a precedence lower than the internal precedence of the list operator.
&lt;/li&gt;&lt;li&gt;If, in an expression,
no operator after the list operator has lower precedence,
then the grouping ends at the end of the expression.
&lt;/li&gt;&lt;li&gt;The internal precedence of list operators is between the precedence
of the Perl comma operator and the precedence of Perl's logical &lt;var&gt;not&lt;/var&gt;
operator.
This is higher
than the internal precedence of parentheses.
In the current
&lt;var&gt;perlop&lt;/var&gt; man page this is said to be
the "rightward
precedence" of list operators.
&lt;/li&gt;&lt;li&gt;The external precedence of a list operator is the same
as the
precedence of a Perl term.
This is the same as the external precedence of parentheses.
In the current &lt;var&gt;perlop&lt;/var&gt; man page, this is said to be the "leftward
precedence" of list operators.
&lt;/li&gt;&lt;li&gt;List operators do not have chirality.
&lt;/li&gt;&lt;/ul&gt;
&lt;h1&gt;Other Problems with Chirality&lt;/h1&gt;
&lt;h2&gt;Operator Chirality is Hard to Define&lt;/h2&gt;
&lt;p&gt;Above, I deferred the question of how to define left
and right precedence.  Now I'll come back to it.
&lt;/p&gt;&lt;p&gt;Giving the same operator two different precedences violates
the textbook definition of precedence.
Precedence is a hierarchy.
Chiral operators break that hierarchy.
&lt;/p&gt;&lt;p&gt;
Consider an operator which is to the right of one list
operator, but to the left of another list operator.
How do you assign it a precedence?
&lt;/p&gt;&lt;p&gt;Grouping operators also break the hierarchy,
but they do it in a well-defined way.
You could modify the Chiral Interpretation so that it
is equally well-defined.
But I think, if you do so,
you'll find you've reinvented grouping.
&lt;/p&gt;&lt;h2&gt;Operator Chirality is Hard to Describe&lt;/h2&gt;
&lt;p&gt;Find a Perl book that describes list operator precedence.
There are several excellent ones, by experts.
Ask yourself:
If I were a newbie, and I carefully
studied these paragraphs,
would I know list operator syntax cold?
Or would there still be a lot of cases where
I was not sure?
The answer to this must be subjective,
but my own observation is that many a lucid account
of Perl bogs down when it is time to describe
the syntax of list operators.
&lt;/p&gt;&lt;h2&gt;Operator Chirality is not in the Textbooks&lt;/h2&gt;
&lt;p&gt;"Left precedence" and "Right precedence" certainly sound
like academic terms,
&lt;a href="http://blogs.perl.org/users/jeffrey_kegler/#NOTE1"&gt;but to my knowledge
they are nowhere in the
academic literature&lt;/a&gt;.
As far as I know, chiral operators are an
"ad hoc" explanation invented and used
exclusively in attempts to grapple with Perl's
list operators.
&lt;/p&gt;&lt;p&gt;Both
the Chiral Interpretation and the Grouping Interpretation involve giving the same
set of operators two different precedences.
The difference is that the behavior of grouping operators is well understood
and has been carefully documented in the academic literature.
&lt;/p&gt;&lt;p&gt;The Perl tradition is not to fret excessively about
theory.
But when the descriptive going gets tough,
it is nice to have theory to fall back on.
&lt;/p&gt;&lt;h1&gt;Notes&lt;/h1&gt;
&lt;a name="NOTE1"&gt;Note 1&lt;/a&gt;:
The academic literature on parsing is large, and it is risky
to assert that something is not "Out There" somewhere.
But there's no sign of "left precedence"
and "right precedence" in
the very comprehensive
&lt;a href="ftp://ftp.cs.vu.nl/pub/dick/PTAPG_2nd_Edition/index.html"&gt;
Grune &amp;amp; Jacobs, Parsing Techniques: A Practical Guide - Second Edition&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/ZT7gWu8AQJ4" height="1" width="1"/&gt;</content>
		<author>
			<name>Jeffrey Kegler</name>
			<uri>http://blogs.perl.org/users/jeffrey_kegler/</uri>
		</author>
		<source>
			<title type="html">Ocean of Awareness</title>
			<subtitle type="html">Jeffrey Kegler's blog on Marpa, Perl and stuff (he hopes) of interest to his fellow techies.</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/jeffrey_kegler/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/jeffrey_kegler//63</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/jeffrey_kegler/2011/02/perl-and-parsing-7-do-list-operators-have-leftright-precedence.html</feedburner:origLink></entry>

	<entry>
		<title type="html">ActiveState PPM index + download stats</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/8xIHjc_C6t8/activestate-ppm-index-download-stats.html" />
		<id>tag:blogs.perl.org,2011:/users/leo_lapworth//12.1480</id>
		<updated>2011-02-18T08:33:34+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;ActiveState have updated their PPM index page:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.activestate.com/ppm/"&gt;http://code.activestate.com/ppm/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As reported &lt;a href="http://www.activestate.com/blog/2011/02/ppm-index-new-way-browse-perl-packages"&gt;http://www.activestate.com/blog/2011/02/ppm-index-new-way-browse-perl-packages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is interesting to see which are the popular downloads and as an author the number of downloads of your own modules. They also have a nice chart of which OS's the module has been built for.&lt;/p&gt;

&lt;p&gt;Not so sure that the example in the article - DBD::Mysql Failing on OSX - is such a good showcase! (looking at the report just seemed that mysql_config wasn't in the build servers path or something, so a setup issue, not a module issue).&lt;/p&gt;

&lt;p&gt;But that aside it's interesting to see how far PPM seems to have come.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/8xIHjc_C6t8" height="1" width="1"/&gt;</content>
		<author>
			<name>Ranguard</name>
			<uri>http://blogs.perl.org/users/leo_lapworth/</uri>
		</author>
		<source>
			<title type="html">Leo Lapworth</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/leo_lapworth/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/leo_lapworth//12</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/leo_lapworth/2011/02/activestate-ppm-index-download-stats.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Interview about Mojolicious</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Vkn_1y-bd3c/interview-about-mojolicious" />
		<id>http://blog.kraih.com/interview-about-mojolicious</id>
		<updated>2011-02-18T07:24:17+00:00</updated>
		<content type="html">&lt;p&gt;
	&lt;/p&gt;&lt;p&gt;Tara Gibbs interviewing yours truly for the &lt;a href="http://www.activestate.com/blog/2011/02/mojolicious-interview-sebastian-riedel"&gt;ActiveState Blog&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;On Saturday, Sebastian Riedel released version 1.1 of Mojolicious, the next generation web framework for Perl. We love Perl and web development here at ActiveState, so we contacted Sebastian for an interview.&lt;/blockquote&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.kraih.com/interview-about-mojolicious"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.kraih.com/interview-about-mojolicious#comment"&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Vkn_1y-bd3c" height="1" width="1"/&gt;</content>
		<author>
			<name>Sebastian Riedel</name>
			<uri>http://blog.kraih.com</uri>
		</author>
		<source>
			<title type="html">Sebastian Riedel about Perl and the Web</title>
			<subtitle type="html">Most recent posts at Sebastian Riedel about Perl and the Web</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/kraih" />
			<id>http://blog.kraih.com</id>
		</source>
	<feedburner:origLink>http://blog.kraih.com/interview-about-mojolicious</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Against The Use Of Programming Languages in Configuration Files</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/jxtPF8rvNN8/001527a.html" />
		<id>http://taint.org/?p=3932</id>
		<updated>2011-02-17T23:15:27+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img align="right" src="http://farm4.static.flickr.com/3637/3455063236_382eee0512_m.jpg" style="padding: 10px;" /&gt;It’s pretty common for apps to require “configuration” — external files which can contain settings to customise their behaviour. Ideally, apps shouldn’t require configuration, and this is always a good aim.  But in some situations, it’s unavoidable.&lt;/p&gt;

&lt;p&gt;In the abstract, it may seem attractive to use a fully-fledged programming language as the language to express configuration in.  However, I think this is not a good idea.  Here are some reasons why configuration files should not be expressed in a programming language (and yes, I include &lt;a href="http://www.infoq.com/news/2007/06/dsl-or-not"&gt;“Ruby without parentheses”&lt;/a&gt; in that bucket):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a configuration language is Turing-incomplete, configuration files written in it can be validated “offline”, ie. without executing the program it configures.  All programming languages are, by definition, Turing-complete, meaning that the program must be executed in full before its configuration can be considered valid.&lt;/p&gt;

&lt;p&gt;Offline validation is a useful feature for operational usability, as we’ve found with &lt;a href="http://spamassassin.apache.org/full/3.3.x/doc/spamassassin-run.html"&gt;“spamassassin –lint”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some configuration settings may be insecure in certain circumstances; for example, in SpamAssassin, we allow certain classes of settings like whitelist/blacklists to be set in a users ~/.spamassassin/user_prefs file, while disallowing rule definitions (which can cause poor performance if poorly written).&lt;/p&gt;

&lt;p&gt;If your configuration file is simply an evaluated chunk of code, it becomes more difficult to protect against an attacker introspecting the interpreter and overriding the security limitations.  It’s not impossible, since you can, for instance, use a sandboxed interpreter, but this is typically not particularly easy to implement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a rather hairy configuration file I’ve concocted.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;pre&gt;    #! /usr/bin/somelanguage
    !$ app.status load html
    !c = []
    ;c['sources'] = &amp;lt; &amp;gt;
    ;c['sources'].append(
        NewConfigurationThingy("foo_bar",
            baz="flargle"))
    ;c['builders'] = &amp;lt; &amp;gt;
    ;c['bots'] = &amp;lt; &amp;gt;
    !$ app.steps load source, shell
    ;bf_mc_generic = factory.SomethingFactory( &amp;lt;
        woo(source.SVN, svnurl="http://example.com/foo/bar"),
        woo(shell.Configure, command="/bar/baz start"),
        woo(shell.Test, command="/bar/baz test"),
        woo(shell.Configure, command="/bar/baz stop")
        &amp;gt; );
    ;b1 = &amp;lt; "name": "mc-fast", "slavename": "mc-fast",
                 "builddir": "mc-fast", "factory": ;bf_mc_generic &amp;gt;
    ;c['builders'].append(;b1)
    ;SomethingOrOther = ;c
&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This isn’t actually entirely concocted from thin air — it’s actually bits of &lt;a href="http://svn.apache.org/viewvc/spamassassin/trunk/build/buildbot/bbmass_master.cfg?revision=501545&amp;amp;view=markup"&gt;our BuildBot configuration file&lt;/a&gt;, from before we switched to using Hudson.  I’ve replaced the familiar Python syntax with deliberately-unfamiliar made-up syntax, to emulate the user experience I had attempting to configure BuildBot with no pre-existing Python knowledge. ;)&lt;/p&gt;

&lt;p&gt;Compare with this re-stating of the same configuration data in a simplified, “configuration-oriented” imaginary DSL:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;add_source NewConfigurationThingy foo_bar baz=flargle

buildfactory bf_mc_generic source.SVN http://example.com/foo/bar
buildfactory bf_mc_generic shell.Configure /bar/baz start
buildfactory bf_mc_generic shell.Test /bar/baz test
buildfactory bf_mc_generic shell.Configure /bar/baz stop

add_builder name=mc-fast slavename=mc-fast
     builddir=mc-fast factory=bf_mc_generic
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Essentially, I’ve extracted the useful configuration data from the hairy example, discarded the symbology used to indicate types, function calls, data structure construction, and let the configuration domain knowledge imply what’s necessary.  Not only is this easier to comprehend for the casual reader, it also reduces the risk of syntax errors, by simply minimising the number of syntactical components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See Also&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;Wikipedia page on DSLs&lt;/a&gt; is quite good on the topic, with a succinct list of pros and cons.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/648246/at-what-point-does-a-config-file-become-a-programming-language/"&gt;This StackOverflow thread&lt;/a&gt; has some good comments — I particularly like &lt;a href="http://stackoverflow.com/questions/648246/at-what-point-does-a-config-file-become-a-programming-language/648262#648262"&gt;this point&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When you need your application to be very “configurable” in ways that you cannot imagine today, then what you really need is a plugins system. You need to develop your application in a way that someone else can code a new plugin and hook it into your application in the future.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;+1.&lt;/p&gt;

&lt;p&gt;This seems to be a controversial topic — as you can see, that page has people on both sides of the issue.  Maybe it fundamentally comes down to a matter of taste.  Anyway — my $.02.&lt;/p&gt;

&lt;p&gt;(&lt;strong&gt;Update:&lt;/strong&gt; discussions elsewhere: &lt;a href="http://www.reddit.com/r/programming/comments/fnorp/against_the_use_of_programming_languages_in/"&gt;Proggit&lt;/a&gt;, &lt;a href="http://news.ycombinator.com/item?id=2235313"&gt;HackerNews&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;(Image credit: &lt;a href="http://www.flickr.com/photos/altoexyl/3455063236/"&gt;Turn The Dial&lt;/a&gt; by &lt;a href="http://www.flickr.com/photos/altoexyl/"&gt;VERY URGENT Photography&lt;/a&gt;)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/jxtPF8rvNN8" height="1" width="1"/&gt;</content>
		<author>
			<name>Justin</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/18/001527a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Perlbuzz news roundup for 2011-02-17</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/oPnQ7qX8270/perlbuzz-news-roundup-for-2011-02-17.html" />
		<id>tag:perlbuzz.com,2011://1.818</id>
		<updated>2011-02-17T15:46:11+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;
These links are collected from the
&lt;a href="http://twitter.com/perlbuzz"&gt;Perlbuzz Twitter feed&lt;/a&gt;.
If you have suggestions for news bits, please mail me at
&lt;a href="mailto:andy@perlbuzz.com"&gt;andy@perlbuzz.com&lt;/a&gt;.
&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;Use Regexp::Common to find locale-specific dates (&lt;a href="http://www.effectiveperlprogramming.com/blog/1003"&gt;effectiveperlprogramming.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Perl 5.12.3 released (&lt;a href="http://www.nntp.perl.org/group/perl.perl5.porters/2011/01/msg168368.html"&gt;nntp.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Perl 6 Tablets ready for early review (&lt;a href="http://news.perlfoundation.org/2011/01/perl-6-tablets-ready-for-early.html"&gt;news.perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Show Perl subname in vim status line (&lt;a href="http://blogs.perl.org/users/ovid/2011/01/show-perl-subname-in-vim-statusline.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Will your perl remain supported, and what does that mean? (&lt;a href="http://rjbs.manxome.org/rubric/entry/1872"&gt;rjbs.manxome.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;How to, and how not to, do a change log (&lt;a href="http://blog.urth.org/2011/01/changes-file-how-and-how-not-to.html"&gt;blog.urth.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Status report on Lacuna Expanse, the Perl-based online game (&lt;a href="http://blogs.perl.org/users/jt_smith/2011/01/lacuna-expanse-status-report.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;10 reasons we won't use your CPAN module (&lt;a href="http://showmetheco.de/articles/2011/2/top-10-reasons-why-we-wont-use-your-cpan-distribution.html"&gt;showmetheco.de&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A checklist for new event organizers: How to schedule and get people there (&lt;a href="http://www.chesnok.com/daily/2011/02/03/checklist-for-new-event-organizers-how-to-schedule-and-get-people-there/"&gt;chesnok.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Guerilla Perl installations with perlbrew (&lt;a href="http://www.pythian.com/news/19971/guerilla-perl-installations/"&gt;pythian.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Changing the changelog (&lt;a href="http://blogs.perl.org/users/sawyer_x/2011/02/changing-the-changelog.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use Data::Dump filters for nicer pretty-printing (&lt;a href="http://www.effectiveperlprogramming.com/blog/312"&gt;effectiveperlprogramming.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Bloated Perl apps (&lt;a href="http://blogs.perl.org/users/steven_haryanto/2011/02/the-coming-bloated-perl-apps.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;mod_perl 2.0.5 has arrived (&lt;a href="http://blogs.perl.org/users/phred/2011/02/mod-perl-205-has-arrived.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Five Test::More features you might not be using (&lt;a href="http://www.dagolden.com/index.php/1322/five-testmore-features-you-might-not-be-using-yet/"&gt;dagolden.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;I always feel a bit of nostalgic data-mangling pride when I get to use Perl's unpack() function&lt;/li&gt;
&lt;li&gt;Testing Mojolicious apps with Test::Mojo (&lt;a href="http://blogs.perl.org/users/tempire/2011/02/testing-your-mojo-with-testmojo.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Why I use Perltidy (&lt;a href="http://www.leifove.com/2011/02/why-i-use-perltidy-or-why-coding-style.html"&gt;leifove.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Modern Perl, &lt;a href="http://twitter.com/chromatic_x"&gt;@chromatic_x&lt;/a&gt;'s fantastic book, now available as ePub (&lt;a href="http://www.modernperlbooks.com/mt/2011/02/share-the-modern-perl-epub.html"&gt;modernperlbooks.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;I love that there are PostgreSQL sessions at the MySQL conf. We need Ruby sessions at YAPC! (&lt;a href="http://www.chesnok.com/daily/2011/02/14/postgresql-at-mysql-users-conference-the-sessions/"&gt;chesnok.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Want better Perl 6 sooner? (&lt;a href="http://www.modernperlbooks.com/mt/2011/02/want-better-perl-6-sooner-write-rakudo-benchmarks.html"&gt;modernperlbooks.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Creating a 3D-printable heart with Perl (&lt;a href="http://www.thingiverse.com/thing:6377"&gt;thingiverse.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Victims of the success of CPAN documentation (&lt;a href="http://www.modernperlbooks.com/mt/2011/02/victims-of-the-success-of-cpan-documentation.html"&gt;modernperlbooks.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Find dates with Regexp::Common (&lt;a href="http://www.effectiveperlprogramming.com/blog/1002"&gt;effectiveperlprogramming.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Perl Moderne, a new French book, not chromatic's Modern Perl book (&lt;a href="http://damien.krotkine.com/the-player-of-games/2011/02/perl-moderne.html"&gt;damien.krotkine.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Automated non-functional Perl code testing (&lt;a href="http://blogs.perl.org/users/alexey_shrub/2011/02/non-functional-perl-code-testing---automated-code-review.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

        
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=j1lj0H24j8k:VWACwkc9Ot4:yIl2AUoC8zA"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=j1lj0H24j8k:VWACwkc9Ot4:F7zBnMyn0Lo"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/PerlBuzz?i=j1lj0H24j8k:VWACwkc9Ot4:F7zBnMyn0Lo" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=j1lj0H24j8k:VWACwkc9Ot4:V_sGLiPBpWU"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/PerlBuzz?i=j1lj0H24j8k:VWACwkc9Ot4:V_sGLiPBpWU" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=j1lj0H24j8k:VWACwkc9Ot4:qj6IDK7rITs"&gt;&lt;img border="0" src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height="1" src="http://feeds.feedburner.com/~r/PerlBuzz/~4/j1lj0H24j8k" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/oPnQ7qX8270" height="1" width="1"/&gt;</content>
		<author>
			<name>Andy Lester</name>
			<uri>http://perlbuzz.com/</uri>
		</author>
		<source>
			<title type="html">Perlbuzz</title>
			<subtitle type="html">What's happening in the world of Perl programming, including Perl 5, Perl 6, the CPAN and Parrot?</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/PerlBuzz" />
			<id>tag:perlbuzz.com,2008-11-11://1</id>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/PerlBuzz/~3/j1lj0H24j8k/perlbuzz-news-roundup-for-2011-02-17.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Portable plugin apps?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/lwM5KUS3BaY/portable-plugin-apps.html" />
		<id>tag:blogs.perl.org,2011:/users/leo_lapworth//12.1479</id>
		<updated>2011-02-17T14:13:07+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I might be working on a project for a friend shortly. They have lots of experience with developers who use Drupal - and I get the feeling (could be wrong) that you can semi-plug-and-play with Drupal?&lt;/p&gt;

&lt;p&gt;So..&lt;br /&gt;
Want a wiki - use X plugin&lt;br /&gt;
Want a user system - use Y plugin&lt;br /&gt;
Want user profiles - use Z plugin&lt;br /&gt;
Want user gallery - use A plugin&lt;br /&gt;
Want a blog - use B plugin&lt;/p&gt;

&lt;p&gt;So I started looking around, and there are plugins for specific frameworks, or standalone applications written in a framework, WebGUI CMS seems to have a lot of features but I want to use my framework of choice (and experience!). &lt;/p&gt;

&lt;p&gt;Having been playing with Plack it got me thinking...&lt;/p&gt;

&lt;p&gt;Just as Plack/PSGI sits between the webserver and your code, could someone (brighter than me!) come up with a standard for sitting between a framework and an app (blog/gallery/wiki/forum etc)?&lt;/p&gt;

&lt;p&gt;The app would need to have a standard way of initializing (creating db tables etc), but with so much discussion of NoSQL databases that might not be so problematic. Maybe the apps could focus on just data - supplying default templates which can be overwitten in the framework. &lt;/p&gt;

&lt;p&gt;Anyway I can see so many issues, but as I start this project I get the feeling I may have to reinvent some wheels (or at least remould some existing ones) and that just doesn't seem right!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/lwM5KUS3BaY" height="1" width="1"/&gt;</content>
		<author>
			<name>Ranguard</name>
			<uri>http://blogs.perl.org/users/leo_lapworth/</uri>
		</author>
		<source>
			<title type="html">Leo Lapworth</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/leo_lapworth/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/leo_lapworth//12</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/leo_lapworth/2011/02/portable-plugin-apps.html</feedburner:origLink></entry>

	<entry>
		<title type="html">is_almost()</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/rKEiyHq22Ws/is-almost.html" />
		<id>tag:blogs.perl.org,2011:/users/ovid//11.1478</id>
		<updated>2011-02-17T12:30:17+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I struggled with a problem where a given method would return an array of array refs of data, but the order (and sometimes presence) of array ref elements were sometimes slightly different. This is because this code needed to test &lt;em&gt;real data&lt;/em&gt; and I could not mock the results. After giving this some thought, I realized I wanted something like the Levenshtein edit distance for data structures. Marcel Grünauer suggested that each element get assgined a unicode character. This solves my problem nicely with the following code ...&lt;/p&gt;

        &lt;p&gt;(Fair warning, this is a hack)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use strict;

use Test::More 'no_plan';

use Test::Differences;
use Data::Dumper;
use Text::WagnerFischer 'distance';

sub is_almost($$$;$) {
    my ( $have, $want, $threshhold, $message ) = @_;

    $message ||= 'The two arrays should be close enough';

    unless ( 'ARRAY' eq ref $have and 'ARRAY' eq ref $want ) {
        require Carp;
        Carp::confess(
            "First two arguments to is_almost() must be array refs");
    }

    local $Test::Builder::Level = $Test::Builder::Level + 1;
    if ( !@$want ) {
        if ( !@$have ) {
            pass $message;
        }
        else {
            eq_or_diff $have, $want, $message;
        }
        return;
    }

    my %char_for;
    my $index = 1;
    my ( $have_str, $want_str ) = ( '', '' );
    local $Data::Dumper::Indent   = 0;
    local $Data::Dumper::Sortkeys = 1;
    local $Data::Dumper::Terse    = 1;

    foreach my $element (@$have) {
        $have_str .= $char_for{ Dumper($element) } ||= chr( $index++ );
    }
    foreach my $element (@$want) {
        $want_str .= $char_for{ Dumper($element) } ||= chr( $index++ );
    }
    my $distance = distance( $have_str, $want_str ) / @$want;
    if ( $distance &amp;lt;= $threshhold ) {
        pass $message;
        if ($distance) {
            diag "Distance is $distance";
        }
    }
    else {
        eq_or_diff $have, $want, $message;
        diag "Distance is $distance";
    }
}
my $want = [
    [ 1, 'North Beach',       'au', 'city' ],
    [ 2, 'North Beach',       'us', 'city' ],
    [ 3, 'North Beach',       'us', 'city' ],
    [ 4, 'North Beach Hotel', 'us', 'hotel' ],
    [ 5, 'North Beach',       'us', 'city' ],
    [ 6, 'North Beach',       'us', 'city' ],
];
my $have = [
    [ 1, 'North Beach',       'au', 'city' ],
    [ 2, 'North Beach',       'us', 'city' ],
    [ 3, 'North Beach',       'us', 'city' ],
    [ 4, 'North Beach Hotel', 'us', 'hotel' ],
    [ 5, 'North Beach',       'us', 'city' ],
    [ 6, 'North Beach',       'us', 'city' ],
];
is_almost $have, $want, .20;

$have = [
    [ 2, 'North Beach',       'us', 'city' ],
    [ 3, 'North Beach',       'us', 'city' ],
    [ 4, 'North Beach Hotel', 'us', 'hotel' ],
    [ 5, 'North Beach',       'us', 'city' ],
    [ 6, 'North Beach',       'us', 'city' ],
];
is_almost $have, $want, .20;
$have = [
    [ 2, 'North Beach',       'us', 'city' ],
    [ 3, 'North Beach',       'us', 'city' ],
    [ 4, 'North Beach Hotel', 'us', 'hotel' ],
    [ 5, 'North Beach',       'us', 'city' ],
    [ 6, 'North Beach',       'us', 'city' ],
    [ 1, 'North Beach',       'au', 'city' ],
];
is_almost $have, $want, .20;
__END__
ok 1 - The two arrays should be close enough
ok 2 - The two arrays should be close enough
# Distance is 0.166666666666667
not ok 3 - The two arrays should be close enough
#   Failed test 'The two arrays should be close enough'
#   at almost.pl line 90.
# +----+------------------------------+----+------------------------------+
# | Elt|Got                           | Elt|Expected                      |
# +----+------------------------------+----+------------------------------+
# |    |                              *   0|1,North Beach,au,city         *
# |   0|2,North Beach,us,city         |   1|2,North Beach,us,city         |
# |   1|3,North Beach,us,city         |   2|3,North Beach,us,city         |
# |   2|4,North Beach Hotel,us,hotel  |   3|4,North Beach Hotel,us,hotel  |
# |   3|5,North Beach,us,city         |   4|5,North Beach,us,city         |
# |   4|6,North Beach,us,city         |   5|6,North Beach,us,city         |
# *   5|1,North Beach,au,city         *    |                              |
# +----+------------------------------+----+------------------------------+
# Distance is 0.333333333333333
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It seems many of the "edit distance" modules struggle with unicode, so I played with different ones until I had one which led to results I considered vaguely satisfactory.&lt;/p&gt;

&lt;p&gt;This is the first pass at a rough, rough hack. Suggestions welcome.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/rKEiyHq22Ws" height="1" width="1"/&gt;</content>
		<author>
			<name>Ovid</name>
			<uri>http://blogs.perl.org/users/ovid/</uri>
		</author>
		<source>
			<title type="html">Ovid</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/ovid/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/ovid//11</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/ovid/2011/02/is-almost.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Syntax police?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/GdY7S3_iVLc/syntax-police.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1477</id>
		<updated>2011-02-17T11:56:25+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;In a small script someone wrote at work I saw the indirect pattern of &lt;code&gt;new Object&lt;/code&gt;, instead of the more correct form of &lt;code&gt;Object-&amp;gt;new&lt;/code&gt;. When I inquired (okay, I said "WTF?!"), he said that he just copied the synopsis of a module. Oh, right.. some of the synopses (plural of "synopsis", bet you didn't know that!) still have some outdated syntax examples.&lt;/p&gt;

&lt;p&gt;I'm not gonna write about how we should all update our PODs to remove syntax that hasn't been (or shouldn't have been, at least) written for the last 10 years, even though I should! I wrote to talk about the reply my co-worker got when he opened a ticket asking for the synopsis to be updated, per my suggestion.&lt;/p&gt;

&lt;p&gt;He got the reply "what is this, the syntax police?" Perhaps half-jokingly, but still problematic, IMHO.&lt;/p&gt;

&lt;p&gt;Police? No. Neighbors, family members and friends? Yes!&lt;/p&gt;

&lt;p&gt;I wouldn't trust the police as far as I can throw a piano, and I don't even have a piano, so you can bet your ass I can't throw one very far! However, I do trust my friends and family (and maybe even my neighbors) to help me in a time of need, to advise me, to assist me, to care about me getting a better result. (Also, if you're in Texas, it's more likely that your neighbor will have much more firearm than your local police department)&lt;/p&gt;

&lt;p&gt;How have some people become so bitter towards their community members when suggesting a correction? I'm not asking you for a kidney, I'm asking you to correct an example that presents code people shouldn't write anyway. You don't want to update the POD? Fine, but why would you be abusive towards someone who just wants to improve Perl? To make it a more understandable, correct language?&lt;/p&gt;

&lt;p&gt;Since when are ambiguous syntax correction suggestions taboo? Soon I'll advise someone to use lexical variables and I'll get my head bitten off.&lt;/p&gt;

&lt;p&gt;Sure, I'm a bit overreacting. I still think how we treat each other is important, and this is one way we can improve.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/GdY7S3_iVLc" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/syntax-police.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-16</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/H0szcaWJsHE/180501a.html" />
		<id>http://taint.org/2011/02/16/180501a.html</id>
		<updated>2011-02-16T18:05:01+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://blog.tommorris.org/post/3050938876/request-for-comment-a-good-api-checklist-and" target="_blank" title="Tom Morris - Request for comment: a ‘Good API’ checklist and committee"&gt;Tom Morris – Request for comment: a ‘Good API’ checklist and committee&lt;/a&gt;
: Sane suggestions for good HTTP APIs&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/apis"&gt;apis&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/http"&gt;http&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/rest"&gt;rest&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/open-data"&gt;open-data&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://votomatic.ie/" target="_blank" title="Votomatic"&gt;Votomatic&lt;/a&gt;
: Brilliant! “find out which political parties are compatible with you.”  The app asks a few questions, you furnish survey-style responses, and it figures out which party is closest in published policy.  It works quite well, determining that my optimum is Labour (correct)&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/policies"&gt;policies&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/politics"&gt;politics&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/ireland"&gt;ireland&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/voting"&gt;voting&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/elections"&gt;elections&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/surveys"&gt;surveys&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.wired.com/magazine/2011/01/ff_hackerville_romania/all/1" target="_blank" title="How a Remote Town in Romania Has Become Cybercrime Central | Magazine"&gt;How a Remote Town in Romania Has Become Cybercrime Central | Magazine&lt;/a&gt;
: the story of Ramnicu Valcea — Romania’s Silicon Valley of phishing&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/ramnica-valcea"&gt;ramnica-valcea&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/crime"&gt;crime&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/romania"&gt;romania&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/wired"&gt;wired&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/security"&gt;security&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/spam"&gt;spam&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/phishing"&gt;phishing&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://torrentfreak.com/u-s-government-shuts-down-84000-websites-by-mistake-110216/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+Torrentfreak+(Torrentfreak)&amp;amp;utm_content=Google+Reader" target="_blank" title="U.S. Government Shuts Down 84,000 Websites, ‘By Mistake’ | TorrentFreak"&gt;U.S. Government Shuts Down 84,000 Websites, ‘By Mistake’ | TorrentFreak&lt;/a&gt;
: DHS/ICE domain seizures suffer a serious false positive problem, resulting in the seizure and shutting down of 84,000 subdomains of a free DNS provider, replacing them with a banner accusing the site of trafficking in child porn.  whoops!&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/dhs"&gt;dhs&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/ice"&gt;ice&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/censorship"&gt;censorship&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/internet"&gt;internet&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/domains"&gt;domains&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/dns"&gt;dns&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/seizure"&gt;seizure&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/false-positives"&gt;false-positives&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/child-porn"&gt;child-porn&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.net-security.org/secworld.php?id=10596" target="_blank" title="Israeli general claims Stuxnet attacks as one of his successes"&gt;Israeli general claims Stuxnet attacks as one of his successes&lt;/a&gt;
: ‘Haaretz reports [on a] video that was played at a party organized for General Gabi Ashkenazi’s last day on the job. The video contained references to the successes he achieved during his stint as chief of staff, [including] the Stuxnet worm attack on Iran’s uranium enrichment facility at Natanz and and the nuclear reactor at Bushehr.’&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/israel"&gt;israel&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/iran"&gt;iran&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/stuxnet"&gt;stuxnet&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/cyberwar"&gt;cyberwar&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/via:slashdot"&gt;via:slashdot&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/malware"&gt;malware&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/H0szcaWJsHE" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/16/180501a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">CPAN Testers' CPAN Author FAQ</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/9Vnjo7kEfls/cpan-testers-cpan-author-faq.html" />
		<id>tag:blogs.perl.org,2011:/users/cpan_testers//73.1471</id>
		<updated>2011-02-16T09:21:53+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;strong&gt;David Golden&lt;/strong&gt; &lt;a href="http://www.dagolden.com/index.php/1348/how-to-find-the-cpan-testers-authors-faq/"&gt;recently posted&lt;/a&gt; regarding a comment from &lt;strong&gt;Leon Timmermans&lt;/strong&gt; on IRC. Leon highlighted a problem when CPAN authors try to find information about CPAN Testers, and how they can request testers to do (or not do) something with a distribution they've just uploaded.&lt;/p&gt;
&lt;p&gt;The page they are looking for is the &lt;strong&gt;&lt;a href="http://wiki.cpantesters.org/wiki/CPANAuthorNotes"&gt;CPAN Author FAQ&lt;/a&gt;&lt;/strong&gt; on the &lt;a href="http://wiki.cpantesters.org"&gt;CPAN Testers Wiki&lt;/a&gt;. Although there is plenty of information for authors, the page doesn't appear prominently on search engines when some searches for that kind of information.&lt;/p&gt;
&lt;p&gt;As such, David has suggested that people tweet or post about the page, which includes this post ;) In addition, I'm going to look at adding this and potentially other useful pages as quick links on other CPAN Testers family sites. If there are specific pages you think should be mentioned, please let me know and we'll look at how best we can raise their profile too.&lt;/p&gt; 
&lt;p&gt;Cross-posted from the &lt;a href="http://blog.cpantesters.org/diary/106"&gt;CPAN Testers Blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/9Vnjo7kEfls" height="1" width="1"/&gt;</content>
		<author>
			<name>CPAN Testers</name>
			<uri>http://blogs.perl.org/users/cpan_testers/</uri>
		</author>
		<source>
			<title type="html">CPAN Testers</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/cpan_testers/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/cpan_testers//73</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/cpan_testers/2011/02/cpan-testers-cpan-author-faq.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">How to find the CPAN Testers Authors FAQ</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/jeWXYDd-OeU/" />
		<id>http://www.dagolden.com/?p=1348</id>
		<updated>2011-02-15T20:59:05+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;If you are a CPAN author and have ever been stumped how to get CPAN Testers to do something (or stop doing something) when testing your distribution, you should read the &lt;b&gt;&lt;a href="http://wiki.cpantesters.org/wiki/CPANAuthorNotes"&gt;CPAN Author FAQ&lt;/a&gt;&lt;/b&gt; on the &lt;a href="http://wiki.cpantesters.org/"&gt;CPAN Testers wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;leont pointed out on IRC that the &lt;a href="http://wiki.cpantesters.org/wiki/CPANAuthorNotes"&gt;CPAN Author FAQ&lt;/a&gt; is very hard to find and doesn't currently show up in search results, so if you would like to help out, please blog or twitter about it or something and help point some links in the right direction.  :-)&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/jeWXYDd-OeU" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1348/how-to-find-the-cpan-testers-authors-faq/</feedburner:origLink></entry>

	<entry>
		<title type="html">Dropbox config change from the CLI</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/NV3w_wMcoZQ/dropbox-config-change-from-cli.html" />
		<id>tag:blogger.com,1999:blog-6096704822492180681.post-709176512043077072</id>
		<updated>2011-02-15T11:18:59+00:00</updated>
		<content type="html">I use &lt;a href="http://dropbox.com"&gt;Dropbox&lt;/a&gt; on my MacBook. It's neat. However for some reason it's not really autodetecting my proxy, which completely set up via a master proxy.pac file.&lt;br /&gt;&lt;br /&gt;I have already a shell script that takes care of adjusting my SSH configuration and my custom proxy.pac depending on where I am. So I just extended it to change Dropbox's configuration and restart it. Here's the gist of it:&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/6096704822492180681-709176512043077072?l=consttype.blogspot.com" width="1" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/NV3w_wMcoZQ" height="1" width="1"/&gt;</content>
		<author>
			<name>Rafael</name>
			<email>noreply@blogger.com</email>
			<uri>http://consttype.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">ConstType</title>
			<subtitle type="html">Attempts of a late comer</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/6096704822492180681/posts/default" />
			<id>tag:blogger.com,1999:blog-6096704822492180681</id>
		</source>
	<feedburner:origLink>http://consttype.blogspot.com/2011/02/dropbox-config-change-from-cli.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">CPAN.pm release candidate</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/udji5McQvsw/" />
		<id>http://www.dagolden.com/?p=1339</id>
		<updated>2011-02-15T05:06:02+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I recently uploaded &lt;a href="http://search.cpan.org/~dagolden/CPAN-1.94_65/"&gt;CPAN version 1.94_65&lt;/a&gt;, which is the 15th development release since 1.9402 and represents almost 18 months of development work.  Barring any show-stoppers, a stable release is expected in the next month.  Meanwhile, 1.94_65 will be merged into the next Perl core development release and the stable version will be part of Perl 5.14 this spring.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please give it a try!&lt;/strong&gt;  From the command line:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;$ cpan DAGOLDEN/CPAN-1.94_65.tar.gz
&lt;/pre&gt;
&lt;p&gt;Thank you to everyone contributing patches or commits (according to the git log): Andreas Koenig, David Golden, Frank Wiegand, Nick Patch, Robert Bohne, Tomas Doran, brian d foy and burak.  Thank you as well to anyone else who contributed to RT tickets or sent in patches outside git.&lt;/p&gt;
&lt;p&gt;Here is a summary of major changes and bug fixes since 1.9402.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New features&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Major simplification of the FirstTime experience for new users, including auto-pick of CPAN mirrors&lt;/li&gt;
&lt;li&gt;Added support for bootstrapping local::lib when the user does not have write access to perl's site library directories&lt;/li&gt;
&lt;li&gt;Added support for and prerequisite on HTTP::Tiny for pure-perl HTTP bootstrapping&lt;/li&gt;
&lt;li&gt;Added support for META/MYMETA.json files if CPAN::Meta is installed&lt;/li&gt;
&lt;li&gt;Quieter user interface: made lots of '$module missing' type warnings only warn once; eliminated 'no YAML' warnings for distroprefs if there are no distroprefs.&lt;/li&gt;
&lt;li&gt;Allows Foo/Bar.pm on the commandline to mean Foo::Bar&lt;/li&gt;
&lt;li&gt;Allows calling make/test/install with regexp if unambiguous&lt;/li&gt;
&lt;li&gt;bzip2 support should now be on par with gzip&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;New configuration options&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;added 'atexit' option for scan_cache&lt;/li&gt;
&lt;li&gt;new config option prefer_external_tar (RT#64037)&lt;/li&gt;
&lt;li&gt;new config variable version_timeout used in CPAN::Module::parse_version()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RT Tickets closed&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RT #63357: use Dumpvalue when dumping potential crap&lt;/li&gt;
&lt;li&gt;RT #62986: original config directories will be found even if File::HomeDir is later installed&lt;/li&gt;
&lt;li&gt;RT #62064: build_requires_install_policy set to "no" did not work correctly&lt;/li&gt;
&lt;li&gt;RT #61607: make the FTP download code more robust&lt;/li&gt;
&lt;li&gt;RT #59216: make sure $builddir exists before calling tempdir&lt;/li&gt;
&lt;li&gt;RT #57482 and RT #57788 revealed that configure_requires implicitly assumed build_requires instead of normal requires.&lt;/li&gt;
&lt;li&gt;RT #55093: no_proxy doesn't work with more then one entries&lt;/li&gt;
&lt;li&gt;RT #55091: don't ask the proxy credentials if proxy_user empty&lt;/li&gt;
&lt;li&gt;RT #53305: amended lib/App/Cpan.pm because of a regression bugfix: Non-English locales got no diagnostics on a failed locking due to permissions&lt;/li&gt;
&lt;li&gt;RT #51018: do not switch to default sites when we have a user-configured urllist&lt;/li&gt;
&lt;li&gt;RT #48803: avoid 'unreached' if not following configure_requires bugfix: treat modules correctly that are deprecated in perl 5.12.  improved support for Perl core module deprecation&lt;/li&gt;
&lt;li&gt;RT #47774: allow duplicate mention of modules in Makefile prelude&lt;/li&gt;
&lt;li&gt;Fixed rt.perl.org#72362: CPAN ignoring configure_requires.  Also fixed (MY)META.yml processing to always prefer Parse::CPAN::Meta, if available.&lt;/li&gt;
&lt;li&gt;Fixed rt.perl.org#72348: missing CPAN::HandleConfig::output;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Other bug fixes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adds HOMEDRIVE/HOMEPATH or USERPROFILE as home directory options on Windows&lt;/li&gt;
&lt;li&gt;Fixed several recent regressions related to external transport tools (ncftp, lynx, curl, etc)&lt;/li&gt;
&lt;li&gt;Fixed quoting for downloading into directories containing whitespace&lt;/li&gt;
&lt;li&gt;Solaris tar gets more handholding to avoid solaris tar errors&lt;/li&gt;
&lt;li&gt;Portability fix: By-pass alarm() calls if we're running under perl 5.6.x &amp;amp;&amp;amp; $OS is Windows.&lt;/li&gt;
&lt;li&gt;Work around win32 URI::file volume bug&lt;/li&gt;
&lt;li&gt;Prerequisites declared with the string "==" now supported&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/udji5McQvsw" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1339/cpan-pm-release-candidate/</feedburner:origLink></entry>

	<entry>
		<title type="html">Mojolicious 1.1: Awesome features on a caturday</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/i8Jy9RHnkR4/mojolicious-11-released" />
		<id>http://blog.kraih.com/mojolicious-11-released</id>
		<updated>2011-02-14T07:57:08+00:00</updated>
		<content type="html">&lt;p&gt;
	&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="p_embed p_image_embed"&gt;
&lt;img alt="Hearteyedcat" height="274" src="http://posterous.com/getfile/files.posterous.com/temp-2011-02-13/rvCHjeqCFBopoxdrggheFownBfhGHzadlIFrtqvotoyijwEesFDvfvjchrAd/hearteyedcat.png.scaled500.png" width="495" /&gt;
&lt;/div&gt;
&lt;span style="font-family: Helvetica;"&gt; &lt;/span&gt;&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;I'm very happy to announce the release of &lt;/span&gt;&lt;a href="http://mojolicio.us"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; 1.1 (Smiling Cat Face With Heart-Shaped Eyes).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;The last few weeks have been really busy and we've got some exciting new features to show you.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Routing shortcuts&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;With the addition of routing shortcuts we are going to take the whole concept to the next level.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;You can add your very own keywords to the router and even make them reusable through plugins.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;div class="data type-perl"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;span id="L15" rel="#l15"&gt;15&lt;/span&gt;
&lt;span id="L16" rel="#l16"&gt;16&lt;/span&gt;
&lt;span id="L17" rel="#l17"&gt;17&lt;/span&gt;
&lt;span id="L18" rel="#l18"&gt;18&lt;/span&gt;
&lt;span id="L19" rel="#l19"&gt;19&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;# Simple "resource" shortcut&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;add_shortcut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;  &lt;span class="c1"&gt;# Generate "/$name" route&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$resource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/$name"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"$name#"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;  &lt;span class="c1"&gt;# Handle POST requests&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;  &lt;span class="nv"&gt;$resource&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'#create'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"create_$name"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;  &lt;span class="c1"&gt;# Handle GET requests&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;  &lt;span class="nv"&gt;$resource&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'#show'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"show_$name"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$resource&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="c1"&gt;# POST /user -&amp;gt; {controller =&amp;gt; 'user', action =&amp;gt; 'create'}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="c1"&gt;# GET  /user -&amp;gt; {controller =&amp;gt; 'user', action =&amp;gt; 'show'}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;CSS3 selectors on the command line&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Don't you hate checking huge HTML files from the command line?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Thanks to the addition of CSS3 selectors to the "mojo get" command this is going to change now.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% mojo get http://mojolicio.us 'head &amp;gt; title'&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&amp;lt;title&amp;gt;Mojolicious Web Framework - Join the Perl revolution!&amp;lt;/title&amp;gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;Just select the parts you're actually interested in.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;span id="L15" rel="#l15"&gt;15&lt;/span&gt;
&lt;span id="L16" rel="#l16"&gt;16&lt;/span&gt;
&lt;span id="L17" rel="#l17"&gt;17&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% mojo get http://mojolicio.us 'a[href]' attr href&lt;/div&gt;&lt;div class="line" id="LC2"&gt;http://latest.mojolicio.us&lt;/div&gt;&lt;div class="line" id="LC3"&gt;http://mojolicio.us&lt;/div&gt;&lt;div class="line" id="LC4"&gt;http://mojolicio.us/perldoc&lt;/div&gt;&lt;div class="line" id="LC5"&gt;https://github.com/kraih/mojo/wiki&lt;/div&gt;&lt;div class="line" id="LC6"&gt;https://github.com/kraih/mojo&lt;/div&gt;&lt;div class="line" id="LC7"&gt;http://search.cpan.org/dist/Mojolicious&lt;/div&gt;&lt;div class="line" id="LC8"&gt;http://groups.google.com/group/mojolicious&lt;/div&gt;&lt;div class="line" id="LC9"&gt;http://blog.kraih.com&lt;/div&gt;&lt;div class="line" id="LC10"&gt;http://twitter.com/kraih&lt;/div&gt;&lt;div class="line" id="LC11"&gt;http://search.cpan.org/perldoc?CGI&lt;/div&gt;&lt;div class="line" id="LC12"&gt;perldoc?Mojolicious&lt;/div&gt;&lt;div class="line" id="LC13"&gt;perldoc?Mojolicious/Lite&lt;/div&gt;&lt;div class="line" id="LC14"&gt;http://plackperl.org&lt;/div&gt;&lt;div class="line" id="LC15"&gt;http://catalystframework.org&lt;/div&gt;&lt;div class="line" id="LC16"&gt;http://mojolicio.us/perldoc&lt;/div&gt;&lt;div class="line" id="LC17"&gt;http://mojolicio.us&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;And test your applications more effectively.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;span id="L15" rel="#l15"&gt;15&lt;/span&gt;
&lt;span id="L16" rel="#l16"&gt;16&lt;/span&gt;
&lt;span id="L17" rel="#l17"&gt;17&lt;/span&gt;
&lt;span id="L18" rel="#l18"&gt;18&lt;/span&gt;
&lt;span id="L19" rel="#l19"&gt;19&lt;/span&gt;
&lt;span id="L20" rel="#l20"&gt;20&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% mojo generate lite_app&lt;/div&gt;&lt;div class="line" id="LC2"&gt;  [exist] /Users/sri&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  [write] /Users/sri/myapp.pl&lt;/div&gt;&lt;div class="line" id="LC4"&gt;  [chmod] myapp.pl 744&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;% ./myapp.pl get --verbose --mode testing /welcome 'head &amp;gt; title' text&lt;/div&gt;&lt;div class="line" id="LC7"&gt;GET /welcome HTTP/1.1&lt;/div&gt;&lt;div class="line" id="LC8"&gt;User-Agent: Mojolicious (Perl)&lt;/div&gt;&lt;div class="line" id="LC9"&gt;Content-Length: 0&lt;/div&gt;&lt;div class="line" id="LC10"&gt;Host: localhost:13359&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;HTTP/1.1 200 OK&lt;/div&gt;&lt;div class="line" id="LC13"&gt;X-Powered-By: Mojolicious (Perl)&lt;/div&gt;&lt;div class="line" id="LC14"&gt;Content-Type: text/html;charset=UTF-8&lt;/div&gt;&lt;div class="line" id="LC15"&gt;Connection: Keep-Alive&lt;/div&gt;&lt;div class="line" id="LC16"&gt;Date: Mon, 14 Feb 2011 03:49:42 GMT&lt;/div&gt;&lt;div class="line" id="LC17"&gt;Server: Mojolicious (Perl)&lt;/div&gt;&lt;div class="line" id="LC18"&gt;Content-Length: 108&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;Welcome&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Automatically generated route names&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;All routes now have automatically generated names based on the route pattern.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% mojo generate lite_app&lt;/div&gt;&lt;div class="line" id="LC2"&gt;  [exist] /Users/sri&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  [write] /Users/sri/myapp.pl&lt;/div&gt;&lt;div class="line" id="LC4"&gt;  [chmod] myapp.pl 744&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;% ./myapp.pl routes&lt;/div&gt;&lt;div class="line" id="LC7"&gt;/perldoc    perldoc   (?-xism:^/perldoc)&lt;/div&gt;&lt;div class="line" id="LC8"&gt;/welcome    welcome   (?-xism:^/welcome)&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;And don't worry about conflicts, custom names have a higher priority than generated ones.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div class="data type-perl"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::&lt;/span&gt;&lt;span class="n"&gt;Lite&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s"&gt;'/welcome'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="bp"&gt;__DATA__&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="nv"&gt;@@&lt;/span&gt; &lt;span class="nv"&gt;welcome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="o"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="n"&gt;doctype&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="s-Regexp"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;  &lt;span class="s-Regexp"&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Welcome&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s-Regexp"&gt;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;  &lt;span class="s-Regexp"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Welcome&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;Mojolicious&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s-Regexp"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="s-Regexp"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Mode specific exception and not found templates&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;To make testing and deployment easier you can now just add your own mode specific exception and not found templates.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div class="data type-perl"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;span id="L15" rel="#l15"&gt;15&lt;/span&gt;
&lt;span id="L16" rel="#l16"&gt;16&lt;/span&gt;
&lt;span id="L17" rel="#l17"&gt;17&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::&lt;/span&gt;&lt;span class="n"&gt;Lite&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s"&gt;'/welcome'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$self&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;  &lt;span class="nv"&gt;$self&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'Hi there!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="bp"&gt;__DATA__&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;span class="nv"&gt;@@&lt;/span&gt; &lt;span class="nv"&gt;not_found&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;production&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="o"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="n"&gt;doctype&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="s-Regexp"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;  &lt;span class="s-Regexp"&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Dude&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s-Regexp"&gt;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;  &lt;span class="s-Regexp"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Where&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="s-Regexp"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="s-Regexp"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;After all we really don't want to accidentally replace the awesome development mode templates. ;)&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% ./myapp.pl get --mode testing / html all&lt;/div&gt;&lt;div class="line" id="LC2"&gt;Not Found&lt;/div&gt;&lt;div class="line" id="LC3"&gt;    Page not found, want to go home?&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;% ./myapp.pl get --mode production / html all&lt;/div&gt;&lt;div class="line" id="LC6"&gt;Dude!Where is my page?&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Reusable router&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;We've also made the whole router reusable outside of the Mojolicious framework.&lt;/div&gt;
&lt;div&gt;This should help a lot with optimization and testing in the future, as well as allow other Perl web frameworks to reuse more of our infrastructure.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div class="data type-perl"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;span id="L15" rel="#l15"&gt;15&lt;/span&gt;
&lt;span id="L16" rel="#l16"&gt;16&lt;/span&gt;
&lt;span id="L17" rel="#l17"&gt;17&lt;/span&gt;
&lt;span id="L18" rel="#l18"&gt;18&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::&lt;/span&gt;&lt;span class="n"&gt;Routes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::Routes::&lt;/span&gt;&lt;span class="n"&gt;Match&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="c1"&gt;# Create some routes&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::&lt;/span&gt;&lt;span class="n"&gt;Routes&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/:action'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'foo'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="c1"&gt;# Match method and path against routes&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::Routes::&lt;/span&gt;&lt;span class="n"&gt;Match&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'/bar'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$r&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;span class="c1"&gt;# Results&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;captures&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;captures&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;     &lt;span class="s"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="c1"&gt;# Generate path from route&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;path_for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'baz'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;And as usual there is a lot more to discover, see &lt;/span&gt;&lt;a href="https://github.com/kraih/mojo/blob/v1.1/Changes"&gt;Changes&lt;/a&gt;&lt;span&gt; on GitHub for the full list of improvements.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Have fun!&lt;/div&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.kraih.com/mojolicious-11-released"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.kraih.com/mojolicious-11-released#comment"&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/i8Jy9RHnkR4" height="1" width="1"/&gt;</content>
		<author>
			<name>Sebastian Riedel</name>
			<uri>http://blog.kraih.com</uri>
		</author>
		<source>
			<title type="html">Sebastian Riedel about Perl and the Web</title>
			<subtitle type="html">Most recent posts at Sebastian Riedel about Perl and the Web</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/kraih" />
			<id>http://blog.kraih.com</id>
		</source>
	<feedburner:origLink>http://blog.kraih.com/mojolicious-11-released</feedburner:origLink></entry>

	<entry>
		<title type="html">Progress so far...</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/HkOfgc4z2Fs/18635.html" />
		<id>tag:dreamwidth.org,2009-05-20:370822:18635</id>
		<updated>2011-02-14T01:49:12+00:00</updated>
		<content type="html">5.12.3 build is being painful, but there is progress. I got a quick response from the maintainers of the Math::Big* modules on one issue, but there's another I haven't reported to them yet - nor do I know whether it's their issue or mine! Math::BigInt::GMP is ABENDing during its tests. This could be caused by the build of libgmp I'm using, (which was built from a mercurial checkout from last year) so I'm going to put fixing that off until after Beta 1, and just skip it for now... problem being that it's near the bottom of a dependency tree, so all those modules will have to be yanked for Beta 1.&lt;br /&gt;&lt;br /&gt;But at least a build of Strawberry Perl 5.12.3 will be available to investigate with!&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/HkOfgc4z2Fs" height="1" width="1"/&gt;</content>
		<author>
			<name>csjewell</name>
			<uri>http://csjewell.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Curtis Jewell's Perl stuff</title>
			<subtitle type="html">There really IS more than one way to do it, even on Windows!</subtitle>
			<link rel="self" href="http://csjewell.dreamwidth.org/data/atom" />
			<id>tag:dreamwidth.org,2009-05-20:370822</id>
		</source>
	<feedburner:origLink>http://csjewell.dreamwidth.org/18635.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Progress...</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/qhBbjoXz4zo/18344.html" />
		<id>tag:dreamwidth.org,2009-05-20:370822:18344</id>
		<updated>2011-02-13T03:20:45+00:00</updated>
		<content type="html">Built 5.10.1 successfully again (hit a bug that made me surprised it ever built before) and 5.12.3 built through perl, at least, before it broke. (ran into the fact that I forgot to specify where pari for 5.12.3 lives.) I fixed that, and I'm doing a completely non-forced build of 5.12.3 to make sure everything works fine, then I'm going to chase after the missing-README bug tomorrow.&lt;br /&gt;&lt;br /&gt;Oh, and I have a code-signing certificate, so I can sign the .msi's now. No more off-putting yellow message about installing unsigned software. Instead, there'll be a blue message in the same place - if I remember to go and sign before uploading. (my signature provider only has a 'new-style' signing server, so I've got to copy the files up to my Windows 7 machine before I sign and upload them.)&lt;br /&gt;&lt;br /&gt;So, 5.10.1.5 Beta 1 and 5.12.3.0 Beta 1 should be up within the next few days, I hope.&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/qhBbjoXz4zo" height="1" width="1"/&gt;</content>
		<author>
			<name>csjewell</name>
			<uri>http://csjewell.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Curtis Jewell's Perl stuff</title>
			<subtitle type="html">There really IS more than one way to do it, even on Windows!</subtitle>
			<link rel="self" href="http://csjewell.dreamwidth.org/data/atom" />
			<id>tag:dreamwidth.org,2009-05-20:370822</id>
		</source>
	<feedburner:origLink>http://csjewell.dreamwidth.org/18344.html</feedburner:origLink></entry>

	<entry>
		<title type="html">I'm getting back in the swing of things...</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/kk4VfwAcyEE/18169.html" />
		<id>tag:dreamwidth.org,2009-05-20:370822:18169</id>
		<updated>2011-02-11T07:33:30+00:00</updated>
		<content type="html">I've got my 'smoker' machine set up for Strawberry 32-bit finally, and it's successfully built a 5.12.2 build. The script to set up a build environment from scratch, and then use it to do a build, is at &lt;a href="http://hg.curtisjewell.name/strawberry-smoker"&gt;http://hg.curtisjewell.name/strawberry-smoker&lt;/a&gt; - I'll expand it to do QA testing, and to send to an e-mail list, later.&lt;br /&gt;&lt;br /&gt;Yes, there was no README file when the build was finished. That's likely the reason there were problems with the .msi installations crashing - it expects to change file locations in the README file. I thought upgrading would cause the crashes, but instead, it looks like upgrading would have HIDDEN the situation that caused them.&lt;br /&gt;&lt;br /&gt;I'm going to try a 5.10.1 build today and see how it works.&lt;br /&gt;&lt;br /&gt;Hopefully I'll be able to get a beta of 5.12.3 built this weekend, and start releasing code.&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/kk4VfwAcyEE" height="1" width="1"/&gt;</content>
		<author>
			<name>csjewell</name>
			<uri>http://csjewell.dreamwidth.org/</uri>
		</author>
		<source>
			<title type="html">Curtis Jewell's Perl stuff</title>
			<subtitle type="html">There really IS more than one way to do it, even on Windows!</subtitle>
			<link rel="self" href="http://csjewell.dreamwidth.org/data/atom" />
			<id>tag:dreamwidth.org,2009-05-20:370822</id>
		</source>
	<feedburner:origLink>http://csjewell.dreamwidth.org/18169.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-10</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/8znUgmlCiOM/180502a.html" />
		<id>http://taint.org/2011/02/10/180502a.html</id>
		<updated>2011-02-10T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://alblue.bandlem.com/2011/02/someday.html" target="_blank" title="Gerrit, Git and Jenkins"&gt;Gerrit, Git and Jenkins&lt;/a&gt;
: This is the future of code review. Commit directly from your git checkout to the Gerrit code-review system; change is immediately web-visible and enters the review workflow; at the same time, Jenkins checks out the proposed change and runs the test suite; once it’s approved, it automatically gets checked in.  Brilliant!&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/git"&gt;git&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/coding"&gt;coding&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/code-review"&gt;code-review&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/workflows"&gt;workflows&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/jenkins"&gt;jenkins&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/gerrit"&gt;gerrit&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/c-i"&gt;c-i&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/testing"&gt;testing&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/automation"&gt;automation&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/8znUgmlCiOM" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/10/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">My daughter and other stuff</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/f8L_yzhaTe4/my-daughter-and-other-stuff.html" />
		<id>tag:blogs.perl.org,2011:/users/ovid//11.1456</id>
		<updated>2011-02-10T06:35:52+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;On February 5th, my wife and I celebrated the birth of our lovely daughter, &lt;a href="http://overseas-exile.blogspot.com/2011/02/our-daughter-is-born.html"&gt;Lilly-Rose&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img border="0" height="237" src="http://2.bp.blogspot.com/_FRJmSLDQrjg/TU7TIGRqifI/AAAAAAAAACc/5ZZSlH7rd1Q/s400/IMAG0059.jpg" width="400" /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Needless to say, this has impacted my posting here :)&lt;/p&gt;

&lt;p&gt;At one point before the birth when we were both rather bored, I was trying to get some work done, but I had some code which I could not load because I lacked an Internet connection. Not all modules were present on my system, config files were missing, etc. However, I desperately needed to unit test my code and I quickly got fed up with my standard bag of tricks for forcing modules to load. Thus, I wrote a module to handle that bag of tricks for me. Later, after releasing it to github, I thought about dedicating it to my wife and newborn daughter, but I didn't think they'd like &lt;a href="https://github.com/Ovid/Package-Butcher"&gt;the Package Butcher&lt;/a&gt; dedicated to them.&lt;/p&gt;

        &lt;p&gt;Still, it's handy code and it works like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;my $butcher = Package::Butcher-&amp;gt;new(
    {
        package     =&amp;gt; 'Dummy',
        do_not_load =&amp;gt; [qw/Cannot::Load Cannot::Load2 NoSuch::List::MoreUtils/],
        predeclare  =&amp;gt; 'uniq',
        subs =&amp;gt; {
            this     =&amp;gt; sub { 7 },
            that     =&amp;gt; sub { 3 },
            existing =&amp;gt; sub { 'replaced existing' },
        },
        method_chains =&amp;gt; [
            [
                'Cannot::Load' =&amp;gt; qw/foo bar baz this that/ =&amp;gt; sub {
                    my $args = join ', ' =&amp;gt; @_;
                    return "end chain: $args";
                },
            ],
        ],
    }
);
$butcher-&amp;gt;use(@optional_import_list);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In other words, many of the common issues which would prevent a package from loading are dealt with here. You can predeclare subs (with prototypes), prevent naughty packages from loading, handle awful method chains embedded in the code and inject your own code.&lt;/p&gt;

&lt;p&gt;It needs a fair bit of TLC (kind of like my daughter), but it helped me to test some code which was otherwise not testable (and yes, the code was broken. Yay for testing!)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/f8L_yzhaTe4" height="1" width="1"/&gt;</content>
		<author>
			<name>Ovid</name>
			<uri>http://blogs.perl.org/users/ovid/</uri>
		</author>
		<source>
			<title type="html">Ovid</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/ovid/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/ovid//11</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/ovid/2011/02/my-daughter-and-other-stuff.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-09</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/YudDeQrCWUk/180502a.html" />
		<id>http://taint.org/2011/02/09/180502a.html</id>
		<updated>2011-02-09T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://codebutler.com/announcing-farebot-for-android" target="_blank" title="FareBot: Read data from public transit cards with your NFC-equipped Android phone - codebutler"&gt;FareBot: Read data from public transit cards with your NFC-equipped Android phone – codebutler&lt;/a&gt;
: ‘When demonstrating FareBot, many people are surprised to learn that much of the data on their ORCA card is not encrypted or protected. This fact is published by ORCA, but is not commonly known and may be of concern to some people who would rather not broadcast where they’ve been to anyone who can brush against the outside of their wallet. Transit agencies across the board should do a better job explaining to riders how the cards work and what the privacy implications are.’ (via Boing Boing)&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/via:boingboing"&gt;via:boingboing&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/privacy"&gt;privacy&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/android"&gt;android&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/rfid"&gt;rfid&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/security"&gt;security&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/transit"&gt;transit&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/mobile"&gt;mobile&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/encryption"&gt;encryption&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/mifare"&gt;mifare&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/desfire"&gt;desfire&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/farebot"&gt;farebot&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.storymap.ie/" target="_blank" title="Storymap"&gt;Storymap&lt;/a&gt;
: great UI for a little Dublin oral-history site — just a GMaps mashup with links to YouTube, but it works very well&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/dublin"&gt;dublin&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/ireland"&gt;ireland&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/storymap"&gt;storymap&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/stories"&gt;stories&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/oral-history"&gt;oral-history&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/people"&gt;people&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/google-maps"&gt;google-maps&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/mashups"&gt;mashups&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/youtube"&gt;youtube&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/video"&gt;video&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.arcticstartup.com/2011/02/09/spotify-second-largest-source-of-revenue-in-europe-for-labels/" target="_blank" title="Spotify Second Largest Source Of Revenue In Europe For Labels"&gt;Spotify Second Largest Source Of Revenue In Europe For Labels&lt;/a&gt;
: wow. the WinAmp guys were right — ‘on a European level, Spotify is the second single largest source of revenue for record labels. This means that 2010 saw dramatic increase in its usage as well as payouts to record labels and artists themselves.’ this via an IFPI report&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/ifpi"&gt;ifpi&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/music"&gt;music&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/spotify"&gt;spotify&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/streaming"&gt;streaming&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/revenue"&gt;revenue&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/record-labels"&gt;record-labels&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/europe"&gt;europe&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/sweden"&gt;sweden&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/isps"&gt;isps&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/mp3"&gt;mp3&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://en.wikipedia.org/wiki/Zero_stroke" target="_blank" title="Zero stroke - Wikipedia, the free encyclopedia"&gt;Zero stroke – Wikipedia, the free encyclopedia&lt;/a&gt;
: ‘With the price of bread running into billions a loaf the German people [...] had to get used to counting in thousands of billions. This, according to some German physicians, brought on a new nervous disease known as “zero stroke,” or “cipher stroke” [...] The persons afflicted with the malady are perfectly normal, except “for a desire to write endless rows of ciphers and engage in computations more involved than the most difficult problems in logarithms.”‘ (via Joe Drumgoole)&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/germany"&gt;germany&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/zero"&gt;zero&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/hyperinflation"&gt;hyperinflation&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/inflation"&gt;inflation&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/via:jdrumgoole"&gt;via:jdrumgoole&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/money"&gt;money&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/brain"&gt;brain&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/mental-illness"&gt;mental-illness&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/YudDeQrCWUk" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/09/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Template::Toolkit META variables and SETs in Dancer</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/FynublCIwn4/templatetoolkit-meta-variables-and-sets-in-dancer.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1446</id>
		<updated>2011-02-08T22:50:19+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;There is one very advanced feature in &lt;a href="http://search.cpan.org/perldoc?Template"&gt;Tempate::Toolkit&lt;/a&gt; called META variables. META variables are variables that you define in a processed template, that are later available to the WRAPPER template. That means that you can set, for example, the title of the page in the main layout from the inner content template. That's also what it's usually useful for.&lt;/p&gt;

&lt;p&gt;However, since &lt;a href="http://perldancer.org/"&gt;Dancer&lt;/a&gt; provides its own "layout" option, it basically separates these two processes (rendering a WRAPPER and rendering an inner template), making Template::Toolkit unable to simply define a WRAPPER. So... how does one get it to work?&lt;/p&gt;

&lt;p&gt;Well, it's possible to kindly ask Dancer to step aside for a bit, and give you more control over the templating, which means you can do some more advanced stuff, like using SET to set variables in the WRAPPER, or using META variables. Here's how easy it is:&lt;/p&gt;

&lt;p&gt;In your &lt;em&gt;config.yml&lt;/em&gt; file, you need to:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Disable your "layout" configuration (either comment or remove it)&lt;/li&gt;
	&lt;li&gt;Make sure you're using Template::Toolkit:&lt;/li&gt;
&lt;code&gt;
	    template: "template_toolkit"
&lt;/code&gt;
	&lt;li&gt;Add the following configuration to enable the main.tt as a WRAPPER:&lt;/li&gt;
&lt;code&gt;
	    engines:
	        template_toolkit:
	            WRAPPER: layout/main.tt
&lt;/code&gt;
&lt;/ol&gt;

&lt;p&gt;There! You now have full and complete control over the template. Dancer's template() DSL will still work, but it will no longer separate the layout processing to a different process, so you have a lot of extra control over it.&lt;/p&gt;

&lt;p&gt;Checkout for the &lt;a href="http://perl-ecosystem.org/"&gt;PEG (Perl Ecosystem Website)&lt;/a&gt; &lt;a href="https://github.com/szabgab/peg/blob/master/config.yml"&gt;configuration file&lt;/a&gt;, &lt;a href="https://github.com/szabgab/peg/blob/master/views/contact.tt"&gt;contact template&lt;/a&gt; and &lt;a href="https://github.com/szabgab/peg/blob/master/views/layouts/main.tt"&gt;main wrapper&lt;/a&gt; (specifically the title) for a live example.&lt;/p&gt;

&lt;p&gt;Enjoy! :)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/FynublCIwn4" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/templatetoolkit-meta-variables-and-sets-in-dancer.html</feedburner:origLink></entry>

	<entry>
		<title type="html">FOSDEM, second report - the talks!</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/mrdb2Z55vqs/fosdem-second-report---the-talks.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1443</id>
		<updated>2011-02-08T09:37:53+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;strong&gt;THIS POST INCLUDES PICTURES!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the second day of FOSDEM, the &lt;a href="http://perldancer.org"&gt;Dancer&lt;/a&gt; core crew pretty time took over the Perl dev room! We are 4 developers, and we gave 5 talks: SPORE (by Franck Cuny), "Code, release, market" (by Alexis Sukrieh), Curses::Toolkit (by Damien Krotkine), Moose (Sawyer X) and Dancer (Sawyer X). Somehow, all those talks mentioned Dancer, whether it was by the speaker noting the projects he works on, or by using it as an example in the talk (like Alexis did). The amount of noise and buzz we created around Dancer was very positive!&lt;/p&gt;

&lt;p&gt;There were a lot of good talks in the Perl dev room (such as DTrace, XML::Compile, Packaging Perl), but I'll try to cover just a few:&lt;/p&gt;

&lt;p&gt;Gabor Szabo (szabgab) gave two very good talks, one on Perl 6 and one on &lt;a href="http://padre.perlide.org"&gt;Padre, the Perl IDE&lt;/a&gt;, ya know. I think they were very well received. Considering the Perl 6 talk was the first talk that day, early morning (I asked Sukria on the way, "when's the last time you had Perl 6 for breakfast?"), a lot of people were there. Perl 6 is not well understood by many people, and the potential (some of which was already reached) is often missed. I think Gabor made it compelling to the audience and they were very tuned and seemed involved.&lt;/p&gt;

&lt;p&gt;The Padre talk was a very good example of how humor gets people to listen to you. People care about having a good time, more than learning and people learn better when they have a good time, so try to mix it up! I think it also got me fueled up for my talk. Oh, and I got to meet Zeno Gantner from Padre, very nice guy!&lt;/p&gt;

&lt;p&gt;Dams (Damien Krotkine) gave a talk about his &lt;a href="http://search.cpan.org/perldoc?Curses::Toolkit"&gt;Curses::Toolkit&lt;/a&gt;, which allows you to write visual CLI applications using Curses in a Gtk-like interface, which is pretty nifty. He wrote a few applications to show it off, one of which was a Twitter client he wrote in a few hours ("it took me long because I had a nasty bug", are you kidding me? :) and he actually got people to drop their jaws when he showed them how he's resizing a terminal and the windows automatically resize and titles automatically scroll, if that's what you want. It's really amazing what this guy has done using CLI only. I guess after I found out he was a Gentoo hacker, things made more sense. :)&lt;/p&gt;

&lt;p&gt;I gave the Moose talk, and I think it went rather well. I was very hyperactive and paused only for short breaths. People really enjoyed themselves and overall I think it went very well. Got the room of 80 people to fill up. Pretty good, eh?&lt;/p&gt;

&lt;p&gt;Later I gave the Dancer talk, and the crowd went nuts. If 80 people filling up the room, taking all seats, is impressive, image what 100 people sitting and standing everywhere looks like! Pretty much all my jokes landed (which is hard because my jokes are lame), and people had a &lt;strong&gt;very&lt;/strong&gt; good time! I was really thrilled that I felt comfortable enough to give both talks for such a big crowd, successfully, with a lot of confidence. I think the reason is definitely the company I was with. Being with the Dancer team was tremendous to my self esteem and made me feel very open and relaxed.&lt;/p&gt;

&lt;p&gt;Next talk was Franck Cuny's SPORE talk. This guy designed (and wrote!) a framework for creating a client to any REST API with a simple configuration, using the astounding power of Moose's meta-class. He started with the history of SPORE, how he came up with it, and gave examples on how to write your own client using &lt;a href="http://search.cpan.org/perldoc?Net::HTTP::Spore"&gt;Net::HTTP::Spore&lt;/a&gt;. Seriously kickass! I wish people would understand how incredibly useful it is. No need to write your own code anymore. I'll try it out for MetaCPAN::API (don't worry, a post is still pending).&lt;/p&gt;

&lt;p&gt;Last, but definitely not least, was a talk by Alexis Sukrieh (sukria) about how to write and maintain your software, giving lessons he learned from Dancer and other projects. He started by comparing "code" and "software": software is a hell of a lot more than code. Coding is the easy part. He goes on to explain what tools you have, how to treat your users, how to market your software, and giving a lot of interesting advice. I learned quite a lot from Sukria over the time while working with him on Dancer, and this talk was an amalgamation of these lessons.&lt;/p&gt;

&lt;p&gt;I've checked twitter for some comments on the talks. I don't have a twitter, but I just went to the site, and gone over some history, so don't consider this as an exhaustive list of all tweets relating to the talks. I do believe there are more that I missed:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;"Attending the first of the modern perl squad talks : SawyerX and #moose ! #fosdem #perl"&lt;/li&gt;
	&lt;li&gt;"#dancer and #spore follow in afternoon :) #fosdem #perl #modernperlsquad"&lt;/li&gt;
	&lt;li&gt;"Config management devroom overflows; Perl/Moose, then. #FOSDEM"&lt;/li&gt;
	&lt;li&gt;"in less than 20 minutes the #modernperlsquad is going to invade the perl devroom! Get ready! #FOSDEM"&lt;/li&gt;
	&lt;li&gt;"Very few people in the perl dev room use catalyst. Interesting. #fosdem"&lt;/li&gt;
	&lt;li&gt;"The best feature of #perl #dancer is @sawyerX =)"&lt;/li&gt;
	&lt;li&gt;"Dancer talk in the perl room has started very well. Very lively speaker."&lt;/li&gt;
	&lt;li&gt;"Less code, more dance #perl #dancer http://bit.ly/hmifHm"&lt;/li&gt;
	&lt;li&gt;"Moose talk now in the perl devroom, by @PerlDancer's core-developer SawyerX. Go Sawyer Go!"&lt;/li&gt;
	&lt;li&gt;"Best speakers so far: Andy Wingo and the #perldancer guy. #fosdem"&lt;/li&gt;
	&lt;li&gt;"@franckcuny presenting SPORE at #fosdem: how lazyness makes better software"&lt;/li&gt;
	&lt;li&gt;"Go @franckcuny ! Go ! #spore #fosdem #modernperlsquad @linkfluence"&lt;/li&gt;
	&lt;li&gt;"Learning about Moose #fosdem"&lt;/li&gt;
	&lt;li&gt;"Interesting talk about Dancer at #fosdem #perl ... early tests failed; time to rtfm"&lt;/li&gt;
        &lt;li&gt;#modernperlsquad on stage ! (moose)&lt;/li&gt;
        &lt;li&gt;19 minutes later, I can now test my script as if the whole shebang was there. &amp;lt;3 you, #Dancer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should checkout Sukria's review &lt;a href="http://www.sukria.net/fr/archives/2011/02/06/fosdem-2011-report/"&gt;over here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;There is more, but I'll leave that to upcoming posts.&lt;br /&gt;
See you soon!&lt;/p&gt;

&lt;p&gt;&lt;img alt="dancer-hack-session.jpg" class="mt-image-none" height="480" src="http://blogs.perl.org/users/sawyer_x/dancer-hack-session.jpg" width="640" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="sawyer_fosdem_moose1.jpg" class="mt-image-none" height="480" src="http://blogs.perl.org/users/sawyer_x/sawyer_fosdem_moose1.jpg" width="640" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="sawyer_fosdem_moose2.jpg" class="mt-image-none" height="480" src="http://blogs.perl.org/users/sawyer_x/sawyer_fosdem_moose2.jpg" width="640" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/mrdb2Z55vqs" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/fosdem-second-report---the-talks.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Five Test::More features you might not be using yet</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/HIzUVKlO2Xk/" />
		<id>http://www.dagolden.com/?p=1322</id>
		<updated>2011-02-07T21:10:21+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I've been using &lt;a href="http://p3rl.org/Test::More"&gt;Test::More&lt;/a&gt; for so long that I sometimes forget about new features that have been added in the last couple years.  If you're like me and would like a refresher, here's a list of five useful features that you might want to start using.  Unless otherwise noted, you will need at least version 0.88 of Test::More.&lt;/p&gt;
&lt;h2&gt;1. done_testing instead of no_plan&lt;/h2&gt;
&lt;p&gt;If you don't know how many tests you are going to run (or don't want to keep count yourself), you used to have to specify 'no_plan' at the start of your tests.  That can lead to surprises if your tests exit prematurely.  Instead, put the &lt;code&gt;done_testing&lt;/code&gt; function at the end of your tests.  This ensures that all tests actually run.&lt;/p&gt;
&lt;pre class="brush: perl; title: ;"&gt;use strict; use warnings;
use Test::More 0.88;

ok(1, "first test");
ok(1, "second test");

done_testing;
&lt;/pre&gt;
&lt;h2&gt;2. new_ok for object creation&lt;/h2&gt;
&lt;p&gt;You used to have to create an object and then call &lt;code&gt;isa_ok&lt;/code&gt; on it.  Now those two can be combined with &lt;code&gt;new_ok&lt;/code&gt;.  It will also let you pass arguments in an arrayref to be used in the call to &lt;code&gt;new&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="brush: perl; title: ;"&gt;use strict; use warnings;
use Test::More 0.88;

require Foo;
my $obj = new_ok("Foo");
# ... use $obj in testing ...

done_testing();
&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Changed "require_ok" to "require" per Ovid's comment, below.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;3. Add diagnostics only in verbose testing&lt;/h2&gt;
&lt;p&gt;The old &lt;code&gt;diag&lt;/code&gt; function always prints to stderr.  Particularly for debugging notes, that can clutter up the output when run under a harness.  You can now use the &lt;code&gt;note()&lt;/code&gt; function to add diagnostics that are only seen in verbose output.&lt;/p&gt;
&lt;pre class="brush: perl; title: ;"&gt;use strict; use warnings;
use Test::More 0.88;

note("Testing on perl $]");
ok(1, "first test");

done_testing();
&lt;/pre&gt;
&lt;h2&gt;4. Explain data structures in diagnostics&lt;/h2&gt;
&lt;p&gt;I often find myself wanting to dump a data structure in diagnostics, and wind up loading Data::Dumper to do that.  Now Test::More can do that for you with the &lt;code&gt;explain()&lt;/code&gt; function.  The output is a string that you can pass to &lt;code&gt;diag&lt;/code&gt; or &lt;code&gt;note&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="brush: perl; title: ;"&gt;use strict; use warnings;
use Test::More 0.88;

my $want = { pi =&amp;gt; 3.14, e =&amp;gt; 2.72, i =&amp;gt; -1 };
my $have = get_data();

is_deeply($have, $want) or diag explain $have;

done_testing();
&lt;/pre&gt;
&lt;h2&gt;5. Encapsulate related tests in a subtest (0.96)&lt;/h2&gt;
&lt;pre class="brush: perl; title: ;"&gt;use strict; use warnings;
use Test::More 0.96;

pass("First test");

subtest 'An example subtest' =&amp;gt; sub {
  pass("This is a subtest");
  pass("So is this");
};

pass("Third test");

done_testing();
&lt;/pre&gt;
&lt;p&gt;Subtests can have their own plan, but if they don't have one, Test::More acts like there was an implicit &lt;code&gt;done_testing&lt;/code&gt; at the end of the code reference.  That means you don't have to keep count of tests in a subtest and things still work safely.&lt;/p&gt;
&lt;p&gt;You can use a 'skip_all' plan in a subtest, too, which is a useful way of constructing a SKIP block without having to count how many tests are being skipped the way you would with the &lt;code&gt;skip()&lt;/code&gt; function.&lt;/p&gt;
&lt;pre class="brush: perl; title: ;"&gt;use strict; use warnings;
use Test::More 0.96;

pass("First test");

subtest 'Like a SKIP block' =&amp;gt; sub {
  plan 'skip_all' unless $required_condition;
  pass("This is a subtest");
  # ... many more tests that you don't have to count ...
};

pass("Third test");

done_testing();
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/HIzUVKlO2Xk" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1322/five-testmore-features-you-might-not-be-using-yet/</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-07</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/D9iIzC7_xYw/180502a.html" />
		<id>http://taint.org/2011/02/07/180502a.html</id>
		<updated>2011-02-07T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://nosleeptilbrooklands.blogspot.com/2011/01/true-story-of-daily-mail-lies-guest.html" target="_blank" title="No Sleep 'Til Brooklands: A True Story Of Daily Mail Lies (guest post)"&gt;No Sleep ‘Til Brooklands: A True Story Of Daily Mail Lies (guest post)&lt;/a&gt;
: how the Daily Mail (UK) works, via b3ta. mind-boggling misuse of one woman’s comments to concoct a story, according to this&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/daily-mail"&gt;daily-mail&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/journalism"&gt;journalism&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/libel"&gt;libel&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/media"&gt;media&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/newspapers"&gt;newspapers&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/law"&gt;law&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/uk"&gt;uk&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/via:b3ta"&gt;via:b3ta&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://toroid.org/ams/git-website-howto" target="_blank" title="Using Git to manage a web site"&gt;Using Git to manage a web site&lt;/a&gt;
: simple, basic demo of a git post-receive hook to auto-check-out every rev committed to a git repository&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/git"&gt;git&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/deployment"&gt;deployment&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/howto"&gt;howto&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/via:hackernews"&gt;via:hackernews&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/D9iIzC7_xYw" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/07/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">CPAN Testers Summary - January 2011 - Wish You Were Here</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/h_BcSLWfeIo/cpan-testers-summary---january-2011---wish-you-were-here.html" />
		<id>tag:blogs.perl.org,2011:/users/cpan_testers//73.1438</id>
		<updated>2011-02-07T13:25:28+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Over the past few of months, various fixes and improvements have been made to the Builder process, which builds the pages and support files on the &lt;a href="http://www.cpantesters.org"&gt;CPAN Testers Reports&lt;/a&gt; website. As mentioned in &lt;a href="http://blog.cpantesters.org/diary/104"&gt;the last summary&lt;/a&gt;, this has made a noticeable improvement in the performance of the server. However, there were further fixes and enhancements planned.&lt;/p&gt;
&lt;p&gt;Several updates ensued during January, not just for the Builder, but across several parts of the eco-system, both to speed up processing and to reduce the amount of file and database access. Previously several processes recreated their current view by reading the full result set from the database. As we now have over 10 million reports, this can take more time than is reasonable. With the use of the JSON files to record a snapshot, we can now start from a known point, thus meaning we only need to scan a few thousand records. This method has been utlised in other processes, even with smaller database tables and datasets, and the performance improvements have been significant.&lt;/p&gt;
&lt;p&gt;For the past couple of weeks we have now been able to update pages within 36 hours of a report being submitted, and at times we have even been less than an hour behind. Looking at the graphs the Builder is now consistently processing more pages than reports. Even though January is typically a quieter month for us, it still produced 333,157 reports. We shall see whether the increased submissions in the coming months make a difference in build times.&lt;/p&gt;
&lt;p&gt;You may already know that the &lt;a href="http://2011.qa-hackathon.org"&gt;2011 QA Hackathon&lt;/a&gt; is happening in Amsterdam this year, but it warrants promotion. While the focus is typically on traditional aspects of QA and testing, hopefully there will be some CPAN Testers projects featured. The hackathon takes place from &lt;strong&gt;Saturday 16th April&lt;/strong&gt; to &lt;strong&gt;Monday 18th April&lt;/strong&gt;, at the offices of principal sponsors, &lt;em&gt;Booking.com&lt;/em&gt;. If you're interested in attending, please add your name to the &lt;a href="http://2011.qa-hackathon.org/qa2011/wiki?node=Attendees"&gt;Attendees&lt;/a&gt; list, and also add what &lt;a href="http://2011.qa-hackathon.org/qa2011/wiki?node=Agenda"&gt;Projects&lt;/a&gt; you want to work on.&lt;/p&gt;
&lt;p&gt;Rounding off this summary, an update of the tester mappings reveals we have gained at least 27 new testers, with a total of 38 new mappings. It's interesting to note that many of the new testers are not CPAN Authors, which is great. One of the benefits to CPAN Testers is that you can help to contribute to the project without having to be a hardcore Perl dev, and can contribute as little or as much as you are able. We are fast approaching 11 million test reports and I'm pleased to see we are continually encouraging new people to get involve and keep the submissions rising. Long may it continue.&lt;/p&gt;
Cross-posted from the &lt;a href="http://blog.cpantesters.org/diary/105"&gt;CPAN Testers Blog&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/h_BcSLWfeIo" height="1" width="1"/&gt;</content>
		<author>
			<name>CPAN Testers</name>
			<uri>http://blogs.perl.org/users/cpan_testers/</uri>
		</author>
		<source>
			<title type="html">CPAN Testers</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/cpan_testers/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/cpan_testers//73</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/cpan_testers/2011/02/cpan-testers-summary---january-2011---wish-you-were-here.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Irish Times “Most Read” Article Feed</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/SSYGSx0lMNI/000759a.html" />
		<id>http://taint.org/?p=3924</id>
		<updated>2011-02-06T23:07:59+00:00</updated>
		<content type="html">&lt;p&gt;If you visit the &lt;a href="http://www.irishtimes.com/"&gt;Irish
Times&lt;/a&gt; at all frequently, you’ll probably have noticed
a nifty “wisdom of crowds” feature in the right sidebar: the
list of “most read” articles.  It’s quite good, since they’re often very interesting articles.  Unfortunately, there’s no
RSS feed for this feature.&lt;/p&gt;

&lt;p&gt;Well, now there is:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://taint.org/scraped/irishtimes-most-read.xml"&gt;Irish 
Times Most Read RSS Feed&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/SSYGSx0lMNI" height="1" width="1"/&gt;</content>
		<author>
			<name>Justin</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/07/000759a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Bringing Mojolicious to the dancefloor</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/_bwRpO7Fc50/bringing-mojolicious-to-the-dancefloor.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1429</id>
		<updated>2011-02-06T12:11:50+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Dancer's engines is really cool. You wanna know how cool? Here's an example.&lt;/p&gt;

&lt;p&gt;If you like Mojolicious' templating system and you want to use it with Dancer, our interchangeable templating engines allow you to use a template engine of Mojolicious, if it exists.&lt;/p&gt;

&lt;p&gt;And if it doesn't exist, you can write it. Oh wait, someone already did!&lt;/p&gt;

&lt;p&gt;You can find it &lt;a href="http://search.cpan.org/perldoc?Dancer::Template::MojoTemplate"&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="http://cpansearch.perl.org/src/JAITKEN/Dancer-Template-MojoTemplate-0.1.0/lib/Dancer/Template/MojoTemplate.pm"&gt;the source&lt;/a&gt; to find out how silly easy this is.&lt;/p&gt;

&lt;p&gt;So, if there's another template engine you want with Dancer, try to write it! If you have issues, talk to us on IRC (#dancer on irc.perl.org) and check out other template engines.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/_bwRpO7Fc50" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/bringing-mojolicious-to-the-dancefloor.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Dancer FOSDEM fuel, first report</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/KXZkAZbpwRg/dancer-fosdem-fuel-first-report.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1428</id>
		<updated>2011-02-06T08:54:26+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Friday and Saturday have been very productive days for Dancer. We wanted to write up this blog post yesterday night but we were waaaaay too tired for that. Instead, you get it this morning while we're sitting at a great Perl 6 talk by Gabor Szabo.&lt;/p&gt;

&lt;p&gt;Friday we met up. I tried to wait for Franck at the train station and got lost... several times. He found me in the end and we went to our hotel room with his co-workers. Sukria and Dams arrived later. It was very exciting to meet the guys I've been working closely with for a while and haven't even met in person yet. Free software sure is nuts! :)&lt;/p&gt;

&lt;p&gt;We couldn't fix the internet at the hotel (one cable, no wireless) so we spent a lot of time on discussions about important things. While we do not like bureaucracy, some things had to be sorted out and talked about. Here is a short list of things we've settled:&lt;/p&gt;

&lt;p&gt;* We decided on a pull request processing policy, which allows programmers more power, more independence and allows for much quicker (yet safe!) way to process our pull requests - whether to approve to kindly oppose. When a user presents you with a pull request, it's a gift and we don't want to have users wait for these pull requests for more than a day or two. This actually took the majority of the discussion and we made some very good decisions about that.&lt;/p&gt;

&lt;p&gt;* We have a new core developer: Damien (dams) Krotkine! Dams has been working with us on Dancer for a while now and provided pull requests, help, documentation, features, fix ups, and we really wanted to provide him with more control over Dancer. In fact, he was practically a core developer for a while now, but he now finally got an official commit bit. Congratulations, Dams!&lt;/p&gt;

&lt;p&gt;Saturday (yesterday) was an even more successful day. We started with a hack session of a few hours. We closed 6 pull requests (all except 1) and all outstanding bugs!! We also had a triage of the issues list and classified them. Some of those were classified as new bugs, while others were classified differently (such as "Change required" which means it's not broken, but there's a recommended behavior change needed). We replied on almost all issues so we know what to fix and when, and raised discussion and changes in other places. We also released a few new versions (from development branch and stable branch) of Dancer that also include a new format of a the changes log, as discussed in previous posts. You can see it &lt;a href="http://cpansearch.perl.org/src/SUKRIA/Dancer-1.3002/CHANGES"&gt;here&lt;/a&gt;. I think you'll find it quite nifty! :)&lt;/p&gt;

&lt;p&gt;Dams has written two plugins (while working on an example application for his talk, it's a command line Curses twitter client, hell yeah!): Dancer::Plugin::FlashMessage and Dancer::Plugin::Captcha::reCaptcha. While the first one existed, he was able to finalize the implementation to match the spec that was previous defined by other frameworks (such as RoR) for this feature. From this point on we'll be able to add nifty features that are missing in others. Flavio Poletti is on the front for new ideas for the flash message feature. Good job! The Captcha plugin is pretty self explanatory. It's funny since it's something Gabor suggested on the plane, not regarding Dancer necessarily. Hey, it's already done and you'll see it on CPAN soon. The myth lives on!&lt;/p&gt;

&lt;p&gt;As a very small note, I was able to release a first development release of MetaCPAN::API, which I'll talk more about in another post.&lt;/p&gt;

&lt;p&gt;There were further discussions about our release policy. PAUSE has a limitation of not allowing authors to upload older versions of already-existing distributions, so we can no longer support new 1.2xxx releases. That means that we'll have to think of versions in a different way. There was a long discussion, that reached a late hour (while we hacked, actually) and in the end we decided on a release policy which we will later release to the mailing list and in the docs, and perhaps in a blog post for others to learn from (hopefully).&lt;/p&gt;

&lt;p&gt;That's it for now. Expect another report soon!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/KXZkAZbpwRg" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/dancer-fosdem-fuel-first-report.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Changing the changelog</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/EcK70VCJang/changing-the-changelog.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1425</id>
		<updated>2011-02-05T10:39:53+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Dave Rolsky has written a &lt;a href="http://blog.urth.org/2011/01/changes-file-how-and-how-not-to.html"&gt;compelling post&lt;/a&gt; on how not to write a changes log. It's ironic (or is it? the meaning of "irony" is illusive) that while I have much criticism for the changes log of others (and have commented on them to people in the past), Dancer's changes log is not up to par with what I think it should be, nor what Dave thinks it should be (which is close to what I think).&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Understanding Dancer's changes log&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Dancer's changes log has two primary goals: mark down changes for Dancer users, and giving credit to the people who do it.&lt;/p&gt;

&lt;p&gt;This means that in each version we have who did what change, and additional credit for whoever helped in any way.&lt;/p&gt;

&lt;p&gt;While the current format of the changes log is not optimal, we cared more about maintaining the current state, and did not optimize it. Truth be told, it was a bad habit and none of us advocate the current style be remained.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;A new path&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;So, agreeing with Dave about the correct format of a changes log, we will be writing the next log entries in a correct form, including dates of releases and an order of what's more crucial or important.&lt;/p&gt;

&lt;p&gt;There is a sentence I've learned with time which serves me well, and I do suggest others learn from it as well: "It is only a mistake if you don't learn anything". Once you learn, it can become a lesson. Hence, we welcome any criticism (note "criticism", not "trashing" - which sometimes people confuse with legitimate criticism), in any form (blog post, pull request, commit comment, IRC rant, etc.) by anyone.&lt;/p&gt;

&lt;p&gt;Dave, thanks! :)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/EcK70VCJang" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/changing-the-changelog.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-04</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/eaAwdC9Y7kg/180502a.html" />
		<id>http://taint.org/2011/02/04/180502a.html</id>
		<updated>2011-02-04T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.gamasutra.com/view/news/32760/Opinion_Minecraft_And_The_Question_Of_Luck.php" target="_blank" title="Gamasutra - News - Opinion: Minecraft And The Question Of Luck"&gt;Gamasutra – News – Opinion: Minecraft And The Question Of Luck&lt;/a&gt;
: ‘Notch’s luck was that he came across the idea of doing a first-person fortress building game. His alignment was that the game that he wanted to make was culturally connected to [he PC gamer] tribe. While the game may appear ugly, and its purchase process etc seem naive to many a gaming professional, all of those decisions that Notch made along the road to releasing his game were from the point of view of a particular perspective of what games are, what matters and what were the things that he could trust the tribe to figure out for themselves.’&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/tribes"&gt;tribes&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/viral"&gt;viral&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/minecraft"&gt;minecraft&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/gaming"&gt;gaming&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/analysis"&gt;analysis&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/games"&gt;games&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/culture"&gt;culture&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/gamasutra"&gt;gamasutra&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/via:nelson"&gt;via:nelson&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/future"&gt;future&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/software"&gt;software&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/marketing"&gt;marketing&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/eaAwdC9Y7kg" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/04/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Dancer FOSDEM mini-hackathon</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/InfvLEPWPcw/dancer-fosdem-mini-hackathon.html" />
		<id>tag:blogs.perl.org,2011:/users/sawyer_x//87.1422</id>
		<updated>2011-02-04T09:59:50+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I am honored to be &lt;a href="http://szabgab.com/blog/2011/01/perl-at-fosdem-2011.html"&gt;sponsored&lt;/a&gt; by &lt;a href="http://perl-ecosystem.org/"&gt;PEG&lt;/a&gt;, and I would like to thank them for it.&lt;/p&gt;

&lt;p&gt;A team of Dancer core developers (Alexis Sukrieh, Franck Cuny, Damien Krotkine and myself) will be having a mini-hackathon this FOSDEM. This is made possible since we will all be staying together in the same apartment for the duration of the event.&lt;/p&gt;

&lt;p&gt;We will focus our efforts on merging Github Pull Requests and closing as many tickets as possible. New features might be worked on, but it is not part of the official plan. We leave room for improvisation. :)&lt;/p&gt;

&lt;p&gt;I want to thank everyone who pushed commits and changes into Dancer. I've been very surprised (yet thrilled) at some of the new faces we've been seeing on our IRC channel (#dancer on irc.perl.net) and in our pull requests. While some of these were merged on the spot, others were waiting longer in the queue. This is what we will try to focus on.&lt;/p&gt;

&lt;p&gt;The next post will include another issue which will be worked on during the hackathon, which is the Dancer changelog.&lt;/p&gt;

&lt;p&gt;If you're arriving at FOSDEM, we have a Perl room and a Perl booth. Feel free to stop by, say hi, catch a few interesting talks and jibber-jabber with us!&lt;br /&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/InfvLEPWPcw" height="1" width="1"/&gt;</content>
		<author>
			<name>Sawyer X</name>
			<uri>http://blogs.perl.org/users/sawyer_x/</uri>
		</author>
		<source>
			<title type="html">Sawyer X</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/sawyer_x/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/sawyer_x//87</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/sawyer_x/2011/02/dancer-fosdem-mini-hackathon.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-03</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/IaD3zf60oPw/180502a.html" />
		<id>http://taint.org/2011/02/03/180502a.html</id>
		<updated>2011-02-03T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.spamtrackers.eu/wiki/index.php/Main_Page" target="_blank" title="Spamwiki"&gt;Spamwiki&lt;/a&gt;
: good wiki tracking spam operations, their current campaigns, who’s doing it etc.&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/wiki"&gt;wiki&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/spam"&gt;spam&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/anti-spam"&gt;anti-spam&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://ikillspammers.blogspot.com/2011/01/spammers-are-now-using-verified-by-visa.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+IKillSpammers+%28I+Kill+Spammers%29" target="_blank" title="Spammers Are Now Using Verified By Visa"&gt;Spammers Are Now Using Verified By Visa&lt;/a&gt;
: Visa’s atrociously-designed “security” program is now being used by criminals to process their credit-card payments, allegedly&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/verified-by-visa"&gt;verified-by-visa&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/spam"&gt;spam&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/visa"&gt;visa&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/security"&gt;security&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/IaD3zf60oPw" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/03/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Perl QA Hackathon 2011: Call to Attention</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/M2TCRfW2-Lw/perl-qa-hackathon-2011-call-to-attention.html" />
		<id>tag:www.perl.com,2011:/pub//2.1942</id>
		<updated>2011-02-02T19:41:31+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href="http://search.cpan.org/~daxim"&gt;Lars Dɪᴇᴄᴋᴏᴡ&lt;/a&gt; has sent out a call for attention for the &lt;a href="http://2011.qa-hackathon.org/qa2011/"&gt;2011 Perl QA Hackathon&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The Perl QA hackathon 2011 is taking place from Saturday, April 16th to 
Monday, April 18th 2011 in Amsterdam, The Netherlands. Attendance is 
gratis. We would like to know if you are interested in coming and 
participating. You can also propose other people who should be invited. As 
with the hackathons in the past years, we aim to fund the travel and 
accommodation costs for those who cannot get funding otherwise.&lt;/p&gt;

&lt;p&gt;We would like to hear about your topics and ideas. Please find further 
information at the &lt;a href="http://2011.qa-hackathon.org/qa2011/wiki"&gt;Perl QA Hackathon 2011 Wiki&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/M2TCRfW2-Lw" height="1" width="1"/&gt;</content>
		<author>
			<name>chromatic</name>
			<uri>http://www.perl.com/pub/</uri>
		</author>
		<source>
			<title type="html">Perl.com</title>
			<link rel="self" href="http://www.perl.com/pub/atom.xml" />
			<id>tag:www.perl.com,2010-07-21:/pub//2</id>
		</source>
	<feedburner:origLink>http://www.perl.com/pub/2011/02/perl-qa-hackathon-2011-call-to-attention.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-02</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/4Uap1HkRk5s/180502a.html" />
		<id>http://taint.org/2011/02/02/180502a.html</id>
		<updated>2011-02-02T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://bit.ly/ga9RL9" title="Michael "&gt;Michael “Liar’s Poker” Lewis on Ireland’s economic collapse&lt;/a&gt;
: PDF of the 15-page Vanity Fair article — from interviews I’ve read in advance, this seems pretty good&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/michael-lewis"&gt;michael-lewis&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/vanity-fair"&gt;vanity-fair&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/articles"&gt;articles&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/pdf"&gt;pdf&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/toread"&gt;toread&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/economy"&gt;economy&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/ireland"&gt;ireland&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/disaster"&gt;disaster&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/collapse"&gt;collapse&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://ocfnash.wordpress.com/2011/02/02/dublin-bikes-revisited/" target="_blank" title="Dublin bikes revisited"&gt;Dublin bikes revisited&lt;/a&gt;
: Fantastic comparative number crunching on the JC Decaux Dublin Bikes scheme, compared to their other European cities (Brussels, Lyons, Paris, Seville), times of day, busiest stations, rainfall, etc.&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/bikes"&gt;bikes&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/dublin-bikes"&gt;dublin-bikes&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/cycling"&gt;cycling&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/dublin"&gt;dublin&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/ireland"&gt;ireland&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/jc-decaux"&gt;jc-decaux&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/number-crunching"&gt;number-crunching&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/analysis"&gt;analysis&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/statistics"&gt;statistics&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.wired.com/magazine/2011/01/ff_lottery/all/1" target="_blank" title="Wired: how a Toronto statistician cracked the state lottery"&gt;Wired: how a Toronto statistician cracked the state lottery&lt;/a&gt;
: ‘The tic-tac-toe lottery was seriously flawed. It took a few hours of studying his tickets and some statistical sleuthing, but he discovered a defect in the game: The visible numbers turned out to reveal essential information about the digits hidden under the latex coating. Nothing needed to be scratched off—the ticket could be cracked if you knew the secret code.’&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/toronto"&gt;toronto&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/hacks"&gt;hacks&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/money"&gt;money&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/statistics"&gt;statistics&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/probability"&gt;probability&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/wired"&gt;wired&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/tic-tac-toe"&gt;tic-tac-toe&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/singleton"&gt;singleton&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/4Uap1HkRk5s" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/02/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Mojolicious and Plack</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/em_W2qWXJXk/mojolicious-and-plack" />
		<id>http://blog.kraih.com/mojolicious-and-plack</id>
		<updated>2011-02-01T20:21:42+00:00</updated>
		<content type="html">&lt;p&gt;
	While &lt;a href="http://mojolicio.us"&gt;Mojolicious&lt;/a&gt; contains a really nice built in web server, which makes especially development and testing very enjoyable, we also have first class support for &lt;a href="http://plackperl.org"&gt;PSGI and Plack&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;div class="data type-text"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;% mojo generate lite_app&lt;/div&gt;&lt;div class="line" id="LC2"&gt;  [exist] /Users/sri&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  [write] /Users/sri/myapp.pl&lt;/div&gt;&lt;div class="line" id="LC4"&gt;  [chmod] myapp.pl 744&lt;/div&gt;&lt;div class="line" id="LC5"&gt;% plackup myapp.pl&lt;/div&gt;&lt;div class="line" id="LC6"&gt;HTTP::Server::PSGI: Accepting connections at http://0:5000/&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;p&gt;&lt;/p&gt; In fact, it easily beats most web frameworks that were specifically designed for Plack from the get-go. &lt;br /&gt;All Mojolicious applications can automatically detect that they are executed in a PSGI context and act accordingly. &lt;p&gt;&lt;/p&gt; &lt;div class="data type-perl"&gt;
    
      &lt;table cellpadding="0" cellspacing="0"&gt;
        &lt;tbody&gt;&lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span id="L1" rel="#l1"&gt;1&lt;/span&gt;
&lt;span id="L2" rel="#l2"&gt;2&lt;/span&gt;
&lt;span id="L3" rel="#l3"&gt;3&lt;/span&gt;
&lt;span id="L4" rel="#l4"&gt;4&lt;/span&gt;
&lt;span id="L5" rel="#l5"&gt;5&lt;/span&gt;
&lt;span id="L6" rel="#l6"&gt;6&lt;/span&gt;
&lt;span id="L7" rel="#l7"&gt;7&lt;/span&gt;
&lt;span id="L8" rel="#l8"&gt;8&lt;/span&gt;
&lt;span id="L9" rel="#l9"&gt;9&lt;/span&gt;
&lt;span id="L10" rel="#l10"&gt;10&lt;/span&gt;
&lt;span id="L11" rel="#l11"&gt;11&lt;/span&gt;
&lt;span id="L12" rel="#l12"&gt;12&lt;/span&gt;
&lt;span id="L13" rel="#l13"&gt;13&lt;/span&gt;
&lt;span id="L14" rel="#l14"&gt;14&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c1"&gt;#!/usr/bin/env perl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Mojolicious::&lt;/span&gt;&lt;span class="n"&gt;Lite&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Plack::&lt;/span&gt;&lt;span class="n"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s"&gt;'/welcome'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$self&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;    &lt;span class="nv"&gt;$self&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'Hello Mojo!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;    &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="s"&gt;'Deflater'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    
  &lt;/div&gt;&lt;p&gt;&lt;/p&gt; Isn't it pretty? &lt;br /&gt;Everything, including middleware, just works out of the box! :)&lt;p&gt;&lt;/p&gt;&lt;div class="p_embed p_image_embed"&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/kraih/vCJP8Sycme2jiOepXavrYVLI3w1ZxkFdGas3a9h9qhDgKnv2xKtB1fdx7CG1/plack.png"&gt;&lt;img alt="Plack" height="259" src="http://posterous.com/getfile/files.posterous.com/kraih/AQD5RlYZGskjr1Xil5EKSgSvtDU6nhiLkXszkpJLK3YdfariW9Oh64npYjfY/plack.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
	
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.kraih.com/mojolicious-and-plack"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://blog.kraih.com/mojolicious-and-plack#comment"&gt;Leave a comment  »&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/em_W2qWXJXk" height="1" width="1"/&gt;</content>
		<author>
			<name>Sebastian Riedel</name>
			<uri>http://blog.kraih.com</uri>
		</author>
		<source>
			<title type="html">Sebastian Riedel about Perl and the Web</title>
			<subtitle type="html">Most recent posts at Sebastian Riedel about Perl and the Web</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/kraih" />
			<id>http://blog.kraih.com</id>
		</source>
	<feedburner:origLink>http://blog.kraih.com/mojolicious-and-plack</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Links for 2011-02-01</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/ujSePCyvhhY/180502a.html" />
		<id>http://taint.org/2011/02/01/180502a.html</id>
		<updated>2011-02-01T18:05:02+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://searchengineland.com/google-bing-is-cheating-copying-our-search-results-62914" target="_blank" title="Google: Bing Is Cheating, Copying Our Search Results"&gt;Google: Bing Is Cheating, Copying Our Search Results&lt;/a&gt;
: laaaame, Microsoft&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/lame"&gt;lame&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/microsoft"&gt;microsoft&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/google"&gt;google&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/search"&gt;search&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/honeypots"&gt;honeypots&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/stings"&gt;stings&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/" target="_blank" title="Java Hangs When Converting 2.2250738585072012e-308"&gt;Java Hangs When Converting 2.2250738585072012e-308&lt;/a&gt;
: ie. the same value as the PHP bug.  ‘Konstantin [Pressier] reported this problem to Oracle three weeks ago, but is still waiting for a reply.’  good job, Oracle!&lt;br /&gt;
(tags: &lt;a class="delicioustag" href="http://del.icio.us/jm/oracle"&gt;oracle&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/fail"&gt;fail&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/security"&gt;security&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/java"&gt;java&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/bugs"&gt;bugs&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/floating-point"&gt;floating-point&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/ujSePCyvhhY" height="1" width="1"/&gt;</content>
		<author>
			<name>dailylinks</name>
			<uri>http://taint.org</uri>
		</author>
		<source>
			<title type="html">taint.org: Justin Mason's Weblog</title>
			<subtitle type="html">incoherent ramblings about Apache SpamAssassin, anti-spam, perl, software development, and the web</subtitle>
			<link rel="self" href="http://taint.org/feed" />
			<id>http://taint.org</id>
		</source>
	<feedburner:origLink>http://taint.org/2011/02/01/180502a.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">Belated Modern Perl review</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/fdvmE0OpSFo/" />
		<id>http://www.dagolden.com/?p=1314</id>
		<updated>2011-02-01T02:24:10+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I purchased &lt;a href="http://amzn.com/0977920151"&gt;Modern Perl&lt;/a&gt; as soon as it came out and I read it right away.  I meant to write it up a long time ago.  Here's a copy of &lt;a href="http://www.amazon.com/review/R1EAHI4GHDLQ96/ref=cm_cr_pr_perm?ie=UTF8&amp;amp;ASIN=0977920151&amp;amp;nodeID=&amp;amp;tag=&amp;amp;linkCode="&gt;the review I posted&lt;/a&gt; to &lt;a href="http://amazon.com/"&gt;Amazon&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
I had a hard time characterizing this wonderful book.  It explains the fundamentals, but it's not an introductory book like &lt;a href="http://amzn.com/0596520107"&gt;Learning Perl&lt;/a&gt;.  It covers almost every feature of the Perl 5 language, but it's not a reference book like &lt;a href="http://amzn.com/0596000278"&gt;Programming Perl&lt;/a&gt;.  It explains common idioms, but it's not a guide to Perl 5 fluency like &lt;a href="http://amzn.com/0321496949"&gt;Effective Perl Programming&lt;/a&gt;.  It contains many practical suggestions, but it's not a book of tips like &lt;a href="http://amzn.com/0596526741"&gt;Perl Hacks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I can only describe it as a "textbook".  If I had to pick a single book to teach Perl 5, this is the one I'd choose.  As I read it, I was reminded of the first time I read K&amp;amp;R (&lt;a href="http://amzn.com/0131103628"&gt;C Programming Language&lt;/a&gt;) and how much learning was packed into it.  (It's the only college programming text I still have).  In a slim 250 pages, Modern Perl obsoletes most of my shelf of Perl 5 books.  It's not intended for a complete novice to programming (any more than K&amp;amp;R was), but in the hands of a competent programmer or a diligent student it will teach everything that one needs to know to write Perl 5 well.&lt;/p&gt;
&lt;p&gt;What I especially like about Modern Perl is that it puts particular emphasis on understanding fundamental Perl 5 concepts like "context" and "scope".  From these and other foundations, one can understand why certain programming idioms have emerged and one can avoid surprises in the odder corners of the language.  If you want a book to spoon feed cut-and-paste code to you, this is not the book for you.  If you want a book that will teach you to write your own code confidently, this is an excellent resource.&lt;/p&gt;
&lt;p&gt;If you already know some programming and want to learn Perl 5, then Modern Perl is the book you should get.  If you already know Perl 5, but don't think you know it well, or if you haven't kept up in developments in Perl 5 since the late 1990's, then Modern Perl will get you up to speed.
&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/fdvmE0OpSFo" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1314/belated-modern-perl-review/</feedburner:origLink></entry>

	<entry>
		<title type="html">One more week for OSCON proposals</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Wyx2zuqv5YE/one-more-week-for-oscon-proposals.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1413</id>
		<updated>2011-01-31T21:21:26+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;The &lt;a href="http://www.oscon.com/oscon2011/public/cfp/144"&gt;OSCON Call for Proposals&lt;/a&gt; ends February 7th. &lt;/p&gt;

&lt;p&gt;In the Perl track, we're looking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perly stuff that deals with Javascript, JSON, or HTML5&lt;/li&gt;
&lt;li&gt;Who's going to do a Plack talk?&lt;/li&gt;
&lt;li&gt;Modern Perl or modern Perl.&lt;/li&gt;
&lt;li&gt;Cool new things you can do with Perl 5.14 (see &lt;a href="http://www.effectiveperlprogramming.com/blog/category/perl/5-14"&gt;the Perl 5.14 posts at The Effective Perler&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Using Unicode in Perl&lt;/li&gt;
&lt;li&gt;The latest Perl development support tools&lt;/li&gt;
&lt;li&gt;Current Perl good-enough practices&lt;/li&gt;
&lt;li&gt;What's up with Parrot and Perl 6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're not up to a 40 minute talk, especially if you're a new presenter, we also have short, low pressure 5-minute lightning talks.&lt;/p&gt;

&lt;p&gt;And, since speaker participation includes a peer-review process, I have a lot of advice on &lt;a href="http://blogs.perl.org/users/brian_d_foy/2010/12/the-2011-oscon-call-for-papers-is-open.html"&gt;improving your chances&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Wyx2zuqv5YE" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/01/one-more-week-for-oscon-proposals.html</feedburner:origLink></entry>

	<entry>
		<title type="html">The 2011 Perl QA Workshop, April 16-18 in Amsterdam</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/c2hH_GNskPE/the-2011-perl-qa-workshop-april-16-18-in-amsterdam.html" />
		<id>tag:blogs.perl.org,2011:/users/brian_d_foy//178.1407</id>
		<updated>2011-01-30T01:36:31+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;a href="http://2011.qa-hackathon.org/qa2011/wiki"&gt;The 2011 Perl QA Workshop&lt;/a&gt; will be April 16-18 in Amsterdam, sponsored by Booking.com. If you show up, you might never leave.&lt;/p&gt;

&lt;p&gt;The QA workshop is perhaps one of the most productive workshops. Here are my notes and videos from the 2010 Perl QA workshop in Vienna:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/users/brian_d_foy/2010/04/what-could-a-completely-different-cpan-client-do.html"&gt;What could a completely different CPAN client do?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/users/brian_d_foy/2010/04/2010-vienna-qa-workshop-day-1-results-video.html"&gt;Day 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/users/brian_d_foy/2010/04/2010-vienna-qa-workshop-day-2-results-video.html"&gt;Day 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/users/brian_d_foy/2010/04/2010-vienna-qa-workshop-final-summary-video.html"&gt;Final summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.perl.org/users/brian_d_foy/2010/04/my-notes-from-the-vienna-qa-workshop.html"&gt;My post-workshop notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/c2hH_GNskPE" height="1" width="1"/&gt;</content>
		<author>
			<name>brian d foy</name>
			<uri>http://blogs.perl.org/users/brian_d_foy/</uri>
		</author>
		<source>
			<title type="html">brian d foy</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/brian_d_foy/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/brian_d_foy//178</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/brian_d_foy/2011/01/the-2011-perl-qa-workshop-april-16-18-in-amsterdam.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en-us">Will your perl remain supported -- and what does that mean?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/eHCCX60HHZo/1872" />
		<id>http://rjbs.manxome.org/rubric/entry/1872</id>
		<updated>2011-01-28T16:11:13+00:00</updated>
		<content type="html">&lt;p&gt;Yesterday, I tweeted this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Remember, Perl shops: if you're still on 5.8 come April, you're on an
  unsupported legacy version. Current versions are 5.10.1 and 5.12.3&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A few people asked for more details, and in giving them, I said this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It's more an amalgam of truths than an actual truth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Right now, the average company using Perl (or Python, or Ruby, etc.) has no
support contract for the language.  It's free, open source software that comes
with no warranty, guarantee, or promises.  Of course, everybody knows that this
doesn't mean that it's every man for himself.  There are a number of volunteers
who put in incredible amounts of work to fix bugs, ensure portability, and
improve the language itself.  The key word above is &lt;em&gt;volunteer&lt;/em&gt;, which means,
fundamentally, that nobody is under any obligation to fix &lt;em&gt;anything&lt;/em&gt;.  If you
absolutely need work done, you just might have to pay for it.  (In my
experience, this is exceedingly rare; the lengths to which I have seen the core
Perl team to go to fix bugs that don't even affect them directly are both
staggering and humbling.)&lt;/p&gt;

&lt;p&gt;Still, the Perl team wants people to have the right kind of expectations, and
that comes in two parts:  the team &lt;em&gt;will&lt;/em&gt; investigate and try to fix bugs in
recent perls, but it &lt;em&gt;won't&lt;/em&gt; promise to spend its valuable time on old
versions.  After all, the internals of perl change over time, and it takes a
significant mental effort to keep various major versions of perl's VM and its
implementation fresh in one's mind.&lt;/p&gt;

&lt;p&gt;It was recently my great pleasure to perform the routine work required to
&lt;a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2011-01/msg00748.html"&gt;release
perl-5.12.3&lt;/a&gt;,
which contained the most up-to-date copy of
&lt;a href="http://search.cpan.org/dist/perl/pod/perlpolicy.pod"&gt;perlpolicy&lt;/a&gt;, which
contains the promises that the core team will try to keep, regarding perl
support.  Here are two of the key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;we will attempt to fix critical issues in the two most recent stable release series&lt;/li&gt;
&lt;li&gt;we will attempt to provide "critical" security patches or releases for release series begun within the last three years&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In April, the release process for 5.14.0 begins, meaning we'll probably have it
in April or May, barring strange circumstances.  Once 5.14.0 is out, the
official support period for 5.10.x will end, and the chances of bugfixes being
applied to the &lt;code&gt;maint-5.10&lt;/code&gt; branch will become very slim.  The chances of a new
5.10.x release will become tiny.  There simply won't be enough interested
volunteers to do the work for such an old version.  Maybe if there is a big
influx of workers who want to support 5.10, the policy will change -- but that
seems a pretty unlikely scenario.&lt;/p&gt;

&lt;p&gt;Not only will 5.10.x be out of its normal "official support period," but it
will be out of its security update period, too.
&lt;a href="http://search.cpan.org/dist/perl/pod/perlhist.pod"&gt;perlhist&lt;/a&gt; tells us that
5.10.0 was released in December, 2007 -- already more than three years ago.&lt;/p&gt;

&lt;p&gt;So, with spring's 5.14.0 release obsoleting 5.10, why was I talking about 5.8?
Well, perl 5.10.1 was released in August, 2009, and I suspect that almost
anybody running 5.10 is running 5.10.1 -- it has too many critical bugfixes for
me to stomach the idea that there's a lot of 5.10.0 out there.  (Let's not
burst my bubble, okay?  Optimism is all I have.)  People who upgraded their
perl in 2009 can probably manage to do it again in the next year or two without
serious pain.  They remember how.&lt;/p&gt;

&lt;p&gt;On the other hand, experience on IRC, mailing lists, and the rest of the world
has told me that the most common subversions of 5.8 in use are 8, 5, and 4,
probably in that order.  My gut tells me that 5.8.1 comes next, but I'm a lot
less confident.  Those releases were in 2006, 2004, 2004, and 2003,
respectively.  Assuming that these upgrades were done within a year or so of
the language release (which isn't a great assumption, but a tolerable one) then
there are a lot of places who haven't upgraded their primary programming tool
in over five years.  Think of all the other technical tasks you last performed
five years ago, and you might realize how little you remember how you did it,
and what all the little details were that cost you your 80% time overrun.&lt;/p&gt;

&lt;p&gt;That's why I try to track current versions whenever possible.  It's not that
older versions are always a serious liability, it's that it can cost much more
to upgrade only very rarely, compared with frequently.  It also drives you to
have better integration tools, since you integrate frequently and want it to
have a low cost.  It means that when the next maintenance release comes out,
you can easily perform an automated test of your systems, build a new
deployment build, and upgrade, all as routine tasks.&lt;/p&gt;

&lt;p&gt;So, my advice is this:  if you're building your company's software on a
doubly-obsolete version of a tool that's still under development, it's time to
begin tooling up to stay up to date.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/eHCCX60HHZo" height="1" width="1"/&gt;</content>
		<author>
			<name>rjbs</name>
			<uri>http://rjbs.manxome.org/rubric</uri>
		</author>
		<source>
			<title type="html">Rubric: rjbs's entries with a body</title>
			<subtitle type="html">Rubric</subtitle>
			<link rel="self" href="http://rjbs.manxome.org/rubric/entries/user/rjbs/has_body/1?format=rss" />
			<id>http://rjbs.manxome.org/rubric</id>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1872</feedburner:origLink></entry>

	<entry>
		<title type="html">Show Perl subname in vim statusline</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/smp_rh00nf0/show-perl-subname-in-vim-statusline.html" />
		<id>tag:blogs.perl.org,2011:/users/ovid//11.1406</id>
		<updated>2011-01-28T12:37:11+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I asked on the vim mailing list how to see the name of Perl's current sub/method in the status line and Alan Young, the author of &lt;a href="http://search.cpan.org/dist/PPIx-IndexLines/"&gt;PPIx::IndexLines&lt;/a&gt; has a great suggestion which unfortunately relied on PPI. I'm working with very large modules and PPI ground to a halt for me. As a result, I took his suggestion and worked out the following.&lt;/p&gt;

&lt;p&gt;First, make sure that your .vimrc has &lt;tt&gt;set laststatus=2&lt;/tt&gt; in it. That will ensure that you always get a status line, even if you only have one window (i.e., don't have split windows).  Then drop the following into your &lt;tt&gt;.vim/ftplugin/perl.vim&lt;/tt&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if ! exists("g:did_perl_statusline")
    setlocal statusline+=%(\ %{StatusLineIndexLine()}%)
    setlocal statusline+=%=
    setlocal statusline+=%f\ 
    setlocal statusline+=%P
    let g:did_perl_statusline = 1
endif

if has( 'perl' )
perl &amp;lt;&amp;lt; EOP
    use strict;
    sub current_sub {
        my $curwin = $main::curwin;
        my $curbuf = $main::curbuf;

        my @document = map { $curbuf-&amp;gt;Get($_) } 0 .. $curbuf-&amp;gt;Count;
        my ( $line_number, $column  ) = $curwin-&amp;gt;Cursor;

        my $sub_name = '(not in sub)';
        for my $i ( reverse ( 1 .. $line_number  -1 ) ) {
            my $line = $document[$i];
            if ( $line =~ /^\s*sub\s+(\w+)\b/ ) {
                $sub_name = $1;
                last;
            }
        }
        VIM::DoCommand "let subName='$line_number: $sub_name'";
    }
EOP

function! StatusLineIndexLine()
  perl current_sub()
  return subName
endfunction
endif
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;All this does is naïvely read backwards from the current line to get "sub $name" and report $name. It will fail on many common cases. However, it's fast. Very fast. Unlike the PPI solution, I can use this and manually correct any files which don't fit this convention.&lt;/p&gt;

&lt;p&gt;It's a quick and nasty hack, but already I'm finding it very useful. Suggestions welcome :)&lt;/p&gt;

&lt;p&gt;Note that this requires Perl support. Just ":echo has('perl')" and if it displays '1', you're good to go. Then type "help perl-using" to see what's going on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: I've updated that statusline. There's a space after the '\' and it now shows the column, filename and percent. See ":help statusline" or &lt;a href="http://techspeak.plainlystated.com/2009/05/vim-statusline.html"&gt;this blog post&lt;/a&gt; for more ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update2&lt;/strong&gt;: Changed "set" to "setlocal" so we don't screw with non-Perl buffers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update3&lt;/strong&gt;: If I do an ":e $anotherfile", I lose the new status line. Eliminating the &lt;tt&gt;exists("g:did_perl_statusline")&lt;/tt&gt; seems to fix this.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/smp_rh00nf0" height="1" width="1"/&gt;</content>
		<author>
			<name>Ovid</name>
			<uri>http://blogs.perl.org/users/ovid/</uri>
		</author>
		<source>
			<title type="html">Ovid</title>
			<subtitle type="html">A blog about the Perl programming language</subtitle>
			<link rel="self" href="http://blogs.perl.org/users/ovid/atom.xml" />
			<id>tag:blogs.perl.org,2009-11-03:/users/ovid//11</id>
		</source>
	<feedburner:origLink>http://blogs.perl.org/users/ovid/2011/01/show-perl-subname-in-vim-statusline.html</feedburner:origLink></entry>

	<entry>
		<title type="html" xml:lang="en">OS-specific prerequisites with Dist::Zilla</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/BCQM5p8O8a8/" />
		<id>http://www.dagolden.com/?p=1306</id>
		<updated>2011-01-28T11:48:14+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;One of my long-standing annoyances with &lt;a href="http://p3rl.org/Dist::Zilla"&gt;Dist::Zilla&lt;/a&gt; was that it didn't have means for doing OS-specific prerequisites. I had put off converting some distributions to Dist::Zilla because of that, but finally got off my duff and wrote &lt;a href="http://p3rl.org/Dist::Zilla::Plugin::OSPrereqs"&gt;Dist::Zilla::Plugin::OSPrereqs&lt;/a&gt; to do what I want.&lt;/p&gt;
&lt;p&gt;It works like this in your dist.ini:&lt;/p&gt;
&lt;pre class="brush: plain; title: ;"&gt;[OSPrereqs / MSWin32]
Win32API::File = 0.10
&lt;/pre&gt;
&lt;p&gt;That puts a conditional clause in the Makefile.PL that only adds the prerequisite for the given operating system.  It's a bit of a crude hack, but appears to work.&lt;/p&gt;
&lt;p&gt;Now even more things I maintain can be streamlined the Dist::Zilla way!  Awesome!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/BCQM5p8O8a8" height="1" width="1"/&gt;</content>
		<author>
			<name>dagolden</name>
			<uri>http://www.dagolden.com</uri>
		</author>
		<source>
			<title type="html">dagolden</title>
			<subtitle type="html">Whatever comes to mind</subtitle>
			<link rel="self" href="http://www.dagolden.com/index.php/feed/" />
			<id>http://www.dagolden.com</id>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/1306/os-specific-prerequisites-with-distzilla/</feedburner:origLink></entry>

</feed>
