<?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>dagolden &#187; toolchain</title>
	<atom:link href="http://www.dagolden.com/index.php/category/toolchain/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dagolden.com</link>
	<description>Whatever comes to mind</description>
	<lastBuildDate>Tue, 31 Aug 2010 03:17:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Torture testing CPAN::Meta</title>
		<link>http://www.dagolden.com/index.php/853/torture-testing-cpanmeta/</link>
		<comments>http://www.dagolden.com/index.php/853/torture-testing-cpanmeta/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 02:26:42 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[cpan]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=853</guid>
		<description><![CDATA[To be useful for CPAN indexers like search.cpan.org, the new CPAN::Meta library has to be pretty good at dealing with whatever CPAN can throw at it. A while ago, I put together a test sample of 15,569 CPAN metadata files from a minicpan repository. I'm happy to report that with the latest release today, CPAN::Meta [...]]]></description>
			<content:encoded><![CDATA[<p>To be useful for CPAN indexers like <a href="http://search.cpan.org/">search.cpan.org</a>, the new <a href="http://search.cpan.org/dist/CPAN-Meta/">CPAN::Meta</a> library has to be pretty good at dealing with whatever CPAN can throw at it.</p>
<p>A while ago, I put together a test sample of 15,569 CPAN metadata files from a <a href="http://search.cpan.org/perldoc?minicpan">minicpan</a> repository. I'm happy to report that with the latest release today, CPAN::Meta can handle almost 99% of metafiles found "in the wild". Here is the breakdown:</p>
<ul>
<li>no errors: 11411 (73.29%)</li>
<li>fixable errors: 3994 (25.65%)</li>
<li>parser errors: 124 (0.80%)</li>
<li>missing 'name' or 'version' fields: 32 (0.21%)</li>
<li>remaining errors (not fixable): 8 (0.05%)</li>
</ul>
<p>The "unfixable" errors range from missing mandatory fields deep within the structure that can't be assumed from context to invalid module names or else just strange data that somehow slipped into a metafile.</p>
<p>The "torture" part of the test was partly a test of my own patience, since I was tweaking CPAN::Meta and re-running the test against the 15,000 distributions over and over again.  One quick-win worth mentioning was <a href="http://search.cpan.org/perldoc?Parallel::Iterator">Parallel::Iterator</a>, which let me take advantage of all four cores of my CPU.  As expected, it cut the runtime by nearly three-quarters (11.5 seconds vs 38.3 seconds).  If anyone is interested in seeing how I used it, my quick-and-dirty <a href="http://gist.github.com/429506">CPAN::Meta torture program</a> is available online.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/853/torture-testing-cpanmeta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I&#039;m using Dist::Zilla</title>
		<link>http://www.dagolden.com/index.php/752/why-im-using-distzilla/</link>
		<comments>http://www.dagolden.com/index.php/752/why-im-using-distzilla/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 03:22:43 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[cpan]]></category>
		<category><![CDATA[dzil]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=752</guid>
		<description><![CDATA[Dist::Zilla (dzil, for short) has been a fabulous addition to my Perl toolbox. I've seen some blog posts and IRC comments that have a range of reactions along with some general confusion over what the big deal is, so I'm adding my own thoughts to the debate. Dist::Zilla is modular, not monolithic Part of the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://dzil.org/">Dist::Zilla</a> (dzil, for short) has been a fabulous addition to my <a href="http://perl.org/">Perl</a> toolbox.  I've seen some blog posts and IRC comments that have a range of reactions along with some general confusion over what the big deal is, so I'm adding my own thoughts to the debate.</p>
<h2>Dist::Zilla is modular, not monolithic</h2>
<p>Part of the confusion about dzil is that it can do a lot of different things and not everyone likes everything it can do.  At its core, dzil is just a CPAN distribution release manager:</p>
<ul>
<li><strong>Collect distribution files into a distribution directory</strong></li>
<li><strong>Create a tarball of the directory</strong></li>
</ul>
<p>This is no big deal -- it duplicates the functionality of ExtUtils::MakeMaker, Module::Build and Module::Install.  The difference is that it <strong>doesn't require running Makefile.PL or Build.PL</strong> to work.</p>
<p>What does this do for us?  How does this help a Perl programmer release stuff to CPAN? <small><em>(Hi, TIOBE!)</em></small></p>
<p>With dzil, <strong>a developer can customize the release process outside Makefile.PL or Build.PL</strong>, which means that end-users never need to know about it.  They don't need prerequisites just to run the PL file, they don't need things tucked away in inc/, they don't need to write Makefile snippets, and so on.</p>
<p>Instead, developers can extend dzil with plugins that stay on their development machine. Almost everything in dzil is a plugin -- there is no distinction between "core" behavior and "add-ons".  Unlike Module::Build, which is easy to subclass once but makes it hard to "mix-in" subclass functionality, dzil is built from the ground up to coordinate the behavior of multiple plugins.  This lets a developer mix and match useful functions whenever desired.</p>
<p>For example, it's easy to add a plugin to upload things to CPAN automatically.  Once added, here's what dzil does for me:</p>
<ul>
<li>Collect distribution files into a distribution directory</li>
<li>Create a tarball of the directory</li>
<li><strong>Upload the tarball to CPAN</strong></li>
</ul>
<h2>Replacing existing release scripts with Dist::Zilla</h2>
<p>Before dzil, I already had some personal scripts that I wrote years ago to manage my uploads.  They worked, but were hard to extend and customize to do different things for different distributions.  I used them to do some useful sanity checks on my distributions before uploading.</p>
<p>But dzil can provide the same functionality through yet more plugins, which lets dzil manage my distributions like this:</p>
<ul>
<li>Collect distribution files into a distribution directory</li>
<li><strong>Make sure everything is checked into git</strong></li>
<li><strong>Make sure distribution tests pass</strong></li>
<li><strong>Tag the release with git</strong></li>
<li><strong>Push the tag to my git repo</strong></li>
<li>Create a tarball of the directory</li>
<li>Upload the tarball to CPAN</li>
</ul>
<p>If I find that someone has already written other useful pre-release plugins, I can just drop them in:</p>
<ul>
<li><strong>Make sure additional tests in the <em>xt/</em> directory pass</strong></li>
<li><strong>Make sure I've written something in the <em>Changes</em> file</strong></li>
</ul>
<p>One of the knocks on dzil is that the files in your repository aren't the same as the final release but note that in the examples above <strong>no files have been modified before release</strong>.  </p>
<p>dzil <em>can</em> do that -- and I'll show how and why I use it that way -- but that's a choice that every developer can make.  Even without it, I can benefit from all the release management plugins that people write -- something that I never could do with my homegrown release scripts.  <strong>Cool!</strong></p>
<h2>Letting Dist::Zilla automate busywork</h2>
<p>If you're ready to take the next step with dzil, you can have it produce boilerplate files in your distribution -- things that ought to be there, but that you don't really need in the repository or that should be generated on the fly.    This can include simple text files like LICENSE, but when you realize that <strong>you no longer need your Makefile.PL or Build.PL file to build your distribution</strong>, you can let dzil fill in the blanks of a generic template for those, too!  You can even let it take a guess at your prerequisites, eliminating one more thing to remember to update before release.</p>
<p>Now my release process in dzil might look like this:</p>
<ul>
<li>Collect distribution files into a distribution directory</li>
<li><strong>Examine the code to find prerequisites (including minimum versions)</strong></li>
<li><strong>Generate a Makefile.PL (or Build.PL)</strong></li>
<li><strong>Generate a MANIFEST</strong></li>
<li><strong>Generate a META.yml and/or META.json files</strong></li>
<li><strong>Generate a LICENSE file</strong></li>
<li><strong>Generate a README file from the main module's Pod</strong></li>
<li><strong>Generate some generic *.t files</strong></li>
<li>Make sure everything is checked into git</li>
<li>Make sure distribution tests pass</li>
<li>Make sure additional tests in the <em>xt/</em> directory pass</li>
<li>Make sure I've written something in the <em>Changes</em> file</li>
<li>Tag the release with git</li>
<li>Create a tarball of the directory</li>
<li>Upload the tarball to CPAN</li>
</ul>
<p>And I still haven't <strong>modified</strong> any files -- I'm only adding files in the distribution directory so I don't have to generate them in the first place or maintain them by hand anymore.</p>
<p>But wait! <strong>Without a Makefile.PL or a Build.PL, how do you test the distribution?</strong></p>
<p>You can do it one of two ways:</p>
<pre class="brush: plain;">
$ prove -l t
$ dzil test
</pre>
<p>The first will just run your tests using the files in lib/ under prove (add the -v flag if you want, or specify a particular file to test).  The second will go through all the steps of building the distribution directory and generating files and then will run Makefile.PL (or Build.PL) and "make test" ("Build test") <strong>within</strong> the generated distribution.</p>
<p>If you're willing to take the next step and let dzil modify your files as it puts them into the distribution directory, you can start leaving out boilerplate from your files and have dzil add it automatically.  It can also figure out easily computed things -- like the next version number to use -- and add those too.</p>
<p>Here are some of the things I let it do for me:</p>
<ul>
<li><strong>Calculate the next version and write $VERSION into my files</strong></li>
<li><strong>Find an abstract and write a NAME section in the Pod for every module</strong></li>
<li><strong>Write the $VERSION into the Pod for every module</strong></li>
<li><strong>Add AUTHORS and COPYRIGHT sections to the Pod for every module</strong></li>
<li><strong>Add a formal copyright and license statement to every file</strong></li>
<li><strong>Translate the <a href="http://search.cpan.org/perldoc?Pod::WikiDoc">WikiDoc</a> Pod dialect I prefer into regular Pod</strong></li>
<li><strong>Add the $VERSION and timestamp to my Changes file</strong></li>
</ul>
<p>That's a lot of busy-work I no longer have to think about.  I can just focus on code and tests and leave all the scaffolding to dzil.  As the number of distributions I maintain grows, that's a huge time savings and it enforces rigor and consistency to my releases.  I will never again forget to timestamp a Changes file, or rather, I can now <strong>always</strong> forget and just let dzil do it for me.</p>
<p>It does mean that sometimes I'll get a bug report or a patch against the release and I have to do a little extra work to translate it back to a fix in the repository when line numbers don't quite match.  This is a cost that I'm willing to bear in exchange for the productivity boost I get the rest of the time.</p>
<h2>Whether to use Dist::Zilla and how you can get started</h2>
<p>Hopefully, I've shown how dzil is useful and how you can choose to use as much or as little as you'd like.  Nevertheless, here are some reasons why you might not want to use it, or at least not yet:</p>
<ul>
<li>There is limited support (so far) for customizing the build process, supporting dynamic (e.g. OS-specific) prerequisites and building XS modules.  This is getting better as authors write new plugins -- see <a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::MakeMaker::Awesome">Dist::Zilla::Plugin::MakeMaker::Awesome</a> as an example.</li>
<li>There are lots of plugins to keep track of and configuring them manually in each distribution can feel a bit tedious.  Some authors have been writing <a href="http://search.cpan.org/search?query=pluginbundle&#038;mode=module">PluginBundles</a> to encapsulate their default configuration.  Will every author need one of these or will some sort of global configuration be possible?  These are questions still being worked out.</li>
<li>Collaboration is a bit harder.  Ideally, any collaborators will install the same set of dzil plugins that you have and can work with dzil the same way you do, but that's still extra work that you're asking of contributors, particularly if they aren't already fans of dzil.</li>
<li>dzil is still evolving rapidly and over the last few months, it's not been uncommon to have some upgrade of dzil break a bunch of plugins.  Hopefully this will be less common as the API stabilizes and the pace of core dzil development slows.  Because of the pace of development, documentation has also lagged a bit.</li>
</ul>
<p>If you do want to give it a try, my advice on getting up the learning curve is to start with a very simple dzil dist.ini file that you maintain by hand.  Don't use dzil PluginBundles until you're more familiar with the action of each plugin.  The <a href="http://dzil.org/tutorial/start.html"><b>dzil tutorial</b></a> is a great reference for getting started.  See the section on <a href="http://dzil.org/tutorial/convert-dist.html">converting an existing distribution</a> for some good starter examples.</p>
<p>Alternatively, if you want to see an example dist.ini that does all the things I mention above in this article, see <a href="http://search.cpan.org/perldoc?Dist::Zilla::PluginBundle::DAGOLDEN">Dist::Zilla::PluginBundle::DAGOLDEN</a>.  In the documentation for the PluginBundle, I show the equivalent dist.ini. You can comment out parts you don't understand and then selectively re-enable them to see what they do.</p>
<p>See <a href="http://blog.urth.org/2010/06/walking-through-a-real-distini.html">Walking through a real dist.ini</a> for another good example.</p>
<p><strong>Important</strong>: While you're playing around learning dzil, <strong>replace the "UploadToCPAN" plugin with "FakeRelease"</strong> in your dist.ini.  This will simulate a release without actually uploading to CPAN, which could save you some potential embarrassment.</p>
<h3>Articles by other people</h3>
<ul>
<li><a href="http://www.lowlevelmanager.com/2009/12/distzilla.html">Dist::Zilla -- part 1</a></li>
<li><a href="http://xenoterracide.blogspot.com/2010/04/my-new-lovehate-relationship-with.html">My new love/hate relationship with Dist::Zilla</a></li>
<li><a href="http://blog.urth.org/2010/05/distzilla-pros-and-cons.html">Dist::Zilla Pros and Cons</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/752/why-im-using-distzilla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dist::Zilla loves CPAN::Meta</title>
		<link>http://www.dagolden.com/index.php/810/distzilla/</link>
		<comments>http://www.dagolden.com/index.php/810/distzilla/#comments</comments>
		<pubDate>Wed, 26 May 2010 04:03:23 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[cpan]]></category>
		<category><![CDATA[cpan-meta-spec]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=810</guid>
		<description><![CDATA[The first examples of CPAN Meta Spec version 2 files are showing up in the wild thanks to Dist::Zilla. As of Dist::Zilla version 3, it will use the new, standard CPAN::Meta module to generate META.json files using the version 2 spec while generating META.yml files against the 1.4 spec for backwards compatibility. Unfortunately, some CPAN [...]]]></description>
			<content:encoded><![CDATA[<p>The first examples of CPAN Meta Spec version 2 files are showing up in the wild thanks to <a href="http://search.cpan.org/perldoc?Dist::Zilla">Dist::Zilla</a>.  As of Dist::Zilla version 3, it will use the new, standard <a href="http://search.cpan.org/perldoc?CPAN::Meta">CPAN::Meta</a> module to generate META.json files using the version 2 spec while generating META.yml files against the 1.4 spec for backwards compatibility.</p>
<p>Unfortunately, some CPAN metadata consumers aren't quite ready yet for version 2 of the Meta Spec, as this example shows:</p>
<p><a href="http://www.dagolden.com/wp-content/uploads/2010/05/sco-repo-hash.png"><img src="http://www.dagolden.com/wp-content/uploads/2010/05/sco-repo-hash.png" alt="" title="sco-repo-hash" width="737" height="300 class="aligncenter size-medium wp-image-811" /></a></p>
<p>Hopefully, <a href="http://search.cpan.org/">search.cpan.org</a> and other sites will be updated soon.  One of the nice advantages of the version 2 Meta spec is that it can differentiate between a repository access URL and a repository web browser URL.  So search.cpan.org will be able to provide a hyperlink to a repo browser instead of (or in addition to) the URL that you would give to your version control client.</p>
<p>(In unrelated news, I am still <a href="http://shadowcat.co.uk/blog/matt-s-trout/iron-man-lost?colour=orange&#038;title=Patches+Welcome">voting for mst to give a talk called "Patches Welcome"</a> as his forfeit for losing the Iron Man competition.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/810/distzilla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPAN::Meta can produce old spec output</title>
		<link>http://www.dagolden.com/index.php/790/cpanmeta-can-produce-old-spec-output/</link>
		<comments>http://www.dagolden.com/index.php/790/cpanmeta-can-produce-old-spec-output/#comments</comments>
		<pubDate>Tue, 18 May 2010 11:25:50 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[cpan]]></category>
		<category><![CDATA[cpan-meta-spec]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=790</guid>
		<description><![CDATA[I released an update for CPAN::Meta that supports "downgrading" to older versions of the CPAN Meta Spec. This should make it easier for distribution builders like ExtUtils::MakeMaker, Module::Build, Module::Install and Dist::Zilla to produce both a META.yml (spec version 1.4) and META.json (spec version 2) for the backwards compatibility.]]></description>
			<content:encoded><![CDATA[<p>I released an <a href="http://search.cpan.org/dist/CPAN-Meta/">update for CPAN::Meta</a> that supports "downgrading" to older versions of the CPAN Meta Spec.  This should make it easier for distribution builders like <a href="http://search.cpan.org/dist/ExtUtils-MakeMaker">ExtUtils::MakeMaker</a>, <a href="http://search.cpan.org/dist/Module-Build">Module::Build</a>, <a href="http://search.cpan.org/dist/Module-Install">Module::Install</a> and <a href="http://search.cpan.org/dist/Dist-Zilla">Dist::Zilla</a> to produce both a META.yml (spec version 1.4) and META.json (spec version 2) for the backwards compatibility.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/790/cpanmeta-can-produce-old-spec-output/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPAN Meta Spec version 2 released</title>
		<link>http://www.dagolden.com/index.php/759/cpan-meta-spec-version-2-released/</link>
		<comments>http://www.dagolden.com/index.php/759/cpan-meta-spec-version-2-released/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 11:07:46 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[cpan]]></category>
		<category><![CDATA[cpan-meta-spec]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=759</guid>
		<description><![CDATA[Dear CPAN authors, It is with great pleasure that we present you with the release of the CPAN Meta Spec version 2. This document specifies the format for the next version of CPAN distribution metadata files -- the META.yml and now META.json files found in most distributions on CPAN. Version 2 is the result of [...]]]></description>
			<content:encoded><![CDATA[<p>Dear CPAN authors,</p>
<p>It is with great pleasure that we present you with the release of the <a href="http://search.cpan.org/perldoc?CPAN::Meta::Spec">CPAN Meta Spec version 2</a>.</p>
<p>This document specifies the format for the next version of CPAN distribution metadata files -- the META.yml and now META.json files found in most distributions on CPAN.  </p>
<p>Version 2 is the result of a <a href="http://www.dagolden.com/index.php/458/call-for-proposals-cpan-meta-spec/">call for proposals</a> last year that <a href="http://www.dagolden.com/index.php/538/summary-of-cpan-meta-spec-public-discussions/">resulted in 34 proposals</a> and over <a href="http://www.dagolden.com/index.php/519/list-of-cpan-meta-spec-proposals/">300 discussion emails</a>.  The final proposal was reviewed by a working group consisting of the maintainers of most of the major Perl toolchain modules, administrators of the major CPAN indexing sites and representatives from several major linux distributions that package CPAN libraries.</p>
<p>The new release includes not only the actual specification but <a href="http://search.cpan.org/dist/CPAN-Meta/">new support libraries</a> for the toolchain to work with META files in a more consistent way.</p>
<p>As support is added to tools like <a href="http://search.cpan.org/perldoc?Module::Build">Module::Build</a>, <a href="http://search.cpan.org/perldoc?Module::Install">Module::Install</a> or <a href="http://search.cpan.org/perldoc?Dist::Zilla::Tutorial">Dist::Zilla</a> over the coming months, CPAN authors will see several new options for providing additional information about their distributions.</p>
<p>Some notable changes to the specification include:</p>
<ul>
<li>use of JSON as the preferred serialization format (i.e. META.json)</li>
<li>prereqs are more granular, allowing every "action" (e.g. 'build', 'test') to have every type of relationship (e.g. 'requires', 'recommends') </li>
<li>adoption of Debian-inspired semantics for 'recommends' and 'suggests' for optional prereqs</li>
<li>supports listing multiple licenses</li>
<li>clearer rules for adding custom fields</li>
<li>an indicator of release stability</li>
<li>improved options for pointing to related resources, particularly code repositories</li>
</ul>
<p>The specification version is also changing to an integer, so it can be the "major" number on <a href="http://search.cpan.org/perldoc?CPAN::Meta">CPAN::Meta</a> and the decimals can reflect bug fixes or other non-specification changes to the library that implements any particular spec version.</p>
<p>Over the next month or so, we'll be blogging about some of the details of the change.</p>
<p>Thank you to Ken Williams for creating the initial 'META.yml' spec and maintaining it through version 1.4 and thank you to everyone who contributed ideas, patches, discussion and critique in the development of the version 2 spec.</p>
<p>Sincerely,<br />
Ricardo Signes and David Golden</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/759/cpan-meta-spec-version-2-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Module::Build repository migrated to git</title>
		<link>http://www.dagolden.com/index.php/739/modulebuild-repository-migrated-to-git/</link>
		<comments>http://www.dagolden.com/index.php/739/modulebuild-repository-migrated-to-git/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 16:56:34 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=739</guid>
		<description><![CDATA[I have completed a migration of the Module::Build repository from Subversion to git. The new repository is available publicly on github.com: Browse the repository Clone it: git://github.com/dagolden/module-build.git I have done my best to clean up the merge/branch/tag history, but have not bothered to clean up empty commits left over from the original cvs2svn conversion. If [...]]]></description>
			<content:encoded><![CDATA[<p>I have completed a migration of the <a href="http://search.cpan.org/dist/Module-Build/">Module::Build</a> repository from <a href="http://subversion.tigris.org/">Subversion</a> to <a href="http://git-scm.com/">git</a>.</p>
<p>The new repository is available publicly on <a href="http://github.com/">github.com</a>:</p>
<ul>
<li><a href="http://github.com/dagolden/module-build/">Browse the repository</a></li>
<li>Clone it: git://github.com/dagolden/module-build.git</li>
</ul>
<p>I have done my best to clean up the merge/branch/tag history, but have not bothered to clean up empty commits left over from the original cvs2svn conversion.  If anyone sees any glaring errors please let me know.</p>
<p>I hope this migration makes it easy for people to contribute to Module-Build.  I was pleasantly surprised to find that within 12 hours of it being publishing on github, it's already being watched by several people.  </p>
<p>At the very least, it will make working on feature branches much easier to manage, which will make it easier to experiment with new ideas without affecting the main line of development.</p>
<p><strong>If anyone would like to start applying patches from the <a href="http://rt.cpan.org/Public/Dist/Display.html?Name=Module-Build">Module::Build bug queue</a>, or creating patches for other open tickets, that would be huge help.</strong></p>
<p>I will be "closing out" the old Subversion repository with a pointer to the new location shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/739/modulebuild-repository-migrated-to-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do you use Perl and C++?</title>
		<link>http://www.dagolden.com/index.php/735/do-you-use-perl-and-c/</link>
		<comments>http://www.dagolden.com/index.php/735/do-you-use-perl-and-c/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 12:26:25 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=735</guid>
		<description><![CDATA[Some work has started on adding better C++ support to ExtUtils::CBuilder. There is a branch called "cplusplus" in the EU::CB repository on github. (See the branches dropdown.) Work is loosely coordinated on the #toolchain IRC channel on irc.perl.org. Ask for user "Sno&#124;Laptop" if you would like to contribute in any way.]]></description>
			<content:encoded><![CDATA[<p>Some work has started on adding better C++ support to ExtUtils::CBuilder.</p>
<p>There is a branch called "cplusplus" in the <a href="http://github.com/dagolden/extutils-cbuilder/">EU::CB repository on github</a>. (See the branches dropdown.)</p>
<p>Work is loosely coordinated on the #toolchain IRC channel on irc.perl.org.  Ask for user "Sno|Laptop" if you would like to contribute in any way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/735/do-you-use-perl-and-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to look like an idiot with Dist::Zilla</title>
		<link>http://www.dagolden.com/index.php/724/how-to-look-like-an-idiot-with-distzilla/</link>
		<comments>http://www.dagolden.com/index.php/724/how-to-look-like-an-idiot-with-distzilla/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 02:59:40 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[cpan]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=724</guid>
		<description><![CDATA[Several people who watch CPAN recent upload feeds may have noticed an interesting sounding tarball by yours truly: Foo-1.23. Here's the story: I'm a recent convert to Dist::Zilla. I really like it -- if I had more time I'd write a longer post about how easy it makes your life as a developer. The problem [...]]]></description>
			<content:encoded><![CDATA[<p>Several people who watch CPAN <a href="http://frepan.64p.org/">recent upload feeds</a> may have noticed an interesting sounding tarball by yours truly:  <a href="http://frepan.64p.org/~dagolden/Foo-1.23/">Foo-1.23</a>.</p>
<p>Here's the story:  I'm a recent convert to <a href="http://search.cpan.org/perldoc?Dist::Zilla::Tutorial">Dist::Zilla</a>.  I <strong>really</strong> like it -- if I had more time I'd write a longer post about how easy it makes your life as a developer.</p>
<p>The problem is that it can make it <em>too</em> easy.  I was writing a Dist::Zilla plugin to<a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::CheckExtraTests"> check "xt" tests before release</a>.  Unfortunately, the <a href="http://search.cpan.org/perldoc?Dist::Zilla::PluginBundle::Classic ">@Classic</a> plugin that I added to a test includes the <a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::UploadToCPAN">UploadToCPAN</a> plugin -- which, if you have a .pause file with your credentials, will helpfully upload modules straight to CPAN.</p>
<p>You can probably see where this is going.  Yes, I ran my tests and promptly uploaded a test distribution called "Foo-1.23" to CPAN.  Thankfully, the "Foo" namespace is already claimed, so it's an unauthorized distribution and doesn't get indexed.  I've already scheduled it for deletion, so hopefully, by the time you read this, it will just be a bad memory.</p>
<p>But, my mistake aside, Dist::Zilla rocks.  If you develop for CPAN, you should really give it a try.</p>
<p><em>Just be very careful when you type 'dzil release'.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/724/how-to-look-like-an-idiot-with-distzilla/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The past is not a blast</title>
		<link>http://www.dagolden.com/index.php/719/the-past-is-not-a-blast/</link>
		<comments>http://www.dagolden.com/index.php/719/the-past-is-not-a-blast/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 03:28:23 +0000</pubDate>
		<dc:creator>dagolden</dc:creator>
				<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></category>

		<guid isPermaLink="false">http://www.dagolden.com/?p=719</guid>
		<description><![CDATA[Debugging things on an older version of Perl can be a pain. I like to be able to replicate bug reports whenever I can and verify that my fixes resolve the problem. That means that first, you have to build them if you don't have them and many or most of the older perl tarballs [...]]]></description>
			<content:encoded><![CDATA[<p>Debugging things on an older version of <a href="http://www.perl.org/">Perl</a> can be a pain.  I like to be able to replicate bug reports whenever I can and verify that my fixes resolve the problem.  That means that first, you have to build them if you don't have them and many or most of the older perl tarballs won't build on a modern Debian-based system like <a href="http://www.ubuntu.com/">Ubuntu</a>.</p>
<p>To help out anyone else that needs to do this (and to help my future self), I have over time created maintenance branches for every major release of perl from 5.6.1 to 5.8.8 in my <a href="http://github.com/dagolden/perl/">perl github repo</a>.  You may need some extra fiddling to make some things build or keep them from building, but it should get you a lot closer.  For example, on perl 5.6.1, you need to disable DB_File with a <code>-Ui_db</code> to Configure.</p>
<p>Second, you may need to get the toolchain working on the old perl to deal with dependencies.  I have a couple pieces of advice there:</p>
<ul>
<li>Don't run perl via a symlink.  If you have multiple perl interpreters in your PATH, your Makefile might wind up targeting the first perl in the PATH instead of the one you used to run Makefile.PL</li>
<li>Install <a href="http://search.cpan.org/dist/ExtUtils-MakeMaker">ExtUtils::MakeMaker</a> <strong>by hand</strong> as the very first thing you do.  This will definitely help your bootstrapping.</li>
</ul>
<p>That's my wisdom gained from a couple hours lost tonight.  I hope it saves someone else some time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagolden.com/index.php/719/the-past-is-not-a-blast/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>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[perl-programming]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[ironman]]></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'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'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'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' 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'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't shake the nagging thought that cpanminus should never have been necessary in the first place.</p>
<p>What I'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't promise that it works for all of CPAN or that it works everywhere that Perl does.  He doesn't have to.  Making it work for 99% of CPAN for 99% of people is more than good enough.</p>
<p>I've been co-maintaining various parts of the Perl toolchain for a while now.  It'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't even get to use CPAN to make life easier.  I don'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'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'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>9</slash:comments>
		</item>
	</channel>
</rss>
