<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Perlblogs</title>
	<atom:link href="http://perlblogs.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://perlblogs.com</link>
	<description>Posts from selected Perl bloggers</description>
	<lastBuildDate>Tue, 09 Mar 2010 16:47:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Perlbuzz news roundup for 2010-03-09</title>
		<link>http://feedproxy.google.com/~r/PerlBuzz/~3/VsPK3suXzdg/perlbuzz-news-roundup-for-2010-03-09.html</link>
		<comments>http://feedproxy.google.com/~r/PerlBuzz/~3/VsPK3suXzdg/perlbuzz-news-roundup-for-2010-03-09.html#comments</comments>
		<pubDate>Tue, 09 Mar 2010 16:46:42 +0000</pubDate>
		<dc:creator>Andy Lester</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:perlbuzz.com,2010://1.762</guid>
		<description><![CDATA[
        
These links are collected from the
Perlbuzz Twitter feed.
If you have suggestions for news bits, please mail me at
andy@perlbuzz.com.




What's going on with San Francisco Perl Mongers? (blogs.perl.org)
Contributing is easy: A first-timer ta...]]></description>
			<content:encoded><![CDATA[
        <p>
These links are collected from the
<a href="http://twitter.com/perlbuzz">Perlbuzz Twitter feed</a>.
If you have suggestions for news bits, please mail me at
<a href="mailto:andy@perlbuzz.com">andy@perlbuzz.com</a>.
</p>

<ul>

<li>What's going on with San Francisco Perl Mongers? (<a href="http://blogs.perl.org/users/phred/2010/01/sfpm-annual-report-and-plans.html">blogs.perl.org</a>)</li>
<li>Contributing is easy: A first-timer talks about adding to CPAN (<a href="http://blogs.perl.org/users/david/2010/02/contributing-is-easy.html">blogs.perl.org</a>)</li>
<li>Help keep the world safe from SQL injection: (<a href="http://perlbuzz.com/2010/02/help-keep-the-world-safe-from-sql-injection.html">perlbuzz.com</a>)</li>
<li>How to learn how to get help in Perl (<a href="http://use.perl.org/~redspike/journal/40162">use.perl.org</a>)</li>
<li>The Perl Foundation wants your input on grant proposals for 2010 (<a href="http://news.perlfoundation.org/2010/02/2010q1_grant_proposals.html">news.perlfoundation.org</a>)</li>
<li>Why Ruby is prettier and Padre changes the Perl community (<a href="http://use.perl.org/~Alias/journal/40170">use.perl.org</a>)</li>
<li>Manage your Perl modules with git (<a href="http://www.effectiveperlprogramming.com/blog/60">effectiveperlprogramming.com</a>)</li>
<li>Call for papers for YAPC::NA 2010 in Columbus. Theme: Modern Perl 5 (<a href="http://news.perlfoundation.org/2010/02/yapcna_2010_call_for_papers.html">news.perlfoundation.org</a>)</li>
<li>Famous Perl One-Liners Explained part 5: Text conversion and substitution (<a href="http://www.catonmat.net/blog/perl-one-liners-explained-part-five/">catonmat.net</a>)</li>
<li>The Italians like ack, too (<a href="http://www.cattlegrid.info/blog/2009/11/ack-a-better-grep.html">cattlegrid.info</a>)</li>
<li>Bash completion for perldoc (<a href="http://blogs.perl.org/users/aristotle/2010/02/more-bash-completion-help-for-perldoc.html">blogs.perl.org</a>)</li>
<li>cpanminus, the new CPAN shell superstar (<a href="http://marcus.nordaaker.com/2010/02/cpanminus-the-new-cpan-superstar/">marcus.nordaaker.com</a>)</li>
<li>RT <a href="http://twitter.com/chromatic">@chromatic</a>_x Kudos to *many* active #perl 5 porters for the successful 5.11 release series: (<a href="http://ur1.ca/n5cv">ur1.ca</a>)</li>
<li>Testing a DB-intensive app (<a href="http://blog.urth.org/2010/02/testing-a-database-intensive-application.html">blog.urth.org</a>)</li>
<li>More news on the TPF wiki overhaul (<a href="http://use.perl.org/~perl6doc/journal/40211">use.perl.org</a>)</li>
<li>Do you still program in Perl? (<a href="http://www.reddit.com/r/programming/comments/b3vnu/do_you_still_program_in_perl/">reddit.com</a>)</li>
<li>Benchmarking is for losers, Profiling rulez! (<a href="http://blog.urth.org/2010/03/benchmarking-versus-profiling.html">blog.urth.org</a>)</li>
<li>Damian Conway's been posting a series of columns on vim: (<a href="http://blogs.perl.org/users/ovid/2010/03/whats-the-mad-doctor-doing.html">blogs.perl.org</a>)</li>
<li>Testing and looging with Dist::Zilla (<a href="http://rjbs.manxome.org/rubric/entry/1821">rjbs.manxome.org</a>)</li>
<li>Safe.pm 2.25 fixes security hole (<a href="http://blogs.perl.org/users/rafael_garcia-suarez/2010/03/new-safepm-fixes-security-hole.html">blogs.perl.org</a>)</li>
<li>Serving production web requests with the Catalyst development server (<a href="http://blog.afoolishmanifesto.com/archives/1303">blog.afoolishmanifesto.com</a>)</li>
</ul>
        
    <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=VsPK3suXzdg:-acereh4S5I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=VsPK3suXzdg:-acereh4S5I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=VsPK3suXzdg:-acereh4S5I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=VsPK3suXzdg:-acereh4S5I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=VsPK3suXzdg:-acereh4S5I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=VsPK3suXzdg:-acereh4S5I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/VsPK3suXzdg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://feedproxy.google.com/~r/PerlBuzz/~3/VsPK3suXzdg/perlbuzz-news-roundup-for-2010-03-09.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPAN Testers 2.0 end-February update and next steps</title>
		<link>http://www.dagolden.com/index.php/708/cpan-testers-2-0-end-february-update-and-next-steps/</link>
		<comments>http://www.dagolden.com/index.php/708/cpan-testers-2-0-end-february-update-and-next-steps/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 04:59:04 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=708</guid>
		<description><![CDATA[It&#8217;s never great to post an &#8220;end-February&#8221; report a week into March, but that&#8217;s how things are going lately.  I&#8217;ve been busy with family and work obligations that have meant less CT2.0 hacking.  I&#8217;m sorry this is coming late, but I hope I will give anyone interested a sense of where things stand.
I [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s never great to post an &#8220;end-February&#8221; report a week into March, but that&#8217;s how things are going lately.  I&#8217;ve been busy with family and work obligations that have meant less CT2.0 hacking.  I&#8217;m sorry this is coming late, but I hope I will give anyone interested a sense of where things stand.</p>
<p>I should note that the original deadline for finishing CT2.0 was March 1 and clearly we&#8217;re not there yet.  I&#8217;ve discussed the situation with Robert and Ask at the <a href="http://noc.perl.org/">Perl NOC</a>, and they&#8217;ve been willing to extend the deadline for cutting off CT1.0 for a while longer.  Thank you, Robert and Ask, for your understanding!</p>
<p>Progress in the last couple weeks:</p>
<ul>
<li>I did some alpha testing of the CT2.0 Metabase hosted on <a href="http://amazon.com/aws/">Amazon</a>.  Based on that, I revised yet again <em>(sigh)</em> the user registration/credentials approach to minimize the hassle for old and new registrants.</li>
<li>Florian Ragwitz wrote a <a href="http://www.catalystframework.org/">Catalyst</a> app to help distribute new credentials files to legacy CT1.0 users.  I haven&#8217;t deployed it yet (since I now need to regenerate all the credentials), but greatly appreciate his quick turnaround.</li>
<li>I implemented the Metabase search capabilities that Barbie will need to update the CPAN Testers statistics database.  This will be based on the excellent <a href="http://search.cpan.org/perldoc?SQL::Abstract">SQL::Abstract</a> approach to WHERE clause construction.</li>
<li>I wrote several helper modules to simplify configuration of a CPAN Testers metabase in preparation for deployment.  The first of these has already been uploaded to CPAN: <a href="http://search.cpan.org/perldoc?Net::Amazon::Config">Net::Amazon::Config</a></li>
<li>I finalized the &#8220;version 0&#8243; API for the Metabase web service and revised the interface between the Catalyst app and the Metabase to reflect the latest changes to the library.</li>
</ul>
<p>In the last several weeks, members the #catalyst and #moose IRC channels were very, very helpful and patiently answered my many stupid questions.  Thank you in particular to confound, perigrin, rafl, rjbs, stevan and t0m.</p>
<p>Coming up:</p>
<ul>
<li>Deploy all my new code onto the server for &#8220;beta&#8221; testing</li>
<li>Release all the code to CPAN that people will need to configure their clients for beta testing</li>
<li>Regenerate user profiles and deploy rafl&#8217;s app to distribute them to legacy users</li>
<li>Whip the server into production shape (e.g. proper boot scripts to auto-start the CT2.0 apps on restart)</li>
<li>Get back to work on legacy report migration</li>
</ul>
<p>It&#8217;s at the point now where I suspect the &#8220;hard thinking&#8221; part is pretty much done and it&#8217;s a lot of grotty but straightforward tasks to go.  Hopefully, beta testing won&#8217;t reveal any major issues and the end of March update will be focused on planning on orderly transition from CT1.0 to CT2.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/708/cpan-testers-2-0-end-february-update-and-next-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuration-Free CPAN Installations</title>
		<link>http://www.modernperlbooks.com/mt/2010/03/configuration-free-cpan-installations.html</link>
		<comments>http://www.modernperlbooks.com/mt/2010/03/configuration-free-cpan-installations.html#comments</comments>
		<pubDate>Sat, 06 Mar 2010 20:11:00 +0000</pubDate>
		<dc:creator>chromatic</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:www.modernperlbooks.com,2010:/mt//1.158</guid>
		<description><![CDATA[
        Module::Install
exists because installing CPAN distributions is not always perfectly
easy.

Unfortunately, it didn't help&#8212;at least, not entirely.  According to
the completely unscientific process by which I install CPAN distributions,
Mo...]]></description>
			<content:encoded><![CDATA[
        <p><a
href="http://www.modernperlbooks.com/mt/2010/03/whats-wrong-with-moduleinstall.html">Module::Install
exists because installing CPAN distributions is not always perfectly
easy</a>.</p>

<p>Unfortunately, it didn't help&mdash;at least, not entirely.  According to
the completely unscientific process by which I install CPAN distributions,
<code>Module::Install</code> accounts for a greater amount of pain than it
should, at least according to its frequency of use.  (Again, this is completely
<em>unscientific</em>.  I could guess that half of the CPAN client sessions
which encounter Module::Install require me to fix things manually, but it's
probably closer to 20%.  It's more memorable because of my severe dislike for
M::I <em>prompting</em> to install dependencies during configuration time.)</p>

<p>M::I addresses a real bootstrapping problem.  I want to be able to use
libraries during configuration, building, testing, and installation.  I don't
know which versions of those libraries you have available.  Bundling known-good
versions of those libraries with the distribution itself solves part of that
problem...</p>

<p>... except when it doesn't.  If I were to use M::I, I would have to
re-release all of my distributions for every new release of every bundled
library, at least if they contain important bug fixes for the various platforms
about which I care.  The cheap perfume of static linking leaves its musk heavy
in the air.</p>

<p>It's easy to fall into the trap of a false dilemma.  "You fool!" you prepare
to comment below.  "It's either that or the chaos of trying to make do with
whatever version of those dependencies users may or may not have installed on
their systems!"  You're right; those are two possibilities.  They're not the
only two possibilities.</p>

<p>Part of the real problem is that bootstrapping during configuration is much
too late.  By the time you're running the configuration system, you're already
running the configuration system.  If your version of the configuration system
is too old or too new, you have a problem.  Bail out?  Revert?  Upgrade?
There's no good heuristic for determining this.  (The CPAN itself has an
opinion.  That's part of the problem.)</p>

<p>M::I hackers do deserve credit for helping to develop the <em>META.yml</em>
standard.  (I think M::I is the wrong approach, but I intend no slight toward
its users, advocates, and developers.  Invention requires the courage to get
things wrong sometimes, even as it requires the courage to abandon false
leads.) The <a
href="http://module-build.sourceforge.net/META-spec-current.html">META.yml</a>
specification is a big step in the right direction.  If <em>most</em> CPAN
modules have static requirements and follow a standard set of conventions,
there's little or no configuration necessary.  A sufficiently smart CPAN client
can perform the appropriate configuration without running code from the
distribution itself.</p>

<p>You can't avoid that in all cases; distributions with XS components, for
example, need to probe system information.  Good luck writing a sufficiently
smart CPAN client and getting the community to agree on specific standards that
let you find OpenGL headers in a cross-platform fashion, for example.  Yet if
80% of CPAN distributions can get by with static, upload-time configuration, a
lot of complexity of installation can go away.</p>

<p>Yes, that would make <code>Module::Build</code> and
<code>ExtUtils::MakeMaker</code> unnecessary for (probably) most CPAN
distributions, at least at the point of configuration, building, and
installation.  (I'm a recent fan of <a
href="http://search.cpan.org/perldoc?Dist::Zilla">Dist::Zilla</a> for
automating away tedium on behalf of distribution maintainers; there's less need
for <code>Module::Install</code> in such a world.  If I never write another
<em>Build.PL</em> again, so much the better.)</p>

<p>That helps, but the real problem with CPAN installations is that the CPAN
itself is merely an uploading, indexing, and mirroring system.  Projects such
as <em>META.yml</em> attempt to add (and extract) meaning from the system, but
they cannot work around one fundamental design feature of the CPAN.
<em>That</em> limitation is the source of most woes for end users.</p>

<p>Clever readers (or experienced CPAN users) have already identified this
limitation.  I'll reveal it in the next installment.</p>

        
    ]]></content:encoded>
			<wfw:commentRss>http://www.modernperlbooks.com/mt/2010/03/configuration-free-cpan-installations.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 99% Rule</title>
		<link>http://www.modernperlbooks.com/mt/2010/03/the-99-rule.html</link>
		<comments>http://www.modernperlbooks.com/mt/2010/03/the-99-rule.html#comments</comments>
		<pubDate>Wed, 03 Mar 2010 00:41:02 +0000</pubDate>
		<dc:creator>chromatic</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:www.modernperlbooks.com,2010:/mt//1.157</guid>
		<description><![CDATA[
        David Golden praised Tatsuhiko Miyagawa's excellent new cpanminus CPAN client in The power of not being all things to all people.  You should consider using cpanminus.

Don't overlook something else insightful that David wrote:

It's a lot of ...]]></description>
			<content:encoded><![CDATA[
        <p>David Golden praised Tatsuhiko Miyagawa's excellent new <a href="http://search.cpan.org/perldoc?App::cpanminus">cpanminus</a> CPAN client in <a href="http://www.dagolden.com/index.php/689/the-power-of-not-being-all-things-to-all-people/">The power of not being all things to all people</a>.  You should consider using cpanminus.</p>

<p>Don't overlook something else insightful that David wrote:</p>

<blockquote>It's a lot of work to be all things to all people and I keep wondering whether making things simpler and better for 99% of people would be a better choice.</blockquote>

<p>The only reliable way I've ever seen to "make the easy things easy and the hard things possible" is to make the easy things the default without preventing customization of the hard things.  That's a design principle for languages, APIs, and tools.</p>

<p>Figure out what's most common (though not necessarily what people think they want, but what they need).  Optimize for that.  Consider what they might need and don't prevent it.</p>

<p>That's not easy, and what people need will change over time, but if you want to solve problems well, you have to solve the right problems.</p>
        
    ]]></content:encoded>
			<wfw:commentRss>http://www.modernperlbooks.com/mt/2010/03/the-99-rule.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The power of not being all things to all people</title>
		<link>http://www.dagolden.com/index.php/689/the-power-of-not-being-all-things-to-all-people/</link>
		<comments>http://www.dagolden.com/index.php/689/the-power-of-not-being-all-things-to-all-people/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 23:35:03 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=689</guid>
		<description><![CDATA[The Perl community seems abuzz about the cool new cpanminus client by Tatsuhiko Miyagawa.  After about two weeks of development, this is a reasonably functional CPAN client with just a fraction of the overhead, complexity and verbosity of the CPAN and CPANPLUS clients that come with the Perl core.
It&#8217;s a remarkable achievement, not only [...]]]></description>
			<content:encoded><![CDATA[<p>The Perl community seems abuzz about the cool new <b><a href="http://search.cpan.org/perldoc?App::cpanminus">cpanminus</a></b> client by <a href="http://bulknews.typepad.com/">Tatsuhiko Miyagawa</a>.  After about two weeks of development, this is a reasonably functional CPAN client with just a fraction of the overhead, complexity and verbosity of the <a href="http://search.cpan.org/perldoc?CPAN">CPAN</a> and <a href="http://search.cpan.org/perldoc?CPANPLUS">CPANPLUS</a> clients that come with the Perl core.</p>
<p>It&#8217;s a remarkable achievement, not only technically, but in the reaction it has sparked.  As one of the (sometimes reluctant) maintainers of CPAN and CPANPLUS, I&#8217;ve realized that I both love and hate cpanminus.</p>
<ul>
<li>I love that Miyagawa has done so much with so little and in such a short span of time</li>
<li>I hate that fanboy-types flocked to it and trashed the older clients without noting cpanminus&#8217; limitations</li>
<li>I love that Perl toolchain maintainers have rallied around Miyagawa and contributed their wisdom to make cpanminus better instead of rejecting it</li>
<li>I hate that one of Perl&#8217;s great strengths (CPAN) has legacy clients that are so unwieldy, hated and difficult to maintain</li>
</ul>
<p>Miyagawa graciously acknowledges standing on the shoulders of giants.  Still, I can&#8217;t shake the nagging thought that cpanminus should never have been necessary in the first place.</p>
<p>What I&#8217;ve come to realize is that <strong>cpanminus is another example of the power of not being all things to all people</strong>.  Miyagawa doesn&#8217;t promise that it works for all of CPAN or that it works everywhere that Perl does.  He doesn&#8217;t have to.  Making it work for 99% of CPAN for 99% of people is more than good enough.</p>
<p>I&#8217;ve been co-maintaining various parts of the Perl toolchain for a while now.  It&#8217;s a frustrating challenge needing to make thing work everywhere, for everything, and trying as hard as possible not to break backwards compatibility.  Plus, I don&#8217;t even get to use CPAN to make life easier.  I don&#8217;t get to use handy tools like <a href="http://search.cpan.org/perldoc?Moose::Manual">Moose</a> or <a href="http://search.cpan.org/perldoc?DateTime">DateTime</a> or <a href="http://search.cpan.org/perldoc?Regexp::Common">Regexp::Common</a> or <a href="http://search.cpan.org/perldoc?DBD::SQLite">SQLite</a> or anything in the Config::* namespace or even basic tools like <a href="http://search.cpan.org/perldoc?Archive::Zip">Archive::Zip</a>.  Nearly everything is done by hand. </p>
<p>Things have to work with just core Perl on a diverse set of platforms and with an incredibly limited set of assumptions.  For example, the Perl core <em>still</em> doesn&#8217;t come with an HTTP client, so CPAN has to rely on FTP or command line programs to bootstrap LWP.  (This is something I personally plan to tackle during the Perl 5.13 development series later this year.)</p>
<p>I think this is an ongoing challenge for core Perl development in general.  It&#8217;s a lot of work to be all things to all people and I keep wondering whether making things simpler and better for 99% of people would be a better choice.  (Anyone else for <code>use strict</code> by default?  I hope that finally comes to pass in Perl 5.14.)  chromatic writes about this topic often in his <a href="http://www.modernperlbooks.com/">Modern Perl blog</a> and I usually tend to agree with the points he makes.  (<strike>October</strike> <a href="http://www.modernperlbooks.com/mt/2009/02/">February 2009</a> had a particularly good series of posts.)</p>
<p>In the meantime, I look at cpanminus with greed and envy.  Miyagawa++</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/689/the-power-of-not-being-all-things-to-all-people/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s Wrong with Module::Install</title>
		<link>http://www.modernperlbooks.com/mt/2010/03/whats-wrong-with-moduleinstall.html</link>
		<comments>http://www.modernperlbooks.com/mt/2010/03/whats-wrong-with-moduleinstall.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 23:33:39 +0000</pubDate>
		<dc:creator>chromatic</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:www.modernperlbooks.com,2010:/mt//1.156</guid>
		<description><![CDATA[
        I've never liked ExtUtils::MakeMaker.  I've liked Module::Build from the beginning.  I've never, ever liked Module::Install, even though Ingy sat in my living room and hacked on what would eventually become M::I way back several years ago.

I ...]]></description>
			<content:encoded><![CDATA[
        <p>I've never liked <a href="http://search.cpan.org/perldoc?ExtUtils::MakeMaker">ExtUtils::MakeMaker</a>.  I've liked <a href="http://search.cpan.org/perldoc?Module::Build">Module::Build</a> from the beginning.  I've never, ever liked <a href="http://search.cpan.org/perldoc?Module::Install">Module::Install</a>, even though <a href="http://ingy.net/">Ingy</a> sat in my living room and hacked on what would eventually become M::I way back several years ago.</p>

<p>I don't believe <a href="http://chris.prather.org/shot-on-sight.md.html">people who use Module::Install should be shot on sight</a>, but I do believe that Module::Install has set the usability of the CPAN back by several years.</p>

<p>Ingy <em>did</em> identify a real problem: there's too much code strewn about the configuration and build systems of the CPAN and not enough code shared.  When he found himself writing something complicated to configure, compile, and install a new distribution, he'd crib code from someone like Tim Bunce or Graham Barr or Nick Ing-Simmons.  In other words, to make the CPAN&mdash;perhaps the world's largest repository of redistributable and sharable library code&mdash;work, he had to copy and paste code.</p>

<p>M::I did get that right; turning the configuration and build system into reusable, redistributable libraries also available from the CPAN helped reduce the amount of boilerplate code and the amount of copy and paste code in configuration systems.  The people behind M::I have also helped push for better configuration of CPAN clients and better tracking of dependencies and versions and types of dependencies (optional, compilation, bundling, testing, et cetera).  The CPAN ecosystem is better off for that work, even though M::I itself isn't the answer.</p>

<p>One of M::I's biggest failings, of course, is that it prolongs the lifespan of EU::MM.  Unfortunately, I think Ingy missed the big problem when he saw copy and paste code.  To do anything reasonably complex with EU::MM, you have to be able to write Perl 5 code which generates (and modifies with regular expressions) cross-platform Makefiles which themselves call into Perl 5 code because Perl 5 has a sane baseline of well-understood and reliable behavior across platforms in a way that Makefiles and shells do not.</p>

<p>If that's not sufficient horror, consider that the way to customize EU::MM behavior the last time I looked at it (Two notes here.  First, its current maintainer <em>refuses</em> to add new features or change existing features because it's so awful to maintain.  Second, I wrote tests for some of those behaviors, so I've read and understood the code.) you write a custom <em>superclass</em> called <code>MY</code> from which EU::MM <em>inherits</em> to change the behavior of the various steps of generating cross-platform Makefiles which may or may not invoke Perl 5 to perform shell functions.</p>

<p>I am not making this up and I did not make any typos.  EU:MM <em>inherits from</em> your custom class.</p>

<p>Keeping EU::MM viable long past the point where Module::Build did everything n a saner way is but a little crime.  (There's a reason almost no one recommends the use of <code>h2xs</code> to make skeletons for new modules anymore; most new modules aren't mere wrappers around C libraries.  The need for a compilation step with a pure-Perl distribution seems more than a little bit superfluous.)</p>

<p>Module::Install reinvoking your current CPAN client recursively to install dependencies when your current CPAN client already has a perfectly good way to install dependencies is a slightly larger crime.  (I understand the justification; what if someone is trying to install a distribution from a tarball manually without a CPAN client, but is there a Principle of Least Possible Differentiation at work with that design choice?)</p>

<p>I don't particularly care that using M::I as a distribution maintainer means that you have to keep track of every new release of M::I which could fix bugs or make upgrading impossible and release a new version of every one of your distributions with the new M::I because of its autobundling problems, because if you get your kicks that way, more power to you.  (Don't expect me to jump up and down for joy at upgrading all of your distributions on my machines, though.)</p>

<p>I never particularly cared for the FUD about Module::Build from some M::I discussions, especially the nonsense about "Module::Build doesn't support <code>--install</code> so it spews files all over the place!" (as if EU::MM ever worked properly there) or "Module::Build doesn't support uninstalling!" (as if anyone ever used that from the CPAN client to know that it worked with <em>any</em> system.)</p>

<p>I appreciate that Module::Install provided a much nicer interface than EU::MM did, and that that interface worked transparently to hide the nasty details of EU::MM.  Those are true benefits, and I don't blame anyone for choosing M::I for that reason.</p>

<p>Even so, Module::Install's greatest crime is that it's been a distraction from identifying and fixing the real problems of the CPAN... but that's another post.</p>
        
    ]]></content:encoded>
			<wfw:commentRss>http://www.modernperlbooks.com/mt/2010/03/whats-wrong-with-moduleinstall.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl 5, Support, and Bugfixes</title>
		<link>http://www.modernperlbooks.com/mt/2010/02/perl-5-support-and-bugfixes.html</link>
		<comments>http://www.modernperlbooks.com/mt/2010/02/perl-5-support-and-bugfixes.html#comments</comments>
		<pubDate>Fri, 26 Feb 2010 21:34:55 +0000</pubDate>
		<dc:creator>chromatic</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:www.modernperlbooks.com,2010:/mt//1.155</guid>
		<description><![CDATA[
        I wrote what I understand to be the strategy behind releasing new minor releases of Perl 5.  Though the development branch of Perl 5 follows a monthly release cycle, the maintenance branch currently does not.  If it's difficult to predict what...]]></description>
			<content:encoded><![CDATA[
        <p>I wrote what I understand to be <a href="http://www.modernperlbooks.com/mt/2010/02/the-unwritten-rules-of-perl-5-minor-releases.html">the strategy behind releasing new minor releases of Perl 5</a>.  Though the development branch of Perl 5 follows a monthly release cycle, the maintenance branch currently does not.  If it's difficult to predict what changes volunteer developers will make in the future, it's doubly difficult to predict which bugs they will fix (or will need to fix).</p>

<p>Thus any support document must explain the responsibilities of <em>users</em> who encounter bugs and what they should expect from developers.</p>

<p>A bug you discover in a new major release of Perl 5 is a candidate for a new minor release if it is:</p>

<ul>

<li>A security or dataloss bug</li>
<li>A regression introduced in the new major release</li>
<li>A failure to build on a supported platform combination</li>
<li>A failing core test on a supported platform</li>

</ul>

<p>I've organized that list in rough order of decreasing severity.  The most likely candidate for a fix is the second; it indicates an undertested aspect of the system.  Behavior should not change between Perl 5 releases accidentally.  If a patch modified behavior on which your code depends and if that change did not occur as part of a deliberate, communicated plan, a fix is likely.</p>

<p>Of course, any fix in a minor release needs to maintain binary compatibility within the release family.</p>

<p>The easiest way (at least for developers) to find and fix such bugs is before the release of a new major version of Perl 5.  That's one goal of the monthly releases: to encourage you to test all of the code you care about with versions of Perl 5 in development.  That's also one reason for the Perl 5 release candidates (though it's likely too late for big fixes by then).</p>

<p>If you can't do that, the next step to reporting a bug is to reproduce it in
the smallest example possible.  10-15 lines of Perl 5 is good.  2-3 is ideal.
More than 20 is usually too big.  If you can provide a test case suitable for
adding to the core test suite, so much the better.  From there, test your code
with multiple releases of Perl 5.  It helps to browse the <a
href="http://perldoc.perl.org/perldelta.html">perldelta</a> documentation, but
the amount of detail between even minor releases can be daunting.  A post on <a
href="http://www.perlmonks.org/">PerlMonks</a> is a good step.</p>

<p>If you've gone through all of that, see <a href="http://perldoc.perl.org/perlbug.html">perldoc perlbug</a>.</p>

<p>This is all no guarantee that your bug will get fixed in a minor version&mdash;you should prepare for the possibility that, given enough time since the release of the corresponding major version, the best approach for p5p is <em>not</em> to backport a fix to a new minor version.  Even so, you will likely get one of several options:</p>

<ul>
<li>An explanation of why it's not a bug</li>
<li>A suggested workaround</li>
<li>A fix in the current version</li>
</ul>

<p>In the latter case, you will have the option of applying the relevant patch yourself or asking someone to backport it to your own custom Perl 5 if you wish.  That may not seem like the ideal situation (it isn't!), but at least with free software such as Perl, you always have that option.</p>
        
    ]]></content:encoded>
			<wfw:commentRss>http://www.modernperlbooks.com/mt/2010/02/perl-5-support-and-bugfixes.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The (Unwritten) Rules of Perl 5 Minor Releases</title>
		<link>http://www.modernperlbooks.com/mt/2010/02/the-unwritten-rules-of-perl-5-minor-releases.html</link>
		<comments>http://www.modernperlbooks.com/mt/2010/02/the-unwritten-rules-of-perl-5-minor-releases.html#comments</comments>
		<pubDate>Wed, 24 Feb 2010 19:30:01 +0000</pubDate>
		<dc:creator>chromatic</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:www.modernperlbooks.com,2010:/mt//1.154</guid>
		<description><![CDATA[
        When a new major version of Perl 5 comes out, history suggests a new minor release will follow.

Some of this reasoning is pragmatic.  For all of the requests of the Perl 5
Porters for people to test development snapshots (5.11.0 through 5.11....]]></description>
			<content:encoded><![CDATA[
        <p>When <a href="http://www.modernperlbooks.com/mt/2010/02/what-perl-5s-version-numbers-mean.html">a new major version of Perl 5 comes out</a>, history suggests a new minor release will follow.</p>

<p>Some of this reasoning is pragmatic.  For all of the requests of the Perl 5
Porters for people to test development snapshots (5.11.0 through 5.11.5) and
the inevitable release candidates (in this case, 5.12.0 RC1 through...
hopefully not RC2 and RC3), nothing gets more testing or bug reports than new
major releases.  Bugs get reported.  Changes get requested.  Changes occur.</p>

<p>The traditional view of new major releases is that they're somewhat
unstable.  "Wait for the patch release," people say.  This was true of 5.6.0.
(The ancient Camel third edition describes an unreleased version of Perl 5
somewhere between 5.6.0 and 5.6.1).  This was true of 5.8.0.  This was even
more true of 5.10.0, where the CPAN itself suggested that 5.10.0 was a
"testing" release for bleeding edge users.</p>

<p>Given the size of the Perl 5 test suite and the daily and weekly test
reports produced from the bleeding edge of Perl 5 itself as well as the monthly
releases, most of the obvious bugs appear and get corrected quickly.  Even so,
bugs happen.  It's software.  Changes occur and people notice only in odd or
complex situations.  Sometimes a new compiler warning appears, or underlying
libraries change.  Sometimes a few updates help get Perl 5 building on a
platform which itself has changed.</p>

<p>A patch release is inevitable.</p>

<p>However, the Perl 5 Porters make no promises about <em>when</em> a point
release will occur.  Nor do they promise how many point releases will occur in
a family.</p>

<p>The Perl 5.8.0 family had nine point releases between July 2002 and December
2008.  If Perl 5.10 hadn't taken five and a half years, Perl 5.8.0 might have
had fewer point releases.</p>

<p>22 months passed between the release of Perl 5.10.0 and Perl 5.10.1.  There
may never be a 5.10.2.</p>

<p>A point release needs two things: a steady stream of bug fixed in the core
without breaking source compatibility and someone to identify appropriate those
patches and to make the release.  In other words, one or more people need to be
able to cherry-pick patches from the development track of the <em>next</em>
release of Perl 5 to the branch which will become the new point release.  The weight of history and expectations is sufficient to assume that p5p will be able to find or herd enough volunteer effort to make a Perl 5.12.1 and a Perl 5.14.1 and so on, but if monthly Perl 5 releases continue and produce a new major release every 12-18 months, the likelihood of a Perl 5.12.2 and a Perl 5.14.2 decreases.</p>

<p>The single unpredictable factor is the presence of a major bug discovered in that release family; a major security bug or a data loss bug is one possibility.  In that case, a single-patch minor release is likely.  Beyond that, minor releases have diminishing returns.</p>
        
    ]]></content:encoded>
			<wfw:commentRss>http://www.modernperlbooks.com/mt/2010/02/the-unwritten-rules-of-perl-5-minor-releases.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPAN Testers 2.0: Interim milestone</title>
		<link>http://www.dagolden.com/index.php/685/cpan-testers-2-0-interim-milestone/</link>
		<comments>http://www.dagolden.com/index.php/685/cpan-testers-2-0-interim-milestone/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 04:59:35 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=685</guid>
		<description><![CDATA[This is just a quick note to say that I&#8217;ve successfully configured a test CT2.0 server hosted entirely on Amazon Web Services.  I&#8217;ve also successfully sent test reports to it from my regular CPAN::Reporter client using Test::Reporter::Transport::Metabase.  It&#8217;s the first end-to-end test of the target architecture for CT2.0.
There are some tweaks I need [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a quick note to say that I&#8217;ve successfully configured a <a href="http://metabase.cpantesters.org/">test CT2.0 server</a> hosted entirely on <a href="http://aws.amazon.com/">Amazon Web Services</a>.  I&#8217;ve also successfully sent test reports to it from my regular <a href="http://search.cpan.org/dist/CPAN-Reporter/">CPAN::Reporter</a> client using <a href="http://search.cpan.org/dist/Test-Reporter-Transport-Metabase/">Test::Reporter::Transport::Metabase</a>.  It&#8217;s the first end-to-end test of the target architecture for CT2.0.</p>
<p>There are some tweaks I need to make before I&#8217;m ready to open it up to beta testing, and all the updated module are still in git and not yet CPAN, but there is a light at the end of the tunnel and (so far) I don&#8217;t think it&#8217;s a train.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/685/cpan-testers-2-0-interim-milestone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl 5, Version Numbers, and Binary Compatibility</title>
		<link>http://www.modernperlbooks.com/mt/2010/02/perl-5-version-numbers-and-binary-compatibility.html</link>
		<comments>http://www.modernperlbooks.com/mt/2010/02/perl-5-version-numbers-and-binary-compatibility.html#comments</comments>
		<pubDate>Mon, 22 Feb 2010 21:21:07 +0000</pubDate>
		<dc:creator>chromatic</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">tag:www.modernperlbooks.com,2010:/mt//1.153</guid>
		<description><![CDATA[
        As mentioned in What Perl 5's Version Numbers Mean, the written Perl 5 support policy must explain several guidelines and their implications.

If you've ever upgraded between major versions of Perl 5 on the same machine, you've likely noticed ...]]></description>
			<content:encoded><![CDATA[
        <p>As mentioned in <a href="http://www.modernperlbooks.com/mt/2010/02/what-perl-5s-version-numbers-mean.html">What Perl 5's Version Numbers Mean</a>, the written Perl 5 support policy must explain several guidelines and their implications.</p>

<p>If you've ever upgraded between major versions of Perl 5 on the same machine, you've likely noticed that you have to install new versions of modules.  Various resources spread across the Internet suggest the use of <a href="http://search.cpan.org/~jhi/perl-5.8.0/lib/CPAN.pm#autobundle">CPAN autobundles</a>, but even that's likely enough to make you curse a little bit as you babysit a CPAN shell for an hour or two to get back to where you started.</p>

<p>This is due to the binary compatibility guidelines to which the Perl 5
Porters adhere.  While there's a strong desire to ensure that programs and
modules written in the past several years will continue to work unmodified on
new major versions of Perl 5, it's almost impossible to ensure that
<em>compiled</em> XS code remains compatible across major versions of Perl
5.</p>

<p>Certainly the porters attempt to maintain <em>source code</em> compatibility
of XS wherever possible, but ensuring that an XS module compiled in 2000 for
Perl 5.6.0 will continue to work unchanged on Perl 5.12 in 2010 requires a
great deal of foresight, plenty of tolerance for workarounds in the core, and
no small amount of luck.  There's a limit to what's practical to provide for
how long, and the price of reinstalling extensions (and recompiling a few) is
worthwhile.</p>

<p>While this choice may seem odd, considering the degree to which Perl 5
retains backwards compatibility, it reflects a philosophy from the earliest
days of Unix: source compatibility is important, but everyone should have
access to the source code to recompile as necessary.</p>

<p>Within a release family&mdash;Perl 5.8.0 through 5.8.9, for
example&mdash;the porters attempt to maintain binary compatibility.  If you
installed <a href="http://search.cpan.org/perldoc?DBI">DBI</a> on a fresh Perl
5.8.0, it should continue to work even if you install 5.8.9 and remove 5.8.0.
That's the intent.</p>

<p>Note that the Perl 5 configuration and installation process enforces this by
default; minor releases within a major release family reuse the same module
installation paths.  Major releases have new installation paths.  You can
reconfigure Perl 5 to use paths of your choosing, but you do so at your own
risk.</p>
        
    ]]></content:encoded>
			<wfw:commentRss>http://www.modernperlbooks.com/mt/2010/02/perl-5-version-numbers-and-binary-compatibility.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
