<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6162910877268067002</id><updated>2011-11-24T18:23:59.178+01:00</updated><category term='curses'/><category term='poe'/><category term='tk'/><category term='javascript'/><category term='xs'/><category term='autoformat'/><category term='translation'/><category term='mandriva'/><category term='cpanplus'/><category term='cpan'/><category term='mycology'/><category term='perl'/><category term='dist'/><category term='games'/><category term='directory'/><category term='pandemic'/><category term='befunge'/><category term='risk'/><category term='blog'/><category term='mageia'/><category term='rpm'/><category term='polyglot'/><category term='tests'/><category term='moose'/><category term='git'/><category term='plugin'/><category term='wxwidgets'/><category term='html'/><category term='cpan2dist'/><category term='parrot'/><category term='optimization'/><category term='dzill'/><category term='cpan2pkg'/><category term='mpd'/><category term='prereqs'/><category term='subs'/><category term='padre'/><category term='cpants'/><category term='image'/><category term='aspell'/><category term='critic'/><category term='magpie'/><category term='rakudo'/><title type='text'>Jerome Quelin</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default?start-index=101&amp;max-results=100'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>140</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8528856042147556543</id><published>2011-11-24T15:17:00.001+01:00</published><updated>2011-11-24T18:21:22.807+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mpd'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>audio::mpd gained ipv6 support</title><content type='html'>when i got a bug report asking for ipv6 support in &lt;a href="http://metacpan.org/module/Audio::MPD"&gt;audio::mpd&lt;/a&gt;, i didn't know where to start, and put it aside... but since i fixed quite a few test bugs in audio-mpd, i thought i could give a try at supporting ipv6.&lt;br /&gt;&lt;br /&gt;and it proved quite easy in fact, with &lt;a href="http://metacpan.org/module/IO::Socket::IP"&gt;io::socket::ip&lt;/a&gt; which is a drop-in replacement for io::socket::inet... and thus, by changing 3 strings in audio-mpd, it is now ipv6 enabled - neat!&lt;br /&gt;&lt;br /&gt;so, enable ipv6 on your software with the following one-liner:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ ack -l 'IO::Socket::INET' | xargs perl -pi -E 's/IO::Socket::INET/IO::Socket::IP/g'&lt;/pre&gt;&lt;/blockquote&gt;easy, uh? who said ipv6 was difficult? :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8528856042147556543?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8528856042147556543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/11/audiompd-gained-ipv6-support.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8528856042147556543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8528856042147556543'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/11/audiompd-gained-ipv6-support.html' title='audio::mpd gained ipv6 support'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4406581454790072109</id><published>2011-09-16T18:04:00.001+02:00</published><updated>2011-09-16T18:04:35.371+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='risk'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>prisk gains its own map format, allowing translations!</title><content type='html'>till now, &lt;a href="https://metacpan.org/release/Games-Risk"&gt;games::risk&lt;/a&gt; was using map files from &lt;a href="http://domination.sourceforge.net/"&gt;jrisk&lt;/a&gt;. this allowed me to concentrate on the gui and the game experience without having to tackle everything at once.&lt;br /&gt;&lt;br /&gt;being a simple format, it was somehow easy to read the maps... but its simplicity has some drawbacks, and for example it's not possible to translate them. therefore, i finally bit the bullet and implemented a format for prisk. basically, information remains the same (such as the mechanism to determine the current country), with one exception: maps are implemented as perl modules. and this allows the use of gettext and other i18n schemes.&lt;br /&gt;&lt;br /&gt;this means that maps are now translatable! french translation is of course provided, but &lt;a href="https://github.com/jquelin/games-risk/tree/master/share/locale"&gt;help is needed for other languages&lt;/a&gt;... (hint, hint)&lt;br /&gt;&lt;br /&gt;of course, i wrote an importer to migrate jrisk maps to new prisk format. i also intend to take this opportunity to create some new perl dists with &lt;a href="http://domination.sourceforge.net/getmaps.shtml"&gt;extra maps&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;this prisk release shows also a lot of cleanup in the internals, with a partial migration to &lt;a href="http://metacpan.org/module/Moose"&gt;moose&lt;/a&gt; and &lt;a href="http://metacpan.org/module/MooseX::POE"&gt;moosex::poe&lt;/a&gt;. using &lt;a href="https://metacpan.org/module/Moose::Manual::Attributes#Weak-references"&gt;weak_ref&lt;/a&gt; for scalar attributes and a tied &lt;a href="http://metacpan.org/module/Hash::NoRef"&gt;hash::noref&lt;/a&gt; to cache objects allowed to use circular references without having to deal with their problems. finally, prisk is now deferring some module loading to runtime, leading to a faster startup. the changes are plenty, so now is a good time to &lt;a href="http://metacpan.org/release/Games-Risk"&gt;give it a try!&lt;/a&gt; (after v3.112590 has hit your nearest mirror of course)&lt;br /&gt;&lt;br /&gt;future releases will continue to see code cleanups and migration to moose. prisk also finally has a configuration system to save user preferences - i "just" need to use this system throughout the code. some dialogs needs also to migrate to prisk's look&amp;amp;feel (thanks &lt;a href="http://metacpan.org/module/Tk::Role::Dialog"&gt;tk::role::dialog&lt;/a&gt;), and i have some ideas to improve the artificial intelligences &amp;amp; better use &lt;a href="http://metacpan.org/module/POE"&gt;poe&lt;/a&gt;. not counting other game modes to take into account... oh well, let's say that prisk will keep me busy quite some time! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4406581454790072109?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4406581454790072109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/09/prisk-gains-its-own-map-format-allowing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4406581454790072109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4406581454790072109'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/09/prisk-gains-its-own-map-format-allowing.html' title='prisk gains its own map format, allowing translations!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2314157585058497229</id><published>2011-08-29T14:05:00.000+02:00</published><updated>2011-08-29T14:05:19.869+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='critic'/><title type='text'>the great renaming: Dist::Zilla::Plugin::CriticTests</title><content type='html'>oops! &lt;a href="http://jquelin.blogspot.com/2011/08/great-renaming-distzillaplugincompilete.html"&gt;kentnl did it again&lt;/a&gt;. :-)&lt;br /&gt;&lt;br /&gt;this time, dist::zilla::plugin::critictests has been renamed to dist::zilla::plugin::test::perl::critic. once again, change will be trivial for authors [0]. previous module will continue working, for at least one year counting from today.&lt;br /&gt;&lt;br /&gt;github repository has also changed and is available here: &lt;a href="https://github.com/jquelin/dist-zilla-plugin-test-perl-critic"&gt;https://github.com/jquelin/dist-zilla-plugin-test-perl-critic&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[0] and this time, i did not fubar-ed the code! :-|&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2314157585058497229?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2314157585058497229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/08/great-renaming-distzillaplugincritictes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2314157585058497229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2314157585058497229'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/08/great-renaming-distzillaplugincritictes.html' title='the great renaming: Dist::Zilla::Plugin::CriticTests'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6911897758914029022</id><published>2011-08-27T12:07:00.001+02:00</published><updated>2011-08-27T13:51:52.890+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>the great renaming: Dist::Zilla::Plugin::CompileTests</title><content type='html'>in a move to rationalize the plugin namespace of &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist::zilla&lt;/a&gt;, &lt;a href="https://github.com/kentfredric"&gt;kentnl&lt;/a&gt; started a&amp;nbsp; great renaming: &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::CompileTests"&gt;dzp:compiletests&lt;/a&gt; has been renamed to &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Test::Compile"&gt;dzp:test::compile&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;previous module is deprecated, and may be removed later on (but not before one year, that is 2012-08-27). in the meantime, it will continue working (although with a warning).&lt;br /&gt;&lt;br /&gt;what does it mean for dzil users? well, nothing much, since old module will continue working as is. however, they should better migrate their dist.ini from:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;[CompileTests]&lt;/pre&gt;&lt;/blockquote&gt;to:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;[Test::Compile]&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;nothing else is needed... for now, since i guess kentnl will continue proposing patches / pullreqs to dzil:*tests plugin authors! ;-)&lt;br /&gt;&lt;br /&gt;also, please note that the github repository has been renamed and is now available at &lt;a href="https://github.com/jquelin/dist-zilla-plugin-test-compile"&gt;a different url&lt;/a&gt;. ditto for &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt;, since the dist is now named &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-Test-Compile/"&gt;dist-zilla-plugin-test-compile&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6911897758914029022?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6911897758914029022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/08/great-renaming-distzillaplugincompilete.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6911897758914029022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6911897758914029022'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/08/great-renaming-distzillaplugincompilete.html' title='the great renaming: Dist::Zilla::Plugin::CompileTests'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4728399193813221181</id><published>2011-06-27T15:01:00.000+02:00</published><updated>2011-06-27T15:01:35.966+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan2dist'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan2pkg'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><title type='text'>cpan2pkg: prettier gui, ready for mageia!</title><content type='html'>remember &lt;a href="http://jquelin.blogspot.com/search/label/cpan2pkg"&gt;cpan2pkg&lt;/a&gt;? this is the tool built around &lt;a href="http://search.cpan.org/dist/CPANPLUS/"&gt;cpan2dist&lt;/a&gt; to create a native linux package, taking dependencies into account, and integrated with linux distribution repository + buildsystem.&lt;br /&gt;&lt;br /&gt;it used to be &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt; only, and curses-based. now that &lt;a href="http://www.mageia.org/"&gt;mageia&lt;/a&gt; is in full swing mode, i had to port cpan2pkg to support it. and it was a perfect opportunity to clean up the module, and prettify the interface.&lt;br /&gt;&lt;br /&gt;here's the result:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ymXrNdqaAvI/Tgh9XJiZ4kI/AAAAAAAABn4/XS9B66XhmQk/s1600/cpan2pkg-tk" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://1.bp.blogspot.com/-ymXrNdqaAvI/Tgh9XJiZ4kI/AAAAAAAABn4/XS9B66XhmQk/s320/cpan2pkg-tk" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;on the left, you can see the modules currently being processed, with their status both locally and on the build-system. green means available, and here you can see that moosex::alwayscoerece is being built locally (orange) and is not yet available on mageia (yellow).&lt;br /&gt;&lt;br /&gt;note that mageia is fully supported: cpan2pkg will poll the &lt;a href="http://pkgsubmit.mageia.org/"&gt;buildsystem status page&lt;/a&gt; to follow a module build, and make sure a module is ready before submitting those depending on it.&lt;br /&gt;&lt;br /&gt;it is still using &lt;a href="http://search.cpan.org/dist/POE/"&gt;poe&lt;/a&gt; underneath, but this time with &lt;a href="http://search.cpan.org/dist/Tk/"&gt;tk&lt;/a&gt;. adding support for a platform can be done quite easily - &lt;a href="https://github.com/jquelin/app-cpan2pkg"&gt;patches welcome&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4728399193813221181?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4728399193813221181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/06/cpan2pkg-prettier-gui-ready-for-mageia.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4728399193813221181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4728399193813221181'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/06/cpan2pkg-prettier-gui-ready-for-mageia.html' title='cpan2pkg: prettier gui, ready for mageia!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ymXrNdqaAvI/Tgh9XJiZ4kI/AAAAAAAABn4/XS9B66XhmQk/s72-c/cpan2pkg-tk' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2372641374588170386</id><published>2011-06-21T17:22:00.000+02:00</published><updated>2011-06-21T17:22:09.548+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>"magpie fix" also tigthens spec files</title><content type='html'>following &lt;a href="http://jquelin.blogspot.com/2011/06/more-tightened-spec-file-produced-by.html"&gt;cpanplus backend&lt;/a&gt; cleaning, "magpie fixspec" also gained the ability to clean up spec files with trivial %clean section and %defattr definition.&lt;br /&gt;&lt;br /&gt;this means that updating a perl package on mageia (with either "magpie up" or "magpie dwim") will also trim the rpm spec file accordingly. neat!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2372641374588170386?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2372641374588170386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/06/magpie-fix-also-tigthens-spec-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2372641374588170386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2372641374588170386'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/06/magpie-fix-also-tigthens-spec-files.html' title='&quot;magpie fix&quot; also tigthens spec files'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8274065791620806758</id><published>2011-06-21T16:35:00.000+02:00</published><updated>2011-06-21T17:21:42.251+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><title type='text'>more tightened spec file produced by mageia cpanplus backend</title><content type='html'>&lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_221479457"&gt;&lt;/span&gt;cpanplus::dist::mageia&lt;span id="goog_221479458"&gt;&lt;/span&gt;&lt;/a&gt; 1.111720 has just been released, with 2 changes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;no more %defattr definition&lt;/li&gt;&lt;li&gt;no more default %clean section&lt;/li&gt;&lt;/ul&gt;indeed, rpm will handle those automatically, as dexter mentioned (cf &lt;a href="https://www.mageia.org/pipermail/mageia-dev/2011-June/005878.html"&gt;here&lt;/a&gt; and &lt;a href="https://www.mageia.org/pipermail/mageia-dev/2011-June/005471.html"&gt;here&lt;/a&gt;). this way, we'll have spec files a bit more tightened, which is always better from a maintainer pov.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8274065791620806758?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8274065791620806758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/06/more-tightened-spec-file-produced-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8274065791620806758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8274065791620806758'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/06/more-tightened-spec-file-produced-by.html' title='more tightened spec file produced by mageia cpanplus backend'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1447712246210133070</id><published>2011-04-15T10:20:00.000+02:00</published><updated>2011-04-15T10:20:48.078+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>keep track of your tk widgets easily</title><content type='html'>when writing a tk application, it's almost always a good idea to keep track of your widgets: this allows to change their state later on.&lt;br /&gt;&lt;br /&gt;most of the time, a simple hash is enough; but it is usually wrapped up in methods to make the hash private to the window object. and of course, those methods are duplicated in all modules, under a form or another...&lt;br /&gt;&lt;br /&gt;since duplication is bad, i just released &lt;a href="http://search.cpan.org/dist/Tk-Role-HasWidgets"&gt;Tk::Role::HasWidgets&lt;/a&gt; which is a &lt;a href="http://search.cpan.org/perldoc?Moose"&gt;moose&lt;/a&gt; role, and provides with a convenient way to store &amp;amp; retrieve your widgets:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;use Moose;&lt;br /&gt;    with 'Tk::Role::HasWidgets';&lt;br /&gt;&lt;br /&gt;    # when creating a widget&lt;br /&gt;    $self-&amp;gt;_set_w( 'my_button', $button );&lt;br /&gt;&lt;br /&gt;    # later on, in one of the methods&lt;br /&gt;    $self-&amp;gt;_w( 'my_button' )-&amp;gt;configure( ... );&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;the methods featured in this role begin with "_", that is, they are following perl convention of private methods. this is on purpose: remember that this module is a role, consumed by your class. and you don't want those methods to be available outside of the window class, do you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1447712246210133070?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1447712246210133070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/04/keep-track-of-your-tk-widgets-easily.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1447712246210133070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1447712246210133070'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/04/keep-track-of-your-tk-widgets-easily.html' title='keep track of your tk widgets easily'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4656814229381963728</id><published>2011-04-12T14:48:00.000+02:00</published><updated>2011-04-12T14:48:05.744+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>a bit of dwimery in magpie</title><content type='html'>all the pieces were available, binding them together was just a smop. therefore &lt;a href="http://search.cpan.org/dist/App-Magpie"&gt;magpie&lt;/a&gt; just got a new subcommand: "magpie dwim" which does exactly what i mean...&lt;br /&gt;&lt;br /&gt;in the case of magpie, what i mean is of course:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;check which perl packages are not up to date wrt &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt;&lt;/li&gt;&lt;li&gt;check them out&lt;/li&gt;&lt;li&gt;tighten spec file &lt;/li&gt;&lt;li&gt;update the package to latest version&lt;/li&gt;&lt;li&gt;commit result&lt;/li&gt;&lt;li&gt;wait for &lt;a href="http://pkgsubmit.mageia.org/"&gt;build system&lt;/a&gt; if needed&lt;/li&gt;&lt;li&gt;submit result&lt;/li&gt;&lt;/ul&gt;and all of this is done &lt;a href="http://search.cpan.org/dist/Proc-ParallelLoop"&gt;in parallel&lt;/a&gt;, with errors reported at the end.&lt;br /&gt;you too can have some fun:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ sudo urpmi magpie&lt;br /&gt;$ magpie dwim&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;maintaining the ~2500 perl module rpm packages in &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt; has never been so easy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4656814229381963728?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4656814229381963728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/04/bit-of-dwimery-in-magpie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4656814229381963728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4656814229381963728'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/04/bit-of-dwimery-in-magpie.html' title='a bit of dwimery in magpie'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7914597871991890885</id><published>2011-03-09T13:17:00.000+01:00</published><updated>2011-03-09T13:17:56.037+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><title type='text'>magpie: how to list non up-to-date perl modules</title><content type='html'>the final stone is now built for &lt;a href="http://search.cpan.org/dist/App-Magpie"&gt;magpie&lt;/a&gt;: it's possible to list on your &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt; system the perl modules that have up to date versions upstream. it allows to see at a glance which perl packages need to be updated. it's based on &lt;a href="http://search.cpan.org/dist/CPANPLUS"&gt;cpanplus&lt;/a&gt;, and only tackles perl modules installed on your system.&lt;br /&gt;&lt;br /&gt;the new command is:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ magpie old&lt;br /&gt;** core packages: 11&lt;br /&gt;&lt;br /&gt;Devel::DProf                             20080331.00 20110228.00&lt;br /&gt;Devel::SelfStubber                              1.03        1.05&lt;br /&gt;[...]&lt;br /&gt;if                                              0.05      0.0601&lt;br /&gt;&lt;br /&gt;** normal packages: 57&lt;br /&gt;&lt;br /&gt;DateTime::TimeZone                              1.28        1.29     perl-DateTime-TimeZone                                 1.280.0&lt;br /&gt;Digest::SHA                                     5.50        5.60     perl-Digest-SHA                                        5.500.0&lt;br /&gt;[...]&lt;br /&gt;parent                                         0.224       0.225     perl-parent                                            0.224.0&lt;br /&gt;&lt;br /&gt;** orphan packages: 7&lt;br /&gt;&lt;br /&gt;KENTNL                                      0.010173Dist::Zilla…&lt;br /&gt;[...]&lt;br /&gt;inc::latest                                   0.3624        0.38&lt;br /&gt;&lt;br /&gt;** strange packages: 3&lt;br /&gt;&lt;br /&gt;App::cpanminus                                1.2001      1.4002     cpanminus(1.200.100),perl-App-cpanminus(1.200.100)&lt;br /&gt;HTTP::Response                                  6.00        6.01     perl-libwww-perl(5.837.0),perl-Test-Mock-LWP(0.50.0),perl-HTTP-Message(6.0.0)&lt;br /&gt;Perl::MinimumVersion                            1.27        1.28     perl-Perl-MinimumVersion(1.270.0),perl-Perl-Critic-Pulp(47.0.0)&lt;br /&gt;&lt;br /&gt;** ignored modules: 12&lt;br /&gt;&lt;br /&gt;Boulder::Unigene(28051999.00), File::MimeInfo::Rox(0.20), Getopt::Lucid(0.19), HTML::Table(2.08), Imager::Font::Type1(1.011), Inline::Python(0.38), Lingua::Features(0.30), Parse::RecDescent::FAQ::Original(6.00), Switch(2.16), Tie::Watch(1.301), WebFetch(0.13), XML::Grove(0.46)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;the columns are: module, old version, new version, mageia package name, mageia package version.&lt;br /&gt;&lt;br /&gt;as you can see, the modules are sorted in various categories:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;core - modules shipped with perl (or perl-base)&lt;/li&gt;&lt;li&gt;dual-lifed (not shown above) - modules that are both shipped with perl (or perl-base) and as a stand-alone package&lt;/li&gt;&lt;li&gt;normal - regular modules with their own package&lt;/li&gt;&lt;li&gt;orphan - modules that do not belong to a mageia package (either inherited from mandriva, or not yet pushed on buildsystem).&lt;/li&gt;&lt;li&gt;strange - modules that belong to more than one magiea package&lt;/li&gt;&lt;li&gt;ignore - those are modules that either cannot be built (with an upstream bug) or that confuse cpanplus when comparing versions &lt;/li&gt;&lt;/ul&gt;with this information, it's therefore very straightforward to &lt;a href="http://jquelin.blogspot.com/2011/02/new-magpie-command-update.html"&gt;update the packages&lt;/a&gt;, launching the following command as needed:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ eval $( magpie co -s $pkg ) &amp;amp;&amp;amp; magpie update&lt;/pre&gt;&lt;/blockquote&gt;of course, since all the building blocks are now available, that's what the last command to be implemented (magpie dwim) will do!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7914597871991890885?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7914597871991890885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/03/magpie-how-to-list-non-up-to-date-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7914597871991890885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7914597871991890885'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/03/magpie-how-to-list-non-up-to-date-perl.html' title='magpie: how to list non up-to-date perl modules'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1120508352598184086</id><published>2011-02-28T12:44:00.001+01:00</published><updated>2011-03-01T12:26:32.765+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><title type='text'>svk cannot be built anymore - EDIT: svk will build with reduced features</title><content type='html'>while rebuilding perl packages for &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt;, i found out that &lt;a href="http://search.cpan.org/dist/SVN-Mirror"&gt;svn::mirror&lt;/a&gt; cannot be built anymore with &lt;a href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt; 1.6.x. said like this, one may think "wtf, i don't give a damn to svn::mirror". and lots of other cpan modules are bit-rotting, so what's the point? well, the thing is, svn::mirror is a prereq for &lt;a href="http://svk.bestpractical.com/"&gt;svk&lt;/a&gt;, the decentralized subversion...&lt;br /&gt;&lt;br /&gt;granted, &lt;a href="http://blog.bestpractical.com/2009/05/the-future-of-svk.html"&gt;svk has been end-of-lifed in 2009&lt;/a&gt;, yet it's still widely in use. but as long as &lt;a href="https://rt.cpan.org/Ticket/Display.html?id=51088"&gt;svn-mirror won't get fixed&lt;/a&gt;, mageia won't include svk support.&lt;br /&gt;&lt;br /&gt;EDIT (20110301): in fact, svn::mirror is an optional prereq for svk - mageia will therefore ship with svk, albeit with a reduced feature set&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1120508352598184086?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1120508352598184086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/02/svk-cannot-be-built-anymore.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1120508352598184086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1120508352598184086'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/02/svk-cannot-be-built-anymore.html' title='svk cannot be built anymore - EDIT: svk will build with reduced features'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-5544983169751577957</id><published>2011-02-25T16:02:00.000+01:00</published><updated>2011-02-25T16:02:54.892+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>magpie update now waaaaaaay faster!</title><content type='html'>"&lt;a href="http://search.cpan.org/dist/App-Magpie"&gt;magpie&lt;/a&gt; update", used to update automatically a perl module rpm to its latest version, was a bit slow. the culprit was parse::cpan::packages, taking a whole 10 seconds to parse 02packages.details.txt.gz&lt;br /&gt;&lt;br /&gt;fortunately, i found &lt;a href="http://search.cpan.org/perldoc?Parse::CPAN::Packages::Fast"&gt;parse::cpan::packages::fast&lt;/a&gt; (from &lt;a href="http://search.cpan.org/%7Esrezic/"&gt;slaven&lt;/a&gt;++), which does exactly the same job in less than a second...&lt;br /&gt;&lt;br /&gt;so, with &lt;a href="https://github.com/jquelin/app-magpie/commit/922f539993c92c78e2d0d00af373d83cdb9a26a6"&gt;a 16-line patch&lt;/a&gt; (-2/+2), magpie update now is almost instant. cpan is definitely the home of nice gems, and *the* advantage of perl.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-5544983169751577957?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/5544983169751577957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/02/magpie-update-now-waaaaaaay-faster.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5544983169751577957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5544983169751577957'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/02/magpie-update-now-waaaaaaay-faster.html' title='magpie update now waaaaaaay faster!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7962282999240088327</id><published>2011-02-10T14:46:00.000+01:00</published><updated>2011-02-10T14:46:37.427+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>new magpie command: update</title><content type='html'>i'm happy to report yet another &lt;a href="http://search.cpan.org/dist/App-Magpie"&gt;magpie&lt;/a&gt; release, version 1.110410&lt;br /&gt;&lt;br /&gt;this release brings a new subcommand: update (aka refresh)&lt;br /&gt;&lt;br /&gt;it will automatically update a perl module package being checked out to the latest version, update buildrequires (with &lt;a href="http://jquelin.blogspot.com/2011/02/new-magpie-command-fixspec.html"&gt;fixspec&lt;/a&gt;), try to build it locally, commit if successful, wait according to build-system hints, then submit it. &lt;br /&gt;&lt;br /&gt;it's easy to use:&lt;br /&gt;&lt;blockquote&gt;$ eval $( magpie co -s perl-Foo-Bar )&lt;br /&gt;$ magpie update -v&lt;/blockquote&gt;&lt;br /&gt;note: it requires a &lt;a href="http://search.cpan.org/perldoc?minicpan"&gt;minicpan&lt;/a&gt; installation on your computer...&lt;br /&gt;&lt;br /&gt;now, you too can join the fun of updating perl modules packages for &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt;! but it's not yet over, automation will go one step further - stay tuned...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7962282999240088327?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7962282999240088327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/02/new-magpie-command-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7962282999240088327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7962282999240088327'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/02/new-magpie-command-update.html' title='new magpie command: update'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-498475092115940299</id><published>2011-02-08T16:04:00.000+01:00</published><updated>2011-02-08T16:04:37.843+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>new magpie command: fixspec</title><content type='html'>i just released &lt;a href="http://search.cpan.org/dist/App-Magpie"&gt;magpie&lt;/a&gt; 1.110390, which brings a new subcommand: &lt;a href="http://search.cpan.org/perldoc?App::Magpie::App::Command::fixspec"&gt;magpie fixspec&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;as you can guess, this command will try to sanitize a rpm spec file a bit. to use it, you must be in a package checkout, and run it without any argument.&lt;br /&gt;&lt;blockquote&gt;$ eval $( magpie co perl-Foo-Bar )&lt;br /&gt;$ magpie fixspec -v&lt;br /&gt;&lt;br /&gt;# to see the list of options&lt;br /&gt;$ magpie help fix &lt;/blockquote&gt;&lt;br /&gt;among the things that fixspec does:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;it updates %doc depending on the existing files, including meta files&lt;/li&gt;&lt;li&gt;it splits multiple bundled build-/requires to have only one per line&lt;/li&gt;&lt;li&gt;it lines up vertically the summary / etc &lt;/li&gt;&lt;li&gt;it extracts perl buildrequires from meta.json/meta.yml if present&lt;/li&gt;&lt;li&gt;it removes buildroot definition&lt;/li&gt;&lt;li&gt;it removes mdv macros&lt;/li&gt;&lt;/ul&gt;note that the code is not really clean, it might gain from being in its &lt;br /&gt;own module, with real rpm parsing instead of big regexes. also, it&lt;br /&gt;assumes that we're cleaning a perl module spec file, so you're on your&lt;br /&gt;own if you're using it on other spec file: it might remove the whole&lt;br /&gt;svn, eat your babies, or even convert your rpm database to rpm5. you've&lt;br /&gt;been warned. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-498475092115940299?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/498475092115940299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/02/new-magpie-command-fixspec.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/498475092115940299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/498475092115940299'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/02/new-magpie-command-fixspec.html' title='new magpie command: fixspec'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2060765512262721414</id><published>2011-02-03T11:26:00.000+01:00</published><updated>2011-02-03T11:26:44.543+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><title type='text'>new dist::zilla command: pot</title><content type='html'>i just released &lt;a href="http://search.cpan.org/dist/Dist-Zilla-App-Command-pot"&gt;dist::zilla::app::command::pot&lt;/a&gt;, providing &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist::zilla&lt;/a&gt; with a new &lt;i&gt;pot&lt;/i&gt; command (not the plant, you hippy!).&lt;br /&gt;&lt;br /&gt;this command allows to (re-)generate a messages.pot file holding all strings to be translated from your module. If a messages.pot file is found, it will update it. otherwise, you will be prompted for a file location, with a default matching&lt;a href="http://search.cpan.org/dist/libintl-perl"&gt; Locale::TextDomain&lt;/a&gt; settings:&lt;br /&gt;&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;$dzil pot&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;[DZ] Trying to find a messages.pot file...&lt;br /&gt;[DZ] No messages.pot found - enter your own.&lt;br /&gt;messages.pot to use [lib/LocaleData/Foo-Bar-messages.pot]:&lt;br /&gt;[DZ] Running xgettext...&lt;/span&gt;&lt;/blockquote&gt;yup, underneath it just runs xgettext. and currently, it only finds calls to &lt;span style="font-size: x-small;"&gt;&lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;T()&lt;/i&gt;&lt;/span&gt; - but i'll add an option to provide your own convention such as &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&lt;i&gt;_()&lt;/i&gt;&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;&lt;i&gt;gettext()&lt;/i&gt;&lt;/span&gt;, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2060765512262721414?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2060765512262721414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/02/new-distzilla-command-pot.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2060765512262721414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2060765512262721414'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/02/new-distzilla-command-pot.html' title='new dist::zilla command: pot'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-813607511695004063</id><published>2011-02-01T12:17:00.000+01:00</published><updated>2011-02-01T12:17:58.003+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='magpie'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>magpie - MAGeia Perl Integration Easy</title><content type='html'>in my mandriva to &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt; switch, i promised to myself that i'd collect the various scripts that i'm using on a day to day basis to maintain the myriad of perl rpm packages.&lt;br /&gt;&lt;br /&gt;therefore, i've created &lt;a href="http://search.cpan.org/dist/App-Magpie"&gt;magpie&lt;/a&gt; (MAGeia Perl Integration Easy) and uploaded it to cpan. the tool is not yet complete, but i'm incorporating new commands now and then.&lt;br /&gt;&lt;br /&gt;it currently supports 2 commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;magpie bswait&lt;/span&gt; - this command pauses according to the recommendation of &lt;a href="http://pkgsubmit.mageia.org/"&gt;mageia build-system&lt;/a&gt;. it indeed provides some recommendation on how much time to pause between 2 packages submission to not overload it - (this is known as throttling).&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;magpie co&lt;/span&gt; - this brand new command (in version 1.110320) allows to check-out a given package from mageia repository.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;some details about magpie checkout: it is &lt;b&gt;not&lt;/b&gt; meant to replace "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mgarepo co&lt;/span&gt;", it does in fact use mgarepo underneath. so what does this command add?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the possibility to check out in a given directory&lt;br /&gt;&lt;blockquote&gt;$ magpie co -d ~/rpm/cauldron perl&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;the fact that it will either check out *or* update the local check-out if it already exists:&lt;br /&gt;&lt;blockquote&gt;$ magpie co -d ~/rpm/cauldron perl&lt;br /&gt;# check-out if 1st run, update otherwise&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;finally, the possibility to dump a shell command to execute to change directory in the fresh check-out:&lt;br /&gt;&lt;blockquote&gt;# add this in your ~/.bashrc&lt;br /&gt;function cco() { eval $(magpie co -d ~/rpm/cauldron -q -s $*); }&lt;br /&gt;# then, one can do a fresh checkout/update + cd by issuing:&lt;br /&gt;$ cco perl&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;nothing revolutionary, but it saves some keystrokes here and there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-813607511695004063?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/813607511695004063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/02/magpie-mageia-perl-integration-easy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/813607511695004063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/813607511695004063'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/02/magpie-mageia-perl-integration-easy.html' title='magpie - MAGeia Perl Integration Easy'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3351299541558395775</id><published>2011-01-25T11:44:00.000+01:00</published><updated>2011-01-25T11:44:13.487+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>mageia warming up - rebuilding perl packages</title><content type='html'>it's been a long time without posting - but real life kicked in.&lt;br /&gt;&lt;br /&gt;one of the things that keep me busy those days is the rebuilding of perl packages for &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt;. around 2000 have been done, with ~400 still waiting. it's been a good opportunity to clean up the mess: remove old packages, clean spec files, etc.&lt;br /&gt;&lt;br /&gt;all in all, mageia will be quite in a good shape regarding perl packages when mirroring will start - which should happen quite soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3351299541558395775?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3351299541558395775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2011/01/mageia-warming-up-rebuilding-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3351299541558395775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3351299541558395775'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2011/01/mageia-warming-up-rebuilding-perl.html' title='mageia warming up - rebuilding perl packages'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6491890518487568613</id><published>2010-09-18T18:07:00.002+02:00</published><updated>2010-09-18T18:16:12.336+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mageia'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><title type='text'>good-bye mandriva, hello mageia!</title><content type='html'>word &lt;a href="http://digg.com/news/technology/developers_fork_mandriva_linux_creating_mageia"&gt;is&lt;/a&gt; &lt;a href="http://www.reddit.com/r/linux/comments/dfnsc/developers_fork_mandriva_linux_creating_mageia/"&gt;spreading&lt;/a&gt; &lt;a href="http://linux.slashdot.org/story/10/09/18/1437248/Developers-Fork-Mandriva-Linux-Creating-Mageia"&gt;fast&lt;/a&gt;: mandriva developers &amp;amp; contributors are forking mandriva. the new distribution is  named &lt;a href="http://mageia.org/"&gt;mageia&lt;/a&gt; - read the full announce on &lt;a href="http://mageia.org/"&gt;http://mageia.org&lt;/a&gt;. my name being on the announce, no need to say that i fully support this move... :-) more news will be available in the coming days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6491890518487568613?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6491890518487568613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/09/good-bye-mandriva-hello-mageia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6491890518487568613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6491890518487568613'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/09/good-bye-mandriva-hello-mageia.html' title='good-bye mandriva, hello mageia!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2177943187536388842</id><published>2010-08-13T19:12:00.001+02:00</published><updated>2010-08-13T19:13:20.097+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='critic'/><title type='text'>supply your own perlcriticrc to dzil test plugin</title><content type='html'>if you wanted the ability to supply your own &lt;a href="http://search.cpan.org/perldoc?Perl::Critic"&gt;perlcriticrc&lt;/a&gt; while using &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-CriticTests"&gt;dist-zilla-plugin-critictests&lt;/a&gt;, then &lt;a href="http://github.com/Hercynium"&gt;stephen scaffidi&lt;/a&gt; is your hero of the day. indeed, he just implemented this - and i had to do the tedious work of typing "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dzil release&lt;/span&gt;". oh well, i can say that life is difficult. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2177943187536388842?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2177943187536388842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/08/supply-your-own-perlcriticrc-to-dzil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2177943187536388842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2177943187536388842'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/08/supply-your-own-perlcriticrc-to-dzil.html' title='supply your own perlcriticrc to dzil test plugin'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6925204322597718247</id><published>2010-07-29T10:28:00.000+02:00</published><updated>2010-07-29T10:28:26.767+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>perl's state in mandriva cooker</title><content type='html'>some time after &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt; 2010.1 has been released, i'm now pleased to report that &lt;a href="http://www.perl.org/"&gt;perl&lt;/a&gt; has been updated to 5.12.1, all &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt; modules are up-to-date (including padre 0.68) or bugs have been reported upstream... and parrot 2.6.0 is currently building.&lt;br /&gt;&lt;br /&gt;the perl 5.12.0 - 5.12.1 upgrade was really smooth: no patch to rediff, reapply, etc. that's definitely a good thing for perl maintainers to have a stable series with only critical fixes going in. i've already &lt;a href="http://perldoc.perl.org/5.12.1/perlthanks.html"&gt;said it&lt;/a&gt;, but thanks again to p5p!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6925204322597718247?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6925204322597718247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/07/perls-state-in-mandriva-cooker.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6925204322597718247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6925204322597718247'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/07/perls-state-in-mandriva-cooker.html' title='perl&apos;s state in mandriva cooker'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1541425440315178607</id><published>2010-06-16T13:56:00.000+02:00</published><updated>2010-06-16T13:56:18.895+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='directory'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>announcing file::sharedir::pathclass</title><content type='html'>following &lt;a href="http://jquelin.blogspot.com/2010/06/random-file-homedir-bits.html"&gt;last week's announce&lt;/a&gt; of &lt;a href="http://search.cpan.org/perldoc?File::HomeDir::PathClass"&gt;file::homedir::pathclas&lt;/a&gt;, i also committed &lt;a href="http://search.cpan.org/perldoc?File::ShareDir::PathClass"&gt;file::sharedir::pathclass&lt;/a&gt; on the same principle. therefore, if you always wrap &lt;a href="http://search.cpan.org/perldoc?File::ShareDir"&gt;file::sharedir&lt;/a&gt; results in &lt;a href="http://search.cpan.org/perldoc?Path::Class"&gt;path::class&lt;/a&gt; objects for greater convenience, just use &lt;a href="http://search.cpan.org/perldoc?File::ShareDir::PathClass"&gt;file::sharedir::pathclass&lt;/a&gt; instead, which is doing that automatically for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1541425440315178607?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1541425440315178607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/06/announcing-filesharedirpathclass.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1541425440315178607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1541425440315178607'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/06/announcing-filesharedirpathclass.html' title='announcing file::sharedir::pathclass'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2649566074694634292</id><published>2010-06-11T12:44:00.000+02:00</published><updated>2010-06-11T12:44:39.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='directory'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>random file-homedir bits</title><content type='html'>no need to present &lt;a href="http://search.cpan.org/perldoc?File::HomeDir"&gt;file::homedir&lt;/a&gt;, the module to use to retrieve various information such as where is my home, where is my desktop, where are my documents, etc.&lt;br /&gt;&lt;br /&gt;since my needs were not all covered, i contacted &lt;a href="http://use.perl.org/%7Ealias/journal"&gt;alias&lt;/a&gt; with some of my ideas. he kindly gave me a commit bit so i can scratch my itches at will...&lt;br /&gt;&lt;br /&gt;i therefore implemented xdg support for recent unix desktops, with &lt;a href="http://search.cpan.org/%7Edaxim/"&gt;daxim&lt;/a&gt;'s help. this means that unix platforms with gnome, kde or any recent desktops won't report &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$HOME&lt;/span&gt; as the one and unique answer to all those questions. this feature is available in released file-homedir 0.91 - towards a cleaning of our homedirs, yay!&lt;br /&gt;&lt;br /&gt;still in the work (not yet released), i've also checked in a &lt;i style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;my_dist_data($dist)&lt;/i&gt; function, to standardize the directory where the application will store its internal data, such as database or cache. it is located in:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;my_data()/Perl/dist/$dist&lt;/span&gt;&lt;/blockquote&gt;following the now traditional &lt;i&gt;data/vendor/application&lt;/i&gt; scheme (on legacy unix desktops, the directory will be &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$HOME/.perl/dist/$dist&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/var&lt;/span&gt;, to be sure that it's a hidden directory). to be consistent with &lt;a href="http://search.cpan.org/perldoc?File::ShareDir"&gt;file::sharedir&lt;/a&gt;, i guess i'll also implement &lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;my_module_data($module)&lt;/span&gt;&lt;/i&gt;, following the same reasoning.&lt;br /&gt;&lt;br /&gt;this will likely be released in version 0.92, before working on the last remaining bit on my plate: &lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;my_dist_config($dist)&lt;/span&gt;&lt;/i&gt;, returning a directory where an application will be able to store its configuration. it's a bit different of the data directory (even if config &lt;i&gt;is&lt;/i&gt; some kind of data): data is supposed to be transient, or can be removed without harming the app - while the config should not be erased. however, it's not really as straightforward as the data directory, since not all platforms support this: on windows, users are not supposed to update config by hand, so it's often stored in the registry... so how to preserve the cross-distribution nature of file-homedir for this very feature? this will require some thinking...&lt;br /&gt;&lt;br /&gt;finally, it's with great pleasure that i'm announcing &lt;a href="http://search.cpan.org/perldoc?File::HomeDir::PathClass"&gt;file-homedir-pathclass&lt;/a&gt;, which is a convenient wrapper around file-homedir returning &lt;a href="http://search.cpan.org/perldoc?Path::Class"&gt;path::class&lt;/a&gt; objects. alias did not want to introduce it in file-homedir to preserve compatibility, and suggested to release it as a new dist... so i released this new module, allowing to write for example:&lt;br /&gt;&lt;blockquote&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;perl -MFile::HomeDir::PathClass=-all -E 'say $_ for my_home()-&amp;gt;children'&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2649566074694634292?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2649566074694634292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/06/random-file-homedir-bits.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2649566074694634292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2649566074694634292'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/06/random-file-homedir-bits.html' title='random file-homedir bits'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3272740459784620949</id><published>2010-06-08T10:53:00.005+02:00</published><updated>2010-06-08T11:10:15.084+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>how to retrieve image size in perl</title><content type='html'>today's topic is quite easy: retrieving image size (in perl, with the help of &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt; of course). indeed, when one wants to &lt;a href="http://jquelin.blogspot.com/2009/05/image-resizing-in-perl.html"&gt;resize an image&lt;/a&gt;, it's often interesting to know its  current size.&lt;br /&gt;&lt;br /&gt;the easiest way to retrieve those information is of course to use &lt;a href="http://search.cpan.org/perldoc?Image::Size"&gt;image::size&lt;/a&gt;:&lt;br /&gt;&lt;script src="http://gist.github.com/429784.js"&gt;&lt;/script&gt;&lt;br /&gt;easy, wasn't it?&lt;br /&gt;&lt;br /&gt;however, as mentioned previously, retrieving those information is often just the prelude before doing some transformation to the image itself. and image::size, while doing it perfectly, does only one thing - it cannot be used for any other image manipulation. so if you intend to use another module after, you can as well use this other module to retrieve this information: that'll be faster (image read only once) and use less memory (only one module loaded). here's how to get those information with &lt;a href="http://search.cpan.org/perldoc?Image::Magick"&gt;image::magick&lt;/a&gt;:&lt;br /&gt;&lt;script src="http://gist.github.com/429787.js"&gt;&lt;/script&gt;&lt;br /&gt;it wasn't that difficult, and opens the whole &lt;a href="http://www.imagemagick.org/"&gt;image magick&lt;/a&gt; world to your program!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3272740459784620949?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3272740459784620949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/06/how-to-retrieve-image-size-in-perl.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3272740459784620949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3272740459784620949'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/06/how-to-retrieve-image-size-in-perl.html' title='how to retrieve image size in perl'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-715779836005176382</id><published>2010-05-31T17:49:00.003+02:00</published><updated>2010-05-31T18:04:15.077+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='risk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>further prisk enhancements</title><content type='html'>imagine a &lt;a href="http://upload.wikimedia.org/wikipedia/commons/d/d8/Winkel-tripel-projection.jpg"&gt;world map&lt;/a&gt;. now show me on the map where china is - easy, uh? where is &lt;a href="http://en.wikipedia.org/wiki/Irkutsk"&gt;irkustk&lt;/a&gt;? tougher, isn't it? but it remains a region which exists in our world... now imagine we have another map in front of us... a map named &lt;a href="http://github.com/jquelin/games-risk/raw/v3.101510/share/maps/godstorm_pic.jpg"&gt;godstorm&lt;/a&gt; for example... where is thule? or poseidonis?&lt;br /&gt;&lt;br /&gt;those questions aren't rethorical, when playing &lt;a href="http://search.cpan.org/dist/Games-Risk"&gt;prisk&lt;/a&gt;. because, when you exchange 3 cards to get reinforcements, you also get bonuses if you exchange a card representing a country that you own. and if it's easy to check at a glance if you own china when playing classical risk map, it's another challenge to locate thule on godstorm map.&lt;br /&gt;&lt;br /&gt;therefore, i'm glad to introduce latest prisk version (3.101510, currently on its way to cpan). in the card window, one can now double-click a card, and this will highlight a country on the big map. this way, you'll know exactly which card to exchange (or what country to invade) in order to maximize your reinforcements. happy invasion!&lt;br /&gt;&lt;br /&gt;(remember that i'm always welcoming &lt;a href="http://github.com/jquelin/games-risk/"&gt;code contribution&lt;/a&gt; or new translations)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-715779836005176382?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/715779836005176382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/05/further-prisk-enhancements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/715779836005176382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/715779836005176382'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/05/further-prisk-enhancements.html' title='further prisk enhancements'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2335628817395100633</id><published>2010-05-24T16:15:00.003+02:00</published><updated>2010-05-24T16:26:49.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='risk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>new continent window for prisk</title><content type='html'>some further enhancements to &lt;a href="http://search.cpan.org/dist/Games-Risk"&gt;prisk&lt;/a&gt;: latest version got a brand new continent window, listing the continents, their bonus, and who owns the countries. it also highlights when a continent is totally owned by a player. it is also updated during the game, when players gain and loose countries.&lt;br /&gt;&lt;br /&gt;without further ado, here's a snapshot of the new shiny feature:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qZIpP8ZamQY/S_qKuivgrKI/AAAAAAAAAbc/08Byo1uQIUw/s1600/continents-new.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 208px;" src="http://3.bp.blogspot.com/_qZIpP8ZamQY/S_qKuivgrKI/AAAAAAAAAbc/08Byo1uQIUw/s320/continents-new.jpg" alt="" id="BLOGGER_PHOTO_ID_5474840829226953890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;also new in version 3.101430, the ability to run prisk directly from the checkout. previously one would need to run "dzil run ./bin/prisk" since &lt;a href="http://search.cpan.org/dist/File-ShareDir"&gt;file::sharedir&lt;/a&gt; requires a fully built + installed distribution before finding its stuff. now, prisk detects if it's running in a local checkout, and will bypass file::sharedir.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/jquelin/games-risk"&gt;the code is on github&lt;/a&gt; where you can fork it: patches and translations welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2335628817395100633?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2335628817395100633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/05/new-continent-window-for-prisk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2335628817395100633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2335628817395100633'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/05/new-continent-window-for-prisk.html' title='new continent window for prisk'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qZIpP8ZamQY/S_qKuivgrKI/AAAAAAAAAbc/08Byo1uQIUw/s72-c/continents-new.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2608907158779639103</id><published>2010-05-19T09:35:00.003+02:00</published><updated>2010-05-19T10:15:23.328+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>mst lost his ironman status</title><content type='html'>as said on his blog, mst lost the &lt;a href="http://ironman.enlightenedperl.org/"&gt;ironman competition&lt;/a&gt;. i wonder how many of the early joiners still retained their ironman status. i still should be in the competition (although really hard at some times), even if there's no way to tell since the &lt;a href="http://jquelin.blogspot.com/2010/02/ironman-challenge-status.html"&gt;ironman app isn't updated&lt;/a&gt; since quite some time.&lt;br /&gt;&lt;br /&gt;anyway, i get to cast my vote. i don't really care the hair colour, but the talk bit is more interesting. before you guys start submitting ideas such as why php/ruby/python is far better than perl, remember that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;mst started the challenge to help perl get known. finishing by forcing him to praise another language seems to be against the rules. not even speaking of this not being very classy...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the talk will be heavily advertised (at least in the perl community). are you sure you want to offer such a gallery for another language?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;so i'll cast my vote on a &lt;span style="font-style: italic;"&gt;what i will do to advertise perl even more this year&lt;/span&gt; talk - hoping this will motivate mst to start another initiative to help promote perl&lt;sup&gt;[0]&lt;/sup&gt;. i'm open to any other talk subject in the same vein. and i'm ready to trade my colour voting&lt;sup&gt;[1]&lt;/sup&gt; for you to vote for such a topic. :-)&lt;br /&gt;&lt;br /&gt;so &lt;a href="http://www.shadowcat.co.uk/blog/matt-s-trout/iron-man-lost/?colour=red&amp;amp;title=what+i+will+do+to+advertise+perl+even+more+this+year"&gt;here's my vote&lt;/a&gt;, mst!&lt;br /&gt;in the meantime, this does not preclude you to continue blogging...&lt;br /&gt;&lt;br /&gt;[0] of course, mst can game the talk by showing a single slide with  "nothing" on it, but, that, again, would not be very classy. and mst would not settle on such an easy end, would he?&lt;br /&gt;[1] for the pink or orange fans around there&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2608907158779639103?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2608907158779639103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/05/mst-lost-his-ironman-status.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2608907158779639103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2608907158779639103'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/05/mst-lost-his-ironman-status.html' title='mst lost his ironman status'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7948913068472656277</id><published>2010-05-17T20:01:00.002+02:00</published><updated>2010-05-17T20:18:10.391+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='risk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><title type='text'>games::risk speaks your language!</title><content type='html'>well, maybe not yet, but very soon - as soon as you'll contribute the translated strings! :-)&lt;br /&gt;&lt;br /&gt;those days, i feel like working on &lt;a href="http://search.cpan.org/dist/Games-Risk"&gt;prisk&lt;/a&gt;, the risk clone that i wrote in perl. i added full internationalization, and contributed the first foreign language (&lt;a href="http://github.com/jquelin/games-risk/blob/master/lib/LocaleData/fr/LC_MESSAGES/Games-Risk.po"&gt;french&lt;/a&gt;, as you may have guessed :-) ).&lt;br /&gt;&lt;br /&gt;you can contribute translations for your language by &lt;a href="http://github.com/jquelin/games-risk"&gt;forking the project&lt;/a&gt;, and then sending a pull request with your changes. it should be quite fast, since it only features &lt;a href="http://github.com/jquelin/games-risk/raw/master/lib/LocaleData/Games-Risk-messages.pot"&gt;73 strings to translate&lt;/a&gt;. you know what to do... :-)&lt;br /&gt;&lt;br /&gt;note that i also fixed a crash that was appearing sometimes during game startup. i'll now try to find some time to work on bigger topics, such as sanitizing the whole codebase, or adding features...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7948913068472656277?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7948913068472656277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/05/gamesrisk-speaks-your-language.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7948913068472656277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7948913068472656277'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/05/gamesrisk-speaks-your-language.html' title='games::risk speaks your language!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3238732157738447646</id><published>2010-05-13T17:14:00.001+02:00</published><updated>2010-05-13T17:16:35.239+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpants'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>is cpants down?</title><content type='html'>since some time, i did not manage to reach &lt;a href="http://cpants.perl.org/"&gt;cpants&lt;/a&gt;... i don't seem to be the only one, so does anyone know what's going on?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3238732157738447646?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3238732157738447646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/05/is-cpants-down.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3238732157738447646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3238732157738447646'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/05/is-cpants-down.html' title='is cpants down?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3385724612187829192</id><published>2010-05-05T19:08:00.004+02:00</published><updated>2010-05-05T19:34:46.333+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rakudo'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>perl status for mandriva 2010.1 (version freeze)</title><content type='html'>it's that time of the year: next &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt; version is due &lt;a href="http://wiki.mandriva.com/en/2010.1_Development#Development_planning:_2010_Spring_planning_and_delivery"&gt;beginning of june&lt;/a&gt;, which means all updates are on hold - unless they solve a bug or any other problem worth fixing.&lt;br /&gt;&lt;br /&gt;on the perl front, mandriva 2010.1 will therefore ship:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.perl.org"&gt;perl&lt;/a&gt; 5.10.1 (&lt;a href="http://jquelin.blogspot.com/2010/04/no-perl-512-in-mandriva-20101.html"&gt;5.12.x has been postponed&lt;/a&gt; to 2011.0)&lt;/li&gt;&lt;li&gt;&lt;a href="http://padre.perlide.org"&gt;padre&lt;/a&gt; 0.60&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.parrot.org"&gt;parrot&lt;/a&gt; 2.3.0 and &lt;a href="http://www.rakudo.org"&gt;rakudo&lt;/a&gt; 2010.03&lt;/li&gt;&lt;li&gt;... and 1912 dists from &lt;a href="http://search.cpan.org"&gt;cpan&lt;/a&gt;!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;as always, if you miss a perl module, just drop a note (in the comments, or a mail, or on &lt;a href="http://qa.mandriva.com"&gt;mandriva bugzilla&lt;/a&gt;) and i'll package it for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3385724612187829192?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3385724612187829192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/05/mandriva-20101-version-freeze.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3385724612187829192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3385724612187829192'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/05/mandriva-20101-version-freeze.html' title='perl status for mandriva 2010.1 (version freeze)'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1296719962033122076</id><published>2010-04-28T18:57:00.004+02:00</published><updated>2010-05-05T19:08:40.941+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>roll your own dzil tutorial</title><content type='html'>rjbs created a &lt;a href="http://dzil.org/tutorial/start.html"&gt;roll-your-own dzil tutorial&lt;/a&gt;. this brings back memories, maybe there should be monsters in it. otoh, since it mentions &lt;a href="http://search.cpan.org/perldoc?Module::Install"&gt;module::install&lt;/a&gt;, maybe the monster quota is already met. :-)&lt;br /&gt;&lt;br /&gt;anyway, the tutorial is a nice read for those wanting to learn &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla"&gt;dist-zilla&lt;/a&gt;. there are some glitches here and there (eg, it still mentions AllFiles plugin instead of GatherDir, and other v1 to v2 misses - i'll send patches), but is otherwise wicked cool.&lt;br /&gt;&lt;br /&gt;and some of my plugins are even mentioned! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1296719962033122076?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1296719962033122076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/04/roll-your-own-dzil-tutorial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1296719962033122076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1296719962033122076'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/04/roll-your-own-dzil-tutorial.html' title='roll your own dzil tutorial'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7394382690712286501</id><published>2010-04-20T15:44:00.004+02:00</published><updated>2010-04-20T15:50:59.611+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>no perl 5.12 in mandriva 2010.1</title><content type='html'>as &lt;a href="http://jquelin.blogspot.com/2010/04/perl-5120-in-mandriva.html"&gt;announced previously&lt;/a&gt;, i did some further testing wrt perl 5.12.0 and &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt;. after having installed it, i've &lt;a href="http://lists.mandriva.com/cooker/2010-04/msg00332.php"&gt;been able to use urpmi&lt;/a&gt; and compile various binary perl modules against 5.12.&lt;br /&gt;&lt;br /&gt;however, &lt;a href="http://lists.mandriva.com/cooker/2010-04/msg00334.php"&gt;decision has been taken&lt;/a&gt; not to push perl 5.12 in spring release. potential for havoc is too important - especially since it's used by many core tools. it'll have to wait after 2010.1 is out... but since all bits &amp;amp; pieces are ready to be pushed, it's now just a matter of time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7394382690712286501?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7394382690712286501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/04/no-perl-512-in-mandriva-20101.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7394382690712286501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7394382690712286501'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/04/no-perl-512-in-mandriva-20101.html' title='no perl 5.12 in mandriva 2010.1'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1176246973377960353</id><published>2010-04-16T19:16:00.002+02:00</published><updated>2010-04-16T19:31:54.160+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>perl 5.12.0 in mandriva?</title><content type='html'>final &lt;a href="http://search.cpan.org/%7Ejesse/perl-5.12.0/"&gt;perl 5.12.0&lt;/a&gt; is now available. i updated our spec file in &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt;, and it builds ok both on my machine and mandriva's buildsystem - so i pushed it to main/testing. however, i did not manage to rebuild packages having a dep on perl, for an obscure reason having to do with testing media, bad karma or not enough chicken blood - i don't know exactly which reason is the good one.&lt;br /&gt;&lt;br /&gt;i now need to have more thorough testing, in order to see if &lt;a href="http://wiki.mandriva.com/en/Urpmi"&gt;urpmi&lt;/a&gt; &amp;amp; other tools still works with new perl. i don't know if i'll have time before mandriva 2010.1 freeze date. not counting the fact that we'll have to create a c-wrapper to replace suidperl used in one of the draktools.&lt;br /&gt;&lt;br /&gt;so, back to the question: perl 5.12.0 in mandriva? yep, "soon" - but maybe "soon" will mean "after 2010.1". note that if you can help testing, "soon" may revert to a true "soon" meaning...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1176246973377960353?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1176246973377960353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/04/perl-5120-in-mandriva.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1176246973377960353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1176246973377960353'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/04/perl-5120-in-mandriva.html' title='perl 5.12.0 in mandriva?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3355511887042308992</id><published>2010-04-07T13:52:00.005+02:00</published><updated>2010-04-07T14:08:26.292+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>github power</title><content type='html'>i started using &lt;a href="http://github.com"&gt;github&lt;/a&gt; somewhere in 2009 iirc. i was a bit reluctant to use it back at that time, especially because of its speed (or lack of, actually)... and because i already hosted my projects of &lt;a href="http://repo.or.cz"&gt;repo.or.cz&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;however, i'm now really glad i started using it. speed is no longer a problem, and it provides really nice features. &lt;a href="http://cia.vc"&gt;cia&lt;/a&gt; integration, network graphs, comments on commits, watching repos (even if i'm not totally happy with it right now), and of course... pull requests!&lt;br /&gt;&lt;br /&gt;i was away this week-end, and found 4 pull requests in my mailbox for my modules when i came back. integrating other's work has never been easier with &lt;a href="http://git-scm.com"&gt;git&lt;/a&gt; and github which allows people to fork at will. that's the new way of writing code: create the basic stub of your module, and wait for others to enhance it! :-) &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Git"&gt;git plugin&lt;/a&gt; for &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; now supports pushing to a different branch, supports the new dist-zilla-tester framework and the bundle @git now accepts multi-valued args.&lt;br /&gt;&lt;br /&gt;dvcs are a bit harder to grasp at first, but once you understand the concepts, they're really a killer application - especially when coupled with a cooperative platform such as github.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3355511887042308992?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3355511887042308992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/04/github-power.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3355511887042308992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3355511887042308992'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/04/github-power.html' title='github power'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4020492932047880776</id><published>2010-03-31T17:01:00.003+02:00</published><updated>2010-03-31T17:46:41.137+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>dzil activity</title><content type='html'>of course, you are aware that &lt;a href="http://rjbs.manxome.org/rubric/entry/1831"&gt;dzil v2 is out&lt;/a&gt;, with lots of exciting new features, brought to you by rjbs and &lt;a href="http://news.perlfoundation.org/2010/03/2010q1-grant-proposals-results.html"&gt;the perl foundation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;but it's only one side of the activity floating around dist-zilla... indeed, as &lt;a href="http://www.dagolden.com/"&gt;dagolden&lt;/a&gt;, &lt;a href="http://github.com/avar"&gt;aevar&lt;/a&gt; and others try dzil, they (of course) like it, and start contributing their own plugins.&lt;br /&gt;&lt;br /&gt;here's a list of new plugins landed on cpan... first some additional author tests:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::CheckChangesTests"&gt;CheckChangesTests&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; - check changelog&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::CheckExtraTests"&gt;CheckExtraTests&lt;/a&gt; - runs xt/ tests, but don't copy them to t/&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::DistManifestTests"&gt;DistManifestTests&lt;/a&gt; - check manifest&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::HasVersionTests"&gt;HasVersionTests&lt;/a&gt; - check all your modules have a version&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::KwaliteeTests"&gt;KwaliteeTests&lt;/a&gt; - check your kwalitee&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::MinimumVersionTests"&gt;MinimumVersionTests&lt;/a&gt; - check minimum perl version needed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::PodSpellingTests"&gt;PodSpellingTests&lt;/a&gt; - check pod spelling&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::PortabilityTests"&gt;PortabilityTests&lt;/a&gt; - check if your code is portable&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::SynopsisTests"&gt;SynopsisTests&lt;/a&gt; - check if code in your synopsis compiles&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::UnusedVarsTests"&gt;UnusedVarsTests&lt;/a&gt; - detects unused vars&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::ReportVersions"&gt;ReportVersions&lt;/a&gt; - additional test to report version&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;some plugins to complete meta-data:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Bugtracker"&gt;Bugtracker&lt;/a&gt; - http://rt.cpan.org/Public/Dist/Display.html?Name=xxxx&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Homepage"&gt;HomePage&lt;/a&gt; - http://search.cpan.org/dist/xxxx&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;some plugins to customize your build process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::ModuleBuild::Custom"&gt;ModuleBuild::Custom&lt;/a&gt; - for mb&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::OverridableMakeMaker"&gt;OverridableMakeMaker&lt;/a&gt; - for eumm&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;some plugins to generate additional files:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::FatPacker"&gt;FatPacker&lt;/a&gt; - creates a script with all dependencies packed&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::InstallGuide"&gt;InstallGuide&lt;/a&gt; - creates an INSTALL file&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::ReadmeMarkdownFromPod"&gt;ReadmeMarkdownFromPod&lt;/a&gt; - README.mkdn file&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;some plugins to compute your next version number:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::BumpVersionFromGit"&gt;BumpVersionFromGit&lt;/a&gt; - version taken from last git tag&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::VersionFromPrev"&gt;VersionFromPrev&lt;/a&gt; - classic perl versions, 1.00 to 1.99&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;and finally some bundles:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::PluginBundle::AVAR"&gt;@AVAR&lt;/a&gt; - ævar arnfjörð bjarmason's take on it&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::PluginBundle::MARCEL"&gt;@MARCEL&lt;/a&gt; - marcel grünauer &lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::PluginBundle::PDONELAN"&gt;@PDONELAN&lt;/a&gt; - patrick donelan&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;you can install all of them in one go via &lt;a href="http://search.cpan.org/perldoc?Task::Dist::Zilla"&gt;task-dist-zilla&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;they are also available in mandriva, and suggested when installing dist-zilla...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4020492932047880776?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4020492932047880776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/03/dzil-activity.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4020492932047880776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4020492932047880776'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/03/dzil-activity.html' title='dzil activity'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7999148928640584482</id><published>2010-03-23T17:48:00.003+01:00</published><updated>2010-03-23T18:12:01.175+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>how to obsolete a cpan dist?</title><content type='html'>my &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::AutoPrereq"&gt;autoprereq&lt;/a&gt; plugin for &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; is now &lt;a href="http://rjbs.manxome.org/rubric/entry/1828"&gt;going core&lt;/a&gt;. however, it's currently existing as a dist of its own within &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt;... since the module does not change name, what is needed to make sure rjbs can upload dzil v2 when it's ready? is giving co-maint rights on pause enough? will i have to remove previous tarballs?&lt;br /&gt;&lt;br /&gt;the same kind of question can be asked for obsoleting a given module. there's (afaik) no way to tell &lt;a href="http://search.cpan.org/dist/CPAN"&gt;cpan&lt;/a&gt; / &lt;a href="http://search.cpan.org/dist/CPANPLUS"&gt;cpanplus&lt;/a&gt; that foo::bar is replacing bar::foo... those problems are tackled for linux distribution packages, could we reuse some of their logic here?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7999148928640584482?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7999148928640584482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/03/how-to-obsolete-cpan-dist.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7999148928640584482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7999148928640584482'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/03/how-to-obsolete-cpan-dist.html' title='how to obsolete a cpan dist?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2666017174569688223</id><published>2010-03-15T17:32:00.004+01:00</published><updated>2010-03-15T17:48:23.841+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>activity in git plugin for dist-zilla</title><content type='html'>it's been a busy week for &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-Git"&gt;dist-zilla-plugin-git&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;first, there was some test fixes to work with latest dist-zilla (thanks to &lt;a href="http://rjbs.manxome.org/rubric/entries/user/rjbs/has_body/1?long_form=1"&gt;ricardo&lt;/a&gt;), and also to support &lt;a href="http://git-scm.com"&gt;git&lt;/a&gt; 1.7.&lt;br /&gt;&lt;br /&gt;the git plugin then saw support for annotated tags which is now the default - but &lt;a href="http://github.com/madsen"&gt;christopher madsen&lt;/a&gt; restored the possibility to use lightweight tags. he then refactored commit message generation, in order to allow a custom commit message. not only that, but he also brought to ability to specify which files are allowed to be dirty, and automatically committed.&lt;br /&gt;&lt;br /&gt;then &lt;a href="http://www.dagolden.com/"&gt;david golden&lt;/a&gt; jumped in, and scratched his itches: support for empty lines in changelog and possibility to specify which branch(es!) to push to. all of that with new tests - and some existing test fixes! \o/&lt;br /&gt;&lt;br /&gt;git support in &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; is now in a pretty good shape. report &lt;a href="http://rt.cpan.org/NoAuth/Bugs.html?Dist=Dist-Zilla-Plugin-Git"&gt;bugs&lt;/a&gt; if you miss your pet-peeve... or even better: &lt;a href="http://github.com/jquelin/dist-zilla-plugin-git"&gt;fork the code&lt;/a&gt; and send me pull requests once the code is doing what you  want!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2666017174569688223?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2666017174569688223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/03/activity-in-git-plugin-for-dist-zilla.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2666017174569688223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2666017174569688223'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/03/activity-in-git-plugin-for-dist-zilla.html' title='activity in git plugin for dist-zilla'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-603952143173591048</id><published>2010-03-09T17:57:00.002+01:00</published><updated>2010-03-09T18:05:52.305+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='curses'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>on testing</title><content type='html'>testing is good for your modules. even the ones you know work as intended. case in point: i wanted to refactor &lt;a href="http://search.cpan.org/perldoc?Curses::Toolkit::Object::Coordinates"&gt;curses::toolkit::object::coordinates&lt;/a&gt; to use &lt;a href="http://search.cpan.org/dist/Moose"&gt;moose&lt;/a&gt;.however, refactoring such a core component of &lt;a href="http://search.cpan.org/perldoc?Curses::Toolkit"&gt;curses::toolkit&lt;/a&gt; without a test suite did not sound such a good idea...&lt;br /&gt;&lt;br /&gt;therefore i wrote some tests for this module - and i discovered 2 bugs in this class. a small one that made an error message totally useless, and a serious one that affected the semantics of some methods.&lt;br /&gt;&lt;br /&gt;so, not counting the fact that refactoring was quite easy once the test suite was in place, i also found some real bugs in the code. those tests were not very funny to write, but at least i know that the roi was very good! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-603952143173591048?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/603952143173591048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/03/on-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/603952143173591048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/603952143173591048'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/03/on-testing.html' title='on testing'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2309274065923248929</id><published>2010-03-03T13:22:00.004+01:00</published><updated>2010-03-03T13:29:57.686+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>tk::action to simplify access to a gui action</title><content type='html'>&lt;p&gt;in a typical graphical application, menu entries are often also available in toolbars or other widgets. and sometimes, you want to enable or disable a given action, and this  means having to update all those entries and widgets everywhere this action is allowed / forbidden.&lt;/p&gt;&lt;p&gt;this is not fun.&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;therefore, i wrote &lt;a href="http://search.cpan.org/perldoc?Tk::Action"&gt;tk::action&lt;/a&gt;, a module to help managing actions in a &lt;a href="http://search.cpan.org/dist/Tk"&gt;tk&lt;/a&gt; gui:  just create a new object, associate some widgets and bindings with &lt;code&gt;add_widget()&lt;/code&gt; / &lt;code&gt;add_binding()&lt;/code&gt;  and then de/activate the whole action at once with &lt;code&gt;enable()&lt;/code&gt;  or &lt;code&gt;disable()&lt;/code&gt;.&lt;/p&gt;simple and efficient, as you can see on this synopsis:&lt;script src="http://gist.github.com/320575.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2309274065923248929?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2309274065923248929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/03/tkaction-to-simplify-access-to-gui.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2309274065923248929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2309274065923248929'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/03/tkaction-to-simplify-access-to-gui.html' title='tk::action to simplify access to a gui action'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7913393879472802916</id><published>2010-02-24T10:01:00.004+01:00</published><updated>2010-02-24T10:12:20.664+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='curses'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>a progressbar for curses-toolkit</title><content type='html'>&lt;a href="http://search.cpan.org/perldoc?Curses::Toolkit"&gt;curses::toolkit&lt;/a&gt; is &lt;span style="font-weight: bold; font-style: italic;"&gt;the&lt;/span&gt; promising toolkit for writing curses applications with perl. it  follows a gtk-like api, and supports theming. it is using &lt;a href="http://search.cpan.org/dist/POE/"&gt;poe&lt;/a&gt; for its event loop (although one can craft its own loop), and currently begins a loose &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt; conversion.&lt;br /&gt;&lt;br /&gt;however, the set of widgets is currently a bit restricted: hbox, vbox, buttons, label, entries, windows... so, i wrote yesterday a &lt;a href="http://github.com/jquelin/curses-toolkit/commit/004137fdc67207109058c53363b5d9c7ae88ed23"&gt;progressbar&lt;/a&gt; widget. it's a bit difficult to understand at a glance where to put code, but i finally nailed a rough first version - it needs to be polished, though. once a listbox widget will be available, the toolkit will be sufficient for a lot of tasks.&lt;br /&gt;&lt;br /&gt;lots of stuff remains to be done of course: moose-ification to get rid of its hand-crafted roles, building a real test suite (how the heck are we supposed to test a curses toolkit?), completing the widget set... volunteers welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7913393879472802916?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7913393879472802916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/02/progressbar-for-curses-toolkit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7913393879472802916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7913393879472802916'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/02/progressbar-for-curses-toolkit.html' title='a progressbar for curses-toolkit'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4906923089027814190</id><published>2010-02-18T16:28:00.003+01:00</published><updated>2010-02-18T16:33:49.573+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>ironman challenge status?</title><content type='html'>&lt;a href="http://www.shadowcat.co.uk/blog/matt-s-trout/iron-man/"&gt; ironman blogging challenge&lt;/a&gt; is now running since quite some time, but it seems that there's no followup. &lt;a href="http://ironman.enlightenedperl.org/munger/mybadge/male/"&gt;personal status&lt;/a&gt; is not updated since october 3rd, so i guess having some stats on the number of bloggers managing to keep up with the pace is not available either...&lt;br /&gt;&lt;br /&gt;too bad, since mst managed to gather the perl community to make some noise on the web. maybe an update could promote a second life to perl blogging?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4906923089027814190?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4906923089027814190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/02/ironman-challenge-status.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4906923089027814190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4906923089027814190'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/02/ironman-challenge-status.html' title='ironman challenge status?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-450329929513476110</id><published>2010-02-09T16:31:00.003+01:00</published><updated>2010-02-09T16:44:12.834+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>how to profile a perl program?</title><content type='html'>so, it seems that &lt;a href="http://blogs.perl.org/users/leo_lapworth/2010/02/develnytprof---perl-profiling-links-needed.html"&gt;google isn't aware&lt;/a&gt; about  &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;perl profiling best practices&lt;/a&gt;... this blog post will thus try to link a lot of times to &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;devel-nytprof&lt;/a&gt;, which is &lt;span style="font-weight: bold;"&gt;the&lt;/span&gt; solution to use to &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;profile a perl program&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;for &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;profiling perl&lt;/a&gt;, just use &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;devel::nytprof&lt;/a&gt;. it's an easy to use &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;perl profiler&lt;/a&gt;:&lt;blockquote&gt;&lt;pre&gt;$ perl -d:NYTProf my_prog.pl&lt;br /&gt;[... let it run, it will be slower than your usual run ...]&lt;br /&gt;$ nytprofhtml&lt;/pre&gt;&lt;/blockquote&gt;when this is done, just point your brower to the locally created &lt;span style="font-family:courier new;"&gt;./nytprof/index.html&lt;/span&gt; and enjoy the nice reports.&lt;br /&gt;&lt;br /&gt;this is the best &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;profiler for perl&lt;/a&gt; available currently. in case you missed the point: the &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;perl profiler devel-nytprof&lt;/a&gt; is great, use it for your &lt;a href="http://search.cpan.org/dist/Devel-NYTProf"&gt;perl profiling&lt;/a&gt; needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-450329929513476110?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/450329929513476110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/02/how-to-profile-perl-program.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/450329929513476110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/450329929513476110'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/02/how-to-profile-perl-program.html' title='how to profile a perl program?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1265540343122634519</id><published>2010-02-03T11:09:00.001+01:00</published><updated>2010-02-03T11:18:42.568+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>which module to extract perl prereqs?</title><content type='html'>in &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dzil&lt;/a&gt; plugin &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::AutoPrereq"&gt;autoprereq&lt;/a&gt;, i'm extracting prereqs from the dist modules. i want this extract to be fast, based on the actual code (not makefile.pl or meta.yml, since the goal is to generate them), and as accurate as possible. it should also find base classes, moose roles and other "hidden" dependencies. finally, it should extract the minimum version needed for a given module, including minimum perl version.&lt;br /&gt;&lt;br /&gt;my first version was regex-based. i can already see your horrified face - but really it wasn't so bad, since it only needed to find some specific statements such as uses and requires. current version is using &lt;a href="http://search.cpan.org/perldoc?PPI"&gt;ppi&lt;/a&gt;, which is better suited for corner cases.&lt;br /&gt;&lt;br /&gt;however, long-term makes me think that it would be better to rely on an external module. so, what are the alternatives out there on cpan, and can i use them in autoprereq?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?B::PerlReq"&gt;b::perlreq&lt;/a&gt; - parses the file, but reports file (&lt;span style="font-style: italic;"&gt;File/Basename.pm&lt;/span&gt;) instead of modules, and is generally more suited for rpm&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Module::Extract::Use"&gt;module::extract::use&lt;/a&gt; - using ppi to parse a file, but extracts only use &amp;amp; require statements (no inheritance, moose roles, etc). also, it reports no minimum version extraction, only a list of modules.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Test::Dependencies"&gt;test::dependencies&lt;/a&gt; - using either b::perlreq (see above) or a regex scheme underneath&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Module::ScanDeps"&gt;module::scandeps&lt;/a&gt; - runs the file (which is slow), and finds all modules included - and sometimes a bit more (eg: file::homeDir::darwin is found for a module using file::homedir, even on a unix platform). can also run as a static analyser, but calls cpanplus (?!) which is slow.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Module::Info"&gt;module::info&lt;/a&gt; - regex based&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Module::CPANTS::Generator::Prereq"&gt;module::cpants::generator::prereq&lt;/a&gt; - parses makefile.pl, where i want sthg that parses actual code&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Module::CPANTS::Kwalitee::Prereq"&gt;module::cpants::kwalitee::prereq&lt;/a&gt; - parse meta.yml, makefile.pl or build.pl&lt;/li&gt;&lt;/ul&gt;so, no module was doing exactly what i wanted... since i am using ppi and that module::extract::use does the same, i contacted brian d foy to see whether he would be interested in additional extractions (moose roles, base classes, etc.) for this module. he was, so those enhancements are now pushed on my &lt;a href="http://github.com/jquelin/module--extract--use"&gt;github clone&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;i'm now waiting for a new release of this module with my enhancements, meaning that i can get rid of this part of the code in dzil autoprereq. which was, if you recall, the original goal! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1265540343122634519?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1265540343122634519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/02/which-module-to-extract-perl-prereqs.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1265540343122634519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1265540343122634519'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/02/which-module-to-extract-perl-prereqs.html' title='which module to extract perl prereqs?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1908928385568736024</id><published>2010-01-27T10:07:00.005+01:00</published><updated>2010-01-27T10:28:05.599+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>stats about cpan modules shipped by mandriva</title><content type='html'>adam and gabor asked me about some information on what &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt; modules are shipped as rpm packages by &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;... i finally found some time to work on it and produced &lt;a href="http://search.cpan.org/perldoc?ORDB::CPAN::Mandriva"&gt;ordb::cpan::mandriva&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;this module is basically a &lt;a href="http://www.sqlite.org/"&gt;sqlite&lt;/a&gt; database replicated automatically by &lt;a href="http://search.cpan.org/perldoc?ORLite::Mirror"&gt;orlite::mirror&lt;/a&gt;. using it is very simple - for example, couting the cpan dists shipped by mandriva is achieved by the following snippet:&lt;br /&gt;&lt;script src="http://gist.github.com/287680.js"&gt;&lt;/script&gt;&lt;br /&gt;(fyi, the result is 1899 as of writing, +1 since i just imported the module itself)&lt;br /&gt;&lt;br /&gt;at module use time, it will automatically download (and cache for a week) the sqlite database. and one can then use the module as an ordb for this db... the module does not however produces the stats for you - so alias &amp;amp; gabor, now is your turn to work! :-) i'm waiting for your &lt;a href="http://ali.as/top100/index.html"&gt;top-100&lt;/a&gt; most wanted mandriva or whatever crazy stats you'll want to produce.&lt;br /&gt;&lt;br /&gt;the database itself is generated by &lt;a href="http://search.cpan.org/dist/Module-Packaged-Generator/"&gt;module::packaged::generator&lt;/a&gt;. this module uses different drivers depending on the current linux distribution (but nothing prevents *bsd to also have a driver) it runs on. only mandriva is supported currently, but ryan will work on a debian driver. all other contributions are most welcome - the code is on &lt;a href="http://github.com/jquelin/module-packaged-generator/"&gt;github&lt;/a&gt;: fork it and send me pull requests!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1908928385568736024?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1908928385568736024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/01/stats-about-cpan-modules-shipped-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1908928385568736024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1908928385568736024'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/01/stats-about-cpan-modules-shipped-by.html' title='stats about cpan modules shipped by mandriva'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6860033944094343820</id><published>2010-01-20T10:14:00.003+01:00</published><updated>2010-01-20T10:19:22.531+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='padre'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>next padre version will (finally) recognize dist-zilla projects</title><content type='html'>&lt;a href="http://padre.perlide.org"&gt;padre&lt;/a&gt; 0.55, due tomorrow, will finally recognize &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; projects correctly. among other things, it means that it will set @INC accordingly for syntax checking, keep the directory browser at the project root, etc.&lt;br /&gt;&lt;br /&gt;it took a bit of time since the "installer" detection is spread out in different places in padre... &lt;a href="http://padre.perlide.org/trac/ticket/818"&gt;this needs refactoring&lt;/a&gt;, for those interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6860033944094343820?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6860033944094343820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/01/next-padre-version-will-finally.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6860033944094343820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6860033944094343820'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/01/next-padre-version-will-finally.html' title='next padre version will (finally) recognize dist-zilla projects'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8125424160747340843</id><published>2010-01-13T10:02:00.004+01:00</published><updated>2010-01-13T11:00:41.603+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>some dzil goodness coming</title><content type='html'>i scratched some itches in &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt;, and hopefully the result will be useful to you too... some are rather trivial, while some are more feature-ful.&lt;br /&gt;&lt;br /&gt;on the it-s-the-details-that-count front, &lt;span style="font-family:courier new;"&gt;dzil clean&lt;/span&gt; will now remove *~ files lingering in your local copy.&lt;br /&gt;&lt;br /&gt;dzil command now accepts a -I argument that adds a directory to perl @INC (same as perl's -I option). which means dzil plugin author can now do:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dzil -Ilib release&lt;/pre&gt;&lt;/blockquote&gt;and release their distribution using the latest version of their plugin...&lt;br /&gt;&lt;br /&gt;a new &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; subcommand has been added, which is doing more or less the following:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dzil build&lt;br /&gt;$ rsync -avp My-Project-version/ .build/&lt;br /&gt;$ cd .build&lt;br /&gt;$ perl Makefile.PL     # or perl Build.PL&lt;br /&gt;$ make                 # or ./Build     &lt;br /&gt;$ export PERL5LIB=$PWD/blib/lib:$PWD/blib/arch&lt;br /&gt;$ launch command defined by rest of your args&lt;/pre&gt;&lt;/blockquote&gt;which means you can now do:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dzil run ./bin/myscript&lt;br /&gt;$ dzil run prove -l t/unit.t&lt;br /&gt;$ dzil run bash&lt;/pre&gt;&lt;/blockquote&gt;the first one is specially useful if you're using &lt;a href="http://search.cpan.org/perldoc?File::ShareDir"&gt;file::sharedir&lt;/a&gt; and don't want to add extra hooks detecting whether it runs in a dev checkout or not.&lt;br /&gt;&lt;br /&gt;speaking of sharedir, i crafted a quick'n'dirty implementation that made &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::ModuleBuild"&gt;modulebuild&lt;/a&gt; plugin automatically install an existing &lt;span style="font-style: italic;"&gt;share&lt;/span&gt; directory (which is possible since &lt;a href="http://search.cpan.org/dist/Module-Build/"&gt;module::build&lt;/a&gt; 0.36).  rjbs then re-factored it to use the &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::InstallDirs"&gt;installdirs&lt;/a&gt; plugin. nperez then finalized the work for the &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::MakeMaker"&gt;makemaker&lt;/a&gt; plugin. so if you have a share directory, it will now be automatically recognized as such by dzil and installed accordingly.&lt;br /&gt;&lt;br /&gt;rjbs just released a new version of dist-zilla with those enhancements (and other stuff).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8125424160747340843?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8125424160747340843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/01/some-dzil-goodness-coming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8125424160747340843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8125424160747340843'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/01/some-dzil-goodness-coming.html' title='some dzil goodness coming'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6732329297494278495</id><published>2010-01-07T17:17:00.006+01:00</published><updated>2010-01-07T17:29:09.985+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>cpan task for dist-zilla</title><content type='html'>&lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; has a lot of prereqs. and even when you have installed it, you may need to install other plugins manually. therefore, i just uploaded &lt;a href="http://search.cpan.org/perldoc?Task::Dist::Zilla"&gt;task::dist::zilla&lt;/a&gt; that pulls in all dzil plugins and plugin bundles.&lt;br /&gt;&lt;br /&gt;it still takes time to install all those modules, but at least you can do it in one go with &lt;a href="http://search.cpan.org/dist/CPAN"&gt;cpan&lt;/a&gt; or &lt;a href="http://search.cpan.org/dist/CPANPLUS"&gt;cpanplus&lt;/a&gt;: no need to install them one by one manually.&lt;br /&gt;&lt;br /&gt;of course, if you're on &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;, running:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;urpmi perl-Dist-Zilla&lt;/pre&gt;&lt;/blockquote&gt;will install the package perl-Dist-Zilla and all its deps while also suggesting to install all the dzil plugins...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6732329297494278495?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6732329297494278495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/01/cpan-task-for-dist-zilla.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6732329297494278495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6732329297494278495'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/01/cpan-task-for-dist-zilla.html' title='cpan task for dist-zilla'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-732166058839220977</id><published>2010-01-04T17:34:00.003+01:00</published><updated>2010-01-04T17:51:51.469+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='padre'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='rakudo'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>retrospective 2009</title><content type='html'>2009's over, but the year was quite a busy one for me on the perl front:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;i finally took the time to investigate &lt;a href="http://search.cpan.org/dist/Moose"&gt;moose&lt;/a&gt;, and decided to port some of my code to use it.&lt;/li&gt;&lt;li&gt;i discovered &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist::zilla&lt;/a&gt;, and definitely plan to use it in all my dists.&lt;/li&gt;&lt;li&gt;i discovered some other cool new perl modules (thanks guys).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;i uploaded some new dists on cpan, including &lt;a href="http://search.cpan.org/dist/Games-Pandemic"&gt;games::pandemic&lt;/a&gt; (which i'm quite proud of, even if i need to continue hacking on it).&lt;/li&gt;&lt;li&gt;i updated &amp;amp; released some of my existing dists.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;i contributed to other projects such as &lt;a href="http://padre.perlide.org/"&gt;padre&lt;/a&gt;, dist-zilla, etc. sending patches is a good way to thank the author for their work.&lt;/li&gt;&lt;li&gt;it's even easier to contribute with &lt;a href="http://github.com/"&gt;github&lt;/a&gt;, which i'm using more and more for my projects (and it's no more slow by now, woohoo!). of course, &lt;a href="http://git-scm.org/"&gt;git&lt;/a&gt; is the master piece allowing this easy sharing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;on &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;'s front, i resurrected &lt;a href="http://www.parrot.org/"&gt;parrot&lt;/a&gt; rpm, and finally shipped &lt;a href="http://www.rakudo.org/"&gt;rakudo&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;2009 was also the year of the great &lt;a href="http://jquelin.blogspot.com/2009/05/rationalizing-perl-module-versions.html"&gt;migration to %perl_convert_version&lt;/a&gt;&lt;/li&gt;&lt;li&gt;... with lots of new perl modules available as rpm (i am managing 450 of them).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;... and finally i took ownership of &lt;a href="http://www.perl.org/"&gt;perl&lt;/a&gt; rpm. (thank you perl5 porters btw for 5.10.1 and the push for next stable version!)&lt;/li&gt;&lt;/ul&gt;so, busy indeed 2009 was... i just hope that 2010 will be as fruitful on the perl front for me, and for the perl ecosystem by large.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-732166058839220977?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/732166058839220977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2010/01/retrospective-2009.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/732166058839220977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/732166058839220977'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2010/01/retrospective-2009.html' title='retrospective 2009'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-5787935434216387515</id><published>2009-12-31T11:16:00.002+01:00</published><updated>2009-12-31T11:19:04.881+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>rt.cpan.org updated - thank you bestpractical</title><content type='html'>so it seems that we got a nice present for christmas from &lt;a href="http://www.bestpractical.com"&gt;bestpractical&lt;/a&gt;: &lt;a href="http://rt.cpan.org"&gt;rt.cpan.org&lt;/a&gt; has been updated to last version 3.8&lt;br /&gt;&lt;br /&gt;thank you, and keep up the good work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-5787935434216387515?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/5787935434216387515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/rtcpanorg-updated-thank-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5787935434216387515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5787935434216387515'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/rtcpanorg-updated-thank-you.html' title='rt.cpan.org updated - thank you bestpractical'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3407422067919653548</id><published>2009-12-29T20:37:00.000+01:00</published><updated>2009-12-29T20:37:00.301+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpan2dist'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><title type='text'>helping perl packagers package perl modules (for real this time)</title><content type='html'>chromatic posted a &lt;a href="http://www.modernperlbooks.com/mt/2009/12/helping-perl-packagers-package-perl.html"&gt;long rant&lt;/a&gt; (who would have guessed? :-) ) about perl modules shipped by linux distributions. however, he doesn't have all the answers... nor the experience needed for this rant. since i'm a perl author &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; mandriva packager for perl and lots of perl modules, i think i have more enlightened information about this topic.&lt;br /&gt;&lt;br /&gt;first, let me state that using system perl is fine, but i really discourage it for your enterprise application. the perl version &lt;span style="font-weight: bold;"&gt;will&lt;/span&gt; change from time to time, ditto for the perl modules you are relying upon. so if you want to be in control your software foundation for your app (and you should) - compile your perl and your modules yourself.&lt;br /&gt;&lt;br /&gt;second thing: i also discourage mixing using perl modules installed by your package system and by running cpan as root. you'll end up with a mix of files in &lt;span style="font-family:courier new;"&gt;/usr/perl5&lt;/span&gt; that either belong or  not  to a system package, which sucks. installing packages in a local lib of yours is fine, which is made quite easy with &lt;a href="http://search.cpan.org/perldoc?local::lib"&gt;local::lib&lt;/a&gt; by now.&lt;br /&gt;&lt;br /&gt;if you're comfortable with those rules, then you're welcome to using the system perl and the modules shipped by your distribution. after all, we packagers are going through this work in the hope of being useful to others - that is, &lt;span style="font-style: italic;"&gt;you&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;but back to chromatic post. if you want to install cpan modules as system packages, there's already a tool that does it for you: it's called &lt;a href="http://search.cpan.org/perldoc?cpan2dist"&gt;cpan2dist&lt;/a&gt;, and is part of &lt;a href="http://search.cpan.org/dist/CPANPLUS"&gt;cpanplus&lt;/a&gt;. it works as long as a backend for your distribution exists. there's currently one for &lt;a href="http://search.cpan.org/perldoc?CPANPLUS::Dist::Deb"&gt;debian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?CPANPLUS::Dist::Mdv"&gt;mandriva&lt;/a&gt; (that i wrote), &lt;a href="http://search.cpan.org/perldoc?CPANPLUS::Dist::Fedora"&gt;fedora&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?CPANPLUS::Dist::Gentoo"&gt;gentoo&lt;/a&gt;. it's not that difficult to write, and allows you to write:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;# cpan2dist --format CPANPLUS::Dist::Mdv --install Foo::Bar&lt;/pre&gt;&lt;/blockquote&gt;this will automatically download foo::bar, check its dependencies (and build &amp;amp; install them if needed recursively), build the module as a &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt; package and install it. what else exactly do you want/need? (as a cpanplus backend writer, i &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt; have some things that i'd like cpan2dist to have, but none as a regular user). and if you're a packager and want to integrate cpan2dist with your linux distribution build system, &lt;a href="http://search.cpan.org/perldoc?cpan2pkg"&gt;cpan2pkg&lt;/a&gt; can help you (even if it's currently stalled due to sthg missing in cpanplus).&lt;br /&gt;&lt;br /&gt;however, if you want to help perl packagers package your modules for a distribution, here's a list of thing that you should not do. this is a list of real, &lt;span style="font-weight: bold;"&gt;practical&lt;/span&gt; things to do as a module author - not some generic hand-waving towards the perl community out there. this comes from my experience as packager for mandriva of more than 400 modules, and makes me curse the module author everytime i'm encountering one of those problems...&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;test your dist before shipping. really, i'm not kidding. lots of dists just fail their tests. and not just on linux, on all the platforms. so if you make an update that "just can't fail" (yeah, right) to your dist just before shipping, please run your test suite nevertheless. just in case, you know, it &lt;span style="font-style: italic;"&gt;might&lt;/span&gt; fail.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;if you're shipping pod tests that are skipped depending on the presence of &lt;a href="http://search.cpan.org/perldoc?Test::Pod"&gt;test::pod&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Test::Pod::Coverage"&gt;test::pod::coverage&lt;/a&gt;, make sure you have those modules installed, so &lt;span style="font-weight: bold;"&gt;you&lt;/span&gt; are running those tests, too. even better: skip those tests unless &lt;span style="font-family:courier new;"&gt;RELEASE_TESTING&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;AUTHOR_TESTING&lt;/span&gt; is set. after all, it's nice for you to know you still have some documentation work to do, but i don't care as a packager... and, you know, it's now the standard &amp;amp; recommended way of shipping those tests.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;those 2 items  lead me to another easy thing for module authors to do to help us: check the &lt;a href="http://www.cpantesters.org/"&gt;cpantester&lt;/a&gt; status of your dist. investigate all the fails that you have. if you see a fail that is your fault, fix it and upload a new version. it helps us because this prevents us from having to report a bug against your dist. i generally wait 3 or 4 days before reporting a bug on a dist that has some failure reports, hoping (what a fool) that the author will notice by herself that sthg is going wrong.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;speaking of bug reports, if we take the time to open a report for your dist (very often with a patch attached)... please read it. and act. or at least answer us. either apply the patch, or explain why you don't want to apply it like that... and ship a new version of your dist, with the fix included.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;but of course, before reporting a bug, we should find the bug tracker. so, by using &lt;a href="http://rt.cpan.org/"&gt;rt.cpan.org&lt;/a&gt;, you really help us to have a single unified point of contact. i know that rt is kind of slow, not very intuitive, has some problems and could be cleaned out a bit... but it is here, &lt;a href="http://www.bestpractical.com/"&gt;bestpractical&lt;/a&gt; is providing &amp;amp; administering it for us for free, and has this nice feature of having a queue for every perl dist on cpan. if &lt;a href="https://rt.cpan.org/Ticket/Attachment/686438/353349/"&gt;you don't want to use it&lt;/a&gt;, there are some more polite ways of saying it... and giving the url of your tracker helps, too. oh, and if i took the pain to play by your rules and report a bug to your non-standard bug tracker, i would greatly appreciate that you act on my ticket. or at least, you know, just acknowledge the fact that you received the report.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;if you want to really piss off a packager, a simple but effective way is to change your versioning scheme every now and then, by (ab-)using your knowledge of perl way of understanding versions. in the same major version, of course. going from version 1.470 to 1.50 is not funny. if you want to change your versioning scheme, you can change the major number to. after all, i'm pretty sure that you're not paying any extra money per major number used in your dist. this is what caused us to &lt;a href="http://jquelin.blogspot.com/2009/05/rationalizing-perl-module-versions.html"&gt;mangle the version&lt;/a&gt; of perl modules shipped in mandriva.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;speaking of regular changes, it's irritating to have to follow you through your use of makefile.pl to build.pl to makefile.pl to build.pl to... well, you understand what i mean. even to use this shiny replacement that is &lt;a href="http://search.cpan.org/perldoc?Module::Build"&gt;module::build&lt;/a&gt;, or this oh-so-marvelous &lt;a href="http://search.cpan.org/perldoc?Module::Install"&gt;module::install&lt;/a&gt;, oh no finally module::build way of working fits me better in retrospective... it's ok for you to change from time to time, but changing at every version of your dist - just make up your mind dammit!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;speaking of it, i hate module::install. and especially its feature that prompts and tries to handle the deps itself coz-it's-so-cool-it-can-do-it-for-real. sorry, but that's not your job in the tool chain. just report that you miss some deps. i &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; that &lt;a href="http://search.cpan.org/perldoc?Module::AutoInstall#ENVIRONMENT"&gt;there's a flag&lt;/a&gt; to make this feature go away while launching makefile.pl. but i don't want to bother and would rather expect that the whole stuff has sane defaults...&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;oh, and in case you're wondering - every prompting in the configure phase (makefile.pl or build.pl) sucks and should be banned.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;having clear and up-to-date dependencies would be fine, too. i know it's not always easy to have them correctly, but you can &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Tutorial"&gt;change your tools&lt;/a&gt; and adopt one that &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::AutoPrereq"&gt;extract your prereqs&lt;/a&gt; for you.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;try to avoid dependency on modules that are known to fail. even if it works in your setup, trust  cpantesters if they tell you that it fails  95% of its reports: it might not be a good idea to depend on it.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;trying to support old perl versions and old releases of modules is fine, but update your modules and see if your code work. some functions may become deprecated, or you were relying on a buggy behaviour, or whatever. we update the perl packages as we see new versions, not only &lt;span style="font-style: italic;"&gt;your&lt;/span&gt; modules. so a linux dist will usually have latest &amp;amp; greatest version of all the modules - you'd better be sure that your code work with them, hmm?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;finally, if you're developping under macosx, make sure that you don't ship resource files, or textmate temp files. having ._Foo.pm in the dist is not fun: automatic compile tests will fail, unless that's your manicheck or signature check. and even if everything in perl dist is fine, things may bork in the repackaging of the system package due to a file not listed. so, be extra careful when shipping your dist - or change platform and burn your shiny toy that calls itself a computer (careful &amp;amp; clever readers may have guessed from previous sentence that i don't like macosx - but that's not a reason to ditch this post and not to follow the advices i'm reporting).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;there, i think that's a pretty good start. i've encountered each and every item of this list &lt;span style="font-style: italic;"&gt;at least&lt;/span&gt; once (i stopped counting exactly how much a long time ago). don't take it personally if you made some of those mistakes - i have done almost all of them by myself as module author (except of course using module::install and using a mac, but you could have guessed for at least the last part). what's important is to realize that those behaviours &lt;span style="font-style: italic;"&gt;are&lt;/span&gt; annoying for packagers, and that changing those habits is quite easy to do (except for the burning your mac part, because i agree that it's not very environmental-friendly - see, i'm not &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; stubborn! ;-) ).&lt;br /&gt;&lt;br /&gt;if you're following all those advices, packagers of your modules will love you. (or at least, not hate you - which is still a win :-) ). i know i will...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3407422067919653548?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3407422067919653548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/helping-perl-packagers-package-perl.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3407422067919653548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3407422067919653548'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/helping-perl-packagers-package-perl.html' title='helping perl packagers package perl modules (for real this time)'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6572896460763311856</id><published>2009-12-23T13:49:00.004+01:00</published><updated>2009-12-23T14:19:09.359+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>scrapping web pages with embedded javascript in perl</title><content type='html'>recently i had to download various pdf files from a vendor website, which list them according to different criterias. since i'm lazy, i wanted to write a script that would download all  those files for me.&lt;br /&gt;&lt;br /&gt;that would be quite easy, but the list was generated by some &lt;a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29"&gt;ajax&lt;/a&gt; when i was changing the criterias... so, what to do to pally this problem?&lt;br /&gt;&lt;br /&gt;there are some solutions out there for the perl programmer.&lt;br /&gt;&lt;br /&gt;although &lt;a href="http://search.cpan.org/perldoc?WWW::Mechanize"&gt;www::mechanize&lt;/a&gt;'s author stated that he &lt;a href="http://search.cpan.org/perldoc?WWW::Mechanize::FAQ#Are_you_going_to_add_JavaScript_support?"&gt;does not want to bother&lt;/a&gt; with integrating javascript support, someone wrote a &lt;a href="http://search.cpan.org/perldoc?WWW::Mechanize::Plugin::JavaScript"&gt;javascript plugin for mechanize&lt;/a&gt;. it's still experimental by now, though.&lt;br /&gt;&lt;br /&gt;the same author, leveraging his knowledge, also wrote &lt;a href="http://search.cpan.org/perldoc?WWW::Scripter"&gt;www::scripter&lt;/a&gt; that's supposed to achieve the same result.&lt;br /&gt;&lt;br /&gt;but before going in those complex beasts, it may be worth trying to understand what the javascript is doing, and if the hidden url that gives the wanted list of files is easy to guess. to do that, you can go the hard way and read the javascript... or the easy way and wiretap the network!&lt;br /&gt;&lt;br /&gt;enters &lt;a href="http://search.cpan.org/perldoc?HTTP::Proxy"&gt;http::proxy&lt;/a&gt; which is a configurable proxy written in perl by &lt;a href="http://search.cpan.org/%7Ebook/"&gt;book&lt;/a&gt;. among the various examples, it comes with a &lt;a href="http://cpansearch.perl.org/src/BOOK/HTTP-Proxy-0.24/eg/logger.pl"&gt;logger.pl&lt;/a&gt; script that displays all the urls accessed by your browser (with cookies). run it as is, configure your browser to use a proxy on localhost port 3128, and check the output of logger.pl while tinkering with your ajaxy application.&lt;br /&gt;&lt;br /&gt;chances are that you'll see a url such as http://www.examplecom/path/to/script/list/?crit1=foo&amp;amp;crit2=bar&amp;amp;limit=10&lt;br /&gt;&lt;br /&gt;well, that was the case for me, and i could just download the list according to my criterias, parse it with the excellent &lt;a href="http://search.cpan.org/perldoc?HTML::Tree"&gt;html::tree&lt;/a&gt; and download each of the files separately... \o/&lt;br /&gt;&lt;br /&gt;so the title of this blog post is wrong: no javascript webscrapping (although i gave some hints on how to do it), but cheap trick to achieve the same result! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6572896460763311856?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6572896460763311856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/scrapping-web-pages-with-embedded.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6572896460763311856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6572896460763311856'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/scrapping-web-pages-with-embedded.html' title='scrapping web pages with embedded javascript in perl'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-455268246663899262</id><published>2009-12-16T10:40:00.003+01:00</published><updated>2009-12-16T10:42:34.053+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rakudo'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>parrot 1.9.0 available in mandriva</title><content type='html'>since &lt;a href="http://www.parrot.org"&gt;parrot&lt;/a&gt; 1.9.0 is &lt;a href="http://www.parrot.org/news/2009/Parrot-1.9.0"&gt;officially out&lt;/a&gt;, it landed quite quickly in &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt; cooker. next &lt;a href="http://www.rakudo.org"&gt;rakudo&lt;/a&gt; version will soon follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-455268246663899262?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/455268246663899262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/parrot-190-available-in-mandriva.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/455268246663899262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/455268246663899262'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/parrot-190-available-in-mandriva.html' title='parrot 1.9.0 available in mandriva'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4130973660828410713</id><published>2009-12-09T11:39:00.003+01:00</published><updated>2009-12-09T11:47:46.098+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rakudo'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>rakudo available in mandriva</title><content type='html'>after some chat with parrot-porters, i finally undertood that what's get installed in &lt;span style="font-style: italic;"&gt;/usr/src/parrot&lt;/span&gt; (and that i was trimming during installation) is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; &lt;a href="http://www.parrot.org"&gt;parrot&lt;/a&gt; full source, but intermediate forms of pmc, needed if high-level languages want to subclass them. they are thus now shipped in parrot-src package - and this is enough for &lt;a href="http://www.rakudo.org"&gt;rakudo&lt;/a&gt; to be compiled.&lt;br /&gt;&lt;br /&gt;therefore, rakudo 2009-11 is now (finally) available in &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4130973660828410713?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4130973660828410713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/rakudo-available-in-mandriva.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4130973660828410713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4130973660828410713'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/rakudo-available-in-mandriva.html' title='rakudo available in mandriva'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7477559874883915981</id><published>2009-12-05T11:22:00.003+01:00</published><updated>2009-12-05T11:29:37.223+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>mojomojo now available in mandriva</title><content type='html'>after struggling quite some time with its dependencies, and then some other prereqs not mentioned deep in the dependency chain, i'm happy to report that &lt;a href="http://search.cpan.org/dist/MojoMojo"&gt;mojomojo&lt;/a&gt;, the &lt;a href="http://search.cpan.org/dist/Catalyst-Runtime"&gt;catalyst&lt;/a&gt; powered wiki, is now available in &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7477559874883915981?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7477559874883915981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/mojomojo-now-available-in-mandriva.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7477559874883915981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7477559874883915981'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/mojomojo-now-available-in-mandriva.html' title='mojomojo now available in mandriva'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8195649203583882926</id><published>2009-12-02T11:21:00.004+01:00</published><updated>2009-12-02T12:18:30.532+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>migration to moose - step 3</title><content type='html'>continuing &lt;sup&gt;[0]&lt;/sup&gt; to port &lt;a href="http://musicpd.org/"&gt;mpd&lt;/a&gt; modules to &lt;a href="http://search.cpan.org/dist/Moose"&gt;moose&lt;/a&gt; - this time it's &lt;a href="http://search.cpan.org/perldoc?POE::Component::Client::MPD"&gt;poe::component::client::mpd&lt;/a&gt; turn. in order to do that, i had to fix the tests (using the shiny new &lt;a href="http://search.cpan.org/perldoc?Test::Corpus::Audio::MPD"&gt;test::corpus::audio::mpd&lt;/a&gt;) in order to be sure not to introduce regressions.&lt;br /&gt;&lt;br /&gt;migration was quite easy, but a bit long. especially since i used a lazy_builder attribute for the connection, leading to commands sent before actual connection took place - and thus the tests failed with a cryptic message from &lt;a href="http://search.cpan.org/perldoc?POE::Component::Client::TCP"&gt;poe::component::client::tcp&lt;/a&gt; &lt;sup&gt;[1]&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;the excellent &lt;a href="http://search.cpan.org/perldoc?MooseX::POE"&gt;moosex::poe&lt;/a&gt; was used too, but not in the connection, since it reuses various components having a more classic way of defining their events.&lt;br /&gt;&lt;br /&gt;and now that the base code is moose-ified, i think i'll be able to gain more clarity while leveraging some moose levers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[0] see &lt;a href="http://jquelin.blogspot.com/2009/10/migration-to-moose-step-1.html"&gt;this previous post&lt;/a&gt; and &lt;a href="http://jquelin.blogspot.com/2009/10/migration-to-moose-step-2.html"&gt;this one&lt;/a&gt;&lt;br /&gt;[1] saying that {server} doesn't have a put method... as opposed as what's documented. but that's because at that time it has not (yet) morphed into a &lt;a href="http://search.cpan.org/perldoc?POE::Wheel::ReadWrite"&gt;poe::wheel::readwrite&lt;/a&gt;. even if i'm at fault for not waiting the connected event, couldn't it provide a better error message?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8195649203583882926?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8195649203583882926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/12/migration-to-moose-step-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8195649203583882926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8195649203583882926'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/12/migration-to-moose-step-3.html' title='migration to moose - step 3'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-431745607859935669</id><published>2009-11-25T17:18:00.002+01:00</published><updated>2009-11-25T17:29:19.607+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>announcing git plugin for dist-zilla</title><content type='html'>pushing lazyness even further, i released a &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-Git"&gt;git plugin for dist-zilla&lt;/a&gt;. in fact, there are 4 plugins within the distribution. they are kicking in during dzil release, since i've hacked &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dzil&lt;/a&gt; to provide &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Role::BeforeRelease"&gt;beforerelease&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Role::AfterRelease"&gt;afterrelease&lt;/a&gt; roles.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Git::Check"&gt;dzp:git:check&lt;/a&gt; - this plugin checks that git is in a clean state before releasing. the following checks are performed before releasing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;there should be no files in the index (staged copy)&lt;/li&gt;&lt;li&gt;there should be no untracked files in the working copy&lt;/li&gt;&lt;li&gt;the working copy should be clean. the changelog and &lt;span style="font-style: italic;"&gt;dist.ini&lt;/span&gt; can be modified locally, though.&lt;/li&gt;&lt;/ul&gt;if those conditions are not met, the plugin will die, and the release will thus be aborted. this lets you fix the problems before continuing.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Git::Commit"&gt;dzp:git:commit&lt;/a&gt; - once the release is done, this plugin will commit in git if needed changelog and &lt;span style="font-style: italic;"&gt;dist.ini&lt;/span&gt; (which is a valid target if you happen to set the version manually in it). the commit message will be taken from the changelog for this release.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Git::Tag"&gt;dzp:git:tag&lt;/a&gt; - once the release is done, this plugin will record this fact in git by creating a tag named &lt;span style="font-style: italic;"&gt;v$VERSION&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Git::Push"&gt;dzp:git:push&lt;/a&gt; - once the release is done, this plugin will push current git branch to remote end, with the associated tags.&lt;br /&gt;&lt;br /&gt;if you want to use all those neat plugins, you may want to use the &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::PluginBundle::Git"&gt;git plugin bundle&lt;/a&gt; by writing in your &lt;span style="font-style: italic;"&gt;dist.ini&lt;/span&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;[@Git]&lt;/pre&gt;&lt;/blockquote&gt;there, one more thing that dzil is doing for me... no more time lost doing those tedious steps - if you're lazy, you should really try it! as usual, comments and &lt;a href="http://rt.cpan.org/Public/Dist/Display.html?Name=Dist-Zilla-Plugin-Git"&gt;feature requests&lt;/a&gt; are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-431745607859935669?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/431745607859935669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/11/announcing-git-plugin-for-dist-zilla.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/431745607859935669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/431745607859935669'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/11/announcing-git-plugin-for-dist-zilla.html' title='announcing git plugin for dist-zilla'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6477667505670528948</id><published>2009-11-18T08:46:00.001+01:00</published><updated>2009-11-18T08:46:00.124+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>sweetening tk</title><content type='html'>after &lt;a href="http://jquelin.blogspot.com/2009/11/sweatening-moose.html"&gt;discovering how to sweeten moose&lt;/a&gt; with &lt;a href="http://search.cpan.org/perldoc?MooseX::Has::Sugar"&gt;moosex::has::sugar&lt;/a&gt;, i thought the concept could be extended for other modules.&lt;br /&gt;&lt;br /&gt;as a &lt;a href="http://search.cpan.org/perldoc?Tk"&gt;tk&lt;/a&gt; enthusiast, this was a logical target. especially since i was already kind of doing this with some internal modules exporting variables. so i decided to just extract this piece of code, update it and wrap it in a new module, &lt;a href="http://search.cpan.org/dist/Tk-Sugar"&gt;tk::sugar&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;so, where previously you were doing:&lt;script src="http://gist.github.com/237033.js"&gt;&lt;/script&gt;&lt;br /&gt;you can now write:&lt;script src="http://gist.github.com/237035.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;which is way better imo.&lt;br /&gt;&lt;br /&gt;of course, the module supports lots of other often-used helper subs - &lt;a href="http://search.cpan.org/perldoc?Tk::Sugar"&gt;check the doc&lt;/a&gt; for more information. and if you need some more, either &lt;a href="http://rt.cpan.org/Public/Dist/Display.html?Name=Tk-Sugar"&gt;request them&lt;/a&gt; or &lt;a href="http://github.com/jquelin/tk-sugar"&gt;clone the repository&lt;/a&gt; and send pull requests! in the meantime, enjoy it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6477667505670528948?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6477667505670528948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/11/sweetening-tk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6477667505670528948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6477667505670528948'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/11/sweetening-tk.html' title='sweetening tk'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3683177796727605828</id><published>2009-11-14T09:12:00.006+01:00</published><updated>2009-11-17T17:16:56.283+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>sweetening moose</title><content type='html'>even if &lt;a href="http://search.cpan.org/dist/Moose"&gt;moose&lt;/a&gt; is nice and allows to prune a lot of code, it can still be seen as cryptic. take the following example, and imagine that you have a lot more attributes to declare:&lt;br /&gt;&lt;script src="http://gist.github.com/234045.js"&gt;&lt;/script&gt;&lt;br /&gt;the first thing that can be done is using moose builtin types instead of their name, with &lt;a href="http://search.cpan.org/perldoc?MooseX::Types::Moose"&gt;moosex::types::moose&lt;/a&gt;. this allows to remove the quotes around the types:&lt;br /&gt;&lt;script src="http://gist.github.com/234050.js"&gt;&lt;/script&gt;&lt;br /&gt;but that's still a bit mouthful. enters &lt;a href="http://search.cpan.org/perldoc?MooseX::Has::Sugar"&gt;moosex::has::sugar&lt;/a&gt;, for a nicer code:&lt;br /&gt;&lt;script src="http://gist.github.com/234056.js"&gt;&lt;/script&gt;&lt;br /&gt;your code is now more readable - yet some other modules that i'll now use in my dists...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3683177796727605828?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3683177796727605828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/11/sweatening-moose.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3683177796727605828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3683177796727605828'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/11/sweatening-moose.html' title='sweetening moose'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2540227839328844715</id><published>2009-11-09T18:05:00.002+01:00</published><updated>2009-11-09T18:30:49.227+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>cpan activity</title><content type='html'>with &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt; linux 2010.0 out, it's time to have a look at &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt; activity &lt;a href="http://jquelin.blogspot.com/2009/04/cpan-activity.html"&gt;once again&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;version freeze happened on &lt;a href="http://lists.mandriva.com/maintainers/2009-10/msg00000.php"&gt;october 1&lt;sup&gt;st&lt;/sup&gt;&lt;/a&gt; for mandriva, at which point it wasn't possible to upload new version - unless to fix a bug preventing usage. since we know that cpan modules don't have such bugs&lt;sup&gt;[0]&lt;/sup&gt;, it means that almost no perl package was updated till cooker&lt;sup&gt;[1]&lt;/sup&gt; reopening (which happened on november 6&lt;sup&gt;th&lt;/sup&gt;).&lt;br /&gt;&lt;br /&gt;so, how many dists needed an update after ~40 days? around 150. yes, &lt;span style="font-style: italic;"&gt;150&lt;/span&gt;. on &lt;a href="http://jquelin.blogspot.com/2009/11/state-of-perl-in-mandriva-2010.html"&gt;1685 distributions shipped by mandriva&lt;/a&gt;. and some of those were updated more than once...&lt;br /&gt;&lt;br /&gt;that's ~10%. a bit less than what was reported in april for mandriva 2009.1, but:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;this time it's for whole mandriva, not only the packages i'm responsible for&lt;br /&gt;&lt;/li&gt;&lt;li&gt;freeze was a bit longer for 2009.1&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;yet another proof of perl community's health.&lt;br /&gt;&lt;br /&gt;[0] :-)&lt;br /&gt;[1] cooker is mandriva's development version&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2540227839328844715?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2540227839328844715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/11/cpan-activity.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2540227839328844715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2540227839328844715'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/11/cpan-activity.html' title='cpan activity'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4530420336096349558</id><published>2009-11-03T16:51:00.008+01:00</published><updated>2009-11-04T21:24:17.085+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='padre'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><category scheme='http://www.blogger.com/atom/ns#' term='rakudo'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>the state of perl in mandriva 2010</title><content type='html'>&lt;a href="http://blog.mandriva.com/?p=825"&gt;mandriva linux 2010 is out...&lt;/a&gt; this is thus a good time to have a look at the state of &lt;a href="http://www.perl.org/"&gt;perl&lt;/a&gt; in this release.&lt;br /&gt;&lt;br /&gt;adelie (mdv 2010 codename) ships perl 5.10.1 with threads&lt;sup&gt;[0]&lt;/sup&gt;, which allowed me to drop half the &lt;a href="http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/perl/current/SOURCES/"&gt;patches carried within mandriva&lt;/a&gt;&lt;sup&gt;[1]&lt;/sup&gt;. and since perl 5 porters hope to make perl 5 releases more often, it means that (hopefully) i'll be able to trim down those patches even more!&lt;br /&gt;&lt;br /&gt;on the modules front, &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt; is shipping plenty of them. &lt;a href="http://padre.perlide.org/"&gt;padre&lt;/a&gt; 0.47 (and lots of plugins), &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt;, &lt;a href="http://poe.perl.org/"&gt;poe&lt;/a&gt; framework (and lots of components), devel modules, &lt;a href="http://dbi.perl.org/"&gt;dbi&lt;/a&gt; drivers, gui (tk, wx, gtk) and various lib bindings, you name it... using &lt;a href="http://articles.mongueurs.net/magazines/perles/perles-39.html"&gt;book's pearl of wisdom&lt;/a&gt;, this gives us&lt;sup&gt;[2]&lt;/sup&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;12117 installed modules&lt;br /&gt;including 11016 from cpan (15.65% of cpan)&lt;br /&gt;that is 1685 distributions (8.88% of cpan)&lt;/pre&gt;&lt;/blockquote&gt;that's not half of &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt;, but a good deal nevertheless. chances are that you will find the module you need - and if you don't, drop me a mail or &lt;a href="http://qa.mandriva.com"&gt;open a request&lt;/a&gt; and i'll package it for you.&lt;br /&gt;&lt;br /&gt;but the biggest change that you will see in mandriva 2010 regarding perl (well, maybe you won't even notice it), is the new &lt;a href="http://jquelin.blogspot.com/2009/05/rationalizing-perl-module-versions.html"&gt;standardized version scheme&lt;/a&gt; forced upon all perl modules. for example, &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; version 1.092680 is shipped for mandriva 2010 in rpm perl-Dist-Zilla-1.92.680. yes, i &lt;span style="font-style: italic;"&gt;know&lt;/span&gt;, it means that the mandriva version might differ from upstream version. yes, i &lt;span style="font-style: italic;"&gt;am&lt;/span&gt; aware that this sucks. yes, i am &lt;span style="font-style: italic;"&gt;also&lt;/span&gt; aware that there's no real way to get upstream version back from mandriva rpm version. and &lt;span style="font-weight: bold;"&gt;no&lt;/span&gt;, i don't plan to roll back this change - unless you have another miracle solution that deals with rpm not understanding cpan modules changing their versioning scheme without bumping their major (grrr!).&lt;br /&gt;&lt;br /&gt;however, note that previous mandriva version (and fedora too) already mangled  some modules version, but not all of them - which is even worse imo. since i agree with david that  &lt;a href="http://www.dagolden.com/index.php/369/version-numbers-should-be-boring/"&gt;version numbers should be boring&lt;/a&gt;,  all modules now have their version mangled. no &lt;span style="font-style: italic;"&gt;if&lt;/span&gt;s, no &lt;span style="font-style: italic;"&gt;but&lt;/span&gt;s, we're mangling it. and it makes life easier for us packagers...&lt;br /&gt;&lt;br /&gt;of course, the modules' code is not affected by this change. it's only the packaging that changed a bit. to check which version is installed, just check the &lt;span style="font-family:courier new;"&gt;$VERSION&lt;/span&gt; of this package. that's always been, and remains, the only safe way to be sure. eg:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ perl -E 'for (@ARGV){eval "require $_"; say "$_\t",$_-&gt;VERSION if !$@}' Dist::Zilla&lt;br /&gt;Dist::Zilla     1.092680&lt;/pre&gt;&lt;/blockquote&gt;on the &lt;a href="http://www.parrot.org/"&gt;parrot&lt;/a&gt; front, we're shipping 1.6.0 (1.7.0 was too late to be included). and &lt;a href="http://rakudo.org/"&gt;rakudo&lt;/a&gt; is still not present, since it cannot use an installed parrot.&lt;br /&gt;&lt;br /&gt;all in all, that's a quite a good release on the perl front. if you add all the work that went in all other areas, mandriva 2010 will be quite a solid release. i invite you to &lt;a href="http://www.mandriva.com/downloads/?p=linux-one"&gt;test it out&lt;/a&gt; - who knows, you might even like it so much that you'll switch to it permanently! :-)&lt;br /&gt;&lt;br /&gt;[0] no need to complain, rgs - i know your feelings about it.&lt;br /&gt;[1] yup, i took the ownership of the perl package - silly me...&lt;br /&gt;[2] why, yes, i install all perl modules available as rpm on my box :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4530420336096349558?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4530420336096349558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/11/state-of-perl-in-mandriva-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4530420336096349558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4530420336096349558'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/11/state-of-perl-in-mandriva-2010.html' title='the state of perl in mandriva 2010'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-9093528789874572203</id><published>2009-10-28T09:17:00.000+01:00</published><updated>2009-10-28T09:17:00.133+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curses'/><category scheme='http://www.blogger.com/atom/ns#' term='mpd'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>right trimming for dzil autoprereq plugin</title><content type='html'>&lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::AutoPrereq"&gt;autoprereq plugin for dzil&lt;/a&gt; used to trim all modules under the dist namespace from the list of prereqs. eg, for dist-zilla dist, it would trim all dist::zilla::* modules.&lt;br /&gt;&lt;br /&gt;although good for a first try, it had two problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;modules outside of your dist can be trimmed. eg, &lt;a href="http://search.cpan.org/perldoc?Audio::MPD"&gt;audio::mpd&lt;/a&gt; is requiring some  &lt;a href="http://search.cpan.org/perldoc?Audio::MPD::Common"&gt;audio::mpd::common&lt;/a&gt; modules which are outside of audio-mpd dist.&lt;/li&gt;&lt;li&gt;if your dist is shipping 2 namespaces, only the modules inside the first namespace are trimmed, and you can end up with a dist with circular deps.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;the first one is easy to solve with a fixed &lt;span style="font-style: italic;"&gt;[Prereq] &lt;/span&gt;section in your &lt;span style="font-style: italic;"&gt;dist.ini&lt;/span&gt; (this is what i've done for &lt;a href="http://search.cpan.org/dist/Audio-MPD"&gt;audio-mpd&lt;/a&gt;). and the second is not really common, so i thought that i could leave dzpa as is...&lt;br /&gt;&lt;br /&gt;but &lt;a href="http://damien.krotkine.com/"&gt;dams&lt;/a&gt; now uses &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dzil&lt;/a&gt; for the excellent &lt;a href="http://search.cpan.org/perldoc?Curses::Toolkit"&gt;curses-toolkit&lt;/a&gt; - which ships curses::toolkit::* and poe::component::curses::* modules. so he complained (rightly) and i had to fix autoprereq plugin.&lt;br /&gt;&lt;br /&gt;so, dzpa will only trim modules that are part of the dist, instead of blindly removing the modules under the dist namespace. and this only change fixes at once the 2 problems outlined above. where dzpa used to trim too much and not enough, it now trims just what it has to...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-9093528789874572203?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/9093528789874572203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/10/right-trimming-for-dzil-autoprereq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/9093528789874572203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/9093528789874572203'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/10/right-trimming-for-dzil-autoprereq.html' title='right trimming for dzil autoprereq plugin'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3568706075884442716</id><published>2009-10-25T12:11:00.004+01:00</published><updated>2009-10-25T12:20:15.704+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='mpd'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>migration to moose - step 2</title><content type='html'>another module converted to &lt;a href="http://search.cpan.org/dist/Moose"&gt;moose&lt;/a&gt; (and &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt;): &lt;a href="http://search.cpan.org/perldoc?Audio::MPD"&gt;audio::mpd&lt;/a&gt;. migrating the attributes is quite easy, but this time the constructor migration was a bit trickier to do. fortunately, moose &lt;a href="http://search.cpan.org/perldoc?Moose::Manual::Attributes#Laziness_and_lazy_build"&gt;lazy building&lt;/a&gt; proved handy.&lt;br /&gt;&lt;br /&gt;since the module is quite stable by now, i bumped version to 1.x (1.yyyddn even).&lt;br /&gt;&lt;br /&gt;one more module with a simplified code-base... next migration will be &lt;a href="http://search.cpan.org/perldoc?POE::Component::Client::MPD"&gt;pococm&lt;/a&gt;, and should prove more difficult, but for even more reward (thanks to &lt;a href="http://search.cpan.org/perldoc?MooseX::POE"&gt;moosex::poe&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3568706075884442716?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3568706075884442716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/10/migration-to-moose-step-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3568706075884442716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3568706075884442716'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/10/migration-to-moose-step-2.html' title='migration to moose - step 2'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1868133649827059050</id><published>2009-10-21T12:45:00.003+02:00</published><updated>2009-10-21T13:05:24.377+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mpd'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>test::corpus::* namespace</title><content type='html'>both &lt;a href="http://search.cpan.org/perldoc?Audio::MPD"&gt;audio::mpd&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?POE::Component::Client::MPD"&gt;poe::component::client::mpd&lt;/a&gt; share the same files for their regression test suite. this includes some boring ogg files - weighing around 150 kb. although not that much, those files are duplicated between those 2 modules.&lt;br /&gt;&lt;br /&gt;moreover, it means that everytime i upload a fix for one of those modules, i'm taking some more space on cpan for those exact same files -  they never ever change...&lt;br /&gt;&lt;br /&gt;something had to be done. i therefore wanted to split this raw test data, and put it in a module of its own. the other 2 modules would then get rid of the test data, and require the new one during the tests.&lt;br /&gt;&lt;br /&gt;the question was of course how to name this module. i asked &lt;a href="http://lists.cpan.org/showlist.cgi?name=module-authors"&gt;module-authors&lt;/a&gt; for advices, and &lt;a href="http://www.mail-archive.com/module-authors@perl.org/msg07638.html"&gt;david nicol proposed&lt;/a&gt; the test::corpus::* namespace.&lt;br /&gt;&lt;br /&gt;since the idea is quite sound, i then released &lt;a href="http://search.cpan.org/dist/Test-Corpus-Audio-MPD"&gt;test::corpus::audio::mpd&lt;/a&gt; with the data (with some fixes to bring it up to mpd 0.15.x). &lt;a href="http://search.cpan.org/dist/Audio-MPD"&gt;audio::mpd&lt;/a&gt; has already been migrated to use this. i still need to do it for pococm, though.&lt;br /&gt;&lt;br /&gt;anyway, this post is merely about the announce of the &lt;span style="font-style: italic;"&gt;test::corpus::&lt;/span&gt; namespace, to hold your test data instead of putting them in your dists. let us know what you think of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1868133649827059050?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1868133649827059050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/10/testcorpus-namespace.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1868133649827059050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1868133649827059050'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/10/testcorpus-namespace.html' title='test::corpus::* namespace'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3368331801569446253</id><published>2009-10-14T17:13:00.003+02:00</published><updated>2009-10-14T17:21:18.331+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>dist-zilla: compile tests can skip some modules</title><content type='html'>the &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::CompileTests"&gt;compilation test plugin&lt;/a&gt; for &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist-zilla&lt;/a&gt; now accepts a parameter to skip some modules. this can be handy to prevent testing some known-to-fail modules - yes, this can happen if your module does stuff assuming a given environment not currently in place (eg: test modules...).&lt;br /&gt;&lt;br /&gt;just use the following in your &lt;span style="font-style: italic;"&gt;dist.ini&lt;/span&gt; file:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;[CompileTests]&lt;br /&gt;skip = Test$&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;the skip parameter is interpreted as a regex, matched against the module name (&lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; the file name of the module). in this example, all modules with a name ending with &lt;span style="font-style: italic;"&gt;Test&lt;/span&gt; will not be tested for compilation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3368331801569446253?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3368331801569446253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/10/dist-zilla-compile-tests-can-skip-some.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3368331801569446253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3368331801569446253'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/10/dist-zilla-compile-tests-can-skip-some.html' title='dist-zilla: compile tests can skip some modules'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2011709815019269994</id><published>2009-10-11T11:10:00.003+02:00</published><updated>2009-10-11T11:20:14.910+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='mpd'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>migration to moose - step 1</title><content type='html'>&lt;a href="http://jquelin.blogspot.com/2009/09/migrating-to-moose-hell-yeah.html"&gt;as promised&lt;/a&gt;, i just migrated &lt;a href="http://search.cpan.org/dist/Audio-MPD-Common/"&gt;audio::mpd::common&lt;/a&gt; to use &lt;a href="http://search.cpan.org/dist/Moose"&gt;moose&lt;/a&gt;. and since i was at it, i also took the opportunity to migrate to &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist::zilla&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;conclusion: it takes some time to migrate (around half a day?) - and this is a very small dist! maybe i should have not mixed moose and dzil migration... but the resulting code is also easier to read, and better documented now, so it's not a one to one migration.&lt;br /&gt;&lt;br /&gt;anyway, i'll continue migrating the mpd related modules to moose, dist-zilla as i find the tuits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2011709815019269994?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2011709815019269994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/10/migration-to-moose-step-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2011709815019269994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2011709815019269994'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/10/migration-to-moose-step-1.html' title='migration to moose - step 1'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8078649441131830923</id><published>2009-10-05T16:59:00.004+02:00</published><updated>2009-10-05T17:08:55.348+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>mandriva 2010 coming - which perl modules do you miss?</title><content type='html'>&lt;a href="http://www.mandriva.com"&gt; mandriva&lt;/a&gt;'s next version (2010.0) is now in version freeze, for a &lt;a href="http://wiki.mandriva.com/en/2010.0_Development#Development_planning:_2010_planning_and_delivery"&gt;release date in early november&lt;/a&gt;. this means that current packages are not allowed to be upgraded to latest version, unless there's a compelling reason to do so (security update, crash or big regression).&lt;br /&gt;&lt;br /&gt;there is still, however, the possibility to ship new packages. so if you miss some &lt;a href="http://search.cpan.org"&gt;perl modules&lt;/a&gt; in mandriva and you really want them available as rpm packages in 2010.0 version, now is the time to speak up! just add your request as comment to this post, and i'll do my best to fulfill it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8078649441131830923?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8078649441131830923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/10/mandriva-2010-coming-which-perl-modules.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8078649441131830923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8078649441131830923'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/10/mandriva-2010-coming-which-perl-modules.html' title='mandriva 2010 coming - which perl modules do you miss?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3518366043676462898</id><published>2009-09-29T19:34:00.002+02:00</published><updated>2009-09-29T19:57:29.676+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>about exporter bug</title><content type='html'>finally &lt;a href="http://jquelin.blogspot.com/2009/09/working-around-exporter-bug-in-perl.html"&gt;exporter with multiple inheritance&lt;/a&gt; bug is explained: &lt;a href="http://search.cpan.org/dist/Class-Accessor/"&gt;class::accessor::fast &lt;/a&gt;version 0.34 now does some import magic, and in that case export's import sub is not called. so it's neither perl, nor exporter related.&lt;br /&gt;&lt;br /&gt;but still, using multiple inheritance cannot be avoided sometimes...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3518366043676462898?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3518366043676462898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/about-exporter-bug.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3518366043676462898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3518366043676462898'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/about-exporter-bug.html' title='about exporter bug'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-5137104327132678725</id><published>2009-09-29T15:52:00.004+02:00</published><updated>2009-09-29T16:22:21.632+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>multiple inheritance - why still using it</title><content type='html'>&lt;a href="http://use.perl.org/%7EOvid/journal/39691?from=rss"&gt;ovid reacted&lt;/a&gt; to the bug i opened against &lt;a href="http://jquelin.blogspot.com/2009/09/working-around-exporter-bug-in-perl.html"&gt;exporter and multiple inheritance&lt;/a&gt;, stating that we cpan authors shouldn't use multiple inheritance, since roles exist.&lt;br /&gt;&lt;br /&gt;with all due respect to ovid, this is over-simplifying. &lt;a href="http://search.cpan.org/"&gt;cpan&lt;/a&gt; holds 15000+ distributions, of which maybe 5% is proposing a role-based api (and i think i'm generous). which means that a lot of the modules available needs you to inherit from them&lt;sup&gt;[0]&lt;/sup&gt;. so what to do when you want to use those modules? yup, multiple inheritance. i know it's bad - but i don't have the choice, mmk?&lt;sup&gt;[1]&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;i can already predict ovid's answer: my bug was related to inheriting from both &lt;a href="http://search.cpan.org/perldoc?Exporter"&gt;exporter&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Class::Accessor::Fast"&gt;class::accessor::fast&lt;/a&gt;&lt;sup&gt;[2]&lt;/sup&gt;, so i should switch to &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt; to replace the class::accessor bit. right, &lt;a href="http://jquelin.blogspot.com/2009/09/migrating-to-moose-hell-yeah.html"&gt;i plan to do it later on&lt;/a&gt; (patches welcome, too).&lt;br /&gt;&lt;br /&gt;but in the meantime, i have a module that worked perfectly under 5.10.0, and that breaks under 5.10.1 (i am still not sure if it's perl or exporter or base/parent related). no need to talk of &lt;a href="http://use.perl.org/%7EAlias/journal/38998"&gt;greypan&lt;/a&gt; and compatibility accross major perl releases: i'm talking of backward compatibility of minor perl version for regular cpan module with code available here. and even if it's using sub-standard technology - i am entitled to &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; expect this kind of breakage.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[0] which is not exactly surprizing, since roles are quite new in perl's oo landscape: 2.5 years according to moose's changelog. if you count some time to let the new feature stabilize, get some needed speed boost and gain acceptance, i don't expect to see a lot of non-role based api soon.&lt;br /&gt;&lt;br /&gt;[1] i'm &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; advocating to use multiple inheritance at all costs. ovid is right: if you can, compose classes with roles. really, he &lt;span style="font-weight: bold;"&gt;is&lt;/span&gt; right on this topic. however, the key words here are &lt;span style="font-style: italic;"&gt;if you can&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;[2] see how both synopsis request you to inherit from them?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-5137104327132678725?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/5137104327132678725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/multiple-inheritance-why-still-using-it.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5137104327132678725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5137104327132678725'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/multiple-inheritance-why-still-using-it.html' title='multiple inheritance - why still using it'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3838792433972361867</id><published>2009-09-28T17:39:00.002+02:00</published><updated>2009-09-28T17:45:19.595+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>working around exporter bug in perl 5.10.1</title><content type='html'>&lt;a href="http://search.cpan.org/dist/Exporter"&gt;exporter&lt;/a&gt; seems to have a bug with perl 5.10.1. in case of multiple inheritance, it must be the first parent, otherwise no export magic is done.&lt;br /&gt;&lt;br /&gt;the bug is experienced both with &lt;a href="http://search.cpan.org/dist/base/"&gt;base&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/parent/"&gt;parent&lt;/a&gt;, so i really think it's exporter related - or maybe 5.10.1, since it was not present with 5.10.0.&lt;br /&gt;&lt;br /&gt;i &lt;a href="http://rt.perl.org/rt3/Public/Bug/Display.html?id=69450"&gt;reported the bug&lt;/a&gt; to p5p - in the meantime, just switch exporter to be the first parent in multiple inheritance...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3838792433972361867?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3838792433972361867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/working-around-exporter-bug-in-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3838792433972361867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3838792433972361867'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/working-around-exporter-bug-in-perl.html' title='working around exporter bug in perl 5.10.1'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6720701960902275222</id><published>2009-09-23T17:46:00.003+02:00</published><updated>2009-09-23T18:05:11.502+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>external event loops no more part of poe</title><content type='html'>for those (such as me) that did not spotted it, &lt;a href="http://search.cpan.org/search?query=poe-loop&amp;amp;mode=dist"&gt;external event loops for poe&lt;/a&gt; are now released as their own distribution. this means they aren't part of &lt;a href="http://search.cpan.org/dist/POE/"&gt;the poe distribution&lt;/a&gt; anymore, and you should add them to your prereqs...&lt;br /&gt;&lt;br /&gt;of course, there's no way that dzil's &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-AutoPrereq/"&gt;autoprereq plugin&lt;/a&gt; could extract &lt;a href="http://search.cpan.org/dist/POE-Loop-Tk"&gt;poe::loop::tk&lt;/a&gt; from code such as:&lt;br /&gt;&lt;script src="http://gist.github.com/192082.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;so, i had to use the regular &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::Prereq"&gt;prereq plugin&lt;/a&gt; to list it as a manual dependency. since dzil is using &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt; &lt;a href="http://search.cpan.org/perldoc?Moose::Role"&gt;roles&lt;/a&gt;, it means more than one plugin can provide the prereqs, so i can continue using &lt;a href="http://search.cpan.org/perldoc?Dist::Zilla::Plugin::AutoPrereq"&gt;autoprereq&lt;/a&gt; beside this exception - woohoo!&lt;br /&gt;&lt;br /&gt;in conclusion, &lt;a href="http://search.cpan.org/dist/Games-Pandemic/"&gt;games::pandemic&lt;/a&gt; 1.092660 is on its way, fixing a &lt;a href="http://www.nntp.perl.org/group/perl.cpan.testers/2009/09/msg5401354.html"&gt;problem&lt;/a&gt; reported by a &lt;a href="http://static.cpantesters.org/"&gt;cpantester&lt;/a&gt; (thank you guys - you rock!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6720701960902275222?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6720701960902275222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/external-event-loops-no-more-part-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6720701960902275222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6720701960902275222'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/external-event-loops-no-more-part-of.html' title='external event loops no more part of poe'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2212919191349752161</id><published>2009-09-21T17:12:00.003+02:00</published><updated>2009-09-21T17:20:11.244+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><title type='text'>first external pandemic translation</title><content type='html'>i'm really happy to release a new pandemic version, namely 1.092640 (that is first release of 264th day of year 2009 for those that skipped &lt;a href="http://jquelin.blogspot.com/2009/09/full-pandemic-stikes-woohoo-o.html"&gt;previous entry&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;beside the introduction of the medic player (which in itself is interesting), it's with great pleasure that i committed a japanese translation that &lt;a href="http://search.cpan.org/%7Etomita/"&gt;tomita naoki&lt;/a&gt; provided me with. thank you tomita for this first external contribution!&lt;br /&gt;&lt;br /&gt;so, if you want to contribute, an easy way to start is by providing a translation for your language! of course, any other contribution is &lt;span style="font-weight: bold;"&gt;also&lt;/span&gt; welcome. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2212919191349752161?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2212919191349752161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/first-external-pandemic-translation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2212919191349752161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2212919191349752161'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/first-external-pandemic-translation.html' title='first external pandemic translation'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3258961043857302867</id><published>2009-09-14T16:19:00.003+02:00</published><updated>2009-09-14T16:51:18.763+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>moosex::poe ftw!</title><content type='html'>in the serie "why using moose and moosex" - today i present &lt;a href="http://search.cpan.org/dist/MooseX::POE/"&gt;moosex::poe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;say you want to create a &lt;a href="http://search.cpan.org/dist/POE/"&gt;poe&lt;/a&gt; session. traditional way is to create a module handling spawn method that would be called as:&lt;br /&gt;&lt;script src="http://gist.github.com/186685.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;the module itself would be something like this:&lt;br /&gt;&lt;script src="http://gist.github.com/186687.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;now that's moutful. and it has an easy-to-miss error - found it? right, it's should be &lt;span style="font-style: italic;"&gt;event3&lt;/span&gt;, not &lt;span style="font-style: italic;"&gt;evnet3&lt;/span&gt;. you can curse poe quite some time trying to understand why your nice handler never gets called for event3.&lt;br /&gt;&lt;br /&gt;here's the version using moosex::poe:&lt;br /&gt;&lt;script src="http://gist.github.com/186691.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;of course, it's still possible to mis-spell &lt;span style="font-style:italic;"&gt;event3&lt;/span&gt;. however, you only have to spell it once, whereas you wrote it 3 times before - which is 2 times too much!&lt;br /&gt;&lt;br /&gt;and i'm not talking about the easy accessors that could be added by &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt; - but i'm concentrating on moosex::poe here.&lt;br /&gt;&lt;br /&gt;granted, there's one downside: subs are now anonymous, which can make it a bit harder to debug. but that's a small price to pay, imo.&lt;br /&gt;&lt;br /&gt;so, moosex definitely makes your code more readable - i'm definitely not looking back, and i advise you to have a look too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3258961043857302867?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3258961043857302867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/moosexpoe-ftw.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3258961043857302867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3258961043857302867'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/moosexpoe-ftw.html' title='moosex::poe ftw!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4454204773368412786</id><published>2009-09-07T18:01:00.003+02:00</published><updated>2009-09-07T18:30:42.489+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>full pandemic stikes, woohoo \o/</title><content type='html'>erm, not &lt;a href="http://en.wikipedia.org/wiki/2009_flu_pandemic"&gt;this pandemic&lt;/a&gt;, but the &lt;a href="http://search.cpan.org/dist/Games-Pandemic/"&gt;pandemic game&lt;/a&gt; written in perl...&lt;br /&gt;&lt;br /&gt;so yes, i'm happy to report that milestone 1.0&lt;sup&gt;1&lt;/sup&gt; has been reached. indeed, here's what warrants the bump:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; infection rate grows as epidemics strike&lt;/li&gt;&lt;li&gt; special event: airlift implemented&lt;/li&gt;&lt;li&gt; special event: forecast implemented&lt;/li&gt;&lt;li&gt; special event: government grant implemented&lt;/li&gt;&lt;li&gt; special event: one quiet night implemented&lt;/li&gt;&lt;li&gt; special event: resilient population implemented&lt;/li&gt;&lt;li&gt; epidemics now shown in past cards&lt;/li&gt;&lt;/ul&gt;yup, this means the game is fully playable. i'm not saying fully implemented, since there are still stuff missing such as the medic or dispatcher roles, the possibility to choose the difficulty, number of players, etc. and of course lots of polishing is needed to get rid of all those peksy details that get in the way.&lt;br /&gt;&lt;br /&gt;however, all in all, i'm quite happy (and proud) of the release. version 1.0 is definitely not the ultimate one, it only means that you can play with it with comfidence.&lt;br /&gt;&lt;br /&gt;of course, i'm always eager to have (constructive) feedback&lt;sup&gt;2&lt;/sup&gt; on it. and if you want to contribute, well, &lt;a href="http://github.com/jquelin/games-pandemic"&gt;the source is available on github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[1] in fact, it's 1.000000 (i know it's ugly) since i'm switching to &lt;a href="http://rjbs.manxome.org/rubric/entry/1749"&gt;rjbs' versioning scheme&lt;/a&gt;: 1.yydddn&lt;sup&gt;3&lt;/sup&gt;. it'll &lt;a href="http://www.dagolden.com/index.php/369/version-numbers-should-be-boring/"&gt;make versioning boring&lt;/a&gt; (even if not beautiful).&lt;br /&gt;[2] fan &amp;amp; love mail is ok too :-)&lt;br /&gt;[3] yes, i'm taking every bad habit rjbs has to offer, as long as it helps my laziness. of course, games-pandemic is using the excellent &lt;a href="http://search.cpan.org/dist/Dist-Zilla"&gt;dist-zilla&lt;/a&gt; since the beginning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4454204773368412786?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4454204773368412786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/full-pandemic-stikes-woohoo-o.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4454204773368412786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4454204773368412786'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/full-pandemic-stikes-woohoo-o.html' title='full pandemic stikes, woohoo \o/'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-5238253764594149686</id><published>2009-09-01T16:49:00.003+02:00</published><updated>2009-09-01T17:06:26.475+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='padre'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>migrating to moose? hell yeah!</title><content type='html'>&lt;a href="http://perlhacks.com/2009/09/moose-or-no-moose.php"&gt;dave is asking&lt;/a&gt; whether we (cpan authors) would consider migrating to &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;between moose which brings a lot of nice features, moosex extensions such as &lt;a href="http://search.cpan.org/dist/MooseX-AttributeHelpers/"&gt;attributehelpers&lt;/a&gt; (which i'm being said is going core) or &lt;a href="http://search.cpan.org/dist/MooseX-POE/"&gt;moosex::poe&lt;/a&gt; (poe integration ftw!), there is so much that moose can bring to developers!&lt;br /&gt;&lt;br /&gt;less fuss, less coding, more fun...&lt;br /&gt;&lt;br /&gt;of course, moose is a bit slow during startup (but not afterwards). but  even if i respect adam's will not to slow down &lt;a href="http://padre.perlide.org/"&gt;padre&lt;/a&gt; too much during startup, i'd be in favor of using it nevertheless for padre. after all, we can expect some speed gains if moose's adoption continues to rise.&lt;br /&gt;&lt;br /&gt;so, at least for me, the answer to dave's question is a definitive &lt;span style="font-weight: bold;"&gt;yes&lt;/span&gt;! i am considering switching to moose, and i'll end up doing that when i'll have the tuits to migrate my modules.&lt;br /&gt;&lt;br /&gt;note: i should also add that since i'm at it, i'll also switch  my modules to &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist::zilla&lt;/a&gt;, which does a fantastic job to promote lazyness :-) but that's another topic...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-5238253764594149686?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/5238253764594149686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/09/migrating-to-moose-hell-yeah.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5238253764594149686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5238253764594149686'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/09/migrating-to-moose-hell-yeah.html' title='migrating to moose? hell yeah!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3085488059339472945</id><published>2009-08-28T09:47:00.002+02:00</published><updated>2009-08-28T09:55:22.522+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>pandemic nearing v1</title><content type='html'>so games::pandemic 0.8.0 has just been uploaded on cpan. this release saw lots of improvements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; diseases can be eradicated&lt;/li&gt;&lt;li&gt; performing infection outbreaks&lt;/li&gt;&lt;li&gt; detecting game over condition when too many outbreaks&lt;/li&gt;&lt;li&gt; allowing player to choose which disease to treat in multi-infected cities&lt;/li&gt;&lt;li&gt; return/escape bindings for dialogs&lt;/li&gt;&lt;li&gt; tooltips for various game information&lt;/li&gt;&lt;li&gt; fix unfair epidemic repartition&lt;/li&gt;&lt;li&gt; fix never-ending too many cards / deal more cards when dropping a card but still being beyond max number of cards&lt;/li&gt;&lt;li&gt; better dialog for past cards / infections&lt;/li&gt;&lt;/ul&gt;the game is thus playable, with only 2 things missing to have a full game: augmenting number of infection when epidemic strikes, and special event cards. when those will be done, i'll issue 1.x&lt;br /&gt;&lt;br /&gt;of course, this does not mean that game is complete and won't be improved after. for example, the startup dialog to choose the game and player roles, ui improvements, etc. will be post 1.x material.&lt;br /&gt;&lt;br /&gt;but in the meantime, enjoy 0.8.0, which is already quite interesting to play.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3085488059339472945?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3085488059339472945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/pandemic-nearing-v1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3085488059339472945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3085488059339472945'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/pandemic-nearing-v1.html' title='pandemic nearing v1'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7637619574615578394</id><published>2009-08-24T20:40:00.004+02:00</published><updated>2009-08-24T20:48:22.134+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>perl 5.10.1 has hit cooker</title><content type='html'>&lt;a href="http://search.cpan.org/%7Edapm/perl-5.10.1/"&gt;perl 5.10.1&lt;/a&gt; is out, so i just built it for &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt; cooker - after  fighting  the build system which seems to be broken very often those days. :-(&lt;br /&gt;&lt;br /&gt;it's currently propagating on mirrors, and should hit your machines soon... lots of other packages will need to be rebuilt, so you may want to run urpmi with the &lt;span style="font-style: italic;"&gt;--keep &lt;/span&gt;flag.&lt;br /&gt;&lt;br /&gt;in other news, &lt;a href="http://www.parrot.org"&gt;parrot&lt;/a&gt; 1.5.0 is also available on cooker since yesterday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7637619574615578394?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7637619574615578394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/perl-5101-has-hit-cooker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7637619574615578394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7637619574615578394'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/perl-5101-has-hit-cooker.html' title='perl 5.10.1 has hit cooker'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3709365588796788629</id><published>2009-08-22T14:46:00.003+02:00</published><updated>2009-08-22T14:49:31.321+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>new pandemic release</title><content type='html'>&lt;a href="http://search.cpan.org/dist/Games-Pandemic"&gt;games::pandemic&lt;/a&gt; 0.7.0 is now on cpan, with a lot of improvements and a crash fix:&lt;ul&gt;&lt;li&gt; wiping all cubes from a city if a cure has been found for the disease&lt;/li&gt;&lt;li&gt;reacting to winning conditions&lt;/li&gt;&lt;li&gt;reacting to game over condition when no more disease cubes&lt;/li&gt;&lt;li&gt; possibility to see cards already played / discarded&lt;/li&gt;&lt;li&gt;possibility to see past infections&lt;/li&gt;&lt;/ul&gt;i'm taking my time, but all in all there is progress... :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3709365588796788629?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3709365588796788629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/gamespandemic-0.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3709365588796788629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3709365588796788629'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/gamespandemic-0.html' title='new pandemic release'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3425544173486684714</id><published>2009-08-17T09:25:00.002+02:00</published><updated>2009-08-17T09:37:44.750+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='critic'/><title type='text'>more dzil goodness</title><content type='html'>i'm happy to announce yet another plugin for &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist-zilla&lt;/a&gt;: &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-CriticTests/"&gt;critictests&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;in your dist.ini, just add:&lt;blockquote&gt;&lt;pre&gt;[CriticTests]&lt;/pre&gt;&lt;/blockquote&gt;and dist-zilla will automatically create for you an &lt;span style="font-style: italic;"&gt;xt/author/critic.t&lt;/span&gt; file that will criticize your code during author tests.&lt;br /&gt;&lt;br /&gt;of course, since your code will be munged by dist-zilla, code that passes critics in your repo may fail after being rewritten... case in point: stricture use, since dist-zilla-plugin-pkgversion will insert a version just after the &lt;span style="font-style: italic;"&gt;package&lt;/span&gt; statement - and thus before any use statements. in order to make your code compliant again, just move the use strict / warnings &lt;span style="font-weight: bold;"&gt;before&lt;/span&gt; the package. indeed, use is lexically scoped, and thus the scope of the use statement will be the whole file.&lt;br /&gt;&lt;br /&gt;your code will now look like:&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;use&lt;/strong&gt; strict;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; warnings;&lt;br /&gt;&lt;strong&gt;package&lt;/strong&gt; Foo::Bar;&lt;/pre&gt;&lt;/blockquote&gt;and of course, perlcritic this time will now be happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3425544173486684714?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3425544173486684714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/more-dzil-goodness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3425544173486684714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3425544173486684714'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/more-dzil-goodness.html' title='more dzil goodness'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7637929615442727283</id><published>2009-08-09T10:41:00.003+02:00</published><updated>2009-08-09T10:47:34.577+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>perl 5.10.1-rc1 available on mandriva</title><content type='html'>&lt;a href="http://search.cpan.org/%7Edapm/perl-5.10.1-RC1/"&gt;perl 5.10.1-rc1&lt;/a&gt; has been released 3 days ago, so i packaged it for &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt;. the good thing is that a lot of patches that we were adding to our perl are now merged upstream.&lt;br /&gt;&lt;br /&gt;the new perl (perl-5.10.1-0.rc1.2mdv at the time of writing) rpms are available in &lt;a href="ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/cooker/x86_64/media/main/testing/"&gt;mandriva testing media&lt;/a&gt;. you can install them with:&lt;blockquote&gt;&lt;pre&gt;# urpmi perl perl-base --media "Main Testing"&lt;/pre&gt;&lt;/blockquote&gt;please report any problem to either mandriva cooker mailing list, or to perl 5 porters if that's a perl related bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7637929615442727283?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7637929615442727283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/perl-5101-rc1-available-on-mandriva.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7637929615442727283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7637929615442727283'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/perl-5101-rc1-available-on-mandriva.html' title='perl 5.10.1-rc1 available on mandriva'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8179531877421990412</id><published>2009-08-08T15:44:00.002+02:00</published><updated>2009-08-08T15:48:04.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>epidemics strike in games::pandemic!</title><content type='html'>&lt;a href="http://search.cpan.org/dist/Games-Pandemic"&gt;games::pandemic&lt;/a&gt; 0.6.0 is now on cpan, with a lot of improvements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;introducing epidemic events - fear! :-)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;closing current game is now supported&lt;/li&gt;&lt;li&gt;player cards now displayed in a window of their own&lt;/li&gt;&lt;li&gt;detecting game over condition when no more cards&lt;/li&gt;&lt;li&gt;sorting cards by type then by disease then by city name&lt;/li&gt;&lt;li&gt;introducing a new "action" menu, with shortcuts for actions&lt;/li&gt;&lt;li&gt;actions now independant of buttons / menu for easier reuse&lt;/li&gt;&lt;/ul&gt;of course, there are still a lot of things to do, but it's shaping up nicely...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8179531877421990412?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8179531877421990412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/epidemics-strike-in-gamespandemic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8179531877421990412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8179531877421990412'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/epidemics-strike-in-gamespandemic.html' title='epidemics strike in games::pandemic!'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1989913506905556160</id><published>2009-08-07T09:14:00.000+02:00</published><updated>2009-08-07T09:14:00.367+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>shipping compile tests with dist-zilla</title><content type='html'>perl community places some emphasis on testing. which is great, since it enhances the overall quality of perl ecosystem.&lt;br /&gt;&lt;br /&gt;the first, easiest test that one should provide is basic: making sure the modules compile. we have 2 options here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;either create a test and add some &lt;span style="font-family: courier new;"&gt;use_ok('Foo::Bar')&lt;/span&gt;. but we then need to update it whenever we add more modules to our distribution - without forgetting to update test count.&lt;/li&gt;&lt;li&gt;or, to get rid of this burden, ship a test that automatically finds the module and tries to compile them.&lt;/li&gt;&lt;/ul&gt;but shipping the exact same generic test is boring, and could be automated. which is now the case for &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist::zilla&lt;/a&gt; with the new module &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-CompileTests/"&gt;dist::zilla::plugin::compiletests&lt;/a&gt;. just add the following in your dist.ini file:&lt;blockquote&gt;&lt;pre&gt;[CompileTests]&lt;/pre&gt;&lt;/blockquote&gt;and you will get a brand new &lt;span style="font-family: courier new;"&gt;t/00-compile.t&lt;/span&gt; that will test your modules and your scripts one by one. this my take some time if your dist ships a lot of modules having lots of prereqs,  especially if they are a bit slow to compile such as Moose. but this will potentially find more compile errors in your modules.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1989913506905556160?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1989913506905556160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/shipping-compile-tests-with-dist-zilla.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1989913506905556160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1989913506905556160'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/shipping-compile-tests-with-dist-zilla.html' title='shipping compile tests with dist-zilla'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3859208507624418253</id><published>2009-08-06T14:54:00.003+02:00</published><updated>2009-08-06T15:58:45.473+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>more moose support in dzp:autoprereq</title><content type='html'>&lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-AutoPrereq"&gt;dist::zilla::plugin::autoprereq&lt;/a&gt; just gained more &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt; support: it can now extract the base module declared with:&lt;blockquote&gt;&lt;pre&gt;extends 'Foo::Bar';&lt;/pre&gt;&lt;/blockquote&gt;it's not perfect since it only extracts the first base class, but i think it will cover 90+% of the cases out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3859208507624418253?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3859208507624418253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/more-moose-support-in-dzpautoprereq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3859208507624418253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3859208507624418253'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/more-moose-support-in-dzpautoprereq.html' title='more moose support in dzp:autoprereq'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2249986456154510666</id><published>2009-08-04T18:28:00.002+02:00</published><updated>2009-08-06T14:55:42.257+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>bash completion for dzil command</title><content type='html'>lazyness strikes once again: i've created a (rough) bash completion file for dzil command that rjbs just merged. it will be available in next &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist::zilla&lt;/a&gt; release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2249986456154510666?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2249986456154510666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/bash-completion-for-dzil-command.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2249986456154510666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2249986456154510666'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/bash-completion-for-dzil-command.html' title='bash completion for dzil command'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2940314602985090703</id><published>2009-08-01T10:26:00.004+02:00</published><updated>2009-08-01T10:38:41.878+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>converting &amp; rebuilding mandriva perl modules rpm</title><content type='html'>as time went by, the %perl_convert_version&lt;sup&gt;[0]&lt;/sup&gt; macro in rpm has proven useful to convert perl version number to something that rpm will (should) always be able to parse. i also patched &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt;'s perl.prov and perl.req (that automatically extracts requires &amp;amp; provides for perl in rpm packages) to use %perl_convert_version also.&lt;br /&gt;&lt;br /&gt;the last step happened this week, when guillomovitch has converted &lt;a href="http://youri.zarb.org/demo/mandriva/"&gt;youri checks&lt;/a&gt; to also compare newer cpan version with %perl_convert_version. therefore i'm currently migrating the not-yet converted mandriva perl rpm package to use %perl_convert_version also&lt;sup&gt;[1]&lt;/sup&gt;...&lt;br /&gt;&lt;br /&gt;expect some problems during installation till all modules are converted. this should be solved soon.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[0] so that eg 1.54 is understood as 1.540.0, and thus greater than 1.470 - as on cpan.&lt;br /&gt;[1]  when the build system works! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2940314602985090703?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2940314602985090703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/08/converting-rebuilding-mandriva-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2940314602985090703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2940314602985090703'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/08/converting-rebuilding-mandriva-perl.html' title='converting &amp; rebuilding mandriva perl modules rpm'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2290134123142773571</id><published>2009-07-24T14:26:00.004+02:00</published><updated>2009-08-06T14:55:42.258+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>autoprereq plugin for dist-zilla gets smarter</title><content type='html'>i just released &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-AutoPrereq/"&gt;dist::zilla::plugin::autoprereq&lt;/a&gt; 0.2.0 which now extracts prereqs from moose roles declared with the &lt;span style="font-family:courier new;"&gt;with&lt;/span&gt; keyword &lt;sup&gt;[0]&lt;/sup&gt;. also new in this release is the support for skip list, allowing to trim unwanted prereqs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[0] why, yes, i got some failures for &lt;a href="http://search.cpan.org/dist/Games-Pandemic/"&gt;games::pandemic&lt;/a&gt; 0.5.0 due to a missing prereq... defined in a role, you guessed it. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2290134123142773571?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2290134123142773571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/07/autoprereq-plugin-for-dist-zilla-gets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2290134123142773571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2290134123142773571'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/07/autoprereq-plugin-for-dist-zilla-gets.html' title='autoprereq plugin for dist-zilla gets smarter'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2259795940160052000</id><published>2009-07-22T19:14:00.002+02:00</published><updated>2009-07-22T19:45:37.853+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>parrot 1.4.0 landed on mandriva</title><content type='html'>latest stable &lt;a href="http://parrot.org"&gt;parrot&lt;/a&gt; version (1.4.0) is now available on &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt; - enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2259795940160052000?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2259795940160052000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/07/parrot-140-landed-on-mandriva.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2259795940160052000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2259795940160052000'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/07/parrot-140-landed-on-mandriva.html' title='parrot 1.4.0 landed on mandriva'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2410870138059547041</id><published>2009-07-18T08:25:00.000+02:00</published><updated>2009-07-18T08:25:00.948+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>pandemic turns implemented</title><content type='html'>so &lt;a href="http://search.cpan.org/dist/Games-Pandemic/"&gt;games::pandemic&lt;/a&gt; 0.5.0 is now released&lt;sup&gt;[0]&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;the basic game play is now done: besides the player actions, the cards are now dealt and infections propagated. card limit is also implemented, so player can discard them if needed. add to that a bit of ui polishing, and we now have a solid basis on which to build upon...&lt;br /&gt;&lt;br /&gt;next releases will see (in no special order):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the special cards (including the epidemics)&lt;/li&gt;&lt;li&gt;end of game conditions (both game-over and win cases)&lt;/li&gt;&lt;li&gt;more ui polishing (i think the players cards will have their own toplevel)&lt;/li&gt;&lt;li&gt;easier game play (drag-n-drop on the canvas)&lt;/li&gt;&lt;li&gt;missing player features (dispatcher, medic)&lt;/li&gt;&lt;li&gt;missing rule implementation (disease eradication, ...)&lt;/li&gt;&lt;li&gt;start game dialog&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;yup, that's still a lot to do, so expect other 0.x versions! ;-)&lt;br /&gt;&lt;br /&gt;[0] and without any more warnings, since i spotted a bug in &lt;a href="http://search.cpan.org/dist/MooseX-SemiAffordanceAccessor/"&gt;moosex::semiaffordanceaccessor&lt;/a&gt; which has been swiftly fixed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2410870138059547041?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2410870138059547041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/07/pandemic-turns-implemented.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2410870138059547041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2410870138059547041'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/07/pandemic-turns-implemented.html' title='pandemic turns implemented'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-5201421727696981452</id><published>2009-07-10T14:45:00.008+02:00</published><updated>2009-07-10T15:05:33.050+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>prettyfying tk apps</title><content type='html'>one of the main griefs people have against &lt;a href="http://search.cpan.org/dist/Tk"&gt;tk&lt;/a&gt; is the fact that it looks ugly. however, it's possible to tremendously enhance tk with only one line. indeed, tk by default uses a 2 pixels wide border, which does look fugly.&lt;br /&gt;&lt;br /&gt;here's a snapshot of &lt;a href="http://search.cpan.org/dist/Config-Model/"&gt;config::model&lt;/a&gt; (used as an example):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qZIpP8ZamQY/Slc4n1GQnSI/AAAAAAAAAZY/1yHMgf8DAYw/s1600-h/blog2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://1.bp.blogspot.com/_qZIpP8ZamQY/Slc4n1GQnSI/AAAAAAAAAZY/1yHMgf8DAYw/s320/blog2.jpg" alt="" id="BLOGGER_PHOTO_ID_5356812538699881762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;now, try to insert the following line in your code:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$mw&lt;/span&gt;-&amp;gt;optionAdd&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;'*BorderWidth'&lt;/span&gt; =&amp;gt; 1&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;here's the result, still using config-model as guinea pig:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qZIpP8ZamQY/Slc7eoBpbiI/AAAAAAAAAZw/JBvjt7QpErg/s1600-h/blog4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 179px;" src="http://1.bp.blogspot.com/_qZIpP8ZamQY/Slc7eoBpbiI/AAAAAAAAAZw/JBvjt7QpErg/s320/blog4.jpg" alt="" id="BLOGGER_PHOTO_ID_5356815679106936354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;look at how the buttons are crisper... now that's better, uh? :-)&lt;br /&gt;&lt;br /&gt;thanks to ala qumsieh who first reported this tip on &lt;a href="http://www.perltk.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=43&amp;amp;Itemid=37"&gt;perltk.org&lt;/a&gt; - but the site seems to be down nowadays.&lt;br /&gt;&lt;br /&gt;note: i'm told that tk 8.5 can be themed and looks native. but &lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#1"&gt;i'm still using perl/tk&lt;/a&gt; which is build against tk 8.4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-5201421727696981452?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/5201421727696981452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/07/prettyfying-tk-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5201421727696981452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/5201421727696981452'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/07/prettyfying-tk-apps.html' title='prettyfying tk apps'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qZIpP8ZamQY/Slc4n1GQnSI/AAAAAAAAAZY/1yHMgf8DAYw/s72-c/blog2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-6915346776850709202</id><published>2009-07-02T19:03:00.005+02:00</published><updated>2009-08-06T14:55:42.258+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pandemic'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>perl helps save world pandemic</title><content type='html'>ok, maybe the title was a bit too much dramatic - especially in those days. :-)&lt;br /&gt;&lt;br /&gt;i like playing board games, and my wife and i discovered recently &lt;a href="http://www.zmangames.com/boardgames/pandemic.htm"&gt;pandemic&lt;/a&gt;, from &lt;a href="http://www.zmangames.com/"&gt;z-man games&lt;/a&gt;. it is a tremendous cooperative game, where players allies to eradicate 4 diseases. but the infections spread out, and if you aren't fast enough, you end up with a global pandemic - and loose...&lt;br /&gt;&lt;br /&gt;it is really addictive, so i decided to write a perl module &lt;a href="http://search.cpan.org/dist/Games-Pandemic/"&gt;games::pandemic&lt;/a&gt; implementing a clone of this board game, with &lt;a href="http://www.aworldwithoutstring.com/A_World_Without_String/Home/Entries/2008/6/7_Pandemic.html"&gt;all its rules&lt;/a&gt;. it was also a good occasion to learn &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt;,&lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt; dist::zilla&lt;/a&gt; and other modern perl stuff. at least, this goal is &lt;a href="http://jquelin.blogspot.com/search/label/moose"&gt;already&lt;/a&gt; &lt;a href="http://jquelin.blogspot.com/search/label/dzill"&gt;fulfilled&lt;/a&gt;! :-)&lt;br /&gt;&lt;br /&gt;i'm also using &lt;a href="http://search.cpan.org/dist/POE/"&gt;poe&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/Tk/"&gt;tk&lt;/a&gt; (i know, i know). i just published the first public release, version 0.4.0. it already implements all the player actions, and here's a snapshot of a game:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qZIpP8ZamQY/SkztELIR4nI/AAAAAAAAAZQ/t2xufxmkjeo/s1600-h/blog.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 247px;" src="http://4.bp.blogspot.com/_qZIpP8ZamQY/SkztELIR4nI/AAAAAAAAAZQ/t2xufxmkjeo/s320/blog.jpg" alt="" id="BLOGGER_PHOTO_ID_5353914712999453298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;of course it isn't finished, but i'm pretty happy of the result (even if the gui might change in the future). i aim for a v1.0.0 playable alone, and then allow networked game...&lt;br /&gt;&lt;br /&gt;the code is &lt;a href="http://github.com/jquelin/games-pandemic/"&gt;available on github&lt;/a&gt; if you want to help - even "only" translating strings is welcome!&lt;br /&gt;&lt;br /&gt;so, expect to hear more about pandemic on this blog. and while waiting for this perl version to be complete, i recommend you to buy a pandemic board game: you won't regret it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-6915346776850709202?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/6915346776850709202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/07/perl-helps-save-world-pandemic.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6915346776850709202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/6915346776850709202'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/07/perl-helps-save-world-pandemic.html' title='perl helps save world pandemic'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qZIpP8ZamQY/SkztELIR4nI/AAAAAAAAAZQ/t2xufxmkjeo/s72-c/blog.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4882795062435787414</id><published>2009-06-29T18:45:00.003+02:00</published><updated>2009-07-24T14:29:24.478+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='prereqs'/><title type='text'>even more lazyness with dist::zilla::plugin::autoprereq</title><content type='html'>who never forgot to list a prereq in their makefile.pl / build.pl / whatever? it happens to me on a regular basis.&lt;br /&gt;&lt;br /&gt;now that i started using &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist::zilla&lt;/a&gt;, prereqs are not listed in a build script, but in dist zilla configuration file. but the problem is the same: prereqs are listed manually. and doing stuff manually sucks.&lt;br /&gt;&lt;br /&gt;i had to do something. so i used dist-zilla's plugin infrastructure and just uploaded &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-AutoPrereq/"&gt;dist::zilla::plugin::autoprereq&lt;/a&gt;. just add:&lt;blockquote&gt;&lt;pre&gt;[AutoPrereq]&lt;/pre&gt;&lt;/blockquote&gt;in your dist.ini, and it will automatically find your prereqs for dist::zilla to use.&lt;br /&gt;&lt;br /&gt;the parsing is somehow very rough: it will just find the lines beginning by use or require. for more advanced / hackish stuff, dist::zilla::plugin::prereq is still available. i still think that it should cover 80+% of the cases. i considered using &lt;a href="http://search.cpan.org/dist/Module-Info/"&gt;module::info&lt;/a&gt;, but it evals the modules to find the prereqs and the result is damn slow... and speed was more important imo.&lt;br /&gt;&lt;br /&gt;note that i plan to add the possibility to add modules manually, in order to add missing modules (or maybe we can use both prereq and autoprereq?), and a skip option to trim modules that should not be added to the list of prereqs.&lt;br /&gt;&lt;br /&gt;also, i may change the algorithm used to find prereqs: maybe &lt;a href="http://search.cpan.org/dist/PPI/"&gt;ppi&lt;/a&gt; will be fast enough? we'll see.&lt;br /&gt;&lt;br /&gt;but in the meantime, just enjoy not writing anymore those prereqs by hand! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4882795062435787414?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4882795062435787414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/even-more-lazyness-with.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4882795062435787414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4882795062435787414'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/even-more-lazyness-with.html' title='even more lazyness with dist::zilla::plugin::autoprereq'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3650571752764719448</id><published>2009-06-25T18:54:00.006+02:00</published><updated>2009-06-26T09:00:34.714+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='padre'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><title type='text'>beginning of moose support in padre</title><content type='html'>so i started using &lt;a href="http://search.cpan.org/dist/Moose/"&gt;moose&lt;/a&gt; like all the cool kids today. it turns out to be quite nice to use. declaring an attribute is as easy as:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;has foo =&amp;gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; is=&amp;gt;&lt;span style="color: rgb(0, 128, 0);"&gt;'ro'&lt;/span&gt;, ... &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;and since i'm also using &lt;a href="http://search.cpan.org/dist/POE/"&gt;poe&lt;/a&gt;, i was glad to find the illicit love child of moose and poe - aka &lt;a href="http://search.cpan.org/dist/MooseX-POE/"&gt;moosex::poe&lt;/a&gt;. declaring an event without any fuss:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;event frobnize =&amp;gt; sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; say &lt;span style="color: rgb(32, 64, 160);"&gt;$_&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;0&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;-&amp;gt;foo &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;but when your module grows to have lots of attributes and poe events, it's difficult to go directly to a given definition in the file.&lt;br /&gt;&lt;br /&gt;readers of this blog know that i'm using &lt;a href="http://padre.perlide.org/"&gt;padre&lt;/a&gt; (the perl ide), but neither the sub nor the outline views can help. indeed, if you look the code snippets above, there is no traditional sub definition... syntaxic sugar is nice, but it means the tools need to be aware of them.&lt;br /&gt;&lt;br /&gt;this was clearly an itch to scratch... i had a look at padre's outline code, and after some help from &lt;a href="http://use.perl.org/%7EAlias/journal/"&gt;alias&lt;/a&gt;, here's the result:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qZIpP8ZamQY/SkOr4_B5v1I/AAAAAAAAAZI/_9CilwV4bEY/s1600-h/blog.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 94px;" src="http://2.bp.blogspot.com/_qZIpP8ZamQY/SkOr4_B5v1I/AAAAAAAAAZI/_9CilwV4bEY/s320/blog.jpg" alt="" id="BLOGGER_PHOTO_ID_5351309777726717778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;the patch is surprisingly small: around 20 lines for &lt;a href="http://padre.perlide.org/trac/changeset/5577"&gt;attribute detection&lt;/a&gt;, and the same for event detection... that's the beauty of having cpan modules at hand - the great &lt;a href="http://search.cpan.org/dist/PPI/"&gt;ppi&lt;/a&gt; in this case.&lt;br /&gt;&lt;br /&gt;(note: the feature is in trunk currently. you'll have to wait 0.38 release)&lt;br /&gt;&lt;br /&gt;so, try padre. tell us which feature it lacks. or how can we make it &lt;span style="font-style: italic;"&gt;the&lt;/span&gt; modern perl editor, the one that would be recommended alongside moose and others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3650571752764719448?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3650571752764719448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/beginning-of-moose-support-in-padre.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3650571752764719448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3650571752764719448'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/beginning-of-moose-support-in-padre.html' title='beginning of moose support in padre'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qZIpP8ZamQY/SkOr4_B5v1I/AAAAAAAAAZI/_9CilwV4bEY/s72-c/blog.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1450336577064199792</id><published>2009-06-22T19:53:00.004+02:00</published><updated>2009-06-22T21:08:08.229+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='tk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>where are builtin tk icons? (aka tk::toolbar fun)</title><content type='html'>for everything gui related, my favorite toolkit is &lt;a href="http://search.cpan.org/dist/Tk/"&gt;tk&lt;/a&gt;. it's quite powerful, easy to learn and to use, and feels quite perlish &lt;sup&gt;[&lt;a name="0-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#0"&gt;0&lt;/a&gt;]&lt;/sup&gt;. in a word, it doesn't get in the way.&lt;br /&gt;&lt;br /&gt;yeah, of course, current version is not the most up to date &lt;sup&gt;[&lt;a name="1-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#1"&gt;1&lt;/a&gt;][&lt;a name="2-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#2"&gt;2&lt;/a&gt;]&lt;/sup&gt; - but it gets the job done, with the help of some &lt;a href="http://search.cpan.org/search?query=tk+extension&amp;amp;mode=all"&gt;nice tk additional modules&lt;/a&gt; available on cpan.&lt;br /&gt;&lt;br /&gt;one of those modules is &lt;a href="http://search.cpan.org/dist/Tk-ToolBar/"&gt;tk::toolbar&lt;/a&gt;, from ala qumsieh. and it comes with a set of bundled icons that are loaded. they may not be the prettiest icons out there, but they are available and allow you to do something like &lt;sup&gt;[&lt;a name="3-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#3"&gt;3&lt;/a&gt;]&lt;/sup&gt;:&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$mw&lt;/span&gt;-&amp;gt;Label&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; -image =&amp;gt; &lt;span style="color: rgb(0, 128, 0);"&gt;'fileopen16'&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-&amp;gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;pack&lt;/strong&gt;&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;instead of having to create &amp;amp; load the images yourself.&lt;br /&gt;&lt;br /&gt;knowing this, when i needed to add an icon in my new project (yes, yes, i need to present it here), i loaded tk::toolbar in my code, and re-used one of the bundled images.&lt;br /&gt;&lt;br /&gt;well, that was my goal anyway - the image never appeared... i tried to tweak my code in every direction, but did not manage to make this icon appear.&lt;br /&gt;&lt;br /&gt;having rebuild perl-tk package yesterday to fix a bug in &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;'s package, i thought it might be related... so i tried to run a perl/tk gui provided in &lt;a href="http://search.cpan.org/dist/Language-Befunge-Debugger/"&gt;one of my other modules&lt;/a&gt; using tk::toolbar's icons, but the icons were correctly displayed. so long for this idea...&lt;br /&gt;&lt;br /&gt;after having fought 5 minutes, i finally managed to understand what was going on: in this new project, i currently do not have created the toolbar. and since the icons are loaded in the classinit() method, &lt;span style="font-style: italic;"&gt;called during the creation of the first widget of this particular class&lt;/span&gt;, the icons were not loaded...&lt;br /&gt;&lt;br /&gt;so i created a toolbar &lt;sup&gt;[&lt;a name="4-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#4"&gt;4&lt;/a&gt;]&lt;/sup&gt;, and miracle! the icon i wanted magically appeared.&lt;br /&gt;&lt;br /&gt;tricky one...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[&lt;a name="0"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#0-back"&gt;0&lt;/a&gt;] contrary to wxwidgets for example - at least imnsho&lt;br /&gt;[&lt;a name="1"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#1-back"&gt;1&lt;/a&gt;] i'm using plain tk 804.028 and not one of those tk ersatz &lt;a href="http://search.cpan.org/dist/Tcl-Tk/"&gt;tcl::tk&lt;/a&gt; &lt;sup&gt;[&lt;a name="5-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#5"&gt;5&lt;/a&gt;]&lt;/sup&gt; or &lt;a href="http://search.cpan.org/dist/Tkx/"&gt;tkx&lt;/a&gt; &lt;sup&gt;[&lt;a name="6-back"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#6"&gt;6&lt;/a&gt;]&lt;/sup&gt;&lt;br /&gt;[&lt;a name="2"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#2-back"&gt;2&lt;/a&gt;] slaven told me he would like to update it when he'll have some tuits...&lt;br /&gt;[&lt;a name="3"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#3-back"&gt;3&lt;/a&gt;] tk allows you to name the images you load, to do for example:&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$mw&lt;/span&gt;-&amp;gt;Photo&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"foo"&lt;/span&gt;, -file=&amp;gt;&lt;span style="color: rgb(0, 128, 0);"&gt;"path/to/some/image.jpg"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;... later on ...&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$mw&lt;/span&gt;-&amp;gt;Label&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; -image =&amp;gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"foo"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;-&amp;gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;pack&lt;/strong&gt;&lt;/span&gt;;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;[&lt;a name="4"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#4-back"&gt;4&lt;/a&gt;] i'll populate the toolbar later on&lt;br /&gt;[&lt;a name="5"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#5-back"&gt;5&lt;/a&gt;] which is far from complete, and does not seem to be maintained anymore&lt;br /&gt;[&lt;a name="6"&gt;&lt;/a&gt;&lt;a href="http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#6-back"&gt;6&lt;/a&gt;] which doesn't compile easily out of the box, and feels really clumsy after tk goodness. oh well, i guess beauty is in the eye of the beholder...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1450336577064199792?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1450336577064199792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1450336577064199792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1450336577064199792'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/where-are-builtin-tk-icons-aka.html' title='where are builtin tk icons? (aka tk::toolbar fun)'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8296664762011987131</id><published>2009-06-21T11:36:00.004+02:00</published><updated>2009-06-21T11:44:53.355+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='padre'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>prepender distzilla plugin can add boilerplate copyright</title><content type='html'>following &lt;a href="http://jquelin.blogspot.com/2009/06/new-distzilla-plugin-prepender.html?showComment=1245503931096#c6081573697491529065"&gt;autarch's advice&lt;/a&gt; on &lt;a href="http://jquelin.blogspot.com/2009/06/new-distzilla-plugin-prepender.html"&gt;yesterday's post&lt;/a&gt;, i just uploaded &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-Prepender/"&gt;dist-zilla-plugin-prepender&lt;/a&gt; 0.2.0 that accepts a copyright option to automatically add a boilerplate copyright at the top of the files.&lt;br /&gt;&lt;br /&gt;yet another things that ease an author's life.&lt;br /&gt;&lt;br /&gt;i'm still unsure with the strict and warnings options. not because of the test argument, but because of the editing argument. indeed, with &lt;a href="http://padre.perlide.org/"&gt;padre (the perl ide)&lt;/a&gt; doing live syntax check, i want the syntax check to be done with all due stricture...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8296664762011987131?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8296664762011987131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/prepender-distzilla-plugin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8296664762011987131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8296664762011987131'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/prepender-distzilla-plugin.html' title='prepender distzilla plugin can add boilerplate copyright'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3111759853150125981</id><published>2009-06-20T11:56:00.005+02:00</published><updated>2009-06-20T12:25:39.180+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='dzill'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>new distzilla plugin: prepender</title><content type='html'>when i first heard of &lt;a href="http://www.slideshare.net/rjbs/distzilla-presentation"&gt;dist::zilla&lt;/a&gt;, its concepts definitely appealed to me. it took me quite some time (never the good time, plus i needed to create the rpms for &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;), but i finally managed to try it...&lt;br /&gt;&lt;br /&gt;and although i still need to get used to it, i'm already really happy with it. on the new project that i recently started (more on that later on), i'm letting &lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;dist::zilla&lt;/a&gt; deal with all those pesky copyright, version, pod, etc. stuff.&lt;br /&gt;&lt;br /&gt;however, i'm used to add some boilerplate at the top of my files, as the &lt;a href="http://www.fsf.org/licensing/licenses/gpl-howto.html"&gt;fsf recommends&lt;/a&gt;. and i found nothing in dist::zilla to do that... so i just wrote a new plugin for it: &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-Prepender/"&gt;dist::zilla::plugin::prepender&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;just add the following in your &lt;span style="font-style: italic;"&gt;dist.ini&lt;/span&gt; file:&lt;blockquote&gt;&lt;pre&gt;[Prepender]&lt;br /&gt;line = #&lt;br /&gt;line = # This file is part of Foo::Bar&lt;br /&gt;line = #&lt;br /&gt;line = # Foo::Bar is copyright...&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;but it can also be used to enforce some common pragma: since it will be inserted at the top of the file, the pragma will be applied to its lexical scope - the whole file itself in this case:&lt;blockquote&gt;&lt;pre&gt;[Prepender]&lt;br /&gt;line = use strict;&lt;br /&gt;line = use warnings;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;since those usages are quite common, i might as well in a future version propose them as options:&lt;blockquote&gt;&lt;pre&gt;[Prepender]&lt;br /&gt;copyright = 1&lt;br /&gt;strict    = 1&lt;br /&gt;warnings  = 1&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;but i'm not really sure... wdyt?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3111759853150125981?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3111759853150125981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/new-distzilla-plugin-prepender.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3111759853150125981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3111759853150125981'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/new-distzilla-plugin-prepender.html' title='new distzilla plugin: prepender'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-8427643539766299405</id><published>2009-06-18T10:55:00.003+02:00</published><updated>2009-06-18T11:40:39.670+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>which parrot version to package?</title><content type='html'>after &lt;a href="http://groups.google.fr/group/parrot-dev/browse_frm/thread/e0883473c3fc623f/"&gt;some&lt;/a&gt; &lt;a href="http://groups.google.fr/group/parrot-dev/browse_frm/thread/d920ed30b842415c"&gt;lengthy&lt;/a&gt; &lt;a href="http://groups.google.fr/group/parrot-dev/browse_frm/thread/df10ab6cd35d7fef"&gt;discussions&lt;/a&gt;  finding the final versioning scheme for &lt;a href="http://www.parrot.org"&gt;parrot&lt;/a&gt;, allison &lt;a href="http://groups.google.fr/group/parrot-dev/tree/browse_frm/thread/df10ab6cd35d7fef/e46df14f29660fb3?rnum=33&amp;amp;_done=%2Fgroup%2Fparrot-dev%2Fbrowse_frm%2Fthread%2Fdf10ab6cd35d7fef%2F05a411b703c41bb4%3F#doc_05a411b703c41bb4"&gt;finally decided&lt;/a&gt; that parrot will use the following version numbers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="fixed_width"  style="font-family:Courier,Monospaced;"&gt;     &lt;span style="font-family: arial;"&gt;1.0  (March, deprecation point) &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.1  (April) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.2  (May) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.3  (June) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.4  (July, deprecation point) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.5  (August) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.6  (September) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.7  (October) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.8  (November) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      1.9  (December) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.0  (January, deprecation point) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.1  (February) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.2  (March) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.3  (April) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.4  (May) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.5  (June) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.6  (July, deprecation point) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.7  (August) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.8  (September) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.9  (October) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.10 (November) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      2.11 (December) &lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: arial;"&gt;&lt;span class="fixed_width"&gt;      3.0  (January, deprecation point) &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;the stable versions will be the deprecation points - that is, 1.0.0, 1.4.0, 2.0.0, 2.6.0 and 3.0.0. this means that those versions may have some bugfix releases during their support lifetime (1 year), but only for very limited stuff (security or other critical problems). everything is described in &lt;a href="http://docs.parrot.org/parrot/latest/html/docs/project/support_policy.pod.html"&gt;parrot's support policy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;as parrot packager for &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt;, this is good to know. however, i don't really know what to do: should i package the stable versions? or should i update the package for each new devel version?&lt;br /&gt;&lt;br /&gt;since parrot is quite in flux those times, version 1.0.0 (which is 3 monthes old) is really useless... if you add that almost nothing production-ready relies on it currently, i have decided to update the package on a &lt;span style="font-weight: bold;"&gt;monthly basis&lt;/span&gt;. which means that rpm for &lt;a href="http://www.parrot.org/news/2009/Parrot-1.3.0"&gt;parrot 1.3.0&lt;/a&gt; is available on cooker right now.&lt;br /&gt;&lt;br /&gt;but let's think forward a bit... when &lt;a href="http://rakudo.org/"&gt;rakudo&lt;/a&gt; will be able to use an existing parrot, when perl 6 will be in production, i won't continue like that: i'll just stick (of course) with the production releases... but when will this point happen? when will i switch from devel to stable versions? this remains to be seen...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-8427643539766299405?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/8427643539766299405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/which-parrot-version-to-package.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8427643539766299405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/8427643539766299405'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/which-parrot-version-to-package.html' title='which parrot version to package?'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-4699406632697243980</id><published>2009-06-11T10:03:00.007+02:00</published><updated>2009-06-11T14:16:42.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subs'/><category scheme='http://www.blogger.com/atom/ns#' term='befunge'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>redefining exported subs in perl</title><content type='html'>i've explained &lt;a href="http://jquelin.blogspot.com/2009/06/some-befunge-love.html"&gt;in a previous post&lt;/a&gt; that i changed the way i was logging debug statements within &lt;a href="http://search.cpan.org/dist/Language-Befunge/"&gt;language::befunge&lt;/a&gt;. i mentioned that i applied some tricks and promised to explain them - so here are the explanations.&lt;br /&gt;&lt;br /&gt;the goal is to minimize time spent for debug statements. previously, i was doing:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$interpreter&lt;/span&gt;-&amp;gt;debug&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;@stuff&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;and debug was a method defined as:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;sub&lt;span style="color: rgb(255, 0, 0);"&gt; debug&lt;/span&gt; {&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;    my&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$self&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;@stuff&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;@_&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;    return&lt;/strong&gt; &lt;strong&gt;unless&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$self&lt;/span&gt;-&amp;gt;debug_mode;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;    warn&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@stuff&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;so, to log a debug message, i was doing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a method call on $interpreter&lt;/li&gt;&lt;li&gt;a second method call to check an attribute&lt;/li&gt;&lt;li&gt;finally the actual logging (skipped if we're not in debug mode)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;this is bad, especially since method calls cannot be resolved at compile time by perl, and thus are actually resolved during run-time. but what's worse is that this always happens, even if we're not in debug mode (which is around 99% of the time).&lt;br /&gt;&lt;br /&gt;so, one obvious way to improve was to move from a method to a plain sub. this would remove the run-time cost of resolving the method. the debug mode can be stored as a package scalar instead of an attribute.&lt;br /&gt;&lt;br /&gt;but we can do even better. knowing that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;perl optimizes out calls to empty subs&lt;/li&gt;&lt;li&gt;we are not in debug mode most of the time&lt;/li&gt;&lt;/ul&gt;we can define the debug sub as an empty sub!&lt;br /&gt;&lt;br /&gt;here's our code at that point:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;package&lt;/strong&gt; Language::Befunge::Debug;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; 5.010;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; strict;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; warnings;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; base &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;qw&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; Exporter &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;our &lt;span style="color: rgb(32, 64, 160);"&gt;@EXPORT&lt;/span&gt; = &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;qw&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; debug &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;sub&lt;span style="color: rgb(255, 0, 0);"&gt; debug&lt;/span&gt; {&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;of course, we need to provide a way to activate debugging. a naive approach would be to redefine our debug() sub in our debug package:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;sub&lt;span style="color: rgb(255, 0, 0);"&gt; enable&lt;/span&gt; {&lt;/strong&gt;&lt;br /&gt;  *debug = sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;warn&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@_&lt;/span&gt;; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;alas, this won't work. well, it will work for calls such as:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;Language::Befunge::Debug::debug&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;@stuff&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;but calls using exported debug() will still log nothing. indeed, it's important to understand that exporter installs a &lt;span style="font-style: italic;"&gt;copy&lt;/span&gt; of exported sub in the package. therefore, changing the definition of the original does not change the exported copies.&lt;br /&gt;&lt;br /&gt;so, to redefine exported subs, one is forced to walk the symbol table of all packages and redefine subs on the fly. here's what i ended up doing:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;%redef&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;sub&lt;span style="color: rgb(255, 0, 0);"&gt; enable&lt;/span&gt; {&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;    %redef&lt;/span&gt; = &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; debug =&amp;gt; sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;warn&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@_&lt;/span&gt;; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;  _redef&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;sub&lt;span style="color: rgb(255, 0, 0);"&gt; disable&lt;/span&gt; {&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;    %redef&lt;/span&gt; = &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; debug =&amp;gt; sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;  _redef&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;%orig&lt;/span&gt;; &lt;span style="color: rgb(68, 68, 68);"&gt;# original subs&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;sub&lt;span style="color: rgb(255, 0, 0);"&gt; _redef&lt;/span&gt; {&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;    my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$parent&lt;/span&gt; = &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;shift&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;    if&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;not&lt;/strong&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$parent&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(32, 64, 160);"&gt;$parent&lt;/span&gt; = &lt;span style="color: rgb(0, 128, 0);"&gt;'::'&lt;/span&gt;;&lt;br /&gt;      &lt;strong&gt;foreach&lt;/strong&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;keys&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;%redef&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: rgb(32, 64, 160);"&gt;$orig&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; = \&amp;amp;&lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt;;&lt;br /&gt;      &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;    no&lt;/strong&gt;&lt;/span&gt; strict   &lt;span style="color: rgb(0, 128, 0);"&gt;'refs'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;    no&lt;/strong&gt;&lt;/span&gt; warnings &lt;span style="color: rgb(0, 128, 0);"&gt;'redefine'&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;    foreach&lt;/strong&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$ns&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;grep&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(176, 0, 208);"&gt; /^\w+::/&lt;/span&gt;, &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;keys&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;%{$parent}&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(32, 64, 160);"&gt;$ns&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$parent&lt;/span&gt; . &lt;span style="color: rgb(32, 64, 160);"&gt;$ns&lt;/span&gt;;&lt;br /&gt;      _redef&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$ns&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;unless&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$ns&lt;/span&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;'::main::'&lt;/span&gt;;&lt;br /&gt;      &lt;strong&gt;foreach&lt;/strong&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;keys&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;%redef&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;   &lt;strong&gt;       next&lt;/strong&gt;                                     &lt;span style="color: rgb(68, 68, 68);"&gt;# before replacing, check that...&lt;br /&gt;            &lt;/span&gt;&lt;strong&gt;unless&lt;/strong&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;exists&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;${$ns}&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;             &lt;span style="color: rgb(68, 68, 68);"&gt;# ... named sub exist...&lt;br /&gt;          &lt;/span&gt;  &amp;amp;&amp;amp; \&amp;amp;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;${$ns}&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; == &lt;span style="color: rgb(32, 64, 160);"&gt;$orig&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;  &lt;span style="color: rgb(68, 68, 68);"&gt;# ... and refer to the one we want to replace&lt;br /&gt;          &lt;/span&gt;*&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$ns&lt;/span&gt; . &lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$redef&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$sub&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt; }&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;there, it will redefine my sub in all packages, even the ones that hold an exported copy.&lt;br /&gt;&lt;br /&gt;now, do you think this would warrant a sub::redefine module on cpan? after all, i found nothing on cpan that would achieve that. otoh, i'm not sure it's that common to do this kind of things... so tell if you're interested, and i'll turn that in a cpan module for your own use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-4699406632697243980?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/4699406632697243980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/redefining-exported-subs.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4699406632697243980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/4699406632697243980'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/redefining-exported-subs.html' title='redefining exported subs in perl'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-7303777815877424190</id><published>2009-06-06T20:32:00.003+02:00</published><updated>2009-06-06T21:00:55.693+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpan2dist'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan2pkg'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><title type='text'>cpan2dist oddity</title><content type='html'>&lt;a href="http://search.cpan.org/dist/CPANPLUS/"&gt;cpanplus&lt;/a&gt; is great - really, i mean it. i don't like its internals, and having to adapt to it for &lt;a href="http://search.cpan.org/dist/CPANPLUS-Dist-Mdv/"&gt;cpanplus::dist::mdv&lt;/a&gt; is not my fondest memory. however, it gets the job done, and that's what counts in the end.&lt;br /&gt;&lt;br /&gt;but cpanplus has some oddities in the user-space also. cpan2dist, which is a tool allowing you to create a native package for your platform, sometimes makes me cry.&lt;br /&gt;&lt;br /&gt;it insists on building prereqs for the module you want. that's fine, except for one thing: it will also build packages for modules that are not up to date... and this is where the fun starts.&lt;br /&gt;&lt;br /&gt;you can think that &lt;span style="font-family:courier new;"&gt;--nobuildprereqs&lt;/span&gt; would prevent this, but nope, it's the default and really means: "&lt;span style="font-style: italic;"&gt;don't rebuild prereqs if we're at latest version, but rebuild anyway if we're not at latest version&lt;/span&gt;". the &lt;span style="font-family:courier new;"&gt;--buildprereqs&lt;/span&gt; indeed means "&lt;span style="font-style: italic;"&gt;i really really want to loose my time, please rebuild a package for all the prereqs even if i already have them installed and working&lt;/span&gt;". like this option is of any use... erm.&lt;br /&gt;&lt;br /&gt;so in &lt;a href="http://search.cpan.org/dist/App-CPAN2Pkg/"&gt;app::cpan2pkg&lt;/a&gt;, in order not to build the prereqs, i ended up using &lt;span style="font-family:courier new;"&gt;--ignore&lt;/span&gt; flags (flags as in plural form, since using a negative look-ahead regex such as &lt;span style="font-family:courier new;"&gt;/(?&amp;lt;!$name)$/&lt;/span&gt; do not work). it took me quite some time to come up with this solution, since &lt;span style="font-family:courier new;"&gt;--ban&lt;/span&gt; was not working at that time.&lt;br /&gt;&lt;br /&gt;so life was good, i've used cpan2pkg quite some time to create rpms for &lt;a href="http://www.mandriva.com/"&gt;mandriva&lt;/a&gt;, and updated it till v1.0.0. however, since some time, i can see strange things in the packages submitted on upstream buildsystem: the build prereqs were not set. and i had to update the spec file manually, adding all those missing prereqs. i got tired of that, and investigated what happened.&lt;br /&gt;&lt;br /&gt;after some experiments, it appears that cpan2dist seems to have somehow changed the way it handles its &lt;span style="font-family:courier new;"&gt;--ignore&lt;/span&gt; flags. ignored modules now are removed from the prereqs completely, and thus the cpanplus::dist backend do not even see them any more. and thus, buildrequires end up empty. of course, &lt;span style="font-family:courier new;"&gt;--nobuildprereqs&lt;/span&gt; still retained its old silly behaviour...&lt;br /&gt;&lt;br /&gt;fortunately, it seems that &lt;span style="font-family:courier new;"&gt;--ban&lt;/span&gt; now works correctly (at least on 2 tests that i made). so i've just updated cpan2pkg, and version 1.1.0 should be available soon on cpan, this time really adding the needed buildrequires.&lt;br /&gt;&lt;br /&gt;till the next cpan2dist change, of course... :-|&lt;br /&gt;&lt;br /&gt;note: i don't want to sound too harsh to jos in this post... i totally understand that cpanplus is still 0.x software - moreover, this is a bug fix in my mind, since --ban was not working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-7303777815877424190?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/7303777815877424190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/cpan2dist-oddity.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7303777815877424190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/7303777815877424190'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/cpan2dist-oddity.html' title='cpan2dist oddity'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2077375033800473329</id><published>2009-06-05T17:17:00.005+02:00</published><updated>2009-06-06T21:08:11.330+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mycology'/><category scheme='http://www.blogger.com/atom/ns#' term='befunge'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>some befunge love</title><content type='html'>i took some time to review my befunge modules. trying to speed up things is always fun, so thanks to &lt;a href="http://search.cpan.org/dist/Devel-NYTProf/"&gt;devel::nytprof&lt;/a&gt;, i saw that i was spending quite some time on my debug statements.&lt;br /&gt;&lt;br /&gt;it should be noted that those statements were method calls on the main language::befunge::interpreter object. and the method then was outputing things depending on the value of a debug attribute of the interpreter. the interpreter was not used outside of this.&lt;br /&gt;&lt;br /&gt;knowing that method calls are expensive (since perl doesn't know until run-time where to find the method), i therefore created a language::befunge::debug module that exports a debug() sub. 2 other subs are provided (but not exported) to turn on/off the debug. (there's a trick here, that i will explain in another post).&lt;br /&gt;&lt;br /&gt;net result? around 20% speedup (a bit more in fact). not bad for one hour spent on the subject. :-)&lt;br /&gt;&lt;br /&gt;other than that, language::befunge tests got sanitized (using &lt;a href="http://search.cpan.org/perldoc?Test::More"&gt;test::more&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Test::Output"&gt;test::output&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Test::Exception"&gt;test::exception&lt;/a&gt; everywhere instead of crafting stuff by hand). part of this code was not touched since 2002...&lt;br /&gt;&lt;br /&gt;finally, language::befunge got some new extensions, still passing all &lt;a href="http://users.tkk.fi/%7Emniemenm/befunge/mycology-comparison.html"&gt;mycology&lt;/a&gt; tests. you can now enjoy the following in jqbef98:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#CPLI"&gt;CPLI&lt;/a&gt; - complex numbers extension&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#DIRF"&gt;DIRF&lt;/a&gt; - directory operations&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#FILE"&gt;FILE&lt;/a&gt; - file i/o operations&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#FIXP"&gt;FIXP&lt;/a&gt; - fixed point operations&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#STRN"&gt;STRN&lt;/a&gt; - string operations&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#SUBR"&gt;SUBR&lt;/a&gt; - subroutines extension&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rcfunge98.com/rcsfingers.html#TIME"&gt;TIME&lt;/a&gt; - date/time operations&lt;/li&gt;&lt;/ul&gt;some of them were pretty difficult to get right, if you forget some befunge basis (note to self: the storage offset is here for a reason, dammit!).&lt;br /&gt;&lt;br /&gt;which leaded me to update &lt;a href="http://search.cpan.org/dist/Language-Befunge-Debugger/"&gt;language::befunge::debugger&lt;/a&gt; to load mycology correctly, with a new option to run without delay till the next breakpoint. using it, things were easier to get right. still not perfect, but already more than usable...&lt;br /&gt;&lt;br /&gt;so, enjoy &lt;a href="http://search.cpan.org/dist/Language-Befunge/"&gt;language::befunge&lt;/a&gt; 4.11 and &lt;a href="http://search.cpan.org/dist/Language-Befunge-Debugger/"&gt;language::befunge::debugger&lt;/a&gt; 0.3.6, now available on cpan!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2077375033800473329?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2077375033800473329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/06/some-befunge-love.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2077375033800473329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2077375033800473329'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/06/some-befunge-love.html' title='some befunge love'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-1753641709317563643</id><published>2009-05-29T15:28:00.004+02:00</published><updated>2010-01-25T19:27:29.534+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='risk'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>image resizing in perl</title><content type='html'>perl is really versatile, and can do a lot of things. moreover, you can do it in a lot of different ways. the difficult part being sometimes to choose the way you want to do it...&lt;br /&gt;&lt;br /&gt;so i need to resize an image within perl. this is for &lt;a href="http://search.cpan.org/dist/Games-Risk/"&gt;games::risk&lt;/a&gt;, a perl implementation of the famous board game (btw, try it and tell me if you like it!). i want the background image to fit the window size on resize events. of course, i want it to be fast - but i also want something maintainable.&lt;br /&gt;&lt;br /&gt;looking on cpan, i found 3 modules: &lt;a href="http://search.cpan.org/dist/GD/"&gt;gd&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/PerlMagick/"&gt;image::magick&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/Image-Imlib2/"&gt;image::imlib2&lt;/a&gt;. using gd to resize a picture is a nightmare, therefore i ditched it for &lt;a href="http://search.cpan.org/dist/Image-Resize/"&gt;image::resize&lt;/a&gt; which is a convenient wrapper around gd.&lt;br /&gt;&lt;br /&gt;here are the needed incantations to resize:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;with imlib2&lt;/li&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt; = Image::Imlib2-&amp;gt;load&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$new&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt;-&amp;gt;create_scaled_image&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;li&gt;with image::magick - note that the operation is done inplace, so one needs to clone the image first to compare the same things.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt; = Image::Magick-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt;-&amp;gt;Read&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$new&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt;-&amp;gt;Clone;&lt;br /&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$new&lt;/span&gt;-&amp;gt;Scale&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;width=&amp;gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;, height=&amp;gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;li&gt;with image::resize&lt;/li&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt; = Image::Resize-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$new&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$old&lt;/span&gt;-&amp;gt;resize&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/ul&gt;so i benchmarked them and found that on average, image::imlib2 is a few times faster than image::magick, which is itself around the same speed or a bit faster than image::resize.&lt;br /&gt;&lt;br /&gt;however, image::imlib2 has a drawback: the only way to get back the new image is to save it to a file, where one can get the new image as a scalar directly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;image::resize with &lt;span style="font-family:courier new;"&gt;$img-&gt;jpeg&lt;/span&gt;&lt;/li&gt;&lt;li&gt;image::magick with&lt;span style="font-family:courier new;"&gt; $img-&gt;ImageToBlob&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;therefore, one must also take this into account in the benchmarking! so here's the latest version of the bench:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;use&lt;/strong&gt; 5.010;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; strict;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; warnings;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Benchmark &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;qw&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt; :all &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Image::Size;                                                                                                                                             &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Image::Resize;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Image::Imlib2;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Image::Magick;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt; = &lt;span style="color: rgb(0, 128, 0);"&gt;"src.jpg"&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$dst&lt;/span&gt; = &lt;span style="color: rgb(0, 128, 0);"&gt;"dst.jpg"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; = imgsize&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@sizes&lt;/span&gt; = &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;10,10&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;100,100&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;1000,1000&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;640,400&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;840,600&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;1024,768&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;,&lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;&lt;span style="color: rgb(176, 0, 208);"&gt;/2,$h/&lt;/span&gt;2&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;&lt;span style="color: rgb(176, 0, 208);"&gt;/4,$h/&lt;/span&gt;4&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;,&lt;span style="color: rgb(32, 64, 160);"&gt;$w&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(176, 0, 208);"&gt;/2,$w/&lt;/span&gt;2&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$h&lt;/span&gt;&lt;span style="color: rgb(176, 0, 208);"&gt;/4,$w/&lt;/span&gt;4&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$imlib2&lt;/span&gt; = Image::Imlib2-&amp;gt;load&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$resize&lt;/span&gt; = Image::Resize-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$magick&lt;/span&gt; = Image::Magick-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;; &lt;span style="color: rgb(32, 64, 160);"&gt;$magick&lt;/span&gt;-&amp;gt;Read&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$src&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;foreach&lt;/strong&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$s&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@sizes&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$width&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$height&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;@$s&lt;/span&gt;;&lt;br /&gt; say &lt;span style="color: rgb(0, 128, 0);"&gt;"-&amp;gt; &lt;span style="color: rgb(32, 64, 160);"&gt;${width}&lt;/span&gt;x&lt;span style="color: rgb(32, 64, 160);"&gt;${height}&lt;/span&gt;"&lt;/span&gt;;&lt;br /&gt; &lt;strong&gt;local&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$&lt;/span&gt;/;&lt;br /&gt;&lt;br /&gt; cmpthese&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; -3, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;     imlib2 =&amp;gt; sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;         &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$imlib2&lt;/span&gt;-&amp;gt;create_scaled_image&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$width&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$height&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt;-&amp;gt;save&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$dst&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;         &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;open&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$fh&lt;/span&gt;, &lt;span style="color: rgb(0, 128, 0);"&gt;'&amp;lt;'&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$dst&lt;/span&gt;;&lt;br /&gt;         &lt;strong&gt;return&lt;/strong&gt; &amp;lt;&lt;span style="color: rgb(32, 64, 160);"&gt;$fh&lt;/span&gt;&amp;gt;;&lt;br /&gt;     &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt;     magick =&amp;gt; sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;         &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$magick&lt;/span&gt;-&amp;gt;Clone;&lt;br /&gt;         &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt;-&amp;gt;Scale&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;width=&amp;gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$width&lt;/span&gt;,height=&amp;gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$height&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;         &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt;-&amp;gt;ImageToBlob;&lt;br /&gt;     &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt;     resize =&amp;gt; sub &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;         &lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$resize&lt;/span&gt;-&amp;gt;resize&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$width&lt;/span&gt;,&lt;span style="color: rgb(32, 64, 160);"&gt;$height&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;         &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$img&lt;/span&gt;-&amp;gt;jpeg; &lt;span style="color: rgb(68, 68, 68);"&gt;# $img-&amp;gt;png&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; say &lt;span style="color: rgb(0, 128, 0);"&gt;''&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and i was quite astonished to see that image::imlib2 is still 2 or 3 times faster that image::magick or image::resize!&lt;br /&gt;&lt;br /&gt;so, imlib2 may not the best api around, but sure it's fast...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-1753641709317563643?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/1753641709317563643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/05/image-resizing-in-perl.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1753641709317563643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/1753641709317563643'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/05/image-resizing-in-perl.html' title='image resizing in perl'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-3159591233190705947</id><published>2009-05-22T13:18:00.003+02:00</published><updated>2009-06-06T21:03:26.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanplus'/><title type='text'>rationalizing perl module versions</title><content type='html'>versioning sucks. nobody agrees on what version numbers should look like. everybody has some good reasons not to like a given scheme. and i would say that everybody is right - at least from their point of view.&lt;br /&gt;&lt;br /&gt;if you throw in the way that perl deals with &lt;a href="http://search.cpan.org/perldoc?version"&gt;version&lt;/a&gt; (used by cpan and cpanplus), you add more fuzzyness to the whole thing. eg, 1.40 is supposed to be more recent than 1.300 (yes, 1.40 is understood as 1.400). and i won't even talk of digits 3 to 6, or developer releases...&lt;br /&gt;&lt;br /&gt;add to that developers who change their versioning scheme every now and then, or the ones who knows the way perl works and use 2 or 3 digits after the dot (yes &lt;a href="http://search.cpan.org/dist/Module-Starter/"&gt;module::starter&lt;/a&gt;, i'm staring at you - but you're not the only one)...&lt;br /&gt;&lt;br /&gt;yup, versioning is a nightmare for packagers. this sucks.&lt;br /&gt;&lt;br /&gt;so, after some time bugging mandriva admins, we finally have a shiny rpm macro %perl_convert_version that normalizes perl versions to a x.y.z scheme. here is its content for whoever is interested:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;perl -Mversion -le '$v=version-&gt;new(%{1})-&gt;normal; $v=~s/^v//; print $v'&lt;/blockquote&gt;&lt;br /&gt;and we're going to use it on all perl modules packaged by &lt;a href="http://mandriva.com"&gt;mandriva&lt;/a&gt;. yes, this means that the rpm version will potentially be different than the upstream version on cpan. but that's the price to pay to have rpm and other non-perl aware tools to work correctly.&lt;br /&gt;&lt;br /&gt;for the migration to be as smooth as possible, the following needs to be done:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;push the rpm macro on mandriva build system. done.&lt;/li&gt;&lt;li&gt;fix cpanplus::dist::mdv to use it.&lt;/li&gt;&lt;li&gt;update youri's update check to recognize it.&lt;/li&gt;&lt;li&gt;update mdvsys to recognize it during mdvsys update.&lt;/li&gt;&lt;li&gt;fix our perl packages spec files.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;in order to move on, i'm therefore happy to announce that &lt;a href="http://search.cpan.org/dist/CPANPLUS-Dist-Mdv/"&gt;cpanplus::dist::mdv&lt;/a&gt; 1.1.0 has been released, which (among other changes), now uses the rpm macro %perl_convert_version. that's one ticked off the list. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-3159591233190705947?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/3159591233190705947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/05/rationalizing-perl-module-versions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3159591233190705947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/3159591233190705947'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/05/rationalizing-perl-module-versions.html' title='rationalizing perl module versions'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6162910877268067002.post-2580080800434631150</id><published>2009-05-17T12:23:00.003+02:00</published><updated>2009-06-06T21:03:26.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpan2dist'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='dist'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan2pkg'/><title type='text'>cpan2pkg reaches maturity</title><content type='html'>i finally took some time to work on app::cpan2pkg - and i'm happy to report that it now chains upstream builds, which means that all basic features are in.&lt;br /&gt;&lt;br /&gt;therefore, i just released &lt;a href="http://search.cpan.org/dist/App-CPAN2Pkg/"&gt;app::cpan2pkg&lt;/a&gt; 1.0.0 on cpan. detailed changelog:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;updating prereqs + moving on when module installed from upstream&lt;/li&gt;&lt;li&gt;splitted module in poe session + worker&lt;/li&gt;&lt;li&gt;moved info from app:cpan2pkg to module attributes&lt;/li&gt;&lt;li&gt;don't submit on upstream build-system if missing prereqs on it&lt;/li&gt;&lt;li&gt;cpan2pkg documentation written&lt;/li&gt;&lt;/ul&gt;yes, cpan2pkg can build, install, import and automatically build packages from &lt;a href="http://search.cpan.org"&gt;cpan&lt;/a&gt; for linux, while following dependencies. does it work? sure, i already used it successfully.&lt;br /&gt;&lt;br /&gt;note however that there are some caveats...&lt;br /&gt;&lt;br /&gt;the first one of course is that it only supports &lt;a href="http://www.mandriva.com"&gt;mandriva&lt;/a&gt; currently. this is not a fatality, i expect other distributions (and why not other platforms such as *bsd or solaris) to be handled later on if they want. after all, i'm using cpan2dist underneath to generate the packages, and there exist some backends besides &lt;a href="http://search.cpan.org/dist/CPANPLUS-Dist-Mdv/"&gt;cpanplus::dist::mdv&lt;/a&gt;. if you're interested, here's the &lt;a href="http://repo.or.cz/w/app-cpan2pkg.git"&gt;git repository&lt;/a&gt; - and i'm ready to give push rights. heck, if you insist i might even agree to move to &lt;a href="http://github.com"&gt;github&lt;/a&gt; which seems to have all the hype those days.&lt;br /&gt;&lt;br /&gt;the second one is that the interface is rather ugly and has a lot of rough edges. i'm waiting for dams to continue his &lt;a href="http://damien.krotkine.com/blog/2009/05/cursestoolkit-part-4-1.html"&gt;work on curses::toolkit&lt;/a&gt;, so i can drop curses::ui::poe. i might also provide a tk or wx version at some point. in the meantime, you have to know the application a bit to understand what's going on. i intend to polish it later on.&lt;br /&gt;&lt;br /&gt;finally, the code can be cleaned - but you don't care as a user.&lt;br /&gt;&lt;br /&gt;so, that's it. cpan2pkg is live... enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6162910877268067002-2580080800434631150?l=jquelin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jquelin.blogspot.com/feeds/2580080800434631150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jquelin.blogspot.com/2009/05/cpan2pkg-reaches-maturity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2580080800434631150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6162910877268067002/posts/default/2580080800434631150'/><link rel='alternate' type='text/html' href='http://jquelin.blogspot.com/2009/05/cpan2pkg-reaches-maturity.html' title='cpan2pkg reaches maturity'/><author><name>Jérôme Quelin</name><uri>http://www.blogger.com/profile/18298636285366492379</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
