<?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>2009-07-13T20:02:29+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<link rel="self" href="http://planet.perl.org/atom.xml" type="application/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><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry xml:lang="en">
		<title type="html">Log::Any released, only two years late</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/FFAyPl-3Q-M/" />
		<id>http://www.openswartz.com/?p=70</id>
		<updated>2009-07-13T06:02:15+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Any"&gt;Log::Any&lt;/a&gt; has finally been released to CPAN. It allows CPAN modules to log messages in a generic way, while letting the application choose (or decline to choose) a logging mechanism such as Log::Dispatch or Log::Log4perl.&lt;/p&gt;
&lt;p&gt;This is something I&amp;#8217;ve been meaning to implement for nearly &lt;a href="http://www.openswartz.com/2007/09/06/standard-logging-api/"&gt;two years&lt;/a&gt; - talk about procrastination! What pushed me over the edge was that three of my distributions - &lt;a href="http://www.masonhq.com/"&gt;Mason&lt;/a&gt;, &lt;a href="http://cpan.uwinnipeg.ca/module/CHI"&gt;CHI&lt;/a&gt;, and an upcoming Server::Control - all needed to log various things, and had no good generic way to do it.&lt;/p&gt;
&lt;p&gt;As part of this effort, I surveyed the various logging packages on CPAN to see which ones Log::Any should interface with. Log::Dispatch and Log::Log4perl were the heavyweights and obvious first choices, but I was unprepared for the sheer variety of other distributions. Logging, like &lt;a href="http://www.perl.com/lpt/a/580"&gt;templating systems&lt;/a&gt;, seems to be one of those things that everyone wants to try their hand at! Here&amp;#8217;s a partial list of logging packages that all share roughly the same mission - dispatching logs to various outputs - along with the number of distributions that depend on each:&lt;/p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Log4perl"&gt;Log::Log4perl&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;176&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Dispatch"&gt;Log::Dispatch&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Agent"&gt;Log::Agent&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Report"&gt;Log::Report&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Trace"&gt;Log::Trace&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Message"&gt;Log::Dispatch::Config&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Message"&gt;Log::Message&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Channel"&gt;Log::Channel&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Dump"&gt;Log::Dump&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Handler"&gt;Log::Handler&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Info"&gt;Log::Info&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::LogLite"&gt;Log::LogLite&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::FileSimple"&gt;Log::FileSimple&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Message::Simple"&gt;Log::Message::Simple&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::StdLog"&gt;Log::StdLog&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Simple"&gt;Log::Simple&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Simplest"&gt;Log::Simplest&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Trivial"&gt;Log::Tiny&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cpan.uwinnipeg.ca/module/Log::Trivial"&gt;Log::Trivial&lt;/a&gt;&lt;/td&gt;
&lt;td align="right"&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I particularly like that there are seven packages named with a variation of &amp;#8220;Simple&amp;#8221;, &amp;#8220;Trivial&amp;#8221;, etc. Trying to choose between these would be the opposite of simple.&lt;/p&gt;
&lt;p&gt;To be fair, Log::Dispatch, presumably the easier of the two main logging packages to configure, requires this just to log normally to a file:&lt;/p&gt;
&lt;pre&gt;
   my $dispatcher = Log::Dispatch-&gt;new();
   $dispatcher-&gt;add(
       Log::Dispatch::File-&gt;new(
           name      =&gt; 'foo',
           min_level =&gt; 'info',
           filename  =&gt; "$dir/test.log",
           mode      =&gt; 'append',
           callbacks =&gt; sub { my %params = @_; "$params{message}\n" },
       )
   );
   $dispatcher-&gt;info('this is a message');
&lt;/pre&gt;
&lt;p&gt;It&amp;#8217;s no wonder people tried this and yearned for a simpler alternative. (I&amp;#8217;ve gotten permission from Dave to simplify a few of these things with a maintenance release.)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/FFAyPl-3Q-M" 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/feed/</id>
			<updated>2009-07-13T14:21:49+00:00</updated>
		</source>
	<feedburner:origLink>http://www.openswartz.com/2009/07/13/log-any-released/</feedburner:origLink></entry>

	<entry>
		<title type="html">Test::Pod 1.40 now checks for illegal L&amp;amp;lt;&amp;gt; constructs</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Pbx_U7WMy5E/testpod-140-now-checks-for-illegal-l-constructs.html" />
		<id>tag:perlbuzz.com,2009://1.698</id>
		<updated>2009-07-13T04:41:17+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;It will be interesting to see what, if anything, barfs because of the new Test::Pod.&lt;/p&gt;

&lt;p&gt;This POD construct is illegal according to perlpodspec, and will not be formatted correctly on &lt;a href="http://search.cpan.org/"&gt;search.cpan.org&lt;/a&gt;, either:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;L&amp;lt;perlbuzz|http://perlbuzz.com&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Test::Pod catches it now.  My wonder is how many people are using it.&lt;/p&gt;

&lt;p&gt;Test::Pod also requires Perl 5.8 now, and I'd like to think that pretty much every module on CPAN could use modern Perl versions at this point.&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=xotktrt30rI:Zkh9ROZylVU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=xotktrt30rI:Zkh9ROZylVU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=xotktrt30rI:Zkh9ROZylVU:F7zBnMyn0Lo" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=xotktrt30rI:Zkh9ROZylVU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=xotktrt30rI:Zkh9ROZylVU:V_sGLiPBpWU" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=xotktrt30rI:Zkh9ROZylVU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/xotktrt30rI" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Pbx_U7WMy5E" 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>
			<updated>2009-07-13T05:01:07+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/PerlBuzz/~3/xotktrt30rI/testpod-140-now-checks-for-illegal-l-constructs.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Is it right to auto-notify authors, if there aren't many?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/SsOBOAaQ_E4/39271" />
		<id>http://use.perl.org/~Alias/journal/39271?from=rss</id>
		<updated>2009-07-13T04:02:57+00:00</updated>
		<content type="html">&lt;p&gt;Dear LazyWeb.&lt;/p&gt;&lt;p&gt;The FAIL 100 list has been working reasonably well, but one crucial downside at the moment is the need for people to actively monitor it (both those that are aware that it exists, and those that don't know it exists).&lt;/p&gt;&lt;p&gt;While I certainly agree that it is a bad idea to spam authors in general (I'm certainly for opt-in CPAN Testers summaries and emails) does this still hold true when you are identifying only a small number of authors.&lt;/p&gt;&lt;p&gt;Would it be ok to auto-email the Top 10 positions on the FAIL 100 list, say, each week to let them know their module is considered to be important to fix quickly?&lt;/p&gt;&lt;p&gt;What if it's just the first time it appears, and on subsequent sequential appearances we don't email you.&lt;/p&gt;&lt;p&gt;What if it was the top 5? Or the top 2? Or top 1? Or only if you met a certain threshhold of FAILure score? Or it was at a wider interval, say, monthly?&lt;/p&gt;&lt;p&gt;When is it ok for a whole-CPAN process to judge that an author needs to be nudged?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/SsOBOAaQ_E4" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39271?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">what i want from a d&amp;amp;d wiki</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/iOxN0U39JN4/1781" />
		<id>http://rjbs.manxome.org/rubric/entry/1781</id>
		<updated>2009-07-12T20:03:28+00:00</updated>
		<content type="html">&lt;p&gt;I want a system in which my players can keep logs of the adventures.  I want
them to be in a clear sequence so you can click "next" and "previous" without
having to set the links up yourself.  I want it to be possible to have multiple
summaries.  One unbiased log, a per-player (or per-character) log, and maybe
others.&lt;/p&gt;

&lt;p&gt;I want some pages to be read-only (like house rules) and some pages to be
hidden.  For example, I don't want the players to see my notes on the game's
secrets.  I would like players to be able to create pages that only they can
see, but I want to be able to see them all.&lt;/p&gt;

&lt;p&gt;I'd like to structure pages so that any page can include content with the above
access controls.  I'd like really like &lt;a href="http://en.wikipedia.org/wiki/Transclusion#Parameterization"&gt;parameterized
transclusion&lt;/a&gt; so I
can make many kinds of page look similar to one another.&lt;/p&gt;

&lt;p&gt;I like tagging, so I want that, and I love the way that
&lt;a href="http://tiddlywiki.com/"&gt;TiddlyWiki&lt;/a&gt; does it: when you tag a page with X, you
are just saying that the page has a relationship with the page X.  You can then
click from the tag to the page for X to read about what it is or what the tag
means.&lt;/p&gt;

&lt;p&gt;That might be it.&lt;/p&gt;

&lt;p&gt;I really don't need much of anything that's D&amp;amp;D-specific.  The fact that some
pages are "characters" and some are "locations" is sort of a user-specific
layer on top of the generic structured wiki.  I think making something
D&amp;amp;D-specific is probably more about writing a workflow for using a wiki tool,
and that's fine with me.  By not building the RPG logic into the software, I
can use it in different ways.  For example, Obsidian Portal codes in its
assumptions about gaming, so you can't have one campaign with two parties of
PCs.&lt;/p&gt;

&lt;p&gt;If I wanted to take this tool and make it something for many campaigns to use,
then I'd also want workspaces.  A workspace would just be a namespace with
default permissions, and would probably represent a campaign.  Nested
workspaces would make multiple parties easy, but at that point it's probably
overkill.  I'm not sure.&lt;/p&gt;

&lt;p&gt;I'm going to try installing &lt;a href="http://wagn.org/"&gt;Wagn&lt;/a&gt;, which looks pretty suited
to my needs.  I'm not certain about one or two parts, but I think that if I get
most of what I want, I'll be satisfied enough to just use that.  My experience
has been that I'm very spoiled by CPAN, and that installing Wagn is going to be
a pain.  I'm looking forward to being proven wrong.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/iOxN0U39JN4" height="1" width="1"/&gt;</content>
		<author>
			<name>Ricardo Signes</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/entries/user/rjbs/has_body/1?format=rss</id>
			<updated>2009-07-13T20:01:20+00:00</updated>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1781</feedburner:origLink></entry>

	<entry>
		<title type="html">Learn Perl</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/o7a6gtLD1Fo/Learn%20Perl.pod" />
		<id>urn:guid:2B9F05AA-6EF5-11DE-969B-87A301EE3BEC</id>
		<updated>2009-07-12T15:03:32+00:00</updated>
		<content type="html">&lt;div class="pod"&gt;
&lt;p&gt;Recently, Perl golf has become popular on Stack Overflow.  This is
dumb for more reasons than I care to enumerate, but what really makes
me mad is that most people engaging in this dubiously-useful hobby do
not know enough Perl to do it right!  Here is an example of doing it
wrong:&lt;/p&gt;
&lt;pre&gt;&lt;span class="Function"&gt;map&lt;/span&gt;&lt;span class="Normal"&gt; { &lt;/span&gt;&lt;span class="Function"&gt;ucfirst&lt;/span&gt;&lt;span class="Normal"&gt; &lt;/span&gt;&lt;span class="Variable"&gt;$_&lt;/span&gt;&lt;span class="Normal"&gt; } &lt;/span&gt;&lt;span class="Function"&gt;split&lt;/span&gt;&lt;span class="Normal"&gt; &lt;/span&gt;&lt;span class="Operator"&gt;/&lt;/span&gt;&lt;span class="Char"&gt;[&lt;/span&gt;&lt;span class="BaseN"&gt;.&lt;/span&gt;&lt;span class="Char"&gt;]&lt;/span&gt;&lt;span class="Operator"&gt;/&lt;/span&gt;&lt;span class="Normal"&gt;, &lt;/span&gt;&lt;span class="Variable"&gt;$_&lt;/span&gt;&lt;span class="Normal"&gt;;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Do you see the &lt;code&gt;$_&lt;/code&gt;?  If you knew Perl, you would know that functions
usually operate on &lt;code&gt;$_&lt;/code&gt; if you omit it.  You might not know which
functions do and which functions don't, but you should see the &lt;code&gt;$_&lt;/code&gt;
and wonder if you can omit it.  Looking at the docs for &lt;code&gt;split&lt;/code&gt; and
&lt;code&gt;ucfirst&lt;/code&gt; reveal that they both do in fact operate on &lt;code&gt;$_&lt;/code&gt; when
another expression is not specified.  Thus, we can golf this down to:&lt;/p&gt;
&lt;pre&gt;&lt;span class="Function"&gt;map&lt;/span&gt;&lt;span class="Normal"&gt;{&lt;/span&gt;&lt;span class="Function"&gt;ucfirst&lt;/span&gt;&lt;span class="Normal"&gt;}&lt;/span&gt;&lt;span class="Function"&gt;split&lt;/span&gt;&lt;span class="Operator"&gt;/&lt;/span&gt;&lt;span class="Char"&gt;[&lt;/span&gt;&lt;span class="BaseN"&gt;.&lt;/span&gt;&lt;span class="Char"&gt;]&lt;/span&gt;&lt;span class="Operator"&gt;/&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Much more readable, and much shorter.  (Also, if your task was to
sentence-case your input, you did it wrong.  But hey, at least it's
only 22 bytes!)&lt;/p&gt;
&lt;p&gt;Seriously though, if you are going to take up Perl golf as a hobby,
learning the simplest of simple Perl tricks might be a good way to
avoid looking like a reputation-point-whoring moron.&lt;/p&gt;
&lt;p&gt;As an aside, Stack Overflow's reputation system is slowly killing the
site.  In an effort to gain reputation points, people are answering
questions that they admit to not knowing the answer to.  It seems like
every answer in the Perl section starts off with the phrase, "I don't
know Perl, but...".  If you don't know Perl, and this is a Perl
question, how about shutting the fuck up and not making yourself look
like an idiot?  What a fucking concept...&lt;/p&gt;
&lt;p&gt;(This has also infected the Emacs section, which I mostly read for
comedic value these days.  It's fun to watch how quickly people can
produce completely wrong and useless answers, or reimplement core
functions in the most inefficient way possible.  Need to move
backwards one character?  Pressing the &lt;code&gt;&amp;lt;-&lt;/code&gt; arrow or executing
&lt;code&gt;M-x backward-char&lt;/code&gt; is too magical, it's much better to get the
current position in the buffer, move the point to the beginning of the
buffer, and execute a keyboard macro to press the &lt;code&gt;-&amp;gt;&lt;/code&gt; arrow key
that many times minus one.  It's only 25 lines of code!  So simple!)&lt;/p&gt;


&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/o7a6gtLD1Fo" height="1" width="1"/&gt;</content>
		<author>
			<name>Jonathan Rockway</name>
			<email>jon@jrock.us</email>
			<uri>http://blog.jrock.us/</uri>
		</author>
		<source>
			<title type="html">Content Considered Harmful</title>
			<subtitle type="html">This is Jonathan Rockway's blog, where he talks about Angerwhale, Catalyst, and Everything.</subtitle>
			<link rel="self" href="http://blog.jrock.us/feeds/articles/xml" />
			<id>http://blog.jrock.us/</id>
			<updated>2009-07-13T20:02:05+00:00</updated>
		</source>
	<feedburner:origLink>http://blog.jrock.us/articles/Learn%20Perl.pod</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">obsidian portal and me</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/jAOd5mu8YhM/1780" />
		<id>http://rjbs.manxome.org/rubric/entry/1780</id>
		<updated>2009-07-12T04:13:57+00:00</updated>
		<content type="html">&lt;p&gt;A while ago, someone directed me to &lt;a href="http://obsidianportal.com/"&gt;Obsidian
Portal&lt;/a&gt;.  It's a website where you can
collaboratively develop an RPG campaign.  A camapign has a wiki, PC and NPC
tracking, an adventure (b)log, an item tracker, a map archive, and forums.
There might be some other stuff, too.&lt;/p&gt;

&lt;p&gt;It's a structured wiki, at least somewhat, so every page has hunks like
"DM-only content."  Characters have "background" hunks, and so on.  It's easy,
when writing up an adventure log, to link to a PC's wiki page by the PC's short
identifier.&lt;/p&gt;

&lt;p&gt;Obsidian Portal is a really fantastic idea.  Unfortunately, the implementation
is incredibly frustrating to use.&lt;/p&gt;

&lt;p&gt;The problems are hard to describe, but it comes down to "the interface gets in
the way of getting things done."  Creating NPCs is annoying, and there is a
largely obnoxious distinction between PCs and NPCs.  The "short name" used to
link to characters must be universally unique, rather than unique within a
campaign.  I could not, for example, make it possible to link to
&lt;code&gt;[[:valentine]]&lt;/code&gt; because someone else in some other campaign had used it.&lt;/p&gt;

&lt;p&gt;I don't create a character by clicking "add" on my campaign.  I have to go to
the global character browser and create one there.  A small dropdown allows me
to add the character as a PC in a campaign if I want -- but not as an NPC.  To
do that, I'd need to do a bunch of editing later.&lt;/p&gt;

&lt;p&gt;These kind of little irksome problems are absolutely everywhere in Obsidian
Portal, making it anything but a joy to use.  It has so many great ideas,
though.  I love the notion that I can have my DM-only hunk of notes on a given
adventure (or any other wiki page) or that I can write up pages and reveal them
later.&lt;/p&gt;

&lt;p&gt;All the "share your campaign with others" stuff is neat, but seems incredibly
unimportant compared to the "manage your campaign for your players."  Despite
this, things seem optimized for other people instead of your players.  Maybe
I'm wrong or maybe that's what the authors want, but it frustrates me.&lt;/p&gt;

&lt;p&gt;Because of this and other ideas, I've been looking a lot at various content
repositories, document databases, and structured wikis.  So far,
&lt;a href="http://wagn.org/"&gt;Wagn&lt;/a&gt; looks, by far, the most likely to be useful.  Even it
is sort of a half-fit, but it might be good enough to let me get on with
running my game.  If that falls through, I might be willing to try implementing
something, but my time is awfully short to spend writing new structured wikis
optimized for Dungeons and Dragons!&lt;/p&gt;

&lt;p&gt;Tomorrow I'm hoping to write up what I want for my game and what I'd want to
provide if I were writing Onyx Portal (or whatever) for a living.&lt;/p&gt;

&lt;p&gt;In the meantime, my players recently got &lt;a href="http://www.obsidianportal.com/campaign/ethos/adventure-log"&gt;their latest
adventure&lt;/a&gt; logged
onto Obsidian Portal.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/jAOd5mu8YhM" height="1" width="1"/&gt;</content>
		<author>
			<name>Ricardo Signes</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/entries/user/rjbs/has_body/1?format=rss</id>
			<updated>2009-07-13T20:01:20+00:00</updated>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1780</feedburner:origLink></entry>

	<entry>
		<title type="html">Perlbuzz news roundup for 2009-07-11</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/qF83Euy1zUM/perlbuzz-news-roundup-for-2009-07-11.html" />
		<id>tag:perlbuzz.com,2009://1.697</id>
		<updated>2009-07-12T03:43:39+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;Tim Bunce surveys customer relationship management systems in Perl (&lt;a href="http://blog.timbunce.org/2009/07/06/customer-relationship-management-crm-systems-in-perl/"&gt;blog.timbunce.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Sending mail through Gmail with Perl (&lt;a href="http://www.nixtutor.com/linux/sending-mail-through-gmail-with-perl/"&gt;nixtutor.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;From the DarkPAN: "The Perl community should move forward without worrying overly much about us that have to drive in the slow lane." (&lt;a href="http://use.perl.org/~SparkeyG/journal/39240"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;rgs's blog post about his resignation as bleadperl pumpking (&lt;a href="http://consttype.blogspot.com/2009/07/resigning.html"&gt;consttype.blogspot.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;How we should address the DarkPAN problem (&lt;a href="http://perl-toddr.blogspot.com/2009/07/how-we-should-address-darkpan-problem.html"&gt;perl-toddr.blogspot.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;I think chromatic's points boil down to TAGNI: They Ain't Gonna Need It, where They is the unknown DarkPAN. I'm inclined to (&lt;a href="http://perlbuzz.com/agree."&gt;agree.&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Patrick Michaud is looking for Rakudo release managers (&lt;a href="http://use.perl.org/~pmichaud/journal/39249"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;perl/vendor/site explained (&lt;a href="http://use.perl.org/~schwern/journal/39246"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Top five non-technical mistakes made by programmers (&lt;a href="http://www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/"&gt;makinggoodsoftware.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Six modules to help with complexity management (&lt;a href="http://use.perl.org/~Ovid/journal/39254"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Test::Pod is now on github. Bug fixes welcome! (&lt;a href="http://github.com/petdance/test-pod/tree/master"&gt;github.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CPAN Explorer gets props in Visual Complexity (&lt;a href="http://www.visualcomplexity.com/vc/project.cfm?id=685"&gt;visualcomplexity.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrading Debian packages with newer CPAN releases (&lt;a href="http://use.perl.org/~mintywalker/journal/39269"&gt;use.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=Q8FTjwbhU7c:gsnw-OyAb34:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=Q8FTjwbhU7c:gsnw-OyAb34:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=Q8FTjwbhU7c:gsnw-OyAb34:F7zBnMyn0Lo" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=Q8FTjwbhU7c:gsnw-OyAb34:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=Q8FTjwbhU7c:gsnw-OyAb34:V_sGLiPBpWU" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=Q8FTjwbhU7c:gsnw-OyAb34:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/Q8FTjwbhU7c" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/qF83Euy1zUM" 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>
			<updated>2009-07-13T05:01:07+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/PerlBuzz/~3/Q8FTjwbhU7c/perlbuzz-news-roundup-for-2009-07-11.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">current project status braindump</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/cs3barxygQI/1779" />
		<id>http://rjbs.manxome.org/rubric/entry/1779</id>
		<updated>2009-07-11T19:40:52+00:00</updated>
		<content type="html">&lt;p&gt;Lately, I have a lot going on.  I think I need to recalibrate my "very busy"
alert, because I feel like it's been going off for months, now.  Still, things
are okay.  Here's a bit of a dump on some things I'm working on or should be
working on.&lt;/p&gt;

&lt;h2&gt;Data::GUID&lt;/h2&gt;

&lt;p&gt;I'm definitely behind schedule on getting Data::GUID refactored to allow
different generators and objects, which will allow a pure-perl backend
(currently UUID::Generator::PurePerl) when XS isn't available.  This is mostly
done work, but it needs testing, polish, and some design thinking.&lt;/p&gt;

&lt;h2&gt;Email::MIME::Kit&lt;/h2&gt;

&lt;p&gt;I'm really not happy with the way the standard Assembler class works.  It does
too much and is too hard to extend without reading its source.  I need to
refactor it, document how it works, and maybe break it into a few pieces.  So
far, I've avoided this by writing all my extensions as &lt;code&gt;around&lt;/code&gt; method
modifiers.  This has been quite effective, actually.&lt;/p&gt;

&lt;h2&gt;META.json&lt;/h2&gt;

&lt;p&gt;I started to do some work on PAUSE to get it to respect META.json, but I need
to work on getting some things integrated, and other things coded and
committed.  Once that's done, the indexer will be able to index based on
META.json, which is huge.  Next up will be CPAN.pm and CPANPLUS.pm, which I
hope will not be to hard to work with.  Once those parts of the toolchain can
all consume META.json, I can start working on getting my hacks to &lt;em&gt;emit&lt;/em&gt;
META.json into all the dist building tools -- preferably after making them not
be hacks.&lt;/p&gt;

&lt;p&gt;At some point in all this, we'll get to "make JSON.pm part of core perl5."&lt;/p&gt;

&lt;h2&gt;Other Email Stuff&lt;/h2&gt;

&lt;p&gt;I really need to fix Email::Valid's tests to skip the DNS tests when coping
with obnoxious ISPs that provide "helpful" lies to DNS resolvers.
&lt;code&gt;will-never-exist.pobox.com&lt;/code&gt; does not exist, and if there's an &lt;code&gt;A&lt;/code&gt; record for
it, then the DNS resolver is lying.  (Of course, this also means that anyone
using the "domain part must have A or MX record" rule is going to have false
positives on validity checks.)&lt;/p&gt;

&lt;p&gt;Honestly, I can't think of any more irritating change in basic ISP policies in
the last few years.&lt;/p&gt;

&lt;p&gt;There are some other bugs with Email::Valid, too, regarding how it uses
Mail::Address.  I'm pondering writing a new Email::Valid that does all the same
stuff, a little better, and with a less unusual interface.  It would be nice to
be able to easily subclass it to add more checks, like &lt;code&gt;is_address_in_use&lt;/code&gt; or
&lt;code&gt;contains_forbidden_characters&lt;/code&gt; for application-specific use.&lt;/p&gt;

&lt;p&gt;Heck, maybe I can use Classifier for &lt;em&gt;this&lt;/em&gt;, since the new bounce parser is
still on the back burner, four years later.&lt;/p&gt;

&lt;h2&gt;Pod::Weaver and Friends&lt;/h2&gt;

&lt;p&gt;Basically, I've decided I don't have the time to think about them this week.
This is disappointing, but I'd rather put it off a week than make bad decisions
because I'm brain-fried.&lt;/p&gt;

&lt;p&gt;OSCON starts next week, and I'm hoping to have plenty of down time to work on
ideas and implementations.  OSCON is generally, for me, much lower-stress than
YAPC.  I think I will get a lot of hacking done, and if I don't, I will get a
lot of flowcharting done, and for me that's half the battle.&lt;/p&gt;

&lt;h2&gt;Finally...&lt;/h2&gt;

&lt;p&gt;I've also been thinking a lot about structured data storage, ultra-easy git
helpers for small companies, portable testing, pluggable testing, and Rx.  I
keep improving our little git scripts to keep track of our internal git repos,
and I think at some point I might have something I can describe as a
reproduceable ecosystem.  Rx really needs me to finish the structured failures
branch, which will be phenomenally useful.  A lot of that work will be related
to the testing stuff I'm thinking about.  (I would love to write up a
comprehensive appraisal of Ingy's TestML, which I talked to him about quite a
bit during his development of it.)  The structured wiki stuff is largely about
my desire to use something better than Obsidian Portal for my D&amp;amp;D game.  I
should probably write up both what I want and why I don't care much for
Obsidian Portal!&lt;/p&gt;

&lt;p&gt;For now, this has just been an exercise in collecting my own thoughts.  Maybe
tonight or tomorrow I'll actually do a little work on some code.  Then again,
maybe I'll do some yard work instead.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/cs3barxygQI" height="1" width="1"/&gt;</content>
		<author>
			<name>Ricardo Signes</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/entries/user/rjbs/has_body/1?format=rss</id>
			<updated>2009-07-13T20:01:20+00:00</updated>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1779</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Help needed from Germans and Solaris users</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/1kMREaZNlts/39270" />
		<id>http://use.perl.org/~Alias/journal/39270?from=rss</id>
		<updated>2009-07-11T16:19:39+00:00</updated>
		<content type="html">&lt;p&gt;In taking over IPC::Run, my goal was not to make it a better module, refactor it, or otherwise dramatically improve it. I'm just trying to fix the module packaging, and get it passing tests (fixing either specific bugs, or correcting the tests).&lt;/p&gt;&lt;p&gt;I've now managed to flush out all the Windows problems, and all the bugs on platforms I can replicate.&lt;/p&gt;&lt;p&gt;Now I'm stuck, and can't make any further progress. I don't have access to the platforms on which the problems occur.&lt;/p&gt;&lt;p&gt;So I'd like to ask for any volunteers that can help fix the two big failure cases.&lt;/p&gt;&lt;p&gt;The first is a bug specifically related to Solaris. You can see details of the failure here.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.nntp.perl.org/group/perl.cpan.testers/2009/07/msg4535302.html"&gt;http://www.nntp.perl.org/group/perl.cpan.testers/2009/07/msg4535302.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The second is something related to locale, with all the current failure reports occurring on Linux machines set to the German UTF8 locale.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.nntp.perl.org/group/perl.cpan.testers/2009/07/msg4534455.html"&gt;http://www.nntp.perl.org/group/perl.cpan.testers/2009/07/msg4534455.html&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;RT has bugs reported properly for the latter one, but I can't fix it.&lt;/p&gt;&lt;p&gt;What I need for both these bugs is either a patch for the code to fix the bug, or a patch for the tests if you can confirm the test is invalid.&lt;/p&gt;&lt;p&gt;Or even better, I'm happy to hand out commit rights for people to apply the fixes directly.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/1kMREaZNlts" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39270?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en">
		<title type="html">If I were (pump)king</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/kCJAdea6MA0/" />
		<id>http://www.dagolden.com/?p=285</id>
		<updated>2009-07-11T15:15:00+00:00</updated>
		<content type="html">&lt;p&gt;It&amp;#8217;s fun to speculate &amp;#8220;what if&amp;#8221; on all the radical changes I&amp;#8217;d want to make, but really, if I suddenly became &lt;a href="http://www.dagolden.com/index.php/feed/www.perlfoundation.org/perl5/index.cgi?pumpking" class="broken_link"&gt;pumpking&lt;/a&gt;, my first thought would probably be &amp;#8220;Oh, sh*t&amp;#8230; I better not f*ck this up!&amp;#8221;&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s right.  All my &lt;a href="http://www.urbandictionary.com/define.php?term=jfdi"&gt;JFDI&lt;/a&gt; inclinations would probably change overnight into &lt;a href="http://www.urbandictionary.com/define.php?term=dfiu"&gt;DFIU&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What If I released a horribly broken Perl?  Do I want to be known as &amp;#8220;worst pumpking EVAR!&amp;#8221;?  Do I want that hanging over my head for all time?  Do I want to go to a Perl event and be pointed out to newbies as &amp;#8220;the guy who screwed up Perl&amp;#8221;?  Do I want it on Wikipedia or Yahoo or Google when I apply for jobs?  Hell, no!&lt;/p&gt;
&lt;p&gt;If I were pumpking, I&amp;#8217;d be so conservative I&amp;#8217;d make &lt;a href="http://en.wikipedia.org/wiki/Newt_Gingrich"&gt;Newt Gingritch&lt;/a&gt; look like the &lt;a href="http://en.wikipedia.org/wiki/Gavin_Newsom"&gt;mayor of San Francisco&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But I&amp;#8217;m not pumpking and so I advocate for change and faster progress. Still, I have a lot of empathy for the reality of the situation that pumpkings are in.&lt;sup&gt;1&lt;/sup&gt;  I think it&amp;#8217;s a situation that is probably unavoidable when one individual signs up to be accountable for the success or failure of a large, public project.&lt;/p&gt;
&lt;p&gt;I think the answer &amp;#8212; to the extent there is one &amp;#8212; is that Perl needs to find ways to spread the potential blame beyond a single figurehead and also lower the public penalty for failure.&lt;/p&gt;
&lt;p&gt;That means fragmenting accountabilities in constructive ways that don&amp;#8217;t jeopardize overall progress.  It means having more &lt;a href="http://corehackers.perl.org/wiki/index.php5?title=Main_Page"&gt;explicit sandboxes&lt;/a&gt; for experimentation.  It means taking smaller steps.  It means having better risk management.  And, frankly, I think it means having better management as a whole.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s hard to contemplate for a consensus-driven community of volunteers. But I think it&amp;#8217;s a necessary step to achieve what appear to be some consensus goals. I&amp;#8217;m not saying we need a &lt;a href="http://en.wikipedia.org/wiki/Constitutional_convention_(political_meeting)"&gt;constitutional convention&lt;/a&gt; (though it&amp;#8217;s an interesting thought exercise), but I think the current model passed a tipping point long ago.&lt;/p&gt;
&lt;p&gt;In some future posts, I&amp;#8217;m going to come back to these themes from a number of angles and try to put some structure around what I see as the fundamental issues and options.  While I don&amp;#8217;t think there should be changes until 5.10.1 is released, I think it&amp;#8217;s wise to start laying out the framework for a constructive dialog in the future.&lt;/p&gt;
&lt;ol class="footnotes"&gt;&lt;li id="footnote_0_285" class="footnote"&gt;Volunteered to be in, no less&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/kCJAdea6MA0" height="1" width="1"/&gt;</content>
		<author>
			<name>David Golden</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/index.php/feed/</id>
			<updated>2009-07-11T15:21:11+00:00</updated>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/285/if-i-were-pumpking/</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Padre standalone installer for Windows - first beta version</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/B6TxNuwkneY/1247304075.html" />
		<id>http://szabgab.com/blog/2009/07/1247304075.html</id>
		<updated>2009-07-11T12:21:15+00:00</updated>
		<content type="html">&lt;p&gt;
&lt;a href="http://csjewell.dreamwidth.org/"&gt;Curtis Jewell&lt;/a&gt; 
has &lt;a href="http://csjewell.dreamwidth.org/802.html"&gt;already announced&lt;/a&gt; 
it on his own blog but as he said his blog is hardly read and is not included 
in the various Perl blog aggregators
I promised to also write about it and link to his post.
&lt;/p&gt;
&lt;p&gt;
so the first beta version of the stand-alone Padre msi installer is ready. It still is only 
an enlarged version of Strawberry Perl so it install in c:\strawberry but it is a huge
step in the direction of making it easily available to the general public of Windows users.
&lt;/p&gt;
&lt;p&gt;
So if you have a windows box, go ahead, 
&lt;a href="http://padre.perlide.org/trac/wiki/Download"&gt;download Padre&lt;/a&gt; and tell us about it
via the standard channels of &lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/B6TxNuwkneY" height="1" width="1"/&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gábor Szabó</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://www.szabgab.com/blog/szabgab.rss" />
			<id>http://www.szabgab.com/blog/szabgab.rss</id>
			<updated>2009-07-13T20:01:57+00:00</updated>
			<rights type="html">Copyright 2002-2009, Gabor Szabo</rights>
		</source>
	<feedburner:origLink>http://szabgab.com/blog/2009/07/1247304075.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">$me-&amp;amp;gt;sleep(604800)</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/BNWkqbg4hHY/39264" />
		<id>http://use.perl.org/~domm/journal/39264?from=rss</id>
		<updated>2009-07-10T20:07:01+00:00</updated>
		<content type="html">I'm off to Crete for one week of doing nothing (besides sleeping, swimming, diving &amp;amp; eating). I have some vague plans on working on the slides for my YAPC talk, but as I'm traveling without laptop, I'm not sure I'll actually do anything...&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/BNWkqbg4hHY" height="1" width="1"/&gt;</content>
		<author>
			<name>Thomas Klausner</name>
			<uri>http://use.perl.org/~domm/journal/</uri>
		</author>
		<source>
			<title type="html">domm's Journal</title>
			<subtitle type="html">domm's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~domm/journal/rss" />
			<id>http://use.perl.org/~domm/journal/rss</id>
			<updated>2009-07-10T21:21:15+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~domm/journal/39264?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Empty Classes</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/A5AHGJvIqg4/39262" />
		<id>http://use.perl.org/~Ovid/journal/39262?from=rss</id>
		<updated>2009-07-10T14:34:24+00:00</updated>
		<content type="html">&lt;p&gt;We have many objects with common attributes like titles, synopses, versions, created/modified, etc.  Due to business requirements, every exposed object must have a searchable unique ID called a "pid".  Thus, we've been forced to do a rather unfortunate denormalization where every pid is placed in an &lt;tt&gt;entity&lt;/tt&gt; table.  This table also lists the object types (brands, series, episodes, etc.) and you can look up any pid and get the object it stands for from the appropriate object type.  One benefit of this is that it was (relatively) trivial to strip all titles off of objects, put them in a central "title" table, and allow arbitrary title searches and get back all objects, regardless of type, which have matching titles.&lt;/p&gt;&lt;p&gt;We're now doing this with versions.  We'll probably do this with synopses at some point.  Because every object links into the &lt;tt&gt;entity&lt;/tt&gt; table, we have standard searches available for many things.  If we were to take this to the logical extreme, we could do something rather interesting.  We could create an object called a "preview" (we have no plans to do so), which has titles, synopses, promotions, tags and parent (the thing we're previewing) and do this:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;package BBC::ResultSource::Preview;&lt;br /&gt;use Moose;&lt;br /&gt; &lt;br /&gt;extends 'BBC::ResultSource::Role::ResultSource';&lt;br /&gt;with qw(&lt;br /&gt;&amp;nbsp; &amp;nbsp; BBC::ResultSource::Role::Titles&lt;br /&gt;&amp;nbsp; &amp;nbsp; BBC::ResultSource::Role::Synopses&lt;br /&gt;&amp;nbsp; &amp;nbsp; BBC::ResultSource::Role::Promotions&lt;br /&gt;&amp;nbsp; &amp;nbsp; BBC::ResultSource::Role::Tags&lt;br /&gt;&amp;nbsp; &amp;nbsp; BBC::ResultSource::Role::Parent&lt;br /&gt;);&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;And with that, have a new object.  Effectively, you could have a completely empty class aside from the roles being listed.  The &lt;tt&gt;preview&lt;/tt&gt; table might only have an id and nothing else.  How would we build the XML for this?  Pseudo-code:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;package BBC::Builder;&lt;br /&gt; &lt;br /&gt;use Moose;&lt;br /&gt;with 'BBC::Builder::Role::DoesBuilder;&lt;br /&gt; &lt;br /&gt;sub build {&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $self = shift;&lt;br /&gt;&amp;nbsp; &amp;nbsp; my @build_data&lt;br /&gt;&amp;nbsp; &amp;nbsp; foreach my $role ($self-&amp;gt;resultsource_roles) {&lt;br /&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # following a predefined sort order&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; next unless $self-&amp;gt;meta-&amp;gt;does_role($behavior);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; push $build_data =&amp;gt; $self-&amp;gt;build_data_for($role);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; return \@build_data;&lt;br /&gt;}&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;No longer would we need to explain how separate objects are built as XML and we'd have greater consistency in our XML building.  Of course, this is still "blue sky thinking", but it would tremendously simplify a lot of our code.&lt;/p&gt;&lt;p&gt;(Note:  I know I can just ask the metaclass directly what roles that instance does, but I thought the &lt;tt&gt;does_role()&lt;/tt&gt; method call would show readers more clearly what would happen under the hood.)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/A5AHGJvIqg4" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39262?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">The strictperl experiment</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/F_EVkdOfJLg/strictperl-experiment.html" />
		<id>tag:blogger.com,1999:blog-6096704822492180681.post-4070175054635519552</id>
		<updated>2009-07-10T12:03:10+00:00</updated>
		<content type="html">The &lt;a href="http://www.modernperlbooks.com/mt/2009/07/strictperl.html"&gt;strictperl&lt;/a&gt; experiment by chromatic, and the &lt;a href="http://perl5.git.perl.org/perl.git/commitdiff/53eb19dd57d98e5a28ec6e1a56a1a40ce469145f"&gt;strict-by-default&lt;/a&gt; patch by Steffen Mueller, will help me explain what approaches are right or wrong in dealing with Perl 5 evolutions.&lt;br /&gt;&lt;br /&gt;strictperl is, as chromatic puts it, &lt;i&gt;unilaterally enabling strict for all code not run through -e&lt;/i&gt;. Unsurprisingly, that breaks a lot of code. And I mean a lot, as in "most". Not only on the DarkPAN (I seldom use strict for scripts of four lines), on the CPAN (I have modules that will break under strictperl), but in the core itself. chromatic mentions &lt;tt&gt;Exporter&lt;/tt&gt; and &lt;tt&gt;vars&lt;/tt&gt; as modules that break under it. Well, &lt;i&gt;of course&lt;/i&gt; they break. Their very purpose is to manipulate symbols by name, which is exactly the kind of thing that strict prevents. (Incidentally all code that uses &lt;tt&gt;Exporter&lt;/tt&gt; or &lt;tt&gt;vars&lt;/tt&gt; can't run under strict perl, and I think that's most of the Perl code out there actually.) That is why chromatic added a separate makefile target to build strictperl: if the patch was going in perl itself, perl couldn't be even built! That's how broken it is.&lt;br /&gt;&lt;br /&gt;It's certainly interesting to dive in Perl's internals, but to experiment with enabling strict on a global level, a simple source filter would have been sufficient. One could have written one in ten minutes, including time to look up the documentation, and it would have been immediately obvious afterwards why it was a bad idea. Except to chromatic, who still thinks it's (quoting) &lt;i&gt;a feature I believe is worth considering&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;So now let's look at Steffen Mueller's solution, which is strictperl done right, and which is already in bleadperl.&lt;br /&gt;&lt;br /&gt;Currently, with bleadperl, a simple &lt;tt&gt;use 5.11.0&lt;/tt&gt; will enable strictures &lt;b&gt;in the current lexical scope&lt;/b&gt;, like &lt;tt&gt;use strict&lt;/tt&gt; would do, but implicitly. (It will also enable features, but that's unrelated.) Look:&lt;br /&gt;&lt;pre&gt;$ bleadperl -e 'use 5.11.0; print $foo'&lt;br /&gt;Global symbol "$foo" requires explicit package name at -e line 1.&lt;br /&gt;Execution of -e aborted due to compilation errors.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Moreover, like in chromatic's strictperl, a simple &lt;tt&gt;-e&lt;/tt&gt; or &lt;tt&gt;-E&lt;/tt&gt; won't enable them, because strictures are not wanted for one-liners.&lt;br /&gt;&lt;br /&gt;That way, we don't break code that doesn't want strictures, (actually we don't break anything at all that doesn't require 5.11.0 already, it's completely backwards compatible), but it's still removing some boilerplate for default strictness if you're requesting a perl recent enough.&lt;br /&gt;&lt;br /&gt;Steffen's patch itself is not very recent, but I didn't apply it to bleadperl immediately, because I disagreed with the implementation. As you can see in the sources, it uses &lt;tt&gt;Perl_load_module&lt;/tt&gt; to load the file &lt;i&gt;strict.pm&lt;/i&gt; and execute its &lt;tt&gt;import()&lt;/tt&gt; method. That's very slow. I applied it when I got around to &lt;a href="http://perl5.git.perl.org/perl.git/commitdiff/5cc917d61a1b0b6683ece694d00cdb1abdf9c0d9"&gt;make it faster&lt;/a&gt; with the next commit, which replaces that method call by just flipping three bits on an internal integer variable.&lt;br /&gt;&lt;br /&gt;All this goodness is coming to you in Perl 5.12 when someone will be willing to take the pumpking's hat.&lt;br /&gt;&lt;br /&gt;Next time, I'll explain why enabling warnings by default is not a good idea.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6096704822492180681-4070175054635519552?l=consttype.blogspot.com" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/F_EVkdOfJLg" 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://consttype.blogspot.com/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-6096704822492180681</id>
			<updated>2009-07-10T17:41:05+00:00</updated>
		</source>
	<feedburner:origLink>http://consttype.blogspot.com/2009/07/strictperl-experiment.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">The Success of Ubuntu</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/M3-X9uhxLRc/1247164269.html" />
		<id>http://szabgab.com/blog/2009/07/1247164269.html</id>
		<updated>2009-07-09T21:31:09+00:00</updated>
		<content type="html">&lt;p&gt;
In a previous post I wrote about &lt;a href="http://szabgab.com/blog/2009/06/1246345109.html"&gt;The Ubuntu Business model and Perl&lt;/a&gt;. This is the second part of that 
post trying to look at what made Ubuntu successful, how can that be mapped to Perl and 
what can the Perl community learn from there.
&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;The success of Ubuntu&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;
We can understand from the previous post that the Perl community cannot copy the 
business model of Canonical, the company behind Ubuntu so let's look at how did 
Ubuntu succeed in becoming one of the leading GNU/Linux distributions in such a 
short period of time. I searched a bit and found a couple of explanations.
I am sure some people will say they are not true or that they are not the 
reasons for the success of Ubuntu and I am sure there are others who will 
point at other explanations. So let's take this as my subjective list with my 
subjective explanations. 
&lt;/p&gt;
&lt;p&gt;
I'll go over the points and try to relate them to Perl and the Perl community.
&lt;/p&gt;
&lt;p&gt;
On &lt;a href="http://useopensource.blogspot.com/2007/08/ubuntu-innovations.html"&gt;Ubuntu Innovations&lt;/a&gt;
the author points to the following reasons:
&lt;ul&gt;
&lt;li&gt;Simple install&lt;/li&gt;
&lt;li&gt;Regular release schedule&lt;/li&gt;
&lt;li&gt;Live-CD that you can install from&lt;/li&gt;
&lt;li&gt;One application for each purpose&lt;/li&gt;
&lt;li&gt;Secure by default&lt;/li&gt;
&lt;li&gt;Over 20,000 applications can easily be installed&lt;/li&gt;
&lt;li&gt;Include non-free hardware drivers&lt;/li&gt;
&lt;li&gt;Made the color brown sexy&lt;/li&gt;
&lt;li&gt;Get an Ubuntu CD for FREE&lt;/li&gt;
&lt;li&gt;The Ubuntu Community&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Simple install:&lt;/b&gt; Perl comes built in on almost all the Unix like Operating 
systems. ActivePerl and now Strawberry Perl provide easy installation on Windows as well. 
What IMHO Perl is missing is a set of distributions for some some of the operating systems
based on the idea of Strawberry Perl. 
Similar to how ActiveState has distributions to several platforms but with the Strawberry 
philosophy and with a lot more juice.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Regular release schedule:&lt;/b&gt; Here Perl clearly has a problem. 
I hope it will be fixed now that the development moved to Git.
It does not have to have exactly time based nor do the releases need to
be earth shattering but a minor update every 3-6 months could help improve 
both the image and the level of real users testing perl.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Live-CD that you can install from:&lt;/b&gt;
This is mostly irrelevant as Perl does not replace the Operating system. 
It can be installed on any major Operating system.
Actually the &lt;a href="http://strawberryperl.com/"&gt;Portable Strawberry&lt;/a&gt; that can be installed
on a disk-on-key might provide a nice demo-ing kit.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;One application for each purpose:&lt;/b&gt; That's another problematic area of Perl 
and more specifically of CPAN. In my opinion people like to have choices but don't 
want to choose. We should improve the situation as people waste a lot of time searching 
CPAN and I am sure in many cases find a module that is far from the preferred modules of any
of the active CPAN authors. There are many partial projects that are trying to address
this problem.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Secure by default:&lt;/b&gt; I don't know about any issues in this regard.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Over 20,000 applications can easily be installed:&lt;/b&gt; There are 17,000 modules on CPAN. 
Many of them are easily installable but many others have problems. I think this areas is 
both a success (as CPAN has so many packages) but also needs improving such as
perl version and platform aware installing tools and 
allowing several possibly incompatible trees of the same distribution 1.x, 2.x etc versions)
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Include non-free hardware drivers&lt;/b&gt;. That's ok, there are modules on CPAN to 
many proprietary systems. (e.g &lt;a href="http://cpan.uwinnipeg.ca/dist/DBD-Oracle"&gt;DBD::Oracle&lt;/a&gt;) What might be interesting is to 
include them in Strawberry Perl or the other future Linux/Unix Perl&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Made the color brown sexy&lt;/b&gt; Camel ? Onion ? I don't know what to say.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Get an Ubuntu CD for FREE&lt;/b&gt; IMHO that's quite irrelevant to Perl and 
actually that is one of the only places where Canonical invested money. Though I 
am not sure that was a large chunk of their investment.&lt;/li&gt;  
&lt;li&gt;&lt;b&gt;The Ubuntu Community&lt;/b&gt; - The Perl community is quite awesome though there are 
places to improve. Let's discuss this a bit further&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;Perl Community&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;
The Ubuntu project has written directions on how to behave. While many of the entries 
are obvious it is worth to take a look at both the 
&lt;a href="http://www.ubuntu.com/community/conduct"&gt;Code of Conduct&lt;/a&gt; and the
&lt;a href="http://www.ubuntu.com/community/leadership-conduct"&gt;Leadership Code of Conduct.&lt;/a&gt;.
The points are:
&lt;ul&gt;
&lt;li&gt;Be considerate.&lt;/li&gt;
&lt;li&gt;Be respectful.&lt;/li&gt;
&lt;li&gt;Be collaborative.&lt;/li&gt;
&lt;li&gt;When you disagree, consult others.&lt;/li&gt;
&lt;li&gt;When you are unsure, ask for help.&lt;/li&gt;
&lt;li&gt;Step down considerately.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
I'd especially point out the last entry. We have tons of code out there, application 
and modules on CPAN and in many other places. Some of this code, actually quite 
a large part of it is more or less abandoned. The original developer or last 
maintainer has mostly disappeared and there was no real process of
handing over the code to others. There is a process in which others can take over 
a module even when the author is gone but I think it would be much better if 
the authors took it as their responsibility to transfer the modules they don't 
want to maintain any more.
&lt;/p&gt;
&lt;p&gt;
I know the way this usually happens is that the person slowly has less and less time
and keeps telling himself, that soon he will return to that code... so its not
easy. We as the community should work on it.
&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt;7 reasons of 
In another article called 
&lt;a href="http://linux4coffee.wordpress.com/2007/10/15/the-7-reasons-why-ubuntu-is-so-successful/"&gt;
The 7 reasons why Ubuntu is so successful&lt;/a&gt;
I found the following reasons:
&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;A good start (vision ?)&lt;/li&gt;
&lt;li&gt;Easy and straightforward installation&lt;/li&gt;
&lt;li&gt;ShipIt&lt;/li&gt;
&lt;li&gt;Synaptic&lt;/li&gt;
&lt;li&gt;Ubuntu forums/Community&lt;/li&gt;
&lt;li&gt;User promotion&lt;/li&gt;
&lt;li&gt;Fragmented competitors&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;
with the following comments I would highlight:
&lt;ul&gt;
&lt;li&gt;Promotion of Ubuntu through media and freeCDs&lt;/li&gt;
&lt;li&gt;Synaptic was really impressive, and not having to download 
package information from the net every time i do a search was good&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
These are mostly the same reasons as we read earlier. Let me point out a few issues:
&lt;/p&gt;
&lt;p&gt;
For those who don't use Ubuntu or don't know what it is, the Synaptic Package Manager
is basically a graphical version of CPAN.pm for all the packages distributed by Ubuntu.
&lt;/p&gt;
&lt;p&gt;
It would be probably better if Perl also had a graphical tool to install CPAN packages.
(In &lt;a href="http://padre.perlide.org/"&gt;Padre&lt;/a&gt; we are going to have one.)
&lt;/p&gt;
&lt;p&gt;
User promotion. Perl got into many places by enthusiastic people who started to use it
to solve problems. We should help these people more.
&lt;/p&gt;
&lt;p&gt;
So what do you think, what does Perl need to be more successful in companies and how
can we achieve that?
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/M3-X9uhxLRc" height="1" width="1"/&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gábor Szabó</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://www.szabgab.com/blog/szabgab.rss" />
			<id>http://www.szabgab.com/blog/szabgab.rss</id>
			<updated>2009-07-13T20:01:57+00:00</updated>
			<rights type="html">Copyright 2002-2009, Gabor Szabo</rights>
		</source>
	<feedburner:origLink>http://szabgab.com/blog/2009/07/1247164269.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Padre 0.39 released</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/6PIT8xljARQ/1247133713.html" />
		<id>http://szabgab.com/blog/2009/07/1247133713.html</id>
		<updated>2009-07-09T13:01:53+00:00</updated>
		<content type="html">&lt;p&gt;
I am happy to announce the release of v0.39 of 
&lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The list of changes as taken from the Changes file.
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Some of the refactoring code was moved to PPIx-EditorTools (MGRIMES)&lt;/li&gt;
&lt;li&gt;Detection of Moose attributes in Outline view (JQUELIN)&lt;/li&gt;
&lt;li&gt;Detection of MooseX::POE events in Outline view (JQUELIN)&lt;/li&gt;
&lt;li&gt;Added keywords to META.yml (via Makefile.PL.) (SHLOMIF)&lt;/li&gt;
&lt;li&gt;Bumped the required Test::More version to 0.88 - needed for note(). (SHLOMIF)&lt;/li&gt;
&lt;li&gt;Open Selection (ctrl-Shift-O) now displays all the files it finds and lets the user select (SZABGAB)&lt;/li&gt;
&lt;li&gt;Eliminate crash when pressing F3/F4 while there are no open files (#421) (SZABGAB)&lt;/li&gt;
&lt;li&gt;Enable/Disable Window menu options when there are (no) open files. (#417) (SZABGAB)&lt;/li&gt;
&lt;li&gt;For Cut/Copy/Paste/Select All, use the focused textctrl instead of the editor textctrl (RSN)&lt;/li&gt;
&lt;li&gt;Autoupgrade ascii files to be utf-8 on save if user types in wide characters (#304) (SZABGAB)&lt;/li&gt;
&lt;li&gt;Allow the user to use external (xterm) to run the scrips. (SZABGAB)&lt;/li&gt;
&lt;li&gt;Add menu option to show selection as hexa or as decimal. (#36) (SZABGAB)&lt;/li&gt;
&lt;li&gt;Switch to Locale::Msgfmt and generate the .mo files at install time (RSN)&lt;/li&gt;
&lt;li&gt;Add number of lines to GoTo line dialog (#439) (SZABGAB)&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Soon it should arrive to a &lt;a href="http://search.cpan.org/dist/Padre/"&gt;CPAN mirror&lt;/a&gt; near you.
&lt;/p&gt;
&lt;p&gt;
Enjoy and thanks to all the people who put effort in Padre!
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/6PIT8xljARQ" height="1" width="1"/&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gábor Szabó</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://www.szabgab.com/blog/szabgab.rss" />
			<id>http://www.szabgab.com/blog/szabgab.rss</id>
			<updated>2009-07-13T20:01:57+00:00</updated>
			<rights type="html">Copyright 2002-2009, Gabor Szabo</rights>
		</source>
	<feedburner:origLink>http://szabgab.com/blog/2009/07/1247133713.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">The CPAN Top 100 website has been upgraded to CPANDB</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/7ByVQQtYIvs/39260" />
		<id>http://use.perl.org/~Alias/journal/39260?from=rss</id>
		<updated>2009-07-09T06:21:12+00:00</updated>
		<content type="html">&lt;p&gt;Completing 2 weeks of fairly heavy refactoring, rewriting and debugging of various toolchain elements, I'm happy to report that I have now removed the (faulty) CPANTS dependency graph from the &lt;a href="http://ali.as/top100"&gt;CPAN Top 100&lt;/a&gt; website and replaced it with the highly accurate &lt;a href="http://search.cpan.org/perldoc?CPANDB"&gt;CPANDB&lt;/a&gt; dependency graph.&lt;/p&gt;&lt;p&gt;This is huge relief for me, because all the highly visible bugs that were preventing the concept from progressing to full maturity.&lt;/p&gt;&lt;p&gt;The change to reliable data has meant a few major changes to the results.&lt;/p&gt;&lt;p&gt;1. The falsely inflated scores go away.&lt;/p&gt;&lt;p&gt;CPANTS seemed to have an issue misattributing modules to the correct distribution they came from. For example, it thinks that DBD::SQLite lives in the DBD-SQLite-Aggregation distribution.&lt;/p&gt;&lt;p&gt;Fixing this has caused a big shuffle at the top. "perl" now sits proudly at the top of the table, all the hardcoded exceptions are gone, the counts have zoomed up 10% as better linking was able to be made, and a very surprising #2 position that I originally thought was a bug is confirmed to be correct.&lt;/p&gt;&lt;p&gt;Yes, a text wrapping module is the most depended on thing in the CPAN! :/&lt;/p&gt;&lt;p&gt;2. Author attribution is now correct.&lt;/p&gt;&lt;p&gt;The CPANTS implementation appears not to understand the concept of changing maintainers. As a result, many CPAN modules that had changed hands were showing as being maintained by the original author.&lt;/p&gt;&lt;p&gt;With this corrected, you should now be able to accurately see who you need to annoy to take over a failing module.&lt;/p&gt;&lt;p&gt;3. DBD::mysql is no longer an OMGIBROKECPAN event.&lt;/p&gt;&lt;p&gt;Granted, the PASS vs FAIL counts for DBD::mysql are horrible. But the graph now does NOT consider the mysql driver to be as important as it previously did, which has dropped the FAILure score for it down to a lower one.&lt;/p&gt;&lt;p&gt;4. A new module appears at the top of the FAIL 100&lt;/p&gt;&lt;p&gt;I don't know where it was hiding (presumably as an embedded copy in someone else's distribution), but IO::Zlib has made a surprise jump to the top of the FAIL 100 table.&lt;/p&gt;&lt;p&gt;Please commence the poking and prodding of the author to take it over or fix it :)&lt;/p&gt;&lt;p&gt;&lt;b&gt;What's next?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;With the underlying data now correctly in place, I can start to address the extremely simple nature of the website itself. I wanted to delay any more work on creating new metrics until the current ones were no longer broken.&lt;/p&gt;&lt;p&gt;So hopefully I can now begin adding new Top 100 tables, and start to move the website towards something that will work better as a standalone site.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/7ByVQQtYIvs" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39260?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">CPANDB Tricks: Your personal version of the FAIL 100</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/af8GT-MJ2B4/39258" />
		<id>http://use.perl.org/~Alias/journal/39258?from=rss</id>
		<updated>2009-07-09T01:12:08+00:00</updated>
		<content type="html">&lt;p&gt;You may have seen my &lt;a href="http://ali.as/top100/"&gt;FAIL 100&lt;/a&gt; list of modules, the 100 modules who's failure in CPAN Testers cause the most pain to other people.&lt;/p&gt;&lt;p&gt;Now that I have support for CPAN Testers results in the CPANDB schema, it's now easy to replicate the math I was doing on that website in one SQL script.&lt;/p&gt;&lt;p&gt;Here's a quickie report of all the modules that I maintain that have failures causing problems for other people (which is a pretty decent clue to the order in which I need to fix them).&lt;/p&gt;&lt;p&gt;Please excuse the weird indenting, I have no idea how Slashcode managed to achieve that...&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;use CPANDB;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;print map {&lt;br /&gt;&amp;nbsp; &amp;nbsp; sprintf("%4s %s\n", $_-&amp;gt;[1], $_-&amp;gt;[0])&lt;br /&gt;} @{&lt;br /&gt;&amp;nbsp; &amp;nbsp; CPANDB-&amp;gt;selectall_arrayref(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'select distribution, (fail + unknown) * volatility as FAILure&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from distribution&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;where author = "ADAMK"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FAILure &amp;gt; 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;order by FAILure desc'&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;br /&gt;}&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;9460 PPI&lt;br /&gt;4389 DBD-SQLite&lt;br /&gt;3237 IPC-Run&lt;br /&gt;1407 File-HomeDir&lt;br /&gt;
&amp;nbsp; 484 Test-ClassAPI&lt;br /&gt;
&amp;nbsp; 396 prefork&lt;br /&gt;
&amp;nbsp; 345 SMS-Send&lt;br /&gt;
&amp;nbsp; 334 File-Remove&lt;br /&gt;
&amp;nbsp; 289 Config-Tiny&lt;br /&gt;
&amp;nbsp; 240 Class-Autouse&lt;br /&gt;
&amp;nbsp; 217 File-ShareDir&lt;br /&gt;
&amp;nbsp; 150 LWP-Online&lt;br /&gt;&amp;nbsp; 74 Devel-Dumpvar&lt;br /&gt;&amp;nbsp; 73 Test-Script&lt;br /&gt;&amp;nbsp; 68 Test-Inline&lt;br /&gt;&amp;nbsp; 60 Perl-Squish&lt;br /&gt;&amp;nbsp; 58 PITA-POE-SupportServer&lt;br /&gt;&amp;nbsp; 53 Module-CGI-Install&lt;br /&gt;&amp;nbsp; 38 ORLite-Migrate&lt;br /&gt;&amp;nbsp; 37 Module-Extract&lt;br /&gt;&amp;nbsp; 36 Module-Inspector&lt;br /&gt;&amp;nbsp; 28 Chart-Math-Axis&lt;br /&gt;&amp;nbsp; 24 Test-File-Cleaner&lt;br /&gt;&amp;nbsp; 20 PITA-XML&lt;br /&gt;&amp;nbsp; 15 PITA-Scheme&lt;br /&gt;&amp;nbsp; 15 Portable-Dist&lt;br /&gt;&amp;nbsp; 14 Xtract&lt;br /&gt;&amp;nbsp; 10 CSS-Tiny&lt;br /&gt;&amp;nbsp; 10 JSAN-Client&lt;br /&gt;&amp;nbsp; 10 PPI-HTML&lt;br /&gt;&amp;nbsp; &amp;nbsp;8 CPAN-Inject&lt;br /&gt;&amp;nbsp; &amp;nbsp;8 File-UserConfig&lt;br /&gt;&amp;nbsp; &amp;nbsp;7 PITA&lt;br /&gt;&amp;nbsp; &amp;nbsp;6 PITA-Test-Dummy-Perl5-Build&lt;br /&gt;&amp;nbsp; &amp;nbsp;6 Perl-Metrics&lt;br /&gt;&amp;nbsp; &amp;nbsp;4 Method-Alias&lt;br /&gt;&amp;nbsp; &amp;nbsp;4 Test-NeedsDisplay&lt;br /&gt;&amp;nbsp; &amp;nbsp;3 Algorithm-Dependency-Source-DBI&lt;br /&gt;&amp;nbsp; &amp;nbsp;3 Archive-Builder&lt;br /&gt;&amp;nbsp; &amp;nbsp;3 Data-Package&lt;br /&gt;&amp;nbsp; &amp;nbsp;3 JavaScript-Librarian&lt;br /&gt;&amp;nbsp; &amp;nbsp;2 CGI-Capture&lt;br /&gt;&amp;nbsp; &amp;nbsp;2 PITA-Image&lt;br /&gt;&amp;nbsp; &amp;nbsp;1 PITA-Test-Dummy-Perl5-MI&lt;br /&gt;&amp;nbsp; &amp;nbsp;1 PITA-Test-Dummy-Perl5-Make&lt;br /&gt;&amp;nbsp; &amp;nbsp;1 POE-Declare&lt;br /&gt;&amp;nbsp; &amp;nbsp;1 Parse-CPAN-MirroredBy&lt;br /&gt;&amp;nbsp; &amp;nbsp;1 Perl-Signature&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/af8GT-MJ2B4" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39258?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Promises, promises</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/btXsAFrCGRw/39256" />
		<id>http://use.perl.org/~Ovid/journal/39256?from=rss</id>
		<updated>2009-07-08T19:23:59+00:00</updated>
		<content type="html">&lt;p&gt;This seems like such a useful little function.  Can you guess what it does and why?&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;sub promise($) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $subname = shift;&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $package = caller;&lt;br /&gt;&amp;nbsp; &amp;nbsp; unless ($package-&amp;gt;can('AUTOLOAD') ) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # this should be in import()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; require Carp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Carp::confess("Package ($package) does not implement AUTOLOAD");&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $fq_name&amp;nbsp; = "$package\::$subname";&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $autoload = "$package\::AUTOLOAD";&lt;br /&gt;&amp;nbsp; &amp;nbsp; no strict 'refs';&lt;br /&gt;&amp;nbsp; &amp;nbsp; *$fq_name = sub {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $$autoload = $fq_name;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto &amp;amp;$autoload;&lt;br /&gt;&amp;nbsp; &amp;nbsp; };&lt;br /&gt;}&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;In fact, unless there's something else which does this and there's a fatal flaw, I think I might just upload this to the CPAN.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/btXsAFrCGRw" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39256?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">CPANDB Tricks: Tarballs that fail under Win32</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/em89MrtUwhA/39255" />
		<id>http://use.perl.org/~Alias/journal/39255?from=rss</id>
		<updated>2009-07-08T18:19:46+00:00</updated>
		<content type="html">&lt;p&gt;OK, this isn't a CPANDB trick as such.&lt;/p&gt;&lt;p&gt;But the build process in CPANDB::Generator now reports tarballs that fail to extract. The list is just short enough that I can past it below.&lt;/p&gt;&lt;p&gt;Many are the sort of random stuff that you'd expect, but a couple stand out for me, especially INGY/YAML-0.39.tar.gz?&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;[Thu Jul&amp;nbsp; 9 04:13:51 2009] Generating META.yml Data...&lt;br /&gt;&amp;nbsp; Failed: AKSTE/Term-Query-2.0.tar.gz&lt;br /&gt;&amp;nbsp; Failed: AQUMSIEH/Tk-ToolBar-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ARYEH/Net-AIM-1.22.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ASHLEY/Catalyst-Plugin-ReferingKeyword-0.01.tar.gz&lt;br /&gt;&amp;nbsp; Failed: BRTEAM/Batch-Batchrun-1.03.tar.gz&lt;br /&gt;&amp;nbsp; Failed: BRUMLEVE/autobless-1.0.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: BRUMLEVE/ddb-1.3.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: BRUMLEVE/vm-1.0.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: BRUMLEVE/wildproto-1.0.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: COG/Acme-AsciiArt2HtmlTable-0.01.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DCLEE/ponfish-0.03.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DIVEC/Lingua-ZH-HanConvert-0.12.tgz&lt;br /&gt;&amp;nbsp; Failed: DMEGG/SGMLSpm-1.03ii.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DMR/CookBookB-19960430.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DOKSNER/MPE-IMAGE-0.98a.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DPATES/IPTables-IPv4-0.97b.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DPATES/IPTables-IPv4-0.98.tar.gz&lt;br /&gt;&amp;nbsp; Failed: DREWF/Cmenu-1.1.tgz&lt;br /&gt;&amp;nbsp; Failed: EDLIU/DBD-NET-0.1.tgz&lt;br /&gt;&amp;nbsp; Failed: EDMONSON/Games-Rezrov-0.15.tar.gz&lt;br /&gt;&amp;nbsp; Failed: EIM/WWW-SMS/WWW-SMS-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ENOOR/TaskForest/TaskForest-1.33.tar.gz&lt;br /&gt;&amp;nbsp; Failed: FCO/perltugues/perltugues-0.15.tar.gz&lt;br /&gt;&amp;nbsp; Failed: FLUFFY/Archive-Par-1.01.tar.gz&lt;br /&gt;&amp;nbsp; Failed: FLUFFY/Getopt-Plus-0.98.tar.gz&lt;br /&gt;&amp;nbsp; Failed: FOOF/libvorbis-perl-0.05.tar.gz&lt;br /&gt;&amp;nbsp; Failed: FRAJULAC/Fwctl-0.28.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GAM/Test-CheckChanges-0.07.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GAVINC/Config-Directory-0.04.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GAVINC/File-DirCompare-0.5.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GAVINC/URI-Query-0.06.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GSCHLOSS/Math-Stat-0.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GSLONDON/Devel-AutoProfiler-1.200.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GSLONDON/Hardware-Vhdl-Parser-0.12.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GSLONDON/Parse-Nibbler-1.10.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GUIMARD/Lemonldap-NG-Portal-0.87.tar.gz&lt;br /&gt;&amp;nbsp; Failed: GYEPI/Ovid-0.12.tar.gz&lt;br /&gt;&amp;nbsp; Failed: HARDAKER/Makerelease-0.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: HBIERSMA/MQSeries-1.24.tar.gz&lt;br /&gt;&amp;nbsp; Failed: HOCHSTEN/XML-Tape-0.22.tar.gz&lt;br /&gt;&amp;nbsp; Failed: INGY/YAML-0.39.tar.gz&lt;br /&gt;&amp;nbsp; Failed: IZI/pake-0.21.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JEFF/CGISession.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JHIVER/MKDoc-Auth-0.5.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JOHNSCA/Syntax-Highlight-Perl-1.0.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JONO/Statistics-Table-F-0.02.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JOSTEN/XML-XSLT-0.20.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JOSTEN/xslt-parser-0.13.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JPRIT/ObjStore-1.53.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JPRIT/ObjStore-1.59.tar.gz&lt;br /&gt;&amp;nbsp; Failed: JV/mmds-1.902.tar.gz&lt;br /&gt;&amp;nbsp; Failed: KNASSAR/Activator-0.10.tar.gz&lt;br /&gt;&amp;nbsp; Failed: LBOTTEL/Apache-FormatLog-0.02.tar.gz&lt;br /&gt;&amp;nbsp; Failed: LUKKA/FreeWRL-0.14.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MACGYVER/SMTP-Server-1.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MASACCIO/Finance-Bank-Cahoot-1.04.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MCRAWFOR/Solstice-1440.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MEYERCJM/Harvey-1.02.1.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MICHEL/Business-KontoCheck-2.98.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MIGO/Games-Checkers-0.1.0.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MIKEDLR/Link_Controller-0.037.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MLFISHER/pmtools-1.10.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MPG/POD-Credentials-0.04.tgz&lt;br /&gt;&amp;nbsp; Failed: MRDVT/GPS-PRN-0.05.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MSILVA/Language-Tea-0.03.tar.gz&lt;br /&gt;&amp;nbsp; Failed: MSIMERSON/Mail-Toaster-5.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PAULG/Logfile-Radius-1.14.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PAYERLE/Net-Hesiod-1.11.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Base-0.08.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Base-0.092.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Client-Echo-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Client-LS-Remote-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-DB-File-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-DB-RRD-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Services-PingER-0.08.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Services-PingER-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Status-Common-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PERFSONAR/perfSONAR_PS-Topology-Common-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PHENSON/DFS-Perl-0.50.tar.gz&lt;br /&gt;&amp;nbsp; Failed: PLIAM/Apache-SecSess-0.09.tgz&lt;br /&gt;&amp;nbsp; Failed: PSIONIC/tic/tic.tar.gz&lt;br /&gt;&amp;nbsp; Failed: RFOLEY/File-Content-0.01.tar.gz&lt;br /&gt;&amp;nbsp; Failed: RSAVAGE/Module-Metadata-Changes-1.04.tgz&lt;br /&gt;&amp;nbsp; Failed: SAMPO/zxid-0.27.tgz&lt;br /&gt;&amp;nbsp; Failed: SARTAK/Bot-Applebot-0.01.tar.gz&lt;br /&gt;&amp;nbsp; Failed: SIMONW/Tanker-0.021.tar.gz&lt;br /&gt;&amp;nbsp; Failed: SJSZ/BSD-arc4random-1.3.tar.gz&lt;br /&gt;&amp;nbsp; Failed: STBEY/Bit-ShiftReg-2.0.tar.gz&lt;br /&gt;&amp;nbsp; Failed: STBEY/Graph-Kruskal-2.0.tar.gz&lt;br /&gt;&amp;nbsp; Failed: STBEY/Math-MatrixBool-5.7.tar.gz&lt;br /&gt;&amp;nbsp; Failed: TURNERJW/Tk-JFileDialog-1.4.tar.gz&lt;br /&gt;&amp;nbsp; Failed: TURNERJW/Tk-TextHighlight-1.0.4.tar.gz&lt;br /&gt;&amp;nbsp; Failed: WARD/WeSQL-0.53.tar.gz&lt;br /&gt;&amp;nbsp; Failed: WILL/Array-Sort-0.02.tar.gz&lt;br /&gt;&amp;nbsp; Failed: WILL/Math-Systems-0.01.tar.gz&lt;br /&gt;&amp;nbsp; Failed: WPMOORE/AFS-Command-1.7.tar.gz&lt;br /&gt;&amp;nbsp; Failed: YAK/Time-Compare-0.01b.tar.gz&lt;br /&gt;&amp;nbsp; Failed: YEWENBIN/Emacs-PDE-0.2.16.tar.gz&lt;br /&gt;&amp;nbsp; Failed: YUMPY/Shell-POSIX-Select-0.05.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ZAG/HTML-WebDAO-0.91.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ZAG/WebDAO-1.02.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ZAG/XML-ExtOn-0.09.tar.gz&lt;br /&gt;&amp;nbsp; Failed: ZAG/XML-Handler-ExtOn-0.06.tar.gz&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/em89MrtUwhA" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39255?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Complexity Management</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/jcsZ8Fd1xTM/39254" />
		<id>http://use.perl.org/~Ovid/journal/39254?from=rss</id>
		<updated>2009-07-08T16:08:10+00:00</updated>
		<content type="html">&lt;p&gt;For some reason, I tend to get hired to work on large code bases, even though I've met many people who seem to have those perfect memories and instant analytic abilities which make them a natural for said code.  Ultimately, as your code grows, complexity management skills become extremely important.  This is why I have a number of modules I've written or contributed to heavily in order to make this easier:&lt;/p&gt;&lt;dl&gt;
  &lt;dt&gt; &lt;a href="http://search.cpan.org/dist/Test-Harness/"&gt;Test::Harness&lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;Complexity mangement starts with tests&lt;/dd&gt;&lt;dt&gt; &lt;a href="http://search.cpan.org/dist/Class-Sniff/"&gt;Class::Sniff&lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;When your OO hierarchy becomes unwieldy, take a closer look at it.&lt;/dd&gt;&lt;dt&gt; &lt;a href="http://search.cpan.org/dist/Class-Trait/"&gt;Class::Trait&lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;Traits (roles) usually provide better OO complexity management than inheritance. (I should deprecate this in favor or &lt;tt&gt;Moose::Role&lt;/tt&gt;)&lt;/dd&gt;&lt;dt&gt; &lt;a href="http://search.cpan.org/dist/Devel-Deprecate/"&gt;Devel::Deprecate&lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;You're going to forget to remove that out-of-date feature.  This module won't let you forget.&lt;/dd&gt;&lt;dt&gt; &lt;a href="http://search.cpan.org/dist/Test-Most/"&gt;Test::Most&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/Test-Kit/"&gt;Test::Kit&lt;/a&gt; &lt;/dt&gt;&lt;dd&gt;Stop duplicating test boilerplate in your tests and just get your work done.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;Seriously, folks.  As you move through your programming career, start paying attention to complexity management.  When something is overly complex, figure out how to automate or simplify it.  You'll usually gain flexibility and comprehensibility.  Complexity management is your real job.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/jcsZ8Fd1xTM" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39254?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">The Corporate CPAN II</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/nlq6Hkn3vec/1247036073.html" />
		<id>http://szabgab.com/blog/2009/07/1247036073.html</id>
		<updated>2009-07-08T09:54:33+00:00</updated>
		<content type="html">&lt;p&gt;
More than a month ago I wrote about &lt;a href="http://szabgab.com/blog/2009/05/1243228620.html"&gt;The Corporate CPAN&lt;/a&gt; and posted the question
also on the CPAN.pm developer list. I got a few responses that are still waiting in my
inbox to act on. I don't see that I'll have the tuits for that any time soon
so I better share with you the answers as they were. 
&lt;/p&gt;
&lt;p&gt;
Ricardo SIGNES also mentioned he is working on some internal system with HDP
but did not point to any publicly available code.
&lt;/p&gt;
&lt;p&gt;
Andreas J. Koenig pointed me to the doc/README file of the
&lt;a href="http://github.com/andk/pause/"&gt;PAUSE source code&lt;/a&gt; on Github. 
We could look around there but he does not plan to release it to CPAN.
&lt;/p&gt;
&lt;p&gt;
brian d foy pointed me to his work on MyCPAN. See &lt;a href="http://cpan.uwinnipeg.ca/dist/MyCPAN-App-DPAN"&gt;MyCPAN::App::DPAN&lt;/a&gt; and
&lt;a href="http://cpan.uwinnipeg.ca/dist/MyCPAN-Indexer"&gt;MyCPAN::Indexer&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I know it's not much of an analysis on my side but at least now I can file the 
messages in another folder...
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/nlq6Hkn3vec" height="1" width="1"/&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gábor Szabó</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://www.szabgab.com/blog/szabgab.rss" />
			<id>http://www.szabgab.com/blog/szabgab.rss</id>
			<updated>2009-07-13T20:01:57+00:00</updated>
			<rights type="html">Copyright 2002-2009, Gabor Szabo</rights>
		</source>
	<feedburner:origLink>http://szabgab.com/blog/2009/07/1247036073.html</feedburner:origLink></entry>

	<entry>
		<title type="html">PL_runops</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/GUoFClXVZzY/plrunops.html" />
		<id>tag:blogger.com,1999:blog-876358347971598886.post-2319009520838986755</id>
		<updated>2009-07-08T02:57:31+00:00</updated>
		<content type="html">&lt;p&gt;I'm going to try to do a series of posts about learning Perl internals. I am still a beginner, I have trouble remembering the many macros, or keeping everything in my head all at once, so hopefully I will be able to make some sense of this stuff in a way that is accessible to other beginners.&lt;/p&gt;

&lt;p&gt;While I'm definitely diving right in to the deep end, I think &lt;tt&gt;PL_runops&lt;/tt&gt; is a good place to start as any, there's not a lot you need to learn to see how it works. I don't think Perl has a shallow end.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;PL_runops&lt;/tt&gt; is a variable in the interpreter containing a function pointer, which in most cases will be &lt;tt&gt;Perl_runops_standard&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;Perl_runops_standard&lt;/tt&gt; is the function that executes opcodes in a loop. Here's how it's defined:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139031"&gt;int
Perl_runops_standard(pTHX)
{
    dVAR;
    while ((PL_op = CALL_FPTR(PL_op-&amp;gt;op_ppaddr)(aTHX))) {
        PERL_ASYNC_CHECK();
    }

    TAINT_NOT;
    return 0;
}&lt;/pre&gt;

&lt;p&gt;Perl makes extensive use of macros, which can sometimes be confusing, but in this instance it's not too daunting. This loop will essentially keep calling &lt;tt&gt;PL_op-&amp;gt;op_ppaddr&lt;/tt&gt;, assigning the result to &lt;tt&gt;PL_op&lt;/tt&gt;. As long as a valid value is returned it will keep executing code.&lt;/p&gt;

&lt;p&gt;Just to get it out of the way, &lt;tt&gt;PERL_ASYNC_CHEK&lt;/tt&gt; is a macro that checks to see if any signals were delivered to the process, and invokes the handlers in &lt;tt&gt;%SIG&lt;/tt&gt; if necessary.&lt;/p&gt;

&lt;p&gt;So what's &lt;tt&gt;PL_op&lt;/tt&gt;? It's essentially Perl's instruction pointer, it refers to the opcode currently being executed. When Perl compiles source code it produces an optree. This is probably one of the more complicated structure in Perl internals, but right now we're only concerned with one small part, the &lt;tt&gt;op_ppaddr&lt;/tt&gt; field of a single node in the tree. The &lt;tt&gt;op_ppaddr&lt;/tt&gt; field contains a pointer to the function that implements the op.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;PP&lt;/tt&gt; stands for push/pop, which means that it's a function that operates in the context of the Perl stack, pushing and popping items as necessary to do its work, and returns the next opcode to execute.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;pp.h&lt;/tt&gt; defines a &lt;tt&gt;PP&lt;/tt&gt; macro, which sets up a signature for a function that returns an op pointer. Let's have a look at two simple &lt;tt&gt;PP&lt;/tt&gt; functions. First is &lt;tt&gt;pp_const&lt;/tt&gt;:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139032"&gt;PP(pp_const)
{
    dVAR;
    dSP;
    XPUSHs(cSVOP_sv);
    RETURN;
}&lt;/pre&gt;

&lt;p&gt;This is an implementation of the &lt;tt&gt;const&lt;/tt&gt; op, which pushes the value of a literal constant to the stack. The &lt;tt&gt;cSVOP_sv&lt;/tt&gt; macro is used to get the actual &lt;tt&gt;SV&lt;/tt&gt; (scalar value structure) of the constant's value from the optree. &lt;tt&gt;SVOP&lt;/tt&gt; is an &lt;tt&gt;OP&lt;/tt&gt; structure that contains an &lt;tt&gt;SV&lt;/tt&gt; value. The &lt;tt&gt;c&lt;/tt&gt; stands for "current".&lt;/p&gt;

&lt;p&gt;Let's rewrite the body of the macro using some temporary values:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139033"&gt;/* the current opcode is op_const, so the op structure is an SVOP
 * Instead of using the long chain of macros we'll put it in a variable */
SVOP *svop = (SVOP *)PL_op; 

/* and then we can simply use the op_sv field, which
 * contains a pointer to a scalar value structure */
SV *sv = svop-&amp;gt;op_sv;&lt;/pre&gt;

&lt;p&gt;This SV is then pushed onto the stack using the &lt;tt&gt;XPUSHs&lt;/tt&gt; macro. The &lt;tt&gt;X&lt;/tt&gt; in &lt;tt&gt;XPUSHs&lt;/tt&gt; means that the stack will be extended if necessary, and the &lt;tt&gt;s&lt;/tt&gt; denotes &lt;tt&gt;SV&lt;/tt&gt;. To read the documentation of these macros, refer to &lt;a href="http://perldoc.perl.org/perlapi.html"&gt;perlapi&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The next thing that executes is the &lt;tt&gt;RETURN&lt;/tt&gt; macro. This macro is defined in &lt;tt&gt;pp.h&lt;/tt&gt;, along with a few others:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139034"&gt;#define RETURN          return (PUTBACK, NORMAL)

#define PUTBACK         PL_stack_sp = sp

/* normal means no special control flow */
#define NORMAL          PL_op-&amp;gt;op_next

/* we'll use this one later: */
#define RETURNOP(o)     return (PUTBACK, o)&lt;/pre&gt;

&lt;p&gt;Recall that there are no lists in C. The comma operator in C executes its left side, then its right, and returns that value (unfortunately &lt;a href="http://blog.sartak.org/2009/06/reflections-on-yapcna-2009.html#context"&gt;we have that in Perl&lt;/a&gt;, too). The &lt;tt&gt;RETURN&lt;/tt&gt; macro therefore desugars to something like:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139035"&gt;PL_stack_sp = sp;
return(PL_op-&amp;gt;op_next);&lt;/pre&gt;

&lt;p&gt;The &lt;tt&gt;XPUSHs&lt;/tt&gt; macro manipulated the local copy of the pointer to the stack, &lt;tt&gt;sp&lt;/tt&gt; as it was adding our SV. This change is not immediately written to the actual stack pointer, &lt;tt&gt; PL_stack_sp &lt;/tt&gt;. The &lt;tt&gt;PUTBACK&lt;/tt&gt; macro sets the "real" stack to the version we've manipulated in the body of our opcode.&lt;/p&gt;

&lt;p&gt;Then the opcode simply returns &lt;tt&gt;PL_op-&amp;gt;op_next&lt;/tt&gt;. The &lt;tt&gt;op_next&lt;/tt&gt; field in the op contains a pointer to the next op that should be executed. In this case if the code being executed was:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139036"&gt;my $x = 42;&lt;/pre&gt;

&lt;p&gt;then the const op compiled to handle the &lt;tt&gt;42&lt;/tt&gt; literal would have pushed an &lt;tt&gt;SV&lt;/tt&gt; containing the integer 42 onto the stack, and the &lt;tt&gt;op_next&lt;/tt&gt; in this case is the assignment operator, which will actually use the value.&lt;/p&gt;

&lt;p&gt;So, to recap, when &lt;tt&gt;PL_op&lt;/tt&gt; contains a pointer to this const op, &lt;tt&gt;PL_op-&amp;gt;op_ppaddr&lt;/tt&gt; will contain a pointer to &lt;tt&gt;pp_const&lt;/tt&gt;. &lt;tt&gt;PL_runops&lt;/tt&gt; will call that function, which in turn will push &lt;tt&gt;((SVOP *)PL_op)-&amp;gt;op_sv&lt;/tt&gt; onto the stack, update &lt;tt&gt;PL_stack_sp&lt;/tt&gt;, and return &lt;tt&gt;PL_op-&amp;gt;op_next&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;At this point &lt;tt&gt;runops_standard&lt;/tt&gt; will assign that value to &lt;tt&gt;PL_op&lt;/tt&gt;, and then invoke the &lt;tt&gt;op_ppaddr&lt;/tt&gt; of the next opcode (the assignment op).&lt;/p&gt;

&lt;p&gt;So far so good?&lt;/p&gt;

&lt;p&gt;To spice things up a bit, here's the implementation of logical or (&lt;tt&gt;||&lt;/tt&gt;):&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139037"&gt;PP(pp_or)
{
    dVAR; dSP;
    if (SvTRUE(TOPs))
        RETURN;
    else {
        if (PL_op-&amp;gt;op_type == OP_OR)
            --SP;
        RETURNOP(cLOGOP-&amp;gt;op_other);
    }
}&lt;/pre&gt;

&lt;p&gt;The &lt;tt&gt;or&lt;/tt&gt; op is of a different type than the &lt;tt&gt;const&lt;/tt&gt; op. Instead of &lt;tt&gt;SVOP&lt;/tt&gt; it's a &lt;tt&gt;LOGOP&lt;/tt&gt;, and it doesn't have an &lt;tt&gt;op_sv&lt;/tt&gt; but instead it has an &lt;tt&gt;op_other&lt;/tt&gt; which contains a pointer to a different branch in the optree.&lt;/p&gt;

&lt;p&gt;When &lt;tt&gt;pp_or&lt;/tt&gt; is executed it will look at the value at the top of the stack using the &lt;tt&gt;TOPs&lt;/tt&gt; macro, and check if it evaluates to a true value using the &lt;tt&gt;SvTRUE&lt;/tt&gt; macro.&lt;/p&gt;

&lt;p&gt;If that's the case it short circuits to &lt;tt&gt;op_next&lt;/tt&gt; using the &lt;tt&gt;RETURN&lt;/tt&gt; macro, but if it's false it needs to evaluate its right argument.&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;--SP&lt;/tt&gt; is used to throw away the argument (so that &lt;tt&gt;$a || $b&lt;/tt&gt; doesn't end up returning both &lt;tt&gt;$a&lt;/tt&gt; and &lt;tt&gt;$b&lt;/tt&gt;).&lt;/p&gt;

&lt;p&gt;Then the &lt;tt&gt;RETURNOP&lt;/tt&gt; macro is used to call &lt;tt&gt;PUTBACK&lt;/tt&gt;, and to return &lt;tt&gt;PL_op&lt;/tt&gt;'s &lt;tt&gt;op_other&lt;/tt&gt;. &lt;tt&gt;RETURN&lt;/tt&gt; is essentialy the same as &lt;tt&gt;RETURNOP(NORMAL)&lt;/tt&gt;. &lt;tt&gt;op_other&lt;/tt&gt; contains a pointer to the op implementing the right branch of the &lt;tt&gt;||&lt;/tt&gt;, whereas &lt;tt&gt;op_next&lt;/tt&gt; is the op that will use the value of the &lt;tt&gt;||&lt;/tt&gt; expression.&lt;/p&gt;

&lt;p&gt;This is one of the most basic parts of the Perl 5 virtual machine. It's a stack based machine that roughly follows the &lt;a href="http://en.wikipedia.org/wiki/Threaded_code"&gt;threaded code&lt;/a&gt; model for its intermediate code structures.&lt;/p&gt;

&lt;p&gt;The data types mostly revolve around the &lt;tt&gt;SV&lt;/tt&gt; data structure, and moving pointers to &lt;tt&gt;SV&lt;/tt&gt;s from op to op using the stack.&lt;/p&gt;

&lt;p&gt;For me the hardest part to learn in Perl is definitely the rich set of macros, which are almost a language in their own right.&lt;/p&gt;

&lt;p&gt;If you &lt;a href="http://search.cpan.org/search?m=all&amp;amp;q=runops"&gt;search for runops&lt;/a&gt; on the CPAN you will find a number of interesting modules that assign to &lt;tt&gt;PL_runops&lt;/tt&gt; at compile time, overriding the way opcodes are dispatched.&lt;/p&gt;

&lt;p&gt;For more information on Perl internals, the best place to start is &lt;a href="http://perldoc.perl.org/perlguts.html"&gt;perlguts&lt;/a&gt;, and the wonderful &lt;a href="http://search.cpan.org/dist/illguts/index.html"&gt;perlguts illustrated&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/876358347971598886-2319009520838986755?l=blog.woobling.org" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/yuvalkogman/~4/YP1QW4Yu4bE" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/GUoFClXVZzY" height="1" width="1"/&gt;</content>
		<author>
			<name>nothingmuch</name>
			<email>nothingmuch@woobling.org</email>
			<uri>http://blog.woobling.org/</uri>
		</author>
		<source>
			<title type="html">nothingmuch's perl blog</title>
			<link rel="self" href="http://blog.woobling.org/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-876358347971598886</id>
			<updated>2009-07-10T01:01:39+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/yuvalkogman/~3/YP1QW4Yu4bE/plrunops.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">CPANDB Tricks: Smoking the Top 100</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/SwTxrzM9o8o/39248" />
		<id>http://use.perl.org/~Alias/journal/39248?from=rss</id>
		<updated>2009-07-08T01:03:23+00:00</updated>
		<content type="html">&lt;p&gt;David Golden writes:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;I'd like to be able to easily smoke test at least the volatile 100&lt;br /&gt;list for the 5.10.1 RC's.  Is there an easy way I can get a list in&lt;br /&gt;the form:&lt;/p&gt;&lt;p&gt;DAGOLDEN/Sub-Uplevel-0.2002.tar.gz&lt;/p&gt;&lt;p&gt;Just a text file would be fine, or JSON or whatever.  Just something&lt;br /&gt;with AUTHOR/DISTNAME-VERSION.SUFFIX.&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;The Volatile 100 is my replacement for the Phalanx 100. Where the Phalanx 100 represented major functional modules that people might depend on directly the most and was curated by humans, the Volatile 100 in a graph-weighted list of the 100 most depended on distributions and is continuously updated automatically.&lt;/p&gt;&lt;p&gt;Finding information of the kind David needs is exactly why I created the &lt;a href="http://search.cpan.org/perldoc?CPANDB"&gt;CPANDB&lt;/a&gt; module. His query can be boiled down to just a single line of code.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;use CPANDB;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;my @releases = map { $_-&amp;gt;release }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPANDB::Distribution-&amp;gt;select('order by volatility desc limit 100');&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/SwTxrzM9o8o" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39248?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">Saudi Arabian Adventures - Days 3-5</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/VzYhdBe3OQ0/" />
		<id>http://pjf.id.au/blog/?position=578</id>
		<updated>2009-07-08T00:00:00+00:00</updated>
		<content type="html">&lt;p&gt;&lt;i&gt;These events happened during my recent trip to Saudi Arabia.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Saudi Arabian Adventures - Days 3-4&lt;/b&gt;&lt;br /&gt;
On the third day of teaching my class swapped over to new students
at lunchtime.  Included in this group was Abdulaziz, who I had
spoken to on the phone a few times, and who formally introduced
me to the class on the first day.  Abdulaziz spoke English with
an American accent, and I was later to learn that he gone to
college in America.
&lt;/p&gt;&lt;p&gt;
Lunch on the second last day Abdulaziz took me to the golf course.
Saudi Aramco has a &lt;i&gt;huge&lt;/i&gt; golf course, with beautifully kept
grass, and is in stark contrast to the surrounding desert.  Here
they serve a variety of meals, cooked to order.  Since it was the
middle of a business day, nobody was actually playing golf.
&lt;/p&gt;&lt;p&gt;
There have been a few things that I've noticed over here.
Business attire is very much &lt;a href="http://en.wikipedia.org/wiki/Suit_(clothing)"&gt;traditional western&lt;/a&gt;
or &lt;a href="http://en.wikipedia.org/wiki/Thawb"&gt;traditional Arabic&lt;/a&gt;,
with both being very common.  Teenage girls can be often seen
wearing flowing black over-robes that were very Harry Potter-esque.
Lawns and garden beds are covered with a  huge number of very fine mist
sprinklers, and they run &lt;i&gt;during the day&lt;/i&gt;.  These sorts of
sprinklers are practically outlawed in Australia, with most states
suffering from severe water shortages.
&lt;/p&gt;&lt;p&gt;
At the food hall, I learnt an important lesson.  If I was asked if
I wanted something to "take away", then that actually meant the food
serving would feed a football team, and my answer to such questions
should always be in the affirmative.  The first time I foolishly said no,
and found myself wondering what to do with the incredible amount of
food in front of me.
&lt;/p&gt;&lt;p&gt;
Having wireless access in my room is a real blessing.  I don't
know where I'd get it otherwise.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Saudi Arabian Adventures - Day 5&lt;/b&gt;&lt;br /&gt;
Today was my second-last day of teaching, and Abdulaziz
informed me that I needed to make sure the class finished
early (3pm) as a meeting had been arranged between myself
and management.
&lt;/p&gt;&lt;p&gt;
To make my day more interesting, we had a trainer who wanted to
install software for her course next week.  Her name was Tina,
and her opening line was "Hi, you're a software
developer, aren't you?"  When I asked how she knew, she
claimed "It's the look.  You're all trendy, with long hair."
That's the first time I've ever heard developers get called
&lt;i&gt;trendy&lt;/i&gt;, so I can only assume that I mis-heard.
&lt;/p&gt;&lt;p&gt;
At 3pm we finished early so that I could meet with EDMD management.
For some reason, whenever anyone said "EDMD" I would hear "AD&amp;amp;D",
my mind would fill with images of dungeon-crawling geologists in
flowing black robes fighting an onslaught of umber hulks.
&lt;/p&gt;&lt;p&gt;
The meeting with management was made more interesting because I
didn't have my Aramco ID, which meant Abdulaziz had to make
a couple of bluff checks at the security checkpoints to get
me through.
&lt;/p&gt;&lt;p&gt;
The meeting itself was very management-focused.  What does Perl
do, who uses it, what's its future, and so on?  I honestly don't
know how I fared with these questions, and in hindsight I fear
my answers may have been a little too much on the technical
side, but everyone seemed happy.
&lt;/p&gt;&lt;p&gt;
Afterwards I met Omar, who I had spoken to on the phone a number
of times before my trip, but who wasn't enrolled in the course.
Omar is a dual-classed geo/developer, and already knows Perl.  It
also rapidly became apparent that he was very open-source friendly.
"We have a program that parses $horrible_file_format, and would
like to bundle it into a module and release it to the CPAN.  Is
that something you can help with?"
&lt;/p&gt;&lt;p&gt;
That night, Fuad, Abdulaziz, Omar and Mohammed took me out to
a &lt;i&gt;traditional&lt;/i&gt; Arabic restaurant.  The trip getting there
was an adventure in itself.  Saudi Arabia seemed to lack anything
resembling road rules, or if they existed, they were ignored
by most of the drivers on the road.  Lane-changes happened at
random, and cars would speed down the road at breakneck velocity.
The primary form of communication between drivers was a brief flash of
high-beams, which meant "I am going 40km/hr faster than you,
and I'm not changing lanes.  You should."  This was in stark
contrast to driving inside the Aramco campus, where everyone
was slow, careful, and polite.  Somehow, Omar drove
through all this without breaking a sweat or losing his cool.
&lt;/p&gt;&lt;p&gt;
In the car we talked about content management systems, web
technologies, AJAX, Catalyst, Jifty, PHP, package management
and deployment, virtual worlds, and a variety of other FOSS-oriented
technical subjects.  This was good, as it distracted me from the
traffic around us.
&lt;/p&gt;&lt;p&gt;
At the restaurant I was treated to Arabic coffee, which apparently
is made from the unroasted beans, and is very good.  It also
rapidly became apparent that this was a restaurant/museum, with
many historical photos and items on the upper floors.  There was a
large water feature in the middle of the building, and a large
lantern feature.  It was explained to me that these sorts of lanterns
were traditionally lit and placed outside houses at the start of
the month of &lt;a href="http://en.wikipedia.org/wiki/Ramadan"&gt;Ramadan&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
After a tour of the historical section, we were given quite a
banquet of food, some items which I have had before (such as
the dips), and some which I had not.  One of the most memorable (and
most tasty) dishes was a thick paste made of a variety of grains.
This was eaten with a thin broth, and stuck to one's teeth almost
immediately.
&lt;/p&gt;&lt;p&gt;
After dinner, and tea, and dates, and more talking,
we drove back to the camp, with discussions mostly focusing around
virtual worlds, 3D web interfaces, and tunnelling procedure calls from
Second Life to Perl.
&lt;/p&gt;&lt;p&gt;
Sleep was an immediate priority when I returned to my room, as it
had become quite late, and I was certain I'd need an extra cup of
coffee to get me up in the morning.
&lt;/p&gt;
&lt;p&gt;Posted: 8th July 2009.&lt;/p&gt;&lt;p&gt;Tags:
&lt;a href="http://pjf.id.au/blog/toc.html?tag=adventure" rel="tag"&gt;adventure&lt;/a&gt;
&lt;a href="http://pjf.id.au/blog/toc.html?tag=aramco" rel="tag"&gt;aramco&lt;/a&gt;
&lt;a href="http://pjf.id.au/blog/toc.html?tag=dhaharan" rel="tag"&gt;dhaharan&lt;/a&gt;
&lt;a href="http://pjf.id.au/blog/toc.html?tag=food" rel="tag"&gt;food&lt;/a&gt;
&lt;a href="http://pjf.id.au/blog/toc.html?tag=perl" rel="tag"&gt;perl&lt;/a&gt;
&lt;a href="http://pjf.id.au/blog/toc.html?tag=saudi" rel="tag"&gt;saudi&lt;/a&gt;
&lt;a href="http://pjf.id.au/blog/toc.html?tag=travel" rel="tag"&gt;travel&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Bookmark:&lt;/p&gt;&lt;a href="http://digg.com/submit?phase=2&amp;amp;url=http%3A%2F%2Fpjf.id.au%2Fblog%2F%3Fposition%3D578&amp;amp;title=Saudi%20Arabian%20Adventures%20-%20Days%203-5"&gt;&lt;img src="http://pjf.id.au/images/icons/digg.png" alt="Digg this" /&gt;&lt;/a&gt;
&lt;a href="http://www.technorati.com/faves?add=http%3A%2F%2Fpjf.id.au%2Fblog%2F%3Fposition%3D578"&gt;&lt;img src="http://pjf.id.au/images/icons/technorati.png" alt="Digg this" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/VzYhdBe3OQ0" height="1" width="1"/&gt;</content>
		<author>
			<name>Paul Fenwick</name>
			<uri>http://pjf.id.au/blog/</uri>
		</author>
		<source>
			<title type="html">PJF's Journal</title>
			<subtitle type="html">Paul Fenwick - Perl, technology, chickens</subtitle>
			<link rel="self" href="http://pjf.id.au/blog/index.rss?tag=perl" />
			<id>http://pjf.id.au/blog/index.rss?tag=perl</id>
			<updated>2009-07-13T20:01:25+00:00</updated>
		</source>
	<feedburner:origLink>http://pjf.id.au/blog/?position=578</feedburner:origLink></entry>

	<entry>
		<title type="html">Introducing CPANHQ</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/p7fzdXzpyVU/introducing-cpanhq.html" />
		<id>tag:perlbuzz.com,2009://1.694</id>
		<updated>2009-07-07T17:22:02+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;
&lt;i&gt;By Shlomi Fish&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
Most people who are actively developing using Perl are familiar with 
sites for searching CPAN (the Comprehensive Perl Archive Network)
such as &lt;a href="http://search.cpan.org/"&gt;search.cpan.org&lt;/a&gt;
and &lt;a href="http://kobesearch.cpan.org/"&gt;kobesearch.cpan.org&lt;/a&gt;.
These sites provide a simple search bar where users can search for keywords
or key phrases, and find a list of results. These sites also feature
pages for the various CPAN distributions, the various authors, and the
individual pages of documentation inside the modules.
&lt;/p&gt;

&lt;p&gt;
Recently, Andy Lester started the 
&lt;a href="http://groups.google.com/group/rethinking-cpan"&gt;"Rethinking 
CPAN" mailing list&lt;/a&gt; and wrote &lt;a href="http://perlbuzz.com/2008/04/rethinking-the-interface-to-cpan.html"&gt;a
Perlbuzz post titled "Rethinking the interface to CPAN"&lt;/a&gt;, where he gave
the case that the current resources may be inadequate for the process
of selecting a module on CPAN. For a long time, there was an intermittent
discussion and some brain-storming, but very little code (if any) has been
written. This has all changed with 

&lt;a href="http://github.com/bricas/cpanhq/tree/master"&gt;CPANHQ&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
So what is CPANHQ? As documented in 
&lt;a href="http://wiki.github.com/bricas/cpanhq"&gt;the first
and only wiki page it has so far&lt;/a&gt; (which I wrote a few days ago), 
"CPANHQ aims to be a community-driven, meta-data-enhanced alternative to
such sites as &lt;a href="http://search.cpan.org/"&gt;http://search.cpan.org/&lt;/a&gt;
and &lt;a href="http://kobesearch.cpan.org/"&gt;http://kobesearch.cpan.org/&lt;/a&gt;.
Currently, the functionality is very basic, but we have great ambitions."
&lt;/p&gt;

&lt;p&gt;

I learned about CPANHQ by overhearing a conversation on Freenode's #perl
channel. I joined the effort, and made several enhancements to the
&lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; and
&lt;a href="http://www.perlfoundation.org/perl5/index.cgi?dbix_class"&gt;DBIx-Class&lt;/a&gt;-based 
code. The functionality is still very basic.
&lt;/p&gt;

&lt;p&gt;
Some of the plans and ideas we have for CPANHQ, which may be translated into
code in the future are:
&lt;/p&gt;

&lt;ol&gt;

&lt;li&gt;
&lt;p&gt;
The code is and will remain open-source, which makes it easy for people to
contribute to. 

&lt;/p&gt;
&lt;/li&gt;


&lt;li&gt;
&lt;p&gt;
We plan to have most of the current features of search.cpan.org and 
kobesearch.cpan.org including pages for authors, distributions, and individual
modules and their documentation.
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
CPANHQ was already enhanced with some &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; 
and &lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt; JavaScript 
goodness, and we plan to add more of it to make the user experience better.  

&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
The site aims to be more integrated than the many separate CPAN-related
sites today: search.cpan.org, CPAN Forum, AnnoCPAN, CPAN Ratings, CPANTS,
CPAN Dependencies, etc. By putting everything under one roof, we can provide
a better user experience than the many sites with very loose integration.
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
We plan to enhance the site based on meta-data as provided by both the module
authors (in the &lt;tt&gt;META.yml&lt;/tt&gt; file and the users of the site.
&lt;/p&gt;

&lt;p&gt;
For example, we have already added support for the &lt;a href="http://module-build.sourceforge.net/META-spec.html#keywords"&gt;META.yml's
keywords&lt;/a&gt; which allow authors to tag modules, and we plan to support 
user-tags too.
&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
CPANHQ will be very community-driven. People would be able to open user
accounts there, which will allow them to contribute content to the site,
such as tags/labels, comments, wiki pages, chatter, etc.
&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;

The &lt;a href="http://wiki.github.com/bricas/cpanhq"&gt;CPANHQ wiki page&lt;/a&gt;
contains more ideas and insights. Like I said, the current functionality is
incredibly basic, but we hope that with enough help, time and dedication,
we can create an attractive and engaging interface to CPAN, to make
finding a module on CPAN faster, easier and more fun.
&lt;/p&gt;

&lt;p&gt;
In the meantime, you can look at the 
&lt;a href="http://www.shlomifish.org/open-source/projects/CPANHQ/screenshots/"&gt;screenshots&lt;/a&gt;
we have of the interface so far, or clone the &lt;a href="http://github.com/bricas/cpanhq/tree/master"&gt;github repositories&lt;/a&gt;,
and set up a local web-interface.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;
&lt;a href="http://www.shlomifish.org/"&gt;Shlomi Fish&lt;/a&gt; has been writing using Perl, about Perl and for Perl, since 1996, 
when he started working for a web-design shop, and discovered Perl and UNIX, 
which he's been in love with ever since. He initiated and is maintaining
&lt;a href="http://search.cpan.org/~shlomif/"&gt;many CPAN modules&lt;/a&gt; and 
contributed to many other Perl and non-Perl related projects.
&lt;/i&gt;
&lt;/p&gt;
        
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=W8IZoOVJme0:5pTLwCH4AXE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=W8IZoOVJme0:5pTLwCH4AXE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=W8IZoOVJme0:5pTLwCH4AXE:F7zBnMyn0Lo" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=W8IZoOVJme0:5pTLwCH4AXE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=W8IZoOVJme0:5pTLwCH4AXE:V_sGLiPBpWU" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=W8IZoOVJme0:5pTLwCH4AXE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/W8IZoOVJme0" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/p7fzdXzpyVU" 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>
			<updated>2009-07-13T05:01:07+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/PerlBuzz/~3/W8IZoOVJme0/introducing-cpanhq.html</feedburner:origLink></entry>

	<entry>
		<title type="html">mod_perlite helps Perl gain ground in the PHP arena</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/IPRCtqg5XtU/mod-perlite-helps-perl-gain-ground-in-the-php-arena.html" />
		<id>tag:perlbuzz.com,2009://1.695</id>
		<updated>2009-07-07T13:57:04+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;em&gt;Michele Beltrame wrote in about the mod_perlite project, which I'd love to see take off.  mod_perl has never been easy to install, and ISPs and webhosts are loathe to use it for security reasons. mod_perlite would provide easy access to Perl without the weight of CGI.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://modperlite.org"&gt;mod_perlite&lt;/a&gt; is an interesting Apache module currently under development. I'd say it's the equivalent of what mod_php is for PHP: a fast, easy to use, and relatively safe way to use Perl scripts for the development of small and medium web applications.&lt;/p&gt;

&lt;p&gt;A project like this brings Perl back into play as a good choice in a field currently dominated by PHP. In particular, PHP is great when you need to run a lot of different small applications on the same web server, and you want all of them to run fast enough. CGI is slow compared to mod_php because both the interpreter and the application need to be loaded for every single request. Solutions like &lt;a href="http://perl.apache.org/"&gt;mod_perl&lt;/a&gt; and &lt;a href="http://www.fastcgi.com/"&gt;mod_fastcgi&lt;/a&gt; are the best solution when you have a few big applications, but they're not a good choice in this scenario, because they keep the application resident: when you've got so many small applications (which, in most cases, are invoked infrequently) you end up with enormous memory footprint.&lt;/p&gt;

&lt;p&gt;mod_perlite is the winner here: only the interpreter is kept resident (there's also the idea to keep some modules loaded, which might speed up things further) and applications are loaded at request time. This also helps avoid problems with memory leaks. Using mod_perlite is simple: just configure Apache and all the .pl files will run &lt;em&gt;without modification&lt;/em&gt; taking full advantage of mod_perlite and therefore reducing execution time to a fraction.&lt;/p&gt;

&lt;p&gt;Unfortunately the module is not yet stable, as there's still work to do. My installation on Gentoo Linux x86_64 went smoothly. mod_perlite works but still suffers some major issues. In fact, at present it's only usable for very simple applications because of a bug in how query parameters passed by Apache are handled.&lt;/p&gt;

&lt;p&gt;To make mod_perlite fully usable, the project web site has a three point TODO list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix form POST processing ('read' does not work reliably)&lt;/li&gt;
&lt;li&gt;Limit Perl running time.&lt;/li&gt;
&lt;li&gt;Find ways to cache code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is looking for help, so if you are interested and know something about mod_perl, writing Apache modules in C, and about overriding system calls in Perl - and if the project seems interesting to you - please shout!&lt;/p&gt;

&lt;p&gt;And... if someone argues "we're 10 years late compared to PHP", I'd reply "better late than never". ;-)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Michele Beltrame lives in North-Eastern Italy, where he has been
developing web applications in Perl since 1996. He is an active member
of the Italian Perl community and of the &lt;a href="http://conferences.yapceurope.org/ipw2009/"&gt;Italian Perl Workshop&lt;/a&gt;
organizational committee. In his free time he publishes guidebooks on
the mountains surrounding his area.&lt;/em&gt;&lt;/p&gt;

        

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=XS6p8PWzbNM:CWwUKP9tM-0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=XS6p8PWzbNM:CWwUKP9tM-0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=XS6p8PWzbNM:CWwUKP9tM-0:F7zBnMyn0Lo" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=XS6p8PWzbNM:CWwUKP9tM-0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=XS6p8PWzbNM:CWwUKP9tM-0:V_sGLiPBpWU" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=XS6p8PWzbNM:CWwUKP9tM-0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/XS6p8PWzbNM" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/IPRCtqg5XtU" 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>
			<updated>2009-07-13T05:01:07+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/PerlBuzz/~3/XS6p8PWzbNM/mod-perlite-helps-perl-gain-ground-in-the-php-arena.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Perl 6 Roles Question</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/MYHdNnk95gc/39241" />
		<id>http://use.perl.org/~Ovid/journal/39241?from=rss</id>
		<updated>2009-07-07T10:31:45+00:00</updated>
		<content type="html">&lt;p&gt;Imagine a &lt;tt&gt;PracticalJoke&lt;/tt&gt; class. It needs a non-lethal &lt;tt&gt;explode()&lt;/tt&gt; from a &lt;tt&gt;Spouse&lt;/tt&gt; role and a timed &lt;tt&gt;fuse()&lt;/tt&gt; from a &lt;tt&gt;Bomb&lt;/tt&gt; role.  Unfortunately, each role provides the both methods.  With Moose, this is trivial to resolve:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;package PracticalJoke;&lt;br /&gt;use Moose;&lt;br /&gt;with 'Bomb'&amp;nbsp; =&amp;gt; { excludes =&amp;gt; 'explode' };&lt;br /&gt;&amp;nbsp; &amp;nbsp; 'Spouse' =&amp;gt; { excludes =&amp;gt; 'fuse' };&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;How the heck do I do that with Perl 6?  No matter how many times I read &lt;a href="http://perlcabal.org/syn/S14.html"&gt;Synopsis 14&lt;/a&gt;, I can't figure out how that would work.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;role Bomb {&lt;br /&gt;&amp;nbsp; &amp;nbsp; method fuse ()&amp;nbsp; &amp;nbsp; { say '3 .. 2 .. 1 ..' }&lt;br /&gt;&amp;nbsp; &amp;nbsp; method explode () { say 'Rock falls. Everybody dies!' }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;role Spouse {&lt;br /&gt;&amp;nbsp; &amp;nbsp; method fuse ()&amp;nbsp; &amp;nbsp; { sleep rand(20); say "Now!" }&lt;br /&gt;&amp;nbsp; &amp;nbsp; method explode () { say 'You worthless piece of junk! Why I should ...' }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;class PracticalJoke does Bomb does Spouse {&lt;br /&gt;&amp;nbsp; &amp;nbsp; ???&lt;br /&gt;}&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;What have I missed?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/MYHdNnk95gc" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39241?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Italian Perl Workshop 2009 guests</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/lbUsXBVggcE/article.pl" />
		<id>http://use.perl.org/article.pl?sid=09/07/07/0925230&amp;from=rss</id>
		<updated>2009-07-07T09:15:00+00:00</updated>
		<content type="html">The preparations for this year's Italian Perl workshop are hotting up, and thanks to the sponsors, we have invited some great guest speakers for the international tracks (in English): Tim Bunce, Perl DBI interface author. Tim made not only DBI, but also other important CPAN modules (DBD::Oracle, Devel::NYTProf, responsible for the Perl 5.4.x series), he wrote book published by O'Reilly Media, and he has delivered tutorials and sessions for many years at OSCON and other conferences and workshops. Jonathan Worthington, one of the core developers of the Rakudo Perl 6 compiler and the Parrot Virtual Machine. Thomas Fuchs, a Javascript guru, is the author of the script.aculo.us user interface JavaScript library, a member of the Prototype core team and a Ruby on Rails core alumnus. Amy Hoy, is a user interaction and product design expert and regular speaker at OSCON and other workshop and conferences.&lt;p&gt;&lt;a href="http://use.perl.org/article.pl?sid=09/07/07/0925230&amp;amp;from=rss"&gt;Read more of this story&lt;/a&gt; at use Perl.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/lbUsXBVggcE" height="1" width="1"/&gt;</content>
		<author>
			<name>use.perl</name>
			<uri>http://use.perl.org/</uri>
		</author>
		<source>
			<title type="html">use Perl</title>
			<subtitle type="html">All the Perl that's Practical to Extract and Report</subtitle>
			<link rel="self" href="http://use.perl.org/index.rss" />
			<id>http://use.perl.org/index.rss</id>
			<updated>2009-07-07T18:21:41+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/article.pl?sid=09/07/07/0925230&amp;from=rss</feedburner:origLink></entry>

	<entry xml:lang="en">
		<title type="html">Iron Man ideas backlog</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/YC5Tp_7BkKI/" />
		<id>http://www.dagolden.com/?p=278</id>
		<updated>2009-07-07T08:55:49+00:00</updated>
		<content type="html">&lt;p&gt;There are so many topics I want to write about and so little time to write.  Since I&amp;#8217;m on vacation and supposedly relaxing and enjoying myself, I&amp;#8217;m just going to list out some things that I might write about soon.  If any are particularly appealing, let me know and I&amp;#8217;ll bump it towards the top of the todo stack.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capture::Tiny, the last capturing module you&amp;#8217;ll ever need&lt;/li&gt;
&lt;li&gt;Version numbering lessons and pitfalls&lt;/li&gt;
&lt;li&gt;Re-imagining PAUSE/CPAN&lt;/li&gt;
&lt;li&gt;Perl&amp;#8217;s punctuated equilibrium&lt;/li&gt;
&lt;li&gt;Disagreeing agreeably&lt;/li&gt;
&lt;li&gt;p5p: Wizards, leaders, managers and coaches&lt;/li&gt;
&lt;li&gt;How to regression test CPAN modules&lt;/li&gt;
&lt;li&gt;Changing Perl 5 development: to what end?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I can see the appeal of microblogging &amp;#8212; perhaps I&amp;#8217;ll try to compose a 140 character summary of each one and see which are actually worth expanding on to any length.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/YC5Tp_7BkKI" height="1" width="1"/&gt;</content>
		<author>
			<name>David Golden</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/index.php/feed/</id>
			<updated>2009-07-11T15:21:11+00:00</updated>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/278/iron-man-ideas-backlog/</feedburner:origLink></entry>

	<entry xml:lang="en">
		<title type="html">Open source ‘full text’ bookmarklet and feed filter</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/j3-3rfRdx_o/180126a.html" />
		<id>http://taint.org/?p=3533</id>
		<updated>2009-07-06T17:01:26+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href="http://taint.org/2008/05/12/095947a.html"&gt;Last year, I blogged about&lt;/a&gt; &lt;a href="http://echodittolabs.org/fulltextrss"&gt;Full-Text RSS&lt;/a&gt;, a utility to convert those useless &amp;#8220;partial-text&amp;#8221; RSS/Atom feeds into the real, full-story-inline deal.&lt;/p&gt;

&lt;p&gt;The only downside is that the author felt it necessary to withhold the source, saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Still, I wouldn&amp;#8217;t want to offer a feature that middlemen can resell at the
  expense of bloggers. So while I do want to open this up, I don&amp;#8217;t want to make
  things easy for the unscrupulous.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, recently &lt;a href="http://fivefilters.org/"&gt;Keyvan Minoukadeh from the Five Filters project&lt;/a&gt; got in touch to say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I recently created a similar service (along with a bookmarklet for it). [...] It’s a free software (open source) project so code is also available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here it is:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a href="http://fivefilters.org/content-only/"&gt;fivefilters.org: Create Full-Text Feeds&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve tried it out and it works great, and the &lt;a href="https://code.launchpad.net/~keyvan-k1m/fivefilters/content-only"&gt;source&lt;/a&gt; is indeed downloadable under the AGPL.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://fivefilters.org/"&gt;Five Filters&lt;/a&gt; &amp;#8212; its overarching project &amp;#8212; looks interesting, too:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Edward Herman and Noam Chomsky describe the media as businesses which sell a product (readers) to other businesses (advertisers). In their propaganda model of the media they point to five &amp;#8216;filters&amp;#8217; which determine what we read in the newspapers and see on the television. These filters produce a very narrow view of the world that is in line with government policy and business interests.&lt;/p&gt;
  
  &lt;p&gt;In this project we try to encourage readers to explore the world of non-corporate online news, websites which avoid the five filters of the propaganda model. We also try to make these sources of news more accessible by allowing users to print the stories found on these alternative news sites in the format of a newspaper.&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/j3-3rfRdx_o" height="1" width="1"/&gt;</content>
		<author>
			<name>Justin Mason</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/feed/</id>
			<updated>2009-07-13T20:01:48+00:00</updated>
		</source>
	<feedburner:origLink>http://taint.org/2009/07/06/180126a.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Holy crap, I suck at coding</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/I_SdNwa0jN8/holy-crap-i-suck-at-coding.html" />
		<id>tag:blogger.com,1999:blog-876358347971598886.post-152454415174265057</id>
		<updated>2009-07-06T16:00:18+00:00</updated>
		<content type="html">&lt;p&gt;Every so often I look back at old code and think to myself WTF was I on when I was writing it. Just take a look at &lt;a href="http://search.cpan.org/~nuffin/?R=A"&gt;my Perl module releases in chronological order&lt;/a&gt;&lt;sup&gt;&lt;a id="2EAE7929-3EE5-48F3-AAF0-F5A4C16D8C19" href="http://feeds2.feedburner.com/yuvalkogman#EBA1FE52-C76C-4BEA-B662-2A70EFFCD497"&gt;[1]&lt;/a&gt;&lt;/sup&gt;.

&lt;p&gt;Usually it's small things I find annoying, when just looking at the code it with fresh eyes is enough to unveil small idiocies.  It's easy to judge because I don't need to sugar coat any criticism I have when I'm the one under the lens. This stuff is usually the result of refactoring too quickly, and not rounding off all the corners, especially if the code I was refactoring was new code.&lt;/p&gt;

&lt;p&gt;More embarrassing is when I find flaws in my assumptions or thought process: things that are more complicated than they should be, or inability to separate an idea from the engineering context it emerged from. This is usually the result of rushing through something (often towards the end of a project) and not thinking things through, being ignorant of a better approach, or just plain old lack of insight.&lt;/p&gt;

&lt;p&gt;This process used to make me feel bad, but now it makes me feel good. I used to be concerned with how fast I learned things, eager to understand ideas that would propel me towards finding the ultimate paradigm [singular. ugh!] of the future.&lt;/p&gt;

&lt;p&gt;When your goals are as laughable as that failure makes you feel bad.&lt;/p&gt;

&lt;p&gt;I think now I'm much more relaxed about everything. I'm not looking for a silver bullet at all anymore. I'm looking for fun ideas to "spice up my routine" as they say. If I remain interested I usually produce dramatically better results than if I need to force myself to work.&lt;/p&gt;

&lt;p&gt;Leisure has replaced ambition as the primary purpose of my learning efforts.&lt;/p&gt;

&lt;p&gt;However, without ambition to drive me forward, I occasionally feel like I'm not trying hard enough to better myself. Seeing past failures (especially recent ones) is an great way of reassuring myself that my brain has not in fact crawled under a cupboard and died.&lt;/p&gt;

&lt;p&gt;Recognition of past failure was always evidence that I am still learning, but in the past I thought it meant that I was not yet any good. Now it just means that I'm still having enough fun to stay curious, and I'm also learning what I should be &lt;em&gt;unlearning&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So now that I am old and wise, I know that when I grow up I want to still be having fun, or at least to realize why this blog post is full of shit.&lt;/p&gt;

&lt;p&gt; &lt;a id="EBA1FE52-C76C-4BEA-B662-2A70EFFCD497" href="http://feeds2.feedburner.com/yuvalkogman#2EAE7929-3EE5-48F3-AAF0-F5A4C16D8C19"&gt;[1]&lt;/a&gt; Unfortunately the backpan directory listing doesn't seem to have the dates right, so the linked listing doesn't contain mistakes that have been superseded with new module uploads, only ones big enough to completely give up on, or that have been fixed by other people ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/876358347971598886-152454415174265057?l=blog.woobling.org" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/yuvalkogman/~4/DotWCMHy0JU" height="1" width="1" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/I_SdNwa0jN8" height="1" width="1"/&gt;</content>
		<author>
			<name>nothingmuch</name>
			<email>nothingmuch@woobling.org</email>
			<uri>http://blog.woobling.org/</uri>
		</author>
		<source>
			<title type="html">nothingmuch's perl blog</title>
			<link rel="self" href="http://blog.woobling.org/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-876358347971598886</id>
			<updated>2009-07-10T01:01:39+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/yuvalkogman/~3/DotWCMHy0JU/holy-crap-i-suck-at-coding.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Resigning</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/NNYljGBN3XI/resigning.html" />
		<id>tag:blogger.com,1999:blog-6096704822492180681.post-2243460989952462955</id>
		<updated>2009-07-06T15:33:05+00:00</updated>
		<content type="html">So I'm &lt;a href="http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-07/msg00193.html"&gt;resigning&lt;/a&gt; from my role of Perl 5 pumpking. That doesn't mean that I'm not proud of what I did for Perl 5 in the past, or that I don't stand behind my choices anymore.&lt;br /&gt;&lt;br /&gt;Let's begin by inspecting some of the core ideas that drove the chromatic rants since the last six months, and examine why they are a sure recipe for failure.&lt;br /&gt;&lt;br /&gt;First, the regular snapshots, labeled releases. When you cannot control how much development time you'll have for the next release, nor the list of hot topics that the contributors will volunteer to contribute to, you don't release easily; at the best, you snapshot. Which is fine for alpha-grade software as parrot, as I've already said; but not for production-ready software. Did I point out that Perl was a very complex project with a lot of interdependent parts? Care is essential.&lt;br /&gt;&lt;br /&gt;(As a side-effect, it might quite be easy to predict the release dates of parrot for the next century, but not the date where it will be used in production. If that happens at all, that is.)&lt;br /&gt;&lt;br /&gt;Secondly, a lack of feature plan for the next versions of Perl. Again, this is not something that you can control in a volunteer-based project. I've said many times that I'd like 5.12 to solve some inconsistencies on the handling of UTF-8 strings with regard to case-insensitivity comparisons and case-changing operators. That would be a backwards incompatible change and would break code -- contrary to the gross mischaracterisations that chromatic presents as truth, P5P is certainly not opposed to backwards incompatibility. But to achieve that, you need a regex + UTF-8 guru, or somebody willing to invest countless hours into becoming one. If someone comes with another itch to scratch, sends patches, implements a neat new feature, then that would warrant a shiny 5.12 without the UTF-8 revamp.&lt;br /&gt;&lt;br /&gt;Thirdly, the "untested code is not worth caring about" fallacy. One can try to wave away the DarkPAN into oblivion with a blog post, but if Perl still exists for more important purposes than the amusement of a few computer language geeks, it's because of the DarkPAN. And not all the DarkPAN code is regression-tested, or even testable. Quick glue scripts, crontabbed email reports, network management helpers, post-commit hooks: they cost too much to test, because the environment they run in is orders of magnitude more complex than their internal logic. I've code out there in the DarkPAN that deals with the relative replication delays on two pairs of master and slaves databases. That's not testable. But this code is critical.&lt;br /&gt;&lt;br /&gt;Fourthly, the main argument chromatic has to back up his proposals for Perl 5 is "we should change defaults and add syntactic sugar without thinking about the consequences because that will allow me to rip off three lines of boilerplate code." The hints I gave at the time on P5P that maybe adding syntax would be a better idea if there was some semantics behind it were then aggressively relabelled as reactionary. (As a coincidence, modernperlbooks.com started its anti-P5P propaganda shortly afterwards.)&lt;br /&gt;&lt;br /&gt;At the contrary, every language extension that went into 5.10 was there because it solved an actual problem, in a more efficient way than the CPAN could provide, and sufficiently thought out (I hope) to avoid being sorry having to maintain it in a couple of versions from now. (But now I'm not so sure about &lt;tt&gt;UNIVERSAL::DOES()&lt;/tt&gt; anymore.)&lt;br /&gt;&lt;br /&gt;Fifthly, the way chromatic has arbitrary chosen one particular regression from 5.8 to 5.10 and presented it as if it was as serious as a remote root zero-day vulnerability, willingly ignoring every other regression (or improvement) in the hope of making a point. Note, that regression wasn't even a bug in the language, something that could have made Perl programs misbehave or segfault. It was a &lt;i&gt;performance&lt;/i&gt; regression. In a world where most programs are I/O bound anyway. And there were many other more interesting regressions to choose from, I won't hide that. So why this one? Certainly because of its marketing value. It was certainly sexier than a more severe regression on an obscure feature he would have needed to explain to his readers.&lt;br /&gt;&lt;br /&gt;At the end, I've had enough of those gratuitous attacks. I've always accepted and even encouraged criticism about my decisions as a pumpking, but only as long as there were based on technical arguments, not on marketing slogans repeated hysterically by someone who remains deaf to any form of discussion. So I'm stepping down from my role of pumpking. I'm burnt out. I don't want to have to justify myself again and again in front of all this.&lt;br /&gt;&lt;br /&gt;Moreover, if my resignation can help Perl 5, it will be for the greater good. There are many committers and knoledgeable contributors, and they'll probably start reviewing the patches to apply a bit more: avoiding bottlenecks is good. The release process will be documented and distributed (and thanks to Dave Mitchell for having worked a lot on this) and the whole bus factor of Perl 5 will go up. Don't worry, I'll still be around to ensure that the future of Perl 5 is not handed to the marketroids, and to produce the occasional patch. But I'm withdrawing from the front line. Which will have, I'm sure, positive effects in the end.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6096704822492180681-2243460989952462955?l=consttype.blogspot.com" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/NNYljGBN3XI" 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://consttype.blogspot.com/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-6096704822492180681</id>
			<updated>2009-07-10T17:41:05+00:00</updated>
		</source>
	<feedburner:origLink>http://consttype.blogspot.com/2009/07/resigning.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Reputations</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/l9KWpHqvuyE/39237" />
		<id>http://use.perl.org/~Ovid/journal/39237?from=rss</id>
		<updated>2009-07-06T14:29:50+00:00</updated>
		<content type="html">&lt;p&gt;As many of you know, Rafael has stepped down as the P5P pumpking.  He's done a great job and I'm sad to see him go, but he couldn't take the mud-flinging any more.  I can't say I blame him.&lt;/p&gt;&lt;p&gt;Regarding mud-flinging -- and not just in regards to this particular debacle -- I won't name names (many will guess and many guesses will be wrong), but I have some observations about reputation:&lt;/p&gt;&lt;ul&gt;
  &lt;li&gt;I've been quietly told by several that they're disgusted with one particular individual who should know better than to be rude.&lt;/li&gt;&lt;li&gt;I know of at least one individual who has, unbeknownst to him, not been offered a rather nice consulting gig because of his online behavior.&lt;/li&gt;&lt;li&gt;There is one person I once objected to hiring because of comments he made on a mailing list (the owner saw those comments and rejected the applicant).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I suppose if people aren't concerned about work, they may not be concerned with how they come across online.  On the other hand, wouldn't it at least be good to be known as someone who can find ways of getting things done &lt;em&gt;nicely&lt;/em&gt;?  I struggle with this myself at times and I hate seeing it in others.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/l9KWpHqvuyE" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39237?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">Perlbuzz is no longer useful</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/NGmzijA-Hdg/perlbuzz-is-no-longer-useful.html" />
		<id>tag:blogger.com,1999:blog-6096704822492180681.post-274820055123868302</id>
		<updated>2009-07-06T08:49:44+00:00</updated>
		<content type="html">I've been since a long time disappointed at perlbuzz, but here's another &lt;a href="http://perlbuzz.com/2009/07/perlbuzz-news-roundup-2009-07-05.html"&gt;blatant proof of their lack of professionalism&lt;/a&gt;. This supposed "news roundup" post points to several articles by chromatic and his fanboys, and supplement them by pure FUD, like the retransmission of a twitter message saying "Is getting code into the !perl core a fight against inertia and petty hostility?", linking to an anonymous comment on a random web forum. If this is not calumny, I don't know what it is. It's just unfair to see perlbuzz relaying it without checking.&lt;br /&gt;&lt;br /&gt;However, I note that none of the rebuttals written by me or &lt;a href="http://use.perl.org/~Alias/journal/39234"&gt;by&lt;/a&gt; &lt;a href="http://use.perl.org/~jarich/journal/39229"&gt;others&lt;/a&gt; &lt;a href="http://use.perl.org/~Aristotle/journal/39232"&gt;elsewhere&lt;/a&gt; have deserved a mention.&lt;br /&gt;&lt;br /&gt;Someone is actively trying to damage the community image of P5P out there, and perlbuzz is helping him. Willingly?&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6096704822492180681-274820055123868302?l=consttype.blogspot.com" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/NGmzijA-Hdg" 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://consttype.blogspot.com/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-6096704822492180681</id>
			<updated>2009-07-10T17:41:05+00:00</updated>
		</source>
	<feedburner:origLink>http://consttype.blogspot.com/2009/07/perlbuzz-is-no-longer-useful.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">CPANDB should now be synchronised and up to date</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/rTDJMDVPC4Y/39235" />
		<id>http://use.perl.org/~Alias/journal/39235?from=rss</id>
		<updated>2009-07-06T06:32:16+00:00</updated>
		<content type="html">&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;The CPANDB now also contains the data for CPAN Ratings&lt;/i&gt;&lt;/p&gt;&lt;p&gt;In my previous announcements for &lt;a href="http://search.cpan.org/perldoc?CPANDB"&gt;CPANDB&lt;/a&gt;, I mentioned that while it was generating the database the correct way, the data was going to be a bit out of sync because data was coming from different places.&lt;/p&gt;&lt;p&gt;This should now be resolved.&lt;/p&gt;&lt;p&gt;The server syncs a minicpan to &lt;a href="http://cpan.cpantesters.org/"&gt;http://cpan.cpantesters.org/&lt;/a&gt;, then a META.yml database is updated from the minicpan, a &lt;a href="http://search.cpan.org/perldoc?CPAN::SQLite"&gt;CPAN::SQLite&lt;/a&gt; index is built from the same minicpan, and then both of them are joined together with the &lt;a href="http://search.cpan.org/perldoc?ORDB::CPANUploads"&gt;ORDB::CPANUploads&lt;/a&gt; database to product the completed tables.&lt;/p&gt;&lt;p&gt;The final step is the application of the graph algorithms to produce the weight and volatility scores for each distribution, which are now being added to the database as well.&lt;/p&gt;&lt;p&gt;Now that cpandb is ready for the big time, I'll start to try and merge in the three main outstanding data sets (CPAN Ratings, rt.cpan.org and CPAN Testers) and then rewrite the CPAN Top 100 to turn it into a fully operational death star... I mean website.&lt;/p&gt;&lt;p&gt;You can use the &lt;a href="http://search.cpan.org/perldoc?CPANDB"&gt;CPANDB&lt;/a&gt; module to fetch and ORM-inflate the database, or to download the database directly, use the following URL.&lt;/p&gt;&lt;p&gt;&lt;a href="http://svn.ali.as/db/cpandb.gz"&gt;http://svn.ali.as/db/cpandb.gz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The current schema for the database now has the slightly expanded distribution table.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;CREATE TABLE distribution (&lt;br /&gt;&amp;nbsp; &amp;nbsp; distribution TEXT NOT NULL PRIMARY KEY,&lt;br /&gt;&amp;nbsp; &amp;nbsp; version TEXT NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; author TEXT NOT NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; release TEXT NOT NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; uploaded TEXT NOT NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; weight INTEGER NOT NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; volatility INTEGER NOT NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; FOREIGN KEY ( author ) REFERENCES author ( author )&lt;br /&gt;)&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/rTDJMDVPC4Y" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39235?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">Perlbuzz news roundup 2009-07-05</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/1rggDp2TJoI/perlbuzz-news-roundup-2009-07-05.html" />
		<id>tag:perlbuzz.com,2009://1.693</id>
		<updated>2009-07-06T02:01:43+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;OSCON for Postgres geeks (&lt;a href="http://it.toolbox.com/blogs/database-soup/oscon-for-postgres-geeks-32495"&gt;it.toolbox.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SpamAssassin looking to drop Perl 5.6 support (&lt;a href="http://taint.org/2009/06/25/095002a.html"&gt;taint.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;chromatic on the value of the pumpking (&lt;a href="http://www.modernperlbooks.com/mt/2009/06/the-value-of-a-pumpking.html"&gt;modernperlbooks.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Search your Perl documentation with perldoc-search and/or Perldoc::Search (&lt;a href="http://use.perl.org/~jjore/journal/39181"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;RT @chromatic_x Is getting code into the !perl core a fight against inertia and petty hostility? (&lt;a href="http://ur1.ca/6ezz"&gt;ur1.ca&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Saving state with prove (&lt;a href="http://blog.woobling.org/2009/06/appprovestate-rocks.html"&gt;blog.woobling.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;RT @chromatic_x Why we're still working on Perl 6 after all these years (&lt;a href="http://bit.ly/3HbxEb"&gt;bit.ly&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Chris Prather's YAPC::NA slides available (&lt;a href="http://chris.prather.org/yapcna-2009-slides-posted/"&gt;chris.prather.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;RT @chromatic_x Why perl5i matters: (&lt;a href="http://bit.ly/WRPn4"&gt;bit.ly&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Gabor Szabo on what he'd like to see in Smolder (&lt;a href="http://szabgab.com/blog/2009/07/1246433080.html"&gt;szabgab.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Warming up to modular testing" slides from YAPC::NA available (&lt;a href="http://use.perl.org/~bradoaks/journal/39205"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Perl does not belong to DarkPAN. It belongs to us who participate in its wellbeing." (&lt;a href="http://perl-yarg.blogspot.com/2009/06/darkpan-schmarkpan-stop-meme.html"&gt;perl-yarg.blogspot.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fitting Wikipedia on an iPhone (&lt;a href="http://radar.oreilly.com/2009/07/oscon-preview---how-patrick-co.html"&gt;radar.oreilly.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;What is Catalyst, really? (&lt;a href="http://blog.urth.org/2009/07/what-is-catalyst-really.html"&gt;blog.urth.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Hard numbers on test-driven development (&lt;a href="http://use.perl.org/~Mark+Leighton+Fisher/journal/39210"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PHP does not make programming simpler. It just pretends that programming is simpler than it is. (&lt;a href="http://use.perl.org/~scrottie/journal/39214"&gt;use.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A WebGUI editing plugin for Padre (&lt;a href="http://blog.patspam.com/2009/padrepluginwebgui"&gt;blog.patspam.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Recap of the Portland.PM code sprint get-together (&lt;a href="http://www.baconandtech.com/2009/07/02/pdxpm-code-sprint-1/"&gt;baconandtech.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;More notes from the Portland PM code sprint (&lt;a href="http://justatheory.com/computers/programming/perl/build-5.10-from-git.html"&gt;justatheory.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Perl Corehackers wiki now online (&lt;a href="http://corehackers.perl.org/wiki/"&gt;corehackers.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Josh Ben Jore's first Perl 6 program (&lt;a href="http://use.perl.org/~jjore/journal/39233"&gt;use.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=bLkbFTyI85A:9UbUbZBTNm8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=bLkbFTyI85A:9UbUbZBTNm8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=bLkbFTyI85A:9UbUbZBTNm8:F7zBnMyn0Lo" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=bLkbFTyI85A:9UbUbZBTNm8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=bLkbFTyI85A:9UbUbZBTNm8:V_sGLiPBpWU" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=bLkbFTyI85A:9UbUbZBTNm8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/bLkbFTyI85A" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/1rggDp2TJoI" 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>
			<updated>2009-07-13T05:01:07+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/PerlBuzz/~3/bLkbFTyI85A/perlbuzz-news-roundup-2009-07-05.html</feedburner:origLink></entry>

	<entry xml:lang="en">
		<title type="html">Links for 2009-07-05</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Aakfos9bRXk/220503a.html" />
		<id />
		<updated>2009-07-05T22:05:03+00:00</updated>
		<content type="html">&lt;ul&gt;&lt;li&gt;&lt;p&gt;
&lt;a class="deliciouslink" href="http://news.cnet.com/8301-1009_3-10276548-83.html" title="Inside Postini's anti-spam systems" target="_blank"&gt;Inside Postini&amp;#8217;s anti-spam systems&lt;/a&gt;
: lots of detail&lt;br /&gt;
(tags: &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/google"&gt;google&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/postini"&gt;postini&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://wonderfullyflawed.com/2009/07/02/get-your-api-right/" title="Get Your API Right" target="_blank"&gt;Get Your API Right&lt;/a&gt;
: 8 key gotchas when implementing RESTful web APIs.  great advice&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/web"&gt;web&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/patterns"&gt;patterns&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/architecture"&gt;architecture&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/webdev"&gt;webdev&lt;/a&gt; &lt;a class="delicioustag" href="http://del.icio.us/jm/web-services"&gt;web-services&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Aakfos9bRXk" height="1" width="1"/&gt;</content>
		<author>
			<name>Justin Mason</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/feed/</id>
			<updated>2009-07-13T20:01:48+00:00</updated>
		</source>
	<feedburner:origLink>http://taint.org/2009/07/05/220503a.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Let me be clear, again, about the nature of the DarkPAN.</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/k4NYeXv0mcs/39234" />
		<id>http://use.perl.org/~Alias/journal/39234?from=rss</id>
		<updated>2009-07-05T18:07:10+00:00</updated>
		<content type="html">&lt;p&gt;The growth in the argument that the DarkPAN is somehow some form of boogieman, some wispy vaporous nothing that is unobservable and thus something able to be ignored astonishes me. And I'm not singling out one person here, I'm hearing it from a number of different people.&lt;/p&gt;&lt;p&gt;It's especially unnerving because a big chunk of it is sitting in plain view.&lt;/p&gt;&lt;p&gt;So let me repeat this again.&lt;/p&gt;&lt;p&gt;Until perhaps very recently, the DarkPAN was generally considered to be more or less all the Perl code that wasn't on the CPAN. Because if it wasn't on the CPAN, it was largly impossible to find. And even if you could find it, you couldn't do anything with it.&lt;/p&gt;&lt;p&gt;With the advent of PPI and Ohloh, the situation has now changed.&lt;/p&gt;&lt;p&gt;Now we know, for example, that just the small part of the DarkPAN that is visible is at least 4 times bigger than the CPAN. Because 4 times more code than CPAN is basically what Ohloh managed to uncover. Last time I looked, it was reporting about 97,000,000 lines of code, and we know that the CPAN is in the general range of 20-25,000,000 lines of code.&lt;/p&gt;&lt;p&gt;I've called this semi-visible part of the DarkPAN the GreyPAN, but that's just a way of categorising it. It's still a part of the DarkPAN. It's still code we can't feed into CPAN Testers or other automated systems to examine how a Perl change will impact it.&lt;/p&gt;&lt;p&gt;We also know that it's mostly not large codebases. Anecdotal reports from the Ohloh people themselves suggest it's made up of lots of different bits and pieces. So in fact, it serves as quite a useful analog for the consistency of the DarkPAN itself.&lt;/p&gt;&lt;p&gt;It's something we can suck in, process, and then run what-if scenarios for. At least at a document-level anyway.&lt;/p&gt;&lt;p&gt;Frankly, I'm sick and tired of this back and forth crap.&lt;/p&gt;&lt;p&gt;I'd like to see both sides of this argument shut up (me included) until we've actually built the thing that can suck in the visible parts of the DarkPAN and process it.&lt;/p&gt;&lt;p&gt;If you'd like to help, I've got most of the "Process it" part working now, but I'd dearly love some help on the "sucking it in" part.&lt;/p&gt;&lt;p&gt;If, after we've finished, we're able to establish that (for example) across all C code there is on average 1 line of utility Perl code for every 100 lines of C code then we've got something to work with.&lt;/p&gt;&lt;p&gt;Because we can take estimations about the total amount of C code in the world and extrapolate from that to make a guess at the total amount of Perl code in the world.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/k4NYeXv0mcs" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39234?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">Bootstrapping KiokuDB::Cmd</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/ryO8zdLRrsA/bootstrapping-kiokudbcmd.html" />
		<id>tag:blogger.com,1999:blog-876358347971598886.post-3274969927518921734</id>
		<updated>2009-07-05T18:12:54+00:00</updated>
		<content type="html">&lt;p&gt;I just closed a &lt;a href="https://rt.cpan.org/Ticket/Display.html?id=47582"&gt;ticket&lt;/a&gt; in &lt;a href="http://www.iinteractive.com/kiokudb/"&gt;KiokuDB&lt;/a&gt;'s RT queue that asked for simpler dependencies. The fix was splitting the &lt;tt&gt;KiokuDB::Cmd&lt;/tt&gt; modules into their own distribution, making the core more easily installable on Windows.&lt;/p&gt;

&lt;p&gt;The problem is that I depended on &lt;a href="http://search.cpan.org/perldoc?Proc::InvokeEditor"&gt;&lt;tt&gt;Proc::InvokeEditor&lt;/tt&gt;&lt;/a&gt; for the &lt;tt&gt;kioku edit&lt;/tt&gt; command. Unfortunately that module does not install cleanly on Windows, preventing KiokuDB itself from installing, even though it's not required for normal use.&lt;/p&gt;

&lt;p&gt;The problem is that KiokuDB's command line tool requires &lt;tt&gt;KiokuDB::Cmd&lt;/tt&gt; to run. What I ended up doing is having the &lt;a href="http://github.com/nothingmuch/kiokudb/blob/KiokuDB-0.30/bin/kioku"&gt;&lt;tt&gt;kioku&lt;/tt&gt;&lt;/a&gt; script (which still ships with KiokuDB) allow bootstraping &lt;tt&gt;KiokuDB::Cmd&lt;/tt&gt; by using &lt;a href="http://search.cpan.org/perldoc?Module::AutoInstall"&gt;&lt;tt&gt;Module::AutoInstall&lt;/tt&gt;&lt;/a&gt; (if it's available and the user grants permission to do so).&lt;/p&gt;

&lt;p&gt;If &lt;tt&gt;kioku&lt;/tt&gt; can't &lt;tt&gt;require KiokuDB::Cmd&lt;/tt&gt; cleanly, then it calls &lt;tt&gt;try_auto_install&lt;/tt&gt; function:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-140983"&gt;sub try_auto_install {
    if (eval {
        require Module::AutoInstall;
        require ExtUtils::MakeMaker;
        1;
    }) {
        print "\n";
        if (
            ExtUtils::MakeMaker::prompt(
                "Module::AutoInstall is available. " .
                "Should I use it to install KiokuDB::Cmd?",
                "N/y",
            ) =~ /^y/i
        ) {
            my @installed = Module::AutoInstall-&amp;gt;install(
                [],
                "KiokuDB::Cmd" =&amp;gt; $KiokuDB::REQUIRED_CMD_VERSION,
            );
            return @installed &amp;gt; 0;
        }
    }

    return;
}&lt;/pre&gt;

&lt;p&gt;If installation seems to have succeeded then we delete &lt;tt&gt;$INC{"KiokuDB/Cmd.pm"}&lt;/tt&gt; and try to load it again.&lt;/p&gt;

&lt;p&gt;Otherwise the script exits with an error asking the user to install &lt;tt&gt;KiokuDB::Cmd&lt;/tt&gt; manually.&lt;/p&gt;

&lt;p&gt;I think this is a fair tradeoff, especially if you don't need the command line tools in production deployments (you can still make backups by programmatically scanning the database yourself).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/876358347971598886-3274969927518921734?l=blog.woobling.org" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/yuvalkogman/~4/fd8hJJhwkpg" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/ryO8zdLRrsA" height="1" width="1"/&gt;</content>
		<author>
			<name>nothingmuch</name>
			<email>nothingmuch@woobling.org</email>
			<uri>http://blog.woobling.org/</uri>
		</author>
		<source>
			<title type="html">nothingmuch's perl blog</title>
			<link rel="self" href="http://blog.woobling.org/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-876358347971598886</id>
			<updated>2009-07-10T01:01:39+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/yuvalkogman/~3/fd8hJJhwkpg/bootstrapping-kiokudbcmd.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Time-based releases in open source</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/DnsHBFjfm1I/time-based-releases-in-open-source.html" />
		<id>tag:blogger.com,1999:blog-6096704822492180681.post-7960085651314915715</id>
		<updated>2009-07-05T11:01:25+00:00</updated>
		<content type="html">Whenever I hear someone saying &lt;i&gt;we should have regular releases&lt;/i&gt;, I hear &lt;i&gt;we should release when Venus enters Pisces&lt;/i&gt;. Because, when you have so many uncontrolled parameters to deal with, sticking to a predefined calendar boils down to superstition.&lt;br /&gt;&lt;br /&gt;Time-based releases actually make sense in one case : when you're selling your software. That way, you can ensure a regular stream of revenue via upgrades. Moreover, if you're a commercial entity, you probably are already paying full-time a couple of developers, so you can predict how much time you'll spend on the next version during the next few months.&lt;br /&gt;&lt;br /&gt;All those premises are not true for volunteer-based open source projects, such as Perl.&lt;br /&gt;&lt;br /&gt;Actually, time-based releases still make sense if the project is in an alpha stage and is being prototyped. In this case, however, it's more accurate to speak about snapshots than releases, because such a "release" is only a way to publicize the newest changelog. That's the case for parrot, for example: it doesn't aim for backwards compatibility, or even stability, and has no user base. That would be also the case for the development branch of Perl 5 (currently 5.11), although nobody got around to do it since the migration to git -- I agree that would be a nice improvement.&lt;br /&gt;&lt;br /&gt;In the specific case of Perl 5, even if you wanted to try to have regular releases, more factors would complicate the task. You can't release bleadperl at any point and call it stable, even when all dual-life modules are perfectly in sync with the CPAN and when all tests pass on all platforms and all configurations. That's because you also need, for a new major release, to have a consistent set of features. For example, it would not have made sense to release 5.10.0 with the lexical $_ variable, but without the (_) prototype.&lt;br /&gt;&lt;br /&gt;With the upcoming release of 5.10.1 by Dave Mitchell, we're trying to improve the release process to be less of a pain for the pumpkings. Changes to dual-life modules will no longer be accepted in the core unless they are put on CPAN first. Module::Corelist will refer to tags in the git repository instead of perforce change numbers. The perldelta will hopefully be written a bit more incrementally.&lt;br /&gt;&lt;br /&gt;I plan to copy 5.10.1's perldelta in bleadperl when it's done, then to supplement it by blead-only changes. Afterwards I'll have more elements to judge whether we're ready for a 5.12.0 or not -- and that decision will be motivated by the contents of the release, not by the time of the year.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6096704822492180681-7960085651314915715?l=consttype.blogspot.com" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/DnsHBFjfm1I" 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://consttype.blogspot.com/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-6096704822492180681</id>
			<updated>2009-07-10T17:41:05+00:00</updated>
		</source>
	<feedburner:origLink>http://consttype.blogspot.com/2009/07/time-based-releases-in-open-source.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Why "Shut Up and Write Code!" is Unhelpful and Wrong</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/gLaD5VHUUQk/39228" />
		<id>http://use.perl.org/~chromatic/journal/39228?from=rss</id>
		<updated>2009-07-04T21:42:39+00:00</updated>
		<content type="html">&lt;p&gt;The Perl community needs to discuss the DarkPAN and the present and future of the language and its ecosystem in much more productive ways than accusations, hyperbole, and strawmen.  This includes the people who want to destroy the DarkPAN as well as the people who believe that its stability must be preserved.&lt;/p&gt;&lt;p&gt;I write provocatively and deliberately.  I'm writing a manifesto, after all.  Yet I believe I never devolve to name-calling, strawmen arguments, nor misquoting people.  (If I do, please tell me and I'll correct it.)&lt;/p&gt;&lt;p&gt;My motives are simple: I want regular releases of Perl 5.  I want the &lt;em&gt;default&lt;/em&gt; behavior of Perl 5.12 to encourage modern Perl programming practices.  I want missing features added to the language, even in small steps at first if necessary.  &lt;em&gt;I want Perl 5 to be a better language for creating interesting new programs than for maintaining clunky old programs.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;Here are some selected quotes from &lt;a href="http://consttype.blogspot.com/"&gt;Rafa&amp;#235;l Garcia-Suarez&lt;/a&gt;'s &lt;a href="http://consttype.blogspot.com/2009/07/darkpan-matters.html"&gt;The DarkPAN matters&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;DarkPAN is just a slang word to express the fact that Perl 5 is now currently used all over the world in production and sometimes critical systems... asking this question, even rhetorically, makes you sound as if you didn't knew that Perl is actually used in production.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;When I use the word "DarkPAN", I mean precisely this: code which p5p cannot see, cannot search, does not know the features of, and which may or may not exist.  See also "We can't change this misfeature in the core, because it may break the DarkPAN!" -- funny how that sentence always ends there, rather than including "But of course, we may not, and we'll never know, because it's the DarkPAN."&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;I tend to think that the regular contributors of perl5-porters are a lot more likely to have informed opinions about the Perl 5 core development than people who don't even read it.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;Pick on me instead then.  If you don't like my opinions, feel free to revert all of my patches over the past eight years.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;[Who's] trying to be realistic by attempting to release software with some quality expectations, notably by making the upgrade process seamless and introducing as little bugs as possible?&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;Yet those quality expectations &lt;em&gt;did not work&lt;/em&gt; in the case of Perl 5.10, with well-known defects continuing to spread as more and more people upgrade to Perl 5.10.  The existing process does not work.  Call it "realistic" if you like, but it did not work for 5.10.  (Note also that &lt;a href="http://rt.perl.org/rt3//Public/Bug/Display.html?id=22977"&gt;one of the blockers to 5.10.1 is RT #22977&lt;/a&gt; -- see also &lt;a href="http://rt.perl.org/rt3//Public/Bug/Display.html?id=50528"&gt;RT #50528&lt;/a&gt; -- a bug almost six years old that's been present in eleven stable releases of Perl 5.)&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;First, we should not consider breaking it. Breakage happens, but our goal is to avoid it. Secondly, breakage is detected after upgrades, usually (or it would have been avoided).&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;The original point referred to deliberate, backwards-incompatible changes.  Note, however, that a regular release policy could revert accidental breakages on a known, fixed schedule.  The current Perl 5 release policy does not address this at all, which is part of my objection.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;We just don't like to introduce incompatible changes just for the sake of being incompatible.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;The only people suggesting making incompatible changes for the sake of incompatibility are people setting up a strawman argument against people like me who write tests, write testing modules, write documentation, write manuals, explore bugs, give talks, teach new users how to write Perl effectively, and occasionally write patches for new features who say "You know, some of the existing features are wrong, and they'd be better off this way."&lt;/p&gt;&lt;p&gt;In other words, this is an attempt to diffuse the real issue.  The question is not and has never been "Should existing code randomly stop working?"  Instead the question is "Can the defaults change in such a way that existing code will still work with perhaps a one-time, one-line change?"  (It may not even require that much change.)&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;[Code] changes don't happen because someone yells about it on a blog. They happen because someone actually writes code.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;I &lt;em&gt;wrote&lt;/em&gt; code.  Rejected.  ("What's the point of a &lt;code&gt;class&lt;/code&gt; keywords?  You can always use &lt;code&gt;package&lt;/code&gt; and &lt;code&gt;@ISA&lt;/code&gt; anyway!  If you need something more, just use any of several dozen &lt;code&gt;Class::*&lt;/code&gt; modules on the CPAN!")  Jonathan Leto put together a potential Perl 5.10.1 release that needed only a pull from the appropriate perldelta and a pumpking to release it.  Rejected.  ("Perl 5.10.1 is just around the corner, really, this time we mean it!  Small releases are silly and expensive because of &lt;code&gt;stat&lt;/code&gt; calls!  A regular release cycle is like believing in astrology!")&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;But we're not in the land of toy projects here. We can't bless any change (or revert it two releases afterwards) just because it looks shiny at the time. This is not the&lt;/em&gt; parrot &lt;em&gt;you're looking for. People do use Perl 5 for serious things, and we must ensure that a certain level of quality is preserved.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;I can predict the day and date of Parrot releases into the next &lt;em&gt;century&lt;/em&gt;.  The number of contributors to Parrot grows over time, as does the frequency of commits.  Parrot right now supports features that the Perl 5 VM will never support, and that feature list will only increase over time.&lt;/p&gt;&lt;p&gt;Dismiss all of that because Parrot is neither as widely-used nor as old as Perl 5 if you like, or even because you think I'm a jerk and you hate everything I care about, but there's one overriding metric for software project management: can people &lt;em&gt;use&lt;/em&gt; the software?  (The corollary is that unreleased software effectively does not exist.)&lt;/p&gt;&lt;p&gt;Quibble about the length of our deprecation policy.  Complain that we haven't implemented your pet feature in a way that you like.  Beg us to move a milestone forward.  Berate us for not fixing a bug you don't report.  That's fine.&lt;/p&gt;&lt;p&gt;Yet I believe almost every Parrot committer will agree that our defined support and deprecation policies and our regular release cycle have rescued the project from the very real threats of irrelevance, quality problems, and uselessness.&lt;/p&gt;&lt;p&gt;"Shut up and write some code!" is just a polite (relatively) way of saying "Do it our way or not at all, and above all, do not question the process or its results -- unless you're a core hacker."&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/gLaD5VHUUQk" height="1" width="1"/&gt;</content>
		<author>
			<name>chromatic</name>
			<uri>http://use.perl.org/~chromatic/journal/</uri>
		</author>
		<source>
			<title type="html">chromatic's Journal</title>
			<subtitle type="html">chromatic's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~chromatic/journal/rss" />
			<id>http://use.perl.org/~chromatic/journal/rss</id>
			<updated>2009-07-04T22:00:06+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~chromatic/journal/39228?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">The DarkPAN matters</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/miffLU80n4A/darkpan-matters.html" />
		<id>tag:blogger.com,1999:blog-6096704822492180681.post-2687655967565283796</id>
		<updated>2009-07-04T12:00:00+00:00</updated>
		<content type="html">There is currently some FUD going about in some parts of the Perl community about why we should break Perl 5 backwards compatibility. A short blog entry, &lt;a href="http://perl-yarg.blogspot.com/2009/06/darkpan-schmarkpan-stop-meme.html"&gt;schmarkpan&lt;/a&gt;, is a good example of the trend: loud, noisy, but clueless and devoid of any content.&lt;br /&gt;&lt;br /&gt;The author writes, &lt;i&gt;DarkPAN was discussed quite a bit at YAPC::NA. But really, what is it? How is it defined?&lt;/i&gt; Well, DarkPAN is just a slang word to express the fact that Perl 5 is now currently used all over the world in production and sometimes critical systems: websites with high availibility, financial systems, operating system build processes, and so on. That would also include the so-called GreyPAN, all Perl OSS applications that are not on CPAN. So, asking this question, even rhetorically, makes you sound as if you didn't knew that Perl is actually used in production.&lt;br /&gt;&lt;br /&gt;He continues, &lt;i&gt;Who are these people that have a vested interested in Perl and yet do not participate?&lt;/i&gt; For a start, I would like to point out that Mr Perez himself is someone with apparently some interest in Perl, but who does not participate in Perl 5 at the slightest. I might be biased, but I tend to think that the regular contributors of perl5-porters are a lot more likely to have informed opinions about the Perl 5 core development than people who don't even read it.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I think attempting to appease a faceless entity with no defined boundaries has fail written all over it. It is fear mongering.&lt;/i&gt; Who's the fear monger here? And who's trying to be realistic by attempting to release software with some quality expectations, notably by making the upgrade process seamless and introducing as little bugs as possible? It's a well-known political technique to accuse the opposite party of being guilty of one's own defects. But it doesn't make you right.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If we break it, they can choose not to upgrade.&lt;/i&gt; Several fallacies in one single sentence. First, we should &lt;i&gt;not&lt;/i&gt; consider breaking it. Breakage happens, but our goal is to avoid it. Secondly, breakage is detected after upgrades, usually (or it would have been avoided). Third, this not only applies to Perl 5, but also to every open source project widely used (in the Perl world, DBI or LWP come to mind -- upgrading them is not a trivial operation either.) This is a matter of common sense.&lt;br /&gt;&lt;br /&gt;Then, suddenly and without warning, the discussion shifts from breaking backwards compatibility to simply breaking Perl: &lt;i&gt;What about bug fixes?, I hear you say. That is the joy of open source. There are lots of unemployed hackers out there that would be willing to backport those fixes for you. Oh heavens forbid! Actually paying open source hackers to write code! The sky is falling!&lt;/i&gt; Wishful thinking at its finest. Mr Perez might have found a tuit tree in the middle of a magic garden, but I have never seen "lots of unemployed hackers" who are at the same time fluent in the Perl internals, and lots of generous donators that fight over the privilege of paying them to work on Perl. Actually, there is one, currently: Dave Mitchell, who is paid to get 5.10.1 released. Yes, paid: the sky is falling.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Perl does not belong to DarkPAN. It belongs to us who participate in its wellbeing.&lt;/i&gt; In other words, "fuck the users". But we're not in the land of toy projects here. We can't bless any change (or revert it two releases afterwards) just because it looks shiny at the time. This is not the parrot you're looking for. People do use Perl 5 for serious things, and we must ensure that a certain level of quality is preserved.&lt;br /&gt;&lt;br /&gt;But have you, Mr Perez, even skimmed through a perldelta manpage, to look at the list of incompatible changes? Because there's actually a lot of them, in spite of what you seem to believe. I had code that broke because &lt;tt&gt;strict&lt;/tt&gt; is stricter in 5.10 (as mentioned in the manual that you didn't bother to read.) &lt;a href="http://consttype.blogspot.com/2007/07/replacement.html"&gt;ghc broke&lt;/a&gt; because we removed the magical variable &lt;tt&gt;$*&lt;/tt&gt;. It's not like we fear incompatible change. We just don't like to introduce incompatible changes just for the sake of being incompatible.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I say we make the decisions best for our language of choice.&lt;/i&gt; But code changes don't happen because someone yells about it on a blog. They happen because someone actually writes code. If you really want to see something changed in Perl 5, write a patch and come discussing it on P5P. Although you might not have an idea about what you might want to see changed in Perl 5, since your empty, uninformed and slightly inconsistent rant fails to identify any precise problem.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6096704822492180681-2687655967565283796?l=consttype.blogspot.com" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/miffLU80n4A" 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://consttype.blogspot.com/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-6096704822492180681</id>
			<updated>2009-07-10T17:41:05+00:00</updated>
		</source>
	<feedburner:origLink>http://consttype.blogspot.com/2009/07/darkpan-matters.html</feedburner:origLink></entry>

	<entry>
		<title type="html">Degradable Gists (update)</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/44ShbpBtFy8/degradable-gists-update.html" />
		<id>tag:blogger.com,1999:blog-876358347971598886.post-1685520250994980699</id>
		<updated>2009-07-04T07:03:55+00:00</updated>
		<content type="html">&lt;p&gt;The &lt;a href="http://defunkt.github.com/"&gt;good people&lt;/a&gt; at &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt; have implemented a &lt;a href="http://en.wikipedia.org/wiki/JSON#JSONP"&gt;JSONP&lt;/a&gt; api for &lt;a href="http://gist.github.com/"&gt;Gists&lt;/a&gt;, so I have updated my &lt;a href="http://github.com/nothingmuch/jquery-gist-upgrade"&gt;graceful degarding script&lt;/a&gt; accordingly (see &lt;a href="http://blog.woobling.org/2009/05/graceful-degrading-of-gists.html"&gt;previous post&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Now the code no longer needs to hijack &lt;tt&gt;document.write&lt;/tt&gt; and has better load time characteristics as well. If you use traditional &lt;tt&gt;&amp;lt;script&amp;gt;&lt;/tt&gt; tags then each gist will block the loading of the page at that point, causing jittery page renderings, and preventing the rest of the content from appearing. This script styles the &lt;tt&gt;&amp;lt;pre&amp;gt;&lt;/tt&gt; tags when the DOM becomes ready, and only fetches the syntax highlighted HTML after the &lt;tt&gt;onload&lt;/tt&gt; event, when all other page elements have finished loading.&lt;/p&gt;

&lt;p&gt;The second new bit is the Perl scripts I've added to streamline working with these degradable Gists.&lt;/p&gt;

&lt;p&gt;The first script is very simple, given a Gist ID it prints out a &lt;tt&gt;&amp;lt;pre&amp;gt;&lt;/tt&gt; tag suitable for inclusion into your HTML document. For instance &lt;tt&gt;make_pre_tag.pl 115368&lt;/tt&gt; outputs:&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139200"&gt;&amp;lt;pre id="fake-gist-115368" class="fake-gist"&amp;gt;use Moose;
has fun =&amp;amp;gt; ( isa =&amp;amp;gt; &amp;amp;quot;Constant&amp;amp;quot; );&amp;lt;/pre&amp;gt;&lt;/pre&gt;

&lt;p&gt;The second script, &lt;tt&gt;update_gists.pl&lt;/tt&gt; is much more interesting. It uses &lt;a href="http://search.cpan.org/perldoc?XML%3A%3ALibXML"&gt;&lt;tt&gt;XML::LibXML&lt;/tt&gt;&lt;/a&gt; to find all the &lt;tt&gt;pre&lt;/tt&gt; tags with the class &lt;tt&gt;fake-gist&lt;/tt&gt; in a document. If these tags have no ID then &lt;a href="http://search.cpan.org/perldoc?App%3A%3ANopaste"&gt;&lt;tt&gt;App::Nopaste&lt;/tt&gt;&lt;/a&gt; is used to create new Gists. Otherwise &lt;a href="http://search.cpan.org/perldoc?AnyEvent%3A%3AHTTP"&gt;&lt;tt&gt;AnyEvent::HTTP&lt;/tt&gt;&lt;/a&gt; is used to concurrently fetch the updated versions from &lt;a href="http://gist.github.com/"&gt;http://gist.github.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I start by editing a plain XHTML document in my editor, adding code in the &lt;tt&gt;&amp;lt;pre&amp;gt;&lt;/tt&gt; tags, and then I post the code blocks to github all at once. I use &lt;tt&gt;CDATA&lt;/tt&gt; sections to escape the source code in the XHTML document.&lt;/p&gt;

&lt;pre class="fake-gist" id="fake-gist-139202"&gt;&amp;lt;pre lang="perl" class="fake-gist"&amp;gt;&amp;lt;![CDATA[
$object-&amp;gt;method(
    foo =&amp;gt; $bar, 
);
]]&amp;gt;&amp;lt;/pre&amp;gt;&lt;/pre&gt;

&lt;p&gt;The script re-escapes that using HTML entities so that it is valid HTML (which doesn't support &lt;tt&gt;CDATA&lt;/tt&gt;). This way the &lt;tt&gt;&amp;lt;pre&amp;gt;&lt;/tt&gt; tags render fine under quirks mode, allowing jQuery to append HTML strings to the document.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/876358347971598886-1685520250994980699?l=blog.woobling.org" /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/yuvalkogman/~4/Nb82MBMPhsI" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/44ShbpBtFy8" height="1" width="1"/&gt;</content>
		<author>
			<name>nothingmuch</name>
			<email>nothingmuch@woobling.org</email>
			<uri>http://blog.woobling.org/</uri>
		</author>
		<source>
			<title type="html">nothingmuch's perl blog</title>
			<link rel="self" href="http://blog.woobling.org/feeds/posts/default" />
			<id>tag:blogger.com,1999:blog-876358347971598886</id>
			<updated>2009-07-10T01:01:39+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/yuvalkogman/~3/Nb82MBMPhsI/degradable-gists-update.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">charles proxy is way cool</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/RzCRCGxRyqE/1778" />
		<id>http://rjbs.manxome.org/rubric/entry/1778</id>
		<updated>2009-07-04T02:40:06+00:00</updated>
		<content type="html">&lt;p&gt;On the recommendation of a friend, I tried out the
&lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt; HTTP proxy for debugging... web stuff.
It's nagware, and the nagging is &lt;em&gt;really&lt;/em&gt; annoying.  Despite that, it was
obvious within the first two hours that I was going to buy it.  It made it
very, very simple to diagnose a number of problems that Firebug and Safari
could not sort out.  (They both seem to clear their logs fairly aggressively
during redirection, for one thing.)&lt;/p&gt;

&lt;p&gt;Once I'd sorted out my first bug, I (work) bought a license.  A few hours
later, I used it to solve another problem.  Then two more.  Seriously, it's
really, really useful, and I've barely scratched the surface of what it can do.
If you have to deal with the web as a programmer, check it out.  I think it's
probably already saved me $50 worth of work time.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/RzCRCGxRyqE" height="1" width="1"/&gt;</content>
		<author>
			<name>Ricardo Signes</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/entries/user/rjbs/has_body/1?format=rss</id>
			<updated>2009-07-13T20:01:20+00:00</updated>
		</source>
	<feedburner:origLink>http://rjbs.manxome.org/rubric/entry/1778</feedburner:origLink></entry>

	<entry xml:lang="en">
		<title type="html">My new hackintosh</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/nj346v6NgBY/" />
		<id>http://infotrope.net/blog/?p=287</id>
		<updated>2009-07-04T00:00:04+00:00</updated>
		<content type="html">&lt;div class="series_toc"&gt;&lt;/div&gt; &lt;p&gt;I recently acquired a Dell Mini 9 laptop and turned it into a Hackintosh using &lt;a href="http://gizmodo.com/5156903/how-to-hackintosh-a-dell-mini-9-into-the-ultimate-os-x-netbook"&gt;these instructions from Gizmodo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The install was relatively smooth.  Not 100% &amp;#8212; I had to go through it twice in the end &amp;#8212; but not bad.  Here is the result: my hackintosh posing with my work laptop, a 15&amp;#8243; Macbook Pro.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/7360611@N06/3685140211" title="View 'My Dell Mini 9 Hackintosh' on Flickr.com"&gt;&lt;div&gt;&lt;img src="http://farm4.static.flickr.com/3589/3685140211_d9a80a32f6.jpg" alt="My Dell Mini 9 Hackintosh" border="0" width="500" height="375" /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m currently working on installing all the software I need to feel at home, and getting used to the damn apostrophe key being nowhere near where I expect it to be.  The keyboard size, in and of itself, is fine, but the placement of some of the punctuation keys is driving me a little bit mad.&lt;/p&gt;

&lt;p&gt;Here are my additional notes:&lt;/p&gt;

&lt;p&gt;I used the USB stick install, no DVD drive.  Where Gizmodo says &lt;i&gt;Choose &amp;#8220;80&amp;#8243; for the primary internal SSD&lt;/i&gt; I had to type &amp;#8220;81&amp;#8243; instead.&lt;/p&gt;

&lt;p&gt;When I upgraded using System Update, it took me to OSX 10.5.7, and then the DellEFI installer didn&amp;#8217;t work properly, and I got into an unrecoverable (to me) state of wedgitude: the machine would boot to the grey apple logo, then it would get all these weird video artifacts, and hang.  I had to start over on account of this.  Second time through, I carefully downloaded the &lt;a href="http://support.apple.com/downloads/Mac_OS_X_10-5-6_Combo_Update"&gt;10.5.6 combo update&lt;/a&gt; from Apple and installed that instead.  Worked fine.&lt;/p&gt;

&lt;p&gt;Wake from sleep wasn&amp;#8217;t working.  Googling around, &lt;a href="http://stevenf.com/pages/mini9/"&gt;stevenf&amp;#8217;s hackintosh notes&lt;/a&gt; told me I had to disable &amp;#8220;Legacy USB support&amp;#8221; in the BIOS to make it wake from sleep correctly.  I did this and it worked fine.  However, I gather that &amp;#8220;hibernate&amp;#8221; doesn&amp;#8217;t really work, so I&amp;#8217;m going to have to be careful about not leaving things unsaved when I put the laptop to sleep for a long time.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not very impressed with the battery life, but I hear 10.5.7 &lt;a href="http://blogs.zdnet.com/Apple/?p=3925"&gt;improves matters&lt;/a&gt;.  I&amp;#8217;m not going to try it right now &amp;#8212; I&amp;#8217;m off for a short trip tonight and don&amp;#8217;t want to get the laptop wedged again &amp;#8212; but I might try next week.&lt;/p&gt;

&lt;p&gt;Another thing I&amp;#8217;d like to figure out is whether I can manage dual boot with Ubuntu.  I might find myself a bit tight on disk space, but I have the 32GB SSD and I&amp;#8217;m sure it&amp;#8217;ll fit, even if it does cut into my space for music and videos.  If I start running out of room, I can always expand with an SD card.&lt;/p&gt;

&lt;p&gt;Hackintoshing is, of course, in contravention of Apple&amp;#8217;s Software License Agreement.  All I have to say to that is: if Apple had a tiny, lightweight netbook available, I would be first in line to buy one.  I say this as the owner of a Macbook (my third, counting work laptops), a Mac Mini, an iPhone, and a certain amount of fully licensed Apple software.&lt;/p&gt;
 &lt;div class="series_links"&gt; &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Infotropism?a=jLNB1_zNB38:KaGdaKT-fkU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Infotropism?d=yIl2AUoC8zA" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Infotropism?a=jLNB1_zNB38:KaGdaKT-fkU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Infotropism?d=dnMXMwOfBR0" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Infotropism?a=jLNB1_zNB38:KaGdaKT-fkU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Infotropism?i=jLNB1_zNB38:KaGdaKT-fkU:D7DqB2pKExk" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Infotropism?a=jLNB1_zNB38:KaGdaKT-fkU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Infotropism?i=jLNB1_zNB38:KaGdaKT-fkU:F7zBnMyn0Lo" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Infotropism?a=jLNB1_zNB38:KaGdaKT-fkU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Infotropism?i=jLNB1_zNB38:KaGdaKT-fkU:V_sGLiPBpWU" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Infotropism/~4/jLNB1_zNB38" height="1" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/nj346v6NgBY" height="1" width="1"/&gt;</content>
		<author>
			<name>Kirrily Robert</name>
			<uri>http://infotrope.net/blog</uri>
		</author>
		<source>
			<title type="html">Infotropism</title>
			<subtitle type="html">Kirrily Robert's blog</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Infotropism" />
			<id>http://feeds.feedburner.com/Infotropism</id>
			<updated>2009-07-10T06:41:35+00:00</updated>
		</source>
	<feedburner:origLink>http://feedproxy.google.com/~r/Infotropism/~3/jLNB1_zNB38/</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">DateTime::Duration::W3C?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/KVZXZFYmkhg/39221" />
		<id>http://use.perl.org/~Ovid/journal/39221?from=rss</id>
		<updated>2009-07-03T13:45:44+00:00</updated>
		<content type="html">&lt;p&gt;If this is on the CPAN, please let me know. I can't find it. If not, we probably need it at work&lt;/p&gt;&lt;p&gt;The &lt;a href="http://www.w3.org/TR/xmlschema-2/#duration"&gt;W3C duration standard&lt;/a&gt;, derived from the ISO 8601 duration standard, allows one to specify durations in a format like &lt;tt&gt;P&lt;em&gt;n&lt;/em&gt;Y&lt;em&gt;n&lt;/em&gt;M&lt;em&gt;n&lt;/em&gt;DT&lt;em&gt;n&lt;/em&gt;H&lt;em&gt;n&lt;/em&gt;M&lt;em&gt;n&lt;/em&gt;S&lt;/tt&gt; (e.g.: "P1Y2MT2H", a duration of one year, two months and two hours).  I can't find a proper parser for it and it turns out to have some tricky bits.  Basically, I want to do this:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;my $duration = DateTime::Duration::W3C-&amp;gt;new_from_w3c("P1Y2MT2H");&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;Which would be more or less equivalent to:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;my $duration = DateTime::Duration-&amp;gt;new(&lt;br /&gt;&amp;nbsp; &amp;nbsp; years&amp;nbsp; =&amp;gt; 1,&lt;br /&gt;&amp;nbsp; &amp;nbsp; months =&amp;gt; 2,&lt;br /&gt;&amp;nbsp; &amp;nbsp; hours&amp;nbsp; =&amp;gt; 2,&lt;br /&gt;);&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt;The only real difference would be (I think) adding string overloading to allow one to print the duration and have it come out in the proper format.&lt;/p&gt;&lt;p&gt;I can write this and try to handle the special cases I find documented (&lt;a href="http://www.iso.org/iso/catalogue_detail?csnumber=40874"&gt;I'll be damned if I'm going to pay 130 Swiss Francs for the damned ISO 8601 standard&lt;/a&gt;), but I'd love to know if it's already out there.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/KVZXZFYmkhg" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39221?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">How to Count (Parrot Style)</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Mwx8Y2p64gY/39219" />
		<id>http://use.perl.org/~chromatic/journal/39219?from=rss</id>
		<updated>2009-07-03T09:11:54+00:00</updated>
		<content type="html">&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;em&gt;Parrot releases are harder to count because of their prolific release cycle.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt; &lt;a href="http://coolnamehere.com/brian/index.html"&gt;Brian Wisti&lt;/a&gt;, &lt;a href="http://brianwisti.blogspot.com/2009/07/in-which-brian-whinges-about-perl-5.html"&gt;In Which Brian Whinges About The Perl 5 Release Schedule&lt;/a&gt;

&lt;/p&gt;&lt;p&gt;This is a trivial nitpick (read the rest of the article!  It's very good!), but Parrot releases are very, very easy to count.  The same goes for Rakudo releases.&lt;/p&gt;&lt;p&gt;The other day someone asked what Parrot might look like in a hundred years.  I laughed and thought, "What would its version number be?"  Then I realized that &lt;em&gt;I can predict its version number in 100 years&lt;/em&gt;.  Parrot 101.6 will be out, with Parrot 101.7 on the way.&lt;/p&gt;&lt;p&gt;For all of the lofty talk about "stability" and "maturity" and "predictability" which results in Perl 5 &lt;em&gt;not&lt;/em&gt; getting released, the fact that I can predict the release date and version number of a piece of software one hundred years in the future says something about the stability, maturity, predictability, and reliability of a very different kind of development process.&lt;/p&gt;&lt;p&gt;(Oh, and Alias -- I can crash several so-called stable releases of Perl 5 with a one-liner the same way you crashed Parrot in December 2008 with a short program.  If you want to make the argument that the 30 stable monthly releases of Parrot in a row don't actually exist because they had bugs, the two so-called stable releases of Perl 5 from the same time period don't exist either.  Ontological debates are easy to lose.)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Mwx8Y2p64gY" height="1" width="1"/&gt;</content>
		<author>
			<name>chromatic</name>
			<uri>http://use.perl.org/~chromatic/journal/</uri>
		</author>
		<source>
			<title type="html">chromatic's Journal</title>
			<subtitle type="html">chromatic's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~chromatic/journal/rss" />
			<id>http://use.perl.org/~chromatic/journal/rss</id>
			<updated>2009-07-04T22:00:06+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~chromatic/journal/39219?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Perl 6 Design Minutes for 27 May 2009</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/MBsD2RVNBos/39216" />
		<id>http://use.perl.org/~chromatic/journal/39216?from=rss</id>
		<updated>2009-07-02T23:03:51+00:00</updated>
		<content type="html">&lt;p&gt;The Perl 6 design team met by phone on 27 May 2009. Larry, Allison, Patrick, Jerry, and chromatic attended.&lt;/p&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;changed the &lt;code&gt;time&lt;/code&gt; function to return a &lt;code&gt;Rat&lt;/code&gt; &lt;/li&gt;&lt;li&gt;thinking about the traits that have been bothering Jonathan and others&lt;/li&gt;&lt;li&gt;have some changes to check into the spec when I'm happy with them&lt;/li&gt;&lt;li&gt;thinking about the primitives we use to define &lt;code&gt;use&lt;/code&gt; &lt;/li&gt;&lt;li&gt;breaks down into load and import&lt;/li&gt;&lt;li&gt;thinking of establishing compile-time keywords for both concepts&lt;/li&gt;&lt;li&gt;intended so that I can import from anything acting like a module -- an inlined role, for example&lt;/li&gt;&lt;li&gt;otherwise trying to keep up with the flow of IRC&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Allison:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;working on the Parrot book&lt;/li&gt;&lt;li&gt;changed its focus to a small, 100-page PIR book from a monolithic Parrot book&lt;/li&gt;&lt;li&gt;the intent is to get something out for YAPC and OSCON&lt;/li&gt;&lt;li&gt;will send out a draft for review&lt;/li&gt;&lt;li&gt;will merge my changes into the repo later this week&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;released Rakudo #17 last week&lt;/li&gt;&lt;li&gt;was easy again&lt;/li&gt;&lt;li&gt;875 more tests since #16, so we pass 68% of the spectest suite&lt;/li&gt;&lt;li&gt;finished implementing the &lt;code&gt;root_new&lt;/code&gt; opcode in Parrot&lt;/li&gt;&lt;li&gt;cleans up a lot of the PMCProxy issues from moving Rakudo to its own HLL&lt;/li&gt;&lt;li&gt;gained half of the speed we lost from the migration&lt;/li&gt;&lt;li&gt;we'll get more back as we update more places that need it&lt;/li&gt;&lt;li&gt;NQP never expected anything like that&lt;/li&gt;&lt;li&gt;I have to rework some it and PCT&lt;/li&gt;&lt;li&gt;haven't quite figured out how to do that&lt;/li&gt;&lt;li&gt;refactoring &lt;code&gt;use&lt;/code&gt; and &lt;code&gt;import&lt;/code&gt; in Rakudo&lt;/li&gt;&lt;li&gt;the current implementation doesn't work&lt;/li&gt;&lt;li&gt;will hopefully match with what Larry's putting in the spec&lt;/li&gt;&lt;li&gt;it seems like the logical way to do things&lt;/li&gt;&lt;li&gt;updated Rakudo's ROADMAP in &lt;em&gt;docs/ROADMAP&lt;/em&gt; &lt;/li&gt;&lt;li&gt;gives us an idea of dependencies and next tasks&lt;/li&gt;&lt;li&gt;may also help people understand what blocks features they want&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Jerry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;the bonding period has ended for GSoC&lt;/li&gt;&lt;li&gt;time for students to start coding&lt;/li&gt;&lt;li&gt;everyone on the Perl 6 and Parrot projects is ready&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;c:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;fixed some memory leaks in Parrot and Rakudo&lt;/li&gt;&lt;li&gt;there are still some in Rakudo, but the web examples should be able to live longer&lt;/li&gt;&lt;li&gt;did more profiling&lt;/li&gt;&lt;li&gt;think NFG is important for Parrot in the near term&lt;/li&gt;&lt;li&gt;have some documentation to write&lt;/li&gt;&lt;li&gt;have been editing the Parrot book&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;how's the command line for Rakudo coming?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Jerry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I expect to get back to that&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;the "parens build captures" decision surprised me&lt;/li&gt;&lt;li&gt;what's the rationale?&lt;/li&gt;&lt;li&gt;I really liked "parens mean grouping"&lt;/li&gt;&lt;li&gt;maybe I haven't reconfigured my worldview yet, but it feels messy&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;when used in an argument list, it has the same effect as a capture&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;it even works when they're used as a term&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;they still mean that you have to look at what you're binding to and decide&lt;/li&gt;&lt;li&gt;am I binding this to a scalar or to an array?&lt;/li&gt;&lt;li&gt; &lt;code&gt;(1, 2, 3)&lt;/code&gt; bound to an array...&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I'm going to have to think about that&lt;/li&gt;&lt;li&gt;the &lt;code&gt;zip&lt;/code&gt; operator in slice context....&lt;/li&gt;&lt;li&gt;is this three or one positional arguments?  &lt;code&gt;zip($a,$b,$c)&lt;/code&gt; &lt;/li&gt;&lt;li&gt;how many positional arguments are in this case? &lt;code&gt;zip($a,$b,$c;$d)&lt;/code&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;one slice&lt;/li&gt;&lt;li&gt;you wouldn't want to write that&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;what in the arg list distinguishes the use of the semicolon versus the comma&lt;/li&gt;&lt;li&gt;inside of an argument list we have to recognize a variety of syntactic things&lt;/li&gt;&lt;li&gt;comma, semicolon, colon, array or hash sigil, named parameters&lt;/li&gt;&lt;li&gt;seems like captures need more information than just positional&lt;/li&gt;&lt;li&gt;they need to store metadata about positional arguments&lt;/li&gt;&lt;li&gt;I like the syntactic stuff showing up in the argument list&lt;/li&gt;&lt;li&gt;but I don't want to handle them in three different ways&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I'll have to think about that&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;haven't figured out how to deal with slice context either&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;might say that the presence of a semicolon implies the presence of other parens&lt;/li&gt;&lt;li&gt;the comma implies...&lt;/li&gt;&lt;li&gt;that might be more consistent binding for a top-level list&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I half expected that answer&lt;/li&gt;&lt;li&gt;I can see the semicolon as just a lower precedence grouping operator&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;otherwise you have a semicolon that's just not there in every other argument list&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;assuming that, the other commas form an argument list through the infix semicolon&lt;/li&gt;&lt;li&gt;an array in there means Capture of Capture of Capture&lt;/li&gt;&lt;li&gt;we were about to refactor List and Array in Rakudo anyway&lt;/li&gt;&lt;li&gt;the question is "Do we really have a List type now?"&lt;/li&gt;&lt;li&gt;Rakudo assumes that&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;if we can unify args list with List, that's probably healthy&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;I'd really like that&lt;/li&gt;&lt;li&gt;that makes things a lot cleaner&lt;/li&gt;&lt;li&gt;infix comma and infix semis now just create arglists&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;or Lists&lt;/li&gt;&lt;li&gt;if you define List as "something that has out of band metadata"&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;any more decisions that you can make about that will help our implementation&lt;/li&gt;&lt;li&gt;I probably won't get around to that this week&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Larry:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;we make syntactic distinctions&lt;/li&gt;&lt;li&gt;we know that this is an arg list&lt;/li&gt;&lt;li&gt;we treat pairs as named arguments&lt;/li&gt;&lt;li&gt;we don't do that if we know it's not an argument list&lt;/li&gt;&lt;li&gt;it stays positional&lt;/li&gt;&lt;li&gt;that's the only distinction between an arg list and a List&lt;/li&gt;&lt;li&gt;purely syntactic&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;strong&gt;Patrick:&lt;/strong&gt; &lt;/p&gt;&lt;ul&gt;
&lt;li&gt;to summarize&lt;/li&gt;&lt;li&gt; &lt;code&gt;zip($a, $b, $c)&lt;/code&gt; has three positional arguments&lt;/li&gt;&lt;li&gt; &lt;code&gt;zip($a, $b, $c; $d)&lt;/code&gt; has two, the first of which is itself a list/capture&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/MBsD2RVNBos" height="1" width="1"/&gt;</content>
		<author>
			<name>chromatic</name>
			<uri>http://use.perl.org/~chromatic/journal/</uri>
		</author>
		<source>
			<title type="html">chromatic's Journal</title>
			<subtitle type="html">chromatic's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~chromatic/journal/rss" />
			<id>http://use.perl.org/~chromatic/journal/rss</id>
			<updated>2009-07-04T22:00:06+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~chromatic/journal/39216?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Need for Speed Part I: DBIx::Class vs DBI</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/-bQlKOpcU3I/39213" />
		<id>http://use.perl.org/~domm/journal/39213?from=rss</id>
		<updated>2009-07-02T20:49:15+00:00</updated>
		<content type="html">&lt;p&gt;Yesterday I had to write some code that goes through ~700.000 datasets (seperated into 6 tables) and denormalise them (see the yet unwritten Part II). As we're using DBIx::Class, I first used it. Even though I avoided some in/deflators and used &lt;code&gt;columns&lt;/code&gt; to only get the stuff I needed, the process took ages (~50 items per second or aprox 4 hours for the whole job). Well, 4 hours might be bearable, but this was only the Swiss dataset. The German one, which we have to tackle soon, is at least 10 times as big, and 40 hours is just a way too long runtime.&lt;/p&gt;&lt;p&gt;So I rewrote the core of the programm using raw DBI calls (I had several flashbacks to the 90's :-) The results were quite astounding, as I was now getting 500 items a second. 10 times faster!&lt;/p&gt;&lt;p&gt;And that was before koki told me to set &lt;code&gt; &lt;a href="http://www.postgresql.org/docs/8.3/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY"&gt;work_mem&lt;/a&gt; &lt;/code&gt; to a bigger value. I choose 30MB, and got another speedup to ~900 items per second. Sweet!&lt;/p&gt;&lt;p&gt;Of course, it's completely unfair to compare DBI with DBIx::Class performance wise, because DBIx::Class is &lt;b&gt;so&lt;/b&gt; much nicer to work with. But if speed is an issue, dropping back to raw DBI is the way to go.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/-bQlKOpcU3I" height="1" width="1"/&gt;</content>
		<author>
			<name>Thomas Klausner</name>
			<uri>http://use.perl.org/~domm/journal/</uri>
		</author>
		<source>
			<title type="html">domm's Journal</title>
			<subtitle type="html">domm's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~domm/journal/rss" />
			<id>http://use.perl.org/~domm/journal/rss</id>
			<updated>2009-07-10T21:21:15+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~domm/journal/39213?from=rss</feedburner:origLink></entry>

	<entry>
		<title type="html">What is Catalyst, Really?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/sEwsCOeuNTQ/what-is-catalyst-really.html" />
		<id>tag:blog.urth.org,2009://2.96</id>
		<updated>2009-07-02T18:22:46+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;A &lt;a href="http://www.nabble.com/new-Mason-tutorial-to24256045.html"&gt;recent thread on the Mason users list&lt;/a&gt; reminded me of the problems I had grokking Catalyst when I first looked at it. Raymond Wan wrote "I'm skimming over the MVC part and as my system doesn't use an SQL database, I'm wondering if Catalyst is overkill??"&lt;/p&gt;

&lt;p&gt;Those of us who know Catalyst know that this question is based on some wrong assumptions, but it's easy to see why Raymond has those assumptions. Look at the &lt;a href="http://search.cpan.org/~hkclark/Catalyst-Manual-5.8000/lib/Catalyst/Manual/Tutorial/01_Intro.pod"&gt;Catalyst tutorial&lt;/a&gt;. In the very first chapter, it's already talking about databases and &lt;a href="http://search.cpan.org/dist/DBIx-Class"&gt;DBIx::Class&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's easy to look at this and assume that Catalyst is somehow tightly bound to DBIx::Class or SQL databases.&lt;/p&gt;

&lt;p&gt;The problem is that the tutorial docs really need to serve two different audiences, though both audiences are Catalyst newbies.&lt;/p&gt;

&lt;p&gt;On the one hand, you have people with relatively little web app experience. Presumably, they know some Perl, and they do a web search for "perl web application framework". Eventually, they'll get to Catalyst and start reading about it. For those people, being given a set of standards and a full walk through of Model and View (in addition to Controller) is very valuable. It gives them all the tools they need to get started on simple web apps without having to make too many choices.&lt;/p&gt;

&lt;p&gt;The other audience is people who have some real web app development experience with something more primitive than Catalyst. These could be people coming from a Mason-based site without any real controllers, or people who used something like Apache::Template with mod_perl, or maybe they wrote their own controllers "by hand" using the mod_perl API.&lt;/p&gt;

&lt;p&gt;Many of those folks will already have some experience with models. To refer back to Raymond, presumably his system already has some sort of model code, it just doesn't use a SQL DBMS. Those people will look at the existing Catalyst tutorial and get confused. Isn't Catalyst flexible? Then why does it look like RoR, with all my tool choices made for me?&lt;/p&gt;

&lt;p&gt;It took me a while to realize that Catalyst, at its core, is smaller than you might think, and you can use just the pieces you like.&lt;/p&gt;

&lt;p&gt;The very core of Catalyst is its dispatching system. Given a URI, it selects a piece of code to run. Its dispatcher is very powerful (Chained methods are great!), and with plugins like &lt;a href="http://search.cpan.org/dist/Catalyst-Action-REST"&gt;Catalyst::Action::REST&lt;/a&gt;, it's even better.&lt;/p&gt;

&lt;p&gt;Along with the dispatching system, Catalyst also provides an abstraction over the typical web app request/response cycle. The Request makes it easy to look at incoming query arguments, POST data, file uploads, and headers. The Response lets you set headers and return output to the client, whether that be HTML or a downloadable file.&lt;/p&gt;

&lt;p&gt;Catalyst also includes engines (think "environment adapters") for a number of common web application environments, including vanilla CGI, mod_perl, FastCGI, and more. These engines make sure that the Request/Response API works exactly the same in any environment where Catalyst can be deployed.&lt;/p&gt;

&lt;p&gt;This is a huge win, since you can write your app without worrying about the deployment environment. If you're writing an app for public distribution, it gives the installing users a choice of how to deploy.&lt;/p&gt;

&lt;p&gt;These core pieces are really the only parts of Catalyst you have to use when you use Catalyst. If you don't want dispatch and a request/response API, you don't want Catalyst.&lt;/p&gt;

&lt;p&gt;Catalyst (really &lt;a href="http://search.cpan.org/dist/Catalyst-Devel"&gt;Catalyst-Devel&lt;/a&gt;) also includes a fantastic single-process development server. This server can be started straight from an application's checkout directory with one command. Even better, this dev server can be told to monitor all relevant files and restart itself when any of them change. Note that this is a proper restart, which avoids all the myriad problems that afflict Apache::Reload and its ilk, which attempt to reload modules in the same Perl interpreter.&lt;/p&gt;

&lt;p&gt;Just these things - controllers, a request/response abstraction, deployment agnosticism, and a great dev environment - are enough to make Catalyst a great choice. Ignore everything else it does and you'll still have improved your development process and improved your code.&lt;/p&gt;

&lt;p&gt;Catalyst also does some other things ...&lt;/p&gt;

&lt;p&gt;It has a component system which has allowed people to release a whole host of useful plugins. If you look on CPAN, you'll find things like &lt;a href="http://search.cpan.org/dist/Catalyst-Plugin-Session"&gt;sessions&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/Catalyst-Plugin-Authentication"&gt;powerful authentication&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/Catalyst-Plugin-AuthenCookie"&gt;dumb authentication&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/Catalyst-Plugin-I18N"&gt;I18N&lt;/a&gt;, and much more. If a plugin does what you need, it'll save you a lot of development time.&lt;/p&gt;

&lt;p&gt;Note that the old "Catalyst::Plugin" system is in the process of being deprecated, but the concept of pluggable components is still core to what Catalyst is. All that's changed is the way pluggability works.&lt;/p&gt;

&lt;p&gt;Catalyst lets you have multiple views. While many apps will just output HTML via a templating system, this flexibility is great for RESTful apps that may want to output XML, JSON, and still fall back to HTML for browsers (see my &lt;a href="http://search.cpan.org/dist/Catalyst-Request-REST-ForBrowsers"&gt;REST-ForBrowsers&lt;/a&gt; for some help with that).&lt;/p&gt;

&lt;p&gt;Catalyst also has configuration file handling built-in. Personally, I avoid it, because it only works within the context of the whole "Catalyst environment". That means it's awkward at best to load the configuration outside of the web environment. I always make sure that application wide setting are available for things like cron jobs. This falls into a category of Catalyst features which are not best practices, but are probably useful for people writing their first web app.&lt;/p&gt;

&lt;p&gt;Catalyst gives you hooks for models. Again, this is something I never use, but it's another "useful for web app n00bs" feature.&lt;/p&gt;

&lt;p&gt;There's probably many other things I've left out. The point is that Catalyst provides a very powerful set of core web app tools, and that core is actually small.&lt;/p&gt;

&lt;p&gt;Relative to a "my way or the highway" type framework (RoR and Jifty, I'm looking at you), it's easy to port an existing application to Catalyst. In fact, using &lt;a href="http://search.cpan.org/dist/Catalyst-Controller-WrapCGI"&gt;Catalyst::Controller::WrapCGI&lt;/a&gt;, you can wrap an existing CGI application with Catalyst, and then convert slowly over to "native" controllers.&lt;/p&gt;

&lt;p&gt;And most importantly, you can to Catalyst without touching your model at all! Since many applications have the bulk of their code in the models (at least, they do if you're doing it right), this is a huge win.&lt;/p&gt;

&lt;p&gt;Next step is to turn some of this rambling into doc patches. I think a section of the Catalyst tutorial aimed at folks coming from an "old school" web app background would be great, and would really help people like Raymond (and would've helped me a few years back).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/sEwsCOeuNTQ" 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/programming/atom.xml" />
			<id>tag:blog.urth.org,2008-08-19://2</id>
			<updated>2009-07-02T18:41:44+00:00</updated>
		</source>
	<feedburner:origLink>http://blog.urth.org/2009/07/what-is-catalyst-really.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">The Real Problem With Roles</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/7qTtShpRdMg/39208" />
		<id>http://use.perl.org/~Ovid/journal/39208?from=rss</id>
		<updated>2009-07-02T13:47:33+00:00</updated>
		<content type="html">&lt;p&gt;Inheritance, as most of us know, is rather problematic.  Specifically, it's been around since 1967 and for the past 42 years, people have been arguing about how to do it right.  Some OO languages don't have inheritance (Self, Javascript). Some languages don't have multiple inheritance (C#, Ruby).  Some languages have multiple inheritance with many safeguards (Eiffel) or none (Perl).  Some languages just do strange things with inheritance (BETA).  Even very experienced OO developers focusing on a single language will argue vociferously about whether or not a design has been done correctly (do you &lt;em&gt;really&lt;/em&gt; give a damn about strict equivalence in overridden methods?)&lt;/p&gt;&lt;p&gt;The problem is ultimately that classes fulfill conflicting needs.  As an agent of responsibility, a class needs to do everything a class needs to do.  That sounds like a stupid tautology, but what it means is that as systems grow, classes grow.  Thus, classes tend to get larger.  Unfortunately, as agents of code reuse -- via inheritance or delegation -- classes should be smaller.  How many times have you seen (or written) code which inherits from something because it needs one or two methods but you're pulling in a lot of extra behavior which you don't need?&lt;/p&gt;&lt;p&gt;This responsibility/reuse tension which leads to classes wanting to be both larger and smaller at the same time is much of the reason why inheritance has proven so problematic.  Interfaces in Java and C#, along with mixins in Ruby and other languages were an attempt to decouple the responsibility and reuse needs of classes, but they've all had their problems.  Roles seem to handle the decoupling of responsilibity and reuse quite nicely, but some of you may have noticed some of the disagreements that I and others have had about the proper use of roles.  Why is that?&lt;/p&gt;&lt;p&gt;Ultimately, the disagreement boiled down to the fact that -- like inheritance -- roles serve more than one master.  Roles provide behavior and roles provide an interface.  Are we faced with another 40 years of arguing because we've again tried to shoehorn too much into one thing?  I don't think this need be the case as, unlike classes, the different things the roles provide aren't necessarily antagonistic, but it would be nice if the different parties sat down and tried to come up with a strategy (syntax?) for implementing roles which cleanly addresses these disparate needs.  Otherwise, there really &lt;em&gt;will&lt;/em&gt; another 40 years of arguing.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/7qTtShpRdMg" height="1" width="1"/&gt;</content>
		<author>
			<name>Curtis Poe</name>
			<uri>http://use.perl.org/~Ovid/journal/</uri>
		</author>
		<source>
			<title type="html">Ovid's Journal</title>
			<subtitle type="html">Ovid's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~ovid/journal/rss" />
			<id>http://use.perl.org/~ovid/journal/rss</id>
			<updated>2009-07-10T14:41:04+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Ovid/journal/39208?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">Why am I writing Padre?</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/muo_XvbY9nY/1246515871.html" />
		<id>http://szabgab.com/blog/2009/07/1246515871.html</id>
		<updated>2009-07-02T09:24:31+00:00</updated>
		<content type="html">&lt;p&gt;
It is probably not that interesting for most of the people but I have my excuses.
What is more interesting - at least to me - is why others are involved. 
&lt;/p&gt;
&lt;p&gt;
After all there were already more than 40 people who made some contribution to Padre.
&lt;/p&gt;
&lt;p&gt;
So I asked them to start writing down why are they involved. 
Some of them have already added themselves to the 
&lt;a href="http://padre.perlide.org/developers.html"&gt;developers&lt;/a&gt; page
and we started a separate page for 
&lt;a href="http://padre.perlide.org/translators.html"&gt;translators&lt;/a&gt; though that 
one is new and has no been filled yet.
&lt;/p&gt;
&lt;p&gt;
So why do I write Padre?
&lt;/p&gt;
&lt;p&gt;
There is a short explanation on that page but let me bore you with a longer one
here.
&lt;/p&gt;
&lt;p&gt;
I have been teaching Perl 5 for almost 10 years now. Both beginner level and 
advanced courses. In the beginner courses the majority of the people use 
Windows with about 20-30 percent using Linux. Most of the Windows users use Notepad++
or a similar editor. Some of them can configure their editor to run the perl script
right from the editor, others don't even know how to enable syntax highlighting 
for Perl 5. Some of the people on Windows don't know what the command line is but
even those who know how to open the command prompt are either afraid of it or 
just dislike it. 
&lt;/p&gt;
&lt;p&gt;
Mind you these are not stupid people or anything like that.
Some of them have many years of hardware design behind them. 
They are just used to some kind of IDEs.
&lt;/p&gt;
&lt;p&gt;
Others might use Linux/Unix but many not by choice. In many cases the company
they are working for gives them telnet access to an oldish Unix machine and
tell them to code in Perl. They hardly know vi, they don't know how to configure
syntax highlighting and they don't know how to install any other editor.
&lt;/p&gt;
&lt;p&gt;
I have been using vim for many years and I can testify that it is a superb editor.
Emacs is similary strong but I have not used it since university. The problem
with both of them is that they are totally different from the editors most
people are used to and their learning curve is long and steep. It takes
several months or even years to become familiar with them. Most of the people
don't want to invest that energy and I certainly don't have the time for that
in a 4 days long Perl 5 course.
&lt;/p&gt;
&lt;p&gt;
So I usually tell them to use whatever they are familiar with. I think I never had
a student who picked Eclipse or Emacs. There were a few using vi/vim 
but most of the people used Notepad++ or a similar Windows based editor.
&lt;/p&gt;
&lt;p&gt;
I don't think my students are too different from the average people learning and 
using Perl. Most of them will never write a full blown web application. Heck most
of them won't have a need for object oriented coding as they write only 
100-200 line long scripts in Perl.
&lt;/p&gt;
&lt;p&gt;
They never get really familiar with Perl and they will always have to deal with 
strange code written by others. With all the other tasks they are required to do
in their primary language or tool they will keep wondering what is $_ when they see
it and will be surprised when they don't.
&lt;/p&gt;
&lt;p&gt;
They will wonder what is the relationship between $_ and $_[0].
&lt;/p&gt;
&lt;p&gt;
So my first objective was to &lt;b&gt;provide a simple Notepad++ like editor with strong 
support for beginners or people with relatively little experience with Perl&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
For example I'd like to make sure that Padre users will be able to highlight $_, 
press F1 and get an explanation. In case they highlight $_ from a $_[0] expression
Padre should be clever enough to point this out and give an explanation on @_ and
@_[0].
&lt;/p&gt;
&lt;p&gt;
I knew it is a big task though I did not think it is soo big. In any case I knew
I cannot handle this alone, especially as I am not such a good programmer.
So from the very beginning I tried to make it &lt;b&gt;interesting, accessible
to experienced Perl 5 developers&lt;/b&gt; and in turn they made it
&lt;b&gt;fun and hackable&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
Unfortunatelly most of the experienced Perl developers are also hard-core vim or 
emacs users and it is nearly impossible to move them away from their editor.
Luckily there were a few who got interested by the idea of having a lot
of control over their editor and that made the difference between a failing
one man project to a project with a lot of potential.
&lt;/p&gt;
&lt;p&gt;
Then at one point came the idea to integrate Parrot and Rakudo and try 
to provide &lt;b&gt;a platform for Perl 6 development&lt;/b&gt; as well. With the awesome
work of &lt;a href="http://ahmadzawawi.blogspot.com/"&gt;Ahmad M. Zawawi&lt;/a&gt;
Padre has a lot to offer to anyone who wants to write Perl 6 code. With some more
work we'll be able to integrate Parrot even better and then Padre will be 
able to handle any language running on top of Parrot.
&lt;/p&gt;
&lt;p&gt;
While there are still lots of problems with Padre and installation can still
be difficult it already more or less has the same power as Notepad++ on both Windows
and Linux and probably on Mac too and it has some extra features that even 
&lt;a href="http://code-and-hacks.blogspot.com/2009/06/stealing-from-padre-for-vim.html"&gt;vim people started to steal&lt;/a&gt;.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/muo_XvbY9nY" height="1" width="1"/&gt;</content>
		<author>
			<name>Gabor Szabo</name>
			<uri>http://szabgab.com</uri>
		</author>
		<source>
			<title type="html">Blog of Gábor Szabó</title>
			<subtitle type="html">Gabor Szabo about Perl, automated testing, dynamic languages and everyting else</subtitle>
			<link rel="self" href="http://www.szabgab.com/blog/szabgab.rss" />
			<id>http://www.szabgab.com/blog/szabgab.rss</id>
			<updated>2009-07-13T20:01:57+00:00</updated>
			<rights type="html">Copyright 2002-2009, Gabor Szabo</rights>
		</source>
	<feedburner:origLink>http://szabgab.com/blog/2009/07/1246515871.html</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">The impending death of BZip2</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/jPaUoetMILM/39206" />
		<id>http://use.perl.org/~Alias/journal/39206?from=rss</id>
		<updated>2009-07-02T06:18:57+00:00</updated>
		<content type="html">&lt;blockquote&gt;&lt;div&gt;&lt;p&gt; &lt;tt&gt;adam@svn:~/svn.ali.as/db$ ls -l&lt;br /&gt;total 30884&lt;br /&gt;-rw-r--r-- 1 adam adam 9558294 Jul&amp;nbsp; 2 03:45 cpandb.gz&lt;br /&gt;-rw-r--r-- 1 adam adam 8538979 Jul&amp;nbsp; 2 03:45 cpandb.bz2&lt;br /&gt;-rw-r--r-- 1 adam adam 5960155 Jul&amp;nbsp; 2 03:45 cpandb.lz&lt;br /&gt;-rw-r--r-- 1 adam adam 3014480 Jun 30 06:46 cpanmeta.gz&lt;br /&gt;-rw-r--r-- 1 adam adam 2658756 Jun 30 06:46 cpanmeta.bz2&lt;br /&gt;-rw-r--r-- 1 adam adam 1825600 Jun 30 06:46 cpanmeta.lz&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/jPaUoetMILM" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39206?from=rss</feedburner:origLink></entry>

	<entry xml:lang="en">
		<title type="html">Updating minicpan alphas more frequently</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/Bb2m93XB73M/" />
		<id>http://www.dagolden.com/?p=271</id>
		<updated>2009-07-01T22:03:34+00:00</updated>
		<content type="html">&lt;p&gt;At the Perl QA hackathon, Andreas Koenig, the maintainer of &lt;a href="http://pause.perl.org/"&gt;PAUSE&lt;/a&gt;, demonstrated a way to decrease the lag between new distribution uploads to PAUSE and syndication to &lt;a href="http://mirrors.cpan.org/"&gt;CPAN mirrors&lt;/a&gt;.  (See &lt;a href="http://search.cpan.org/perldoc?File::Rsync::Mirror::Recent"&gt;File::Rsync::Mirror::Recent&lt;/a&gt; on CPAN for details).   Running &lt;a href="http://search.cpan.org/perldoc?minicpan"&gt;minicpan &lt;/a&gt;against a one of the new, fast updating mirrors results a very fresh minicpan, but, until now, only for regular releases, not for alpha development releases.&lt;/p&gt;
&lt;p&gt;Last year, I wrote &lt;a href="http://search.cpan.org/perldoc?CPAN::Mini::Devel"&gt;CPAN::Mini::Devel&lt;/a&gt; to include development releases in a minicpan, but it depends on an obscure, large, infrequently updated index.&lt;sup&gt;1&lt;/sup&gt; Now, with smaller, fast-updating index files available for rsync, I released &lt;a href="http://search.cpan.org/perldoc?CPAN::Mini::Devel::Recent"&gt;CPAN::Mini::Devel::Recent&lt;/a&gt; to take advantage of them for minicpan as well.&lt;/p&gt;
&lt;p&gt;This is all still experimental, but if you do Perl programming and want bleeding-edge development releases within minutes of their upload to PAUSE, then find a fast mirror, try out CPAN::Mini::Devel::Recent and let me know how it works for you.  After installation, you can configure it to be used automatically by adding &amp;#8220;class: CPAN::Mini::Devel::Recent&amp;#8221; to your .minicpanrc file.&lt;/p&gt;
&lt;ol class="footnotes"&gt;&lt;li id="footnote_0_271" class="footnote"&gt;indices/find-ls.gz&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/Bb2m93XB73M" height="1" width="1"/&gt;</content>
		<author>
			<name>David Golden</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/index.php/feed/</id>
			<updated>2009-07-11T15:21:11+00:00</updated>
		</source>
	<feedburner:origLink>http://www.dagolden.com/index.php/271/updating-minicpan-alphas-more-frequently/</feedburner:origLink></entry>

	<entry xml:lang="en-us">
		<title type="html">CPANDB 0.02 - Now we're starting to get somewhere</title>
		<link href="http://feedproxy.google.com/~r/PlanetPerl/~3/1-Yj2G0yvfM/39203" />
		<id>http://use.perl.org/~Alias/journal/39203?from=rss</id>
		<updated>2009-07-01T17:17:06+00:00</updated>
		<content type="html">&lt;p&gt;On the back my my improved and high-coverage CPAN::Mini::Visit and Archive::* fixes, I've finally managed to build a complete-coverage version of &lt;a href="http://search.cpan.org/perldoc?CPANDB"&gt;CPANDB&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;CPANDB is a merged and cleaned up schema that combines the CPAN index, the "CPAN Uploads" database (for PAUSE upload dates), and both class and distribution level dependency information held in META.yml files (replacing the CPANTS dependency graph).&lt;/p&gt;&lt;p&gt;To take a look at it, you can grab a copy of the SQLite database directly from the following URL.&lt;/p&gt;&lt;p&gt;&lt;a href="http://svn.ali.as/db/cpandb.gz"&gt;http://svn.ali.as/db/cpandb.gz&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The data sources used to generate it are not perfectly time-synced yet, so I expect to see a few minor flaws for another release or two. But compared to everything else available (from pretty much everybody) this should be a significant improvement.&lt;/p&gt;&lt;p&gt;As well as clearing up the last tiny data quality issues, I'm also yet to merge in the rt.cpan.org database (which is almost ready) and the CPAN Ratings database (which is a text file I really don't want to have to parse).&lt;/p&gt;&lt;p&gt;But don't let this stop you trying it out now (I've appended the schema to the bottom of this post so you can get a clearer idea of what's in there).&lt;/p&gt;&lt;p&gt;As usual, feedback is welcome.&lt;/p&gt;&lt;p&gt;CREATE TABLE author (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; author TEXT NOT NULL PRIMARY KEY,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name TEXT NOT NULL&lt;br /&gt;);&lt;/p&gt;&lt;p&gt;CREATE TABLE distribution (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; distribution TEXT NOT NULL PRIMARY KEY,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; version TEXT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; author TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; release TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; uploaded TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FOREIGN KEY ( author ) REFERENCES author ( author )&lt;br /&gt;);&lt;/p&gt;&lt;p&gt;CREATE TABLE module (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; module TEXT NOT NULL PRIMARY KEY,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; version TEXT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; distribution TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FOREIGN KEY ( distribution ) REFERENCES distribution ( distribution )&lt;br /&gt;);&lt;/p&gt;&lt;p&gt;CREATE TABLE requires (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; distribution TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; module TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; version TEXT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phase TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PRIMARY KEY ( distribution, module, phase ),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FOREIGN KEY ( distribution ) REFERENCES distribution ( distribution ),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FOREIGN KEY ( module ) REFERENCES module ( module )&lt;br /&gt;);&lt;/p&gt;&lt;p&gt;CREATE TABLE dependency (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; distribution TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dependency TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phase TEXT NOT NULL,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PRIMARY KEY ( distribution, dependency, phase ),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FOREIGN KEY ( distribution ) REFERENCES distribition ( distribution ),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FOREIGN KEY ( dependency ) REFERENCES distribution ( distribution )&lt;br /&gt;);&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/PlanetPerl/~4/1-Yj2G0yvfM" height="1" width="1"/&gt;</content>
		<author>
			<name>Adam Kennedy</name>
			<uri>http://use.perl.org/~Alias/journal/</uri>
		</author>
		<source>
			<title type="html">Alias's Journal</title>
			<subtitle type="html">Alias's use Perl Journal</subtitle>
			<link rel="self" href="http://use.perl.org/~Alias/journal/rss" />
			<id>http://use.perl.org/~Alias/journal/rss</id>
			<updated>2009-07-13T04:21:49+00:00</updated>
			<rights type="html">use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners.</rights>
		</source>
	<feedburner:origLink>http://use.perl.org/~Alias/journal/39203?from=rss</feedburner:origLink></entry>

</feed>
