<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-23855943</id><updated>2009-07-11T14:24:58.940+08:00</updated><title type="text">Fayland and Perl Programming</title><subtitle type="html">Perl is not the whole part of life. I know!</subtitle><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default?start-index=26&amp;max-results=25" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.fayland.org/atom.xml" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>222</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://www.fayland.org/atom.xml" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-23855943.post-6243287755627034946</id><published>2009-07-11T14:21:00.002+08:00</published><updated>2009-07-11T14:24:58.951+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><title type="text">a module started with O</title><content type="html">&lt;a href="http://search.cpan.org/dist/ORDB-Unihan/"&gt;ORDB::Unihan&lt;/a&gt; - An ORM for the published Unihan database&lt;br /&gt;&lt;br /&gt;a mixin of ORLite and Unihan database. the original unihan database is txt based, and this one is sqlite.&lt;br /&gt;even if you don't want to use ORLite, you still can use the Unihan.sqlite by ORDB::Unihan-&gt;sqlite_path();&lt;br /&gt;&lt;br /&gt;bla bla, not sure how useful it is. just for fun.&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-6243287755627034946?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/6243287755627034946/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=6243287755627034946" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/6243287755627034946" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/6243287755627034946" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/07/module-started-with-o.html" title="a module started with O" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-2857239919257342557</id><published>2009-06-17T13:12:00.002+08:00</published><updated>2009-06-17T13:17:14.868+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="DBIx-Class" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><title type="text">QueryLog support for Catalyst::Model::DBIC::Schema</title><content type="html">well, I wrote &lt;a href="http://search.cpan.org/perldoc?Catalyst::Model::DBIC::Schema::QueryLog"&gt;Catalyst::Model::DBIC::Schema::QueryLog &lt;/a&gt; before. it's fine. it works.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://search.cpan.org/~mstrout/'&gt;mst&lt;/a&gt; released the new &lt;a href="http://search.cpan.org/~mstrout/Catalyst-Model-DBIC-Schema-0.24/"&gt;Catalyst::Model::DBIC::Schema&lt;/a&gt; today. built on top of Moose, with two traits: Caching and Replicated.&lt;br /&gt;It reminds me to write &lt;a href="http://search.cpan.org/perldoc?Catalyst::TraitFor::Model::DBIC::Schema::QueryLog"&gt;Catalyst::TraitFor::Model::DBIC::Schema::QueryLog&lt;/a&gt;&lt;br /&gt;trait is great. easy to read, configurable and sane.&lt;br /&gt;&lt;br /&gt;Enjoy. Thanks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-2857239919257342557?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/2857239919257342557/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2857239919257342557" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2857239919257342557" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2857239919257342557" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/06/querylog-support-for.html" title="QueryLog support for Catalyst::Model::DBIC::Schema" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4043743372925876399</id><published>2009-05-27T11:08:00.001+08:00</published><updated>2009-05-27T11:11:07.663+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Zorpia" /><category scheme="http://www.blogger.com/atom/ns#" term="talk" /><title type="text">DBIx-Class talk</title><content type="html">I just gave a DBIx-Class talk on the annual meeting of &lt;a href="http://www.zorpia.com/"&gt;Zorpia&lt;/a&gt; 1 hour ago. it's not a success one, but I still want to share with you. check:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fayland.org/talks/2009_Zorpia_DBIx_Class/dbix-class.xul"&gt;http://www.fayland.org/talks/2009_Zorpia_DBIx_Class/dbix-class.xul&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy, Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4043743372925876399?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4043743372925876399/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4043743372925876399" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4043743372925876399" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4043743372925876399" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/dbix-class-talk.html" title="DBIx-Class talk" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-1506373796620222825</id><published>2009-05-24T07:48:00.004+08:00</published><updated>2009-05-24T07:57:13.743+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Padre" /><title type="text">manage Task::Padre::Plugins with ORDB::CPANTS</title><content type="html">To update a Task:: module is not so hard but trivial. you need find out the new version of existing modules, and those haven't added yet.&lt;br /&gt;well, do it manually is not so Perl-ish. we have Perl, we should do it automatically by running a script.&lt;br /&gt;&lt;br /&gt;it's pretty good we have &lt;a href="http://search.cpan.org/perldoc?ORDB::CPANTS"&gt;ORDB::CPANTS&lt;/a&gt; from &lt;a href="http://ali.as/"&gt;Alias&lt;/a&gt;.&lt;br /&gt;1, we get all plugins by ORDB::CPANTS through used_by&lt;br /&gt;2, split them into requires and feature.&lt;br /&gt;3, get the META info through YAML::LoadURI&lt;br /&gt;4, generate the main part of Makefile.PL and Plugins.pm&lt;br /&gt;&lt;br /&gt;you can find the code here: &lt;a href="http://svn.perlide.org/padre/trunk/Task-Padre-Plugins/auto_generate.pl"&gt;http://svn.perlide.org/padre/trunk/Task-Padre-Plugins/auto_generate.pl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I know I can generate Makefile.PL and Plugins.pm directly, but it's good enough for now.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-1506373796620222825?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/1506373796620222825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=1506373796620222825" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/1506373796620222825" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/1506373796620222825" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/manage-taskpadreplugins-with-ordbcpants.html" title="manage Task::Padre::Plugins with ORDB::CPANTS" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-7726197058749325084</id><published>2009-05-22T18:07:00.002+08:00</published><updated>2009-05-22T18:10:34.270+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="trip" /><title type="text">Xi'an trip next week</title><content type="html">We (&lt;a href="http://www.zorpia.cn/"&gt;Zorpia&lt;/a&gt; people) will hold an annual meeting next week in Xi'an.&lt;br /&gt;It would be a lot of fan that I'll play basketball during the trip. 24 people from 4 different countries/regions.&lt;br /&gt;&lt;br /&gt;if you're nearby, please drop by if you like it.&lt;br /&gt;&lt;br /&gt;Thanks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-7726197058749325084?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/7726197058749325084/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=7726197058749325084" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/7726197058749325084" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/7726197058749325084" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/xian-trip-next-week.html" title="Xi'an trip next week" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-1618587962221084600</id><published>2009-05-19T11:42:00.002+08:00</published><updated>2009-05-19T11:52:47.314+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="github" /><title type="text">github instead of google code</title><content type="html">yes. I do love &lt;a href="http://github.com/fayland"&gt;github&lt;/a&gt; more than &lt;a href="http://code.google.com/u/fayland/"&gt;google code&lt;/a&gt;. it's not the problem of git or svn. svn is fine.&lt;br /&gt;&lt;br /&gt;the point is participation.&lt;br /&gt;In google code, it's very hard to contribute some code to one project if you're not the author. it disappoints me a lot.&lt;br /&gt;The "fork" button in github is very helpful. people forked my repos then pull requests to ask me to merge (like perl-net-github, dist-zilla-plugin-repository). I forked someone's repos then pull back (like theschwartz-moosified, dist-zilla, git-pureperl etc).&lt;br /&gt;&lt;br /&gt;it's awesome. go start using github right now. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-1618587962221084600?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/1618587962221084600/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=1618587962221084600" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/1618587962221084600" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/1618587962221084600" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/github-instead-of-google-code.html" title="github instead of google code" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-2287501186145763045</id><published>2009-05-19T09:53:00.001+08:00</published><updated>2009-05-19T09:54:43.840+08:00</updated><title type="text">SuperCollider Programming</title><content type="html">what the hell is &lt;a href="http://use.perl.org/~Alias/journal/38991"&gt;SuperCollider Programming&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;I'm glad that my blog is "Fayland and Perl Programming".&lt;br /&gt;&lt;br /&gt;also I hate that blogger.com is blocked in China again. STUPID.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-2287501186145763045?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/2287501186145763045/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2287501186145763045" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2287501186145763045" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2287501186145763045" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/supercollider-programming.html" title="SuperCollider Programming" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-3046972906993221885</id><published>2009-05-12T06:28:00.002+08:00</published><updated>2009-05-12T06:35:11.565+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DBIx-Class" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><category scheme="http://www.blogger.com/atom/ns#" term="TheSchwartz" /><title type="text">DBIx::Class::ResultSet::Void and TheSchwartz::Moosified</title><content type="html">Big thanks to &lt;a href="http://search.cpan.org/~ribasushi/"&gt;ribasushi&lt;/a&gt;, the new &lt;a href="http://search.cpan.org/perldoc?DBIx::Class::ResultSet::Void"&gt;DBIx::Class::ResultSet::Void 0.04&lt;/a&gt; is using&lt;br /&gt;    # SELECT 1 FROM item me WHERE ( me.id = ? ) LIMIT 1: '1'&lt;br /&gt;    # INSERT INTO item ( id, name) VALUES ( ?, ? ): '1', 'A'&lt;br /&gt;instead of COUNT(*). it's much faster now.&lt;br /&gt;&lt;br /&gt;Another big thanks to &lt;a href="http://search.cpan.org/~stash/"&gt;stash&lt;/a&gt; from &lt;a href="http://www.socialtext.com/"&gt;socialtext&lt;/a&gt;, &lt;a href="http://search.cpan.org/~stash/TheSchwartz-Moosified-0.04/"&gt;TheSchwartz::Moosified&lt;/a&gt; 0.04 with PostgreSQL support and bug fixes.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-3046972906993221885?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/3046972906993221885/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=3046972906993221885" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/3046972906993221885" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/3046972906993221885" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/dbixclassresultsetvoid-and.html" title="DBIx::Class::ResultSet::Void and TheSchwartz::Moosified" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-3900129859369442839</id><published>2009-05-10T20:13:00.003+08:00</published><updated>2009-05-10T20:18:02.428+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DBIx-Class" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><title type="text">DBIx::Class::ResultSet::Void</title><content type="html">some time I'm really feeling sick when I use update_or_create or find_or_create, the default DBIx::Class::ResultSet return DBIx::Class::Row object by using &lt;b&gt;find&lt;/b&gt;.&lt;br /&gt;it's useful when I need the $row object, but it's dummy if I don't care.&lt;br /&gt;&lt;br /&gt;I wrote &lt;a href="http://search.cpan.org/perldoc?DBIx::Class::ResultSet::Void"&gt;DBIx::Class::ResultSet::Void&lt;/a&gt; today. It would use &lt;b&gt;count&lt;/b&gt; instead of find if not defined wantarray. it means when I call&lt;br /&gt;    $rs-&gt;find_or_create( { id =&gt; 1, name =&gt; 'A' } );&lt;br /&gt;instead of&lt;br /&gt;    my $row = $rs-&gt;find_or_create( { id =&gt; 1, name =&gt; 'A' } );&lt;br /&gt;it would generate SQLs like:&lt;br /&gt;    # SELECT COUNT( * ) FROM item me WHERE ( me.id = ? ): '1'&lt;br /&gt;    # INSERT INTO item ( id, name) VALUES ( ?, ? ): '1', 'A'&lt;br /&gt;it's a little better I think.&lt;br /&gt;&lt;br /&gt;read more on the &lt;a href="http://search.cpan.org/perldoc?DBIx::Class::ResultSet::Void"&gt;POD&lt;/a&gt; and Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-3900129859369442839?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/3900129859369442839/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=3900129859369442839" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/3900129859369442839" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/3900129859369442839" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/dbixclassresultsetvoid.html" title="DBIx::Class::ResultSet::Void" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4769297606020138147</id><published>2009-05-07T19:45:00.002+08:00</published><updated>2009-05-07T19:50:29.033+08:00</updated><title type="text">what am I looking forward today</title><content type="html">&lt;a href="http://www.apress.com/book/view/1430223650"&gt;The Definitive Guide to Catalyst: Writing Extendable, Scalable and Maintainable Perl–Based Web Applications&lt;/a&gt; by Kieren Diment and Matt Trout.&lt;br /&gt;&lt;br /&gt;I don't know which month will it be released, but I'm really looking forward to it. :)&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4769297606020138147?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4769297606020138147/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4769297606020138147" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4769297606020138147" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4769297606020138147" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/whats-looking-forward-today.html" title="what am I looking forward today" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-198792509844545070</id><published>2009-05-05T19:48:00.002+08:00</published><updated>2009-05-05T19:53:09.182+08:00</updated><title type="text">irc log</title><content type="html">I didn't know that keep a public irc log is wrong until mst pointed it to me today.&lt;br /&gt;Sorry for any trouble caused and it's private now.&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-198792509844545070?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/198792509844545070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=198792509844545070" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/198792509844545070" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/198792509844545070" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/05/irc-log.html" title="irc log" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-6761233685586695064</id><published>2009-04-29T06:34:00.002+08:00</published><updated>2009-04-29T06:39:42.673+08:00</updated><title type="text">new DayDayUp</title><content type="html">inspired by jrock's &lt;a href="http://blog.jrock.us/articles/Multimethods.pod"&gt;Multimethods&lt;/a&gt; and &lt;a href="http://blog.jrock.us/articles/Unshortening%20URLs%20with%20Modern%20Perl.pod"&gt;Unshortening URLs with Modern Perl&lt;/a&gt;, I decided to rewrite my &lt;a href="http://search.cpan.org/dist/DayDayUp/"&gt;DayDayUp&lt;/a&gt; CPAN module.&lt;br /&gt;&lt;br /&gt;it's really very cool to write code with &lt;a href="http://search.cpan.org/dist/KiokuDB/"&gt;KiokuDB&lt;/a&gt; and &lt;a href="http://search.cpan.org/dist/MooseX-Declare/"&gt;MooseX::Declare&lt;/a&gt;. less code. more focus on real.&lt;br /&gt;I'm planing to write more, but it's for now.&lt;br /&gt;&lt;br /&gt;even it fails on Win32, it's still worth to try. :)&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-6761233685586695064?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/6761233685586695064/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=6761233685586695064" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/6761233685586695064" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/6761233685586695064" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/04/new-daydayup.html" title="new DayDayUp" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4388035624250026600</id><published>2009-04-28T08:03:00.001+08:00</published><updated>2009-04-28T08:03:33.430+08:00</updated><title type="text">planet you can't miss today</title><content type="html">&lt;a href="http://ironman.enlightenedperl.org/"&gt;http://ironman.enlightenedperl.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4388035624250026600?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4388035624250026600/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4388035624250026600" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4388035624250026600" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4388035624250026600" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/04/planet-you-cant-miss-today.html" title="planet you can't miss today" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4156531088715580696</id><published>2009-04-21T15:50:00.002+08:00</published><updated>2009-04-21T15:54:55.342+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><title type="text">CPAN updates</title><content type="html">I spent lots of time to write CPAN module in past two days. it's not so fun but enjoyable.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/App-GitHub/"&gt;App::GitHub&lt;/a&gt; - 8 dists 3 days.&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-MetaResources/"&gt;Dist::Zilla::Plugin::MetaResources&lt;/a&gt; - DEPERCATED, it will be supported in Dist::Zilla core.&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-Repository/"&gt;Dist::Zilla::Plugin::Repository&lt;/a&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/Net-GitHub/"&gt;Net::GitHub&lt;/a&gt; - also 8 dists 3 days.&lt;br /&gt;&lt;br /&gt;To write a CPAN module is really not so hard. please go on and enjoy it.&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4156531088715580696?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4156531088715580696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4156531088715580696" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4156531088715580696" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4156531088715580696" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/04/cpan-updates.html" title="CPAN updates" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-5334624082417403442</id><published>2009-04-20T20:25:00.002+08:00</published><updated>2009-04-20T20:29:42.795+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="github" /><title type="text">App::GitHub</title><content type="html">well, &lt;a href="http://search.cpan.org/dist/App-GitHub/"&gt;App::GitHub&lt;/a&gt; is a command line tool wrapped by &lt;a href="http://search.cpan.org/dist/Net-GitHub/"&gt;Net::GitHub&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;for a brief view:&lt;br /&gt;$&gt; github.pl&lt;br /&gt;&lt;br /&gt;Welcome to GitHub Command Tools! (Ver: 0.04)&lt;br /&gt;Type '?' or 'h' for help.&lt;br /&gt;&lt;br /&gt;github&gt; ?&lt;br /&gt; command  argument          description&lt;br /&gt; repo     :user :repo       set owner/repo, eg: 'fayland perl-app-github'&lt;br /&gt; login    :login :token     authenticated as :login&lt;br /&gt; loadcfg                    authed by git config --global github.user|token&lt;br /&gt; ?,h                        help&lt;br /&gt; q,exit,quit                exit&lt;br /&gt;&lt;br /&gt;Repos&lt;br /&gt; rshow                      more in-depth information for the :repo in repo&lt;br /&gt; rlist                      list out all the repositories for the :user in repo&lt;br /&gt; rsearch  WORD              Search Repositories&lt;br /&gt; watch                      watch repositories (authentication required)&lt;br /&gt; unwatch                    unwatch repositories (authentication required)&lt;br /&gt; fork                       fork a repository (authentication required)&lt;br /&gt; create                     create a new repository (authentication required)&lt;br /&gt; delete                     delete a repository (authentication required)&lt;br /&gt; set_private                set a public repo private (authentication required)&lt;br /&gt; set_public                 set a private repo public (authentication required)&lt;br /&gt; network                    see all the forks of the repo&lt;br /&gt; tags                       tags on the repo&lt;br /&gt; branches                   list of remote branches&lt;br /&gt;&lt;br /&gt;Issues&lt;br /&gt; ilist    open|closed       see a list of issues for a project&lt;br /&gt; iview    :number           get data on an individual issue by number&lt;br /&gt; iopen                      open a new issue (authentication required)&lt;br /&gt; iclose   :number           close an issue (authentication required)&lt;br /&gt; ireopen  :number           reopen an issue (authentication required)&lt;br /&gt; iedit    :number           edit an issue (authentication required)&lt;br /&gt; ilabel   add|remove :num :label&lt;br /&gt;                            add/remove a label (authentication required)&lt;br /&gt;&lt;br /&gt;File/Path related&lt;br /&gt; cd       PATH              chdir to PATH&lt;br /&gt;&lt;br /&gt;Others&lt;br /&gt; rshow    :user :repo       more in-depth information for a repository&lt;br /&gt; rlist    :user             list out all the repositories for a user&lt;br /&gt;&lt;br /&gt;github&gt; loadcfg&lt;br /&gt;&lt;br /&gt;github&gt; repo fayland perl-app-github&lt;br /&gt;&lt;br /&gt;fayland/perl-app-github&gt; rshow&lt;br /&gt;{&lt;br /&gt;   "owner" : "fayland",&lt;br /&gt;   "private" : false,&lt;br /&gt;   "name" : "perl-app-github",&lt;br /&gt;   "description" : "App::GitHub CPAN module",&lt;br /&gt;   "homepage" : "",&lt;br /&gt;   "watchers" : 2,&lt;br /&gt;   "forks" : 0,&lt;br /&gt;   "fork" : false,&lt;br /&gt;   "url" : "http://github.com/fayland/perl-app-github"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fayland/perl-app-github&gt; repo fayland sandbox2&lt;br /&gt;&lt;br /&gt;fayland/sandbox2&gt; ilist&lt;br /&gt;[&lt;br /&gt;   {&lt;br /&gt;      "number" : 1,&lt;br /&gt;      "position" : 1,&lt;br /&gt;      "state" : "open",&lt;br /&gt;      "body" : "Test Issue body.",&lt;br /&gt;      "created_at" : "2009/04/19 06:08:30 -0700",&lt;br /&gt;      "updated_at" : "2009/04/19 06:09:17 -0700",&lt;br /&gt;      "user" : "fayland",&lt;br /&gt;      "title" : "Test Issue",&lt;br /&gt;      "votes" : 0&lt;br /&gt;   },&lt;br /&gt;   {&lt;br /&gt;      "number" : 2,&lt;br /&gt;      "position" : 2,&lt;br /&gt;      "state" : "open",&lt;br /&gt;      "body" : "new test 3\nnew test 2",&lt;br /&gt;      "created_at" : "2009/04/19 18:44:49 -0700",&lt;br /&gt;      "updated_at" : "2009/04/19 18:50:44 -0700",&lt;br /&gt;      "user" : "fayland",&lt;br /&gt;      "title" : "new test 2",&lt;br /&gt;      "votes" : 0&lt;br /&gt;   },&lt;br /&gt;   {&lt;br /&gt;      "number" : 3,&lt;br /&gt;      "position" : 3,&lt;br /&gt;      "state" : "open",&lt;br /&gt;      "body" : "s",&lt;br /&gt;      "created_at" : "2009/04/19 18:51:17 -0700",&lt;br /&gt;      "updated_at" : "2009/04/19 18:51:31 -0700",&lt;br /&gt;      "user" : "fayland",&lt;br /&gt;      "title" : "sssssssss",&lt;br /&gt;      "votes" : 0&lt;br /&gt;   }&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;fayland/sandbox2&gt; q&lt;br /&gt;&lt;br /&gt;for now, there are ONLY repos and issue related command. but I would add more in next few days.&lt;br /&gt;&lt;br /&gt;Thanks and Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-5334624082417403442?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/5334624082417403442/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=5334624082417403442" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/5334624082417403442" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/5334624082417403442" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/04/appgithub.html" title="App::GitHub" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-2927125820944654745</id><published>2009-04-19T12:50:00.002+08:00</published><updated>2009-04-19T12:55:11.248+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="github" /><category scheme="http://www.blogger.com/atom/ns#" term="Net-GitHub" /><title type="text">Net::GitHub 0.06</title><content type="html">github just released its &lt;a href="http://develop.github.com/"&gt;V2 API&lt;/a&gt; version days ago, I spent some hours to update the &lt;a href="http://search.cpan.org/dist/Net-GitHub/"&gt;Net::GitHub&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;it's really not a fun to both support V1 and V2 on the same time, I mean some code like follows:&lt;pre&gt;&lt;code&gt;use Net::GitHub;&lt;br /&gt;my $g2 = Net::GitHub-&gt;new( version =&gt; 2 ); # use Net::GitHub::V2&lt;br /&gt;my $g2 = Net::GitHub-&gt;new( version =&gt; 1 ); # use Net::GitHub::V1&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;after a nice sleep, I come out a solution like:&lt;pre&gt;&lt;code&gt;package Net::GitHub;&lt;br /&gt;&lt;br /&gt;use Moose;&lt;br /&gt;&lt;br /&gt;our $VERSION = '0.06';&lt;br /&gt;our $AUTHORITY = 'cpan:FAYLAND';&lt;br /&gt;&lt;br /&gt;sub new {&lt;br /&gt;    my $class = shift;&lt;br /&gt;    my $params = $class-&gt;BUILDARGS(@_);&lt;br /&gt;&lt;br /&gt;    my $obj;&lt;br /&gt;    if ( $params-&gt;{version} == 1 ) {&lt;br /&gt;        require Net::GitHub::V1;&lt;br /&gt;        $obj = Net::GitHub::V1-&gt;new($params);&lt;br /&gt;    } else {&lt;br /&gt;        require Net::GitHub::V2;&lt;br /&gt;        $obj = Net::GitHub::V2-&gt;new($params);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return $class-&gt;meta-&gt;new_object(&lt;br /&gt;        __INSTANCE__ =&gt; $obj,&lt;br /&gt;        @_,&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;no Moose;&lt;br /&gt;__PACKAGE__-&gt;meta-&gt;make_immutable;&lt;br /&gt;&lt;br /&gt;1;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;maybe there is a better way, but it works at least for now.&lt;br /&gt;&lt;br /&gt;Thanks and enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-2927125820944654745?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/2927125820944654745/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2927125820944654745" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2927125820944654745" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2927125820944654745" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/04/netgithub-006.html" title="Net::GitHub 0.06" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-2680198210408585732</id><published>2009-04-05T15:57:00.003+08:00</published><updated>2009-04-05T16:03:59.076+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Dist-Zilla" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><title type="text">Dist::Zilla::Plugin::PerlTidy</title><content type="html">I just uploaded the &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-PerlTidy/"&gt;Dist-Zilla-Plugin-PerlTidy&lt;/a&gt; to CPAN today.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/Dist-Zilla/"&gt;Dist::Zilla&lt;/a&gt; is a distribution builder. with it, you can write less, maintain less files. which means less bugs.&lt;br /&gt;for more information, you can check the slides: &lt;a href="http://www.slideshare.net/rjbs/distzilla-presentation"&gt;http://www.slideshare.net/rjbs/distzilla-presentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dist-Zilla-Plugin-PerlTidy contains two parts.&lt;br /&gt;one is the App Command, &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-PerlTidy/lib/Dist/Zilla/App/Command/perltidy.pm"&gt;Dist::Zilla::App::Command::perltidy&lt;/a&gt;, which let you perltidy your real code.&lt;br /&gt;the other one is the Plugin, &lt;a href="http://search.cpan.org/dist/Dist-Zilla-Plugin-PerlTidy/lib/Dist/Zilla/Plugin/PerlTidy.pm"&gt;Dist::Zilla::Plugin::PerlTidy&lt;/a&gt;. it doesn't affect your working code, it just perltidy the code for release (which means included in the tar.gz)&lt;br /&gt;&lt;br /&gt;the code is simple, but it's useful.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-2680198210408585732?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/2680198210408585732/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2680198210408585732" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2680198210408585732" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2680198210408585732" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/04/distzillapluginperltidy.html" title="Dist::Zilla::Plugin::PerlTidy" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-2067897281308334360</id><published>2009-03-18T06:13:00.002+08:00</published><updated>2009-03-18T06:31:22.520+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache" /><title type="text">Apache Tip: AddType</title><content type="html">see I setup a &lt;a href="http://code.fayland.org/"&gt;http://code.fayland.org/&lt;/a&gt; for code review. then I want to show plain text for pl file like Makefile.PL&lt;br /&gt;but by default, it's handled by perl. and it shows a 500 error in browser.&lt;br /&gt;&lt;br /&gt;with the dreamhost support, I create a .htaccess like&lt;pre&gt;&lt;code&gt;&lt;br /&gt;RemoveHandler .pl .PL .t .html&lt;br /&gt;AddType text/plain .pl .PL .t .html&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and it works!&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-2067897281308334360?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/2067897281308334360/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2067897281308334360" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2067897281308334360" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/2067897281308334360" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/03/apache-tip-addtype.html" title="Apache Tip: AddType" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-5076650244851128474</id><published>2009-03-13T13:26:00.002+08:00</published><updated>2009-03-13T13:50:10.420+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gitstore" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title type="text">GitStore</title><content type="html">I just released another module &lt;a href="http://search.cpan.org/dist/GitStore/"&gt;http://search.cpan.org/dist/GitStore/&lt;/a&gt; this morning.&lt;br /&gt;&lt;br /&gt;GitStore - Git as versioned data store in Perl&lt;pre&gt;&lt;code&gt;use GitStore;&lt;br /&gt;&lt;br /&gt;my $gs = GitStore-&gt;new('/path/to/repo');&lt;br /&gt;$gs-&gt;store( 'users/obj.txt', $obj );&lt;br /&gt;$gs-&gt;store( ['config', 'wiki.txt'], { hash_ref =&gt; 1 } );&lt;br /&gt;$gs-&gt;commit();&lt;br /&gt;$gs-&gt;store( 'yyy/xxx.log', 'Log me' );&lt;br /&gt;$gs-&gt;discard();&lt;br /&gt;&lt;br /&gt;# later or in another pl&lt;br /&gt;my $val = $gs-&gt;get( 'user/obj.txt' ); # $val is the same as $obj&lt;br /&gt;my $val = $gs-&gt;get( 'config/wiki.txt' ); # $val is { hashref =&gt; 1 } );&lt;br /&gt;my $val = $gs-&gt;get( ['yyy', 'xxx.log' ] ); # $val is undef since discard&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;for now, it requires the Git::PurePerl master code. you must git clone it from http://github.com/acme/git-pureperl/tree/master and install into your local dir.&lt;br /&gt;&lt;br /&gt;The git repo is &lt;a href="http://github.com/fayland/perl-git-store/tree/master"&gt;http://github.com/fayland/perl-git-store/tree/master&lt;/a&gt;&lt;br /&gt;welcome to fork it and submit any patches.&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-5076650244851128474?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/5076650244851128474/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=5076650244851128474" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/5076650244851128474" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/5076650244851128474" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/03/gitstore.html" title="GitStore" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-9134352009447395879</id><published>2009-03-08T13:41:00.002+08:00</published><updated>2009-03-08T13:46:14.316+08:00</updated><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="Net-GitHub" /><title type="text">Net::GitHub</title><content type="html">I just released the new &lt;a href="http://search.cpan.org/dist/Net-GitHub/"&gt;http://search.cpan.org/dist/Net-GitHub/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;it's basically a Perl interface to github.com which is the most popular git host in the world. &lt;a href="http://github.com/github/perl/"&gt;perl5&lt;/a&gt;'s source and perl6's &lt;a href="http://github.com/rakudo/rakudo/"&gt;rakudo&lt;/a&gt; source are there too.&lt;br /&gt;&lt;br /&gt;I'm starting to like git and I put my code there too.&lt;br /&gt;be inspired by Net::Google::Code, I created the &lt;a href="http://github.com/fayland/perl-net-github/tree/master"&gt;http://github.com/fayland/perl-net-github/tree/master&lt;/a&gt;&lt;br /&gt;everyone is welcome to fork it then pull request back to me.&lt;br /&gt;&lt;br /&gt;Thanks very much, Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-9134352009447395879?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/9134352009447395879/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=9134352009447395879" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/9134352009447395879" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/9134352009447395879" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/03/netgithub.html" title="Net::GitHub" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-1782116021004434577</id><published>2009-03-07T12:01:00.002+08:00</published><updated>2009-03-07T16:09:33.403+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title type="text">note: github and Win32</title><content type="html">when author is unknown, you need set&lt;br /&gt;E:\Fayland\perl-net-github&gt;git config --global user.name "fayland"&lt;br /&gt;E:\Fayland\perl-net-github&gt;git config --global user.email fayland@gmail.com&lt;br /&gt;&lt;br /&gt;just a note.&lt;br /&gt;&lt;br /&gt;if more than one master, you need&lt;br /&gt;git config branch.master.remote origin&lt;br /&gt;git config branch.master.merge refs/heads/master &lt;br /&gt;from &lt;a href="http://snippets.dzone.com/posts/show/5714"&gt;http://snippets.dzone.com/posts/show/5714&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;another note.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-1782116021004434577?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/1782116021004434577/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=1782116021004434577" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/1782116021004434577" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/1782116021004434577" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/03/note-github-and-win32.html" title="note: github and Win32" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4553344945005749136</id><published>2009-02-23T15:04:00.002+08:00</published><updated>2009-02-23T15:10:26.621+08:00</updated><title type="text">Perl tip: can returns coderef</title><content type="html">well, I just released the &lt;a href="http://search.cpan.org/perldoc?MooseX::Dumper"&gt;MooseX::Dumper&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/~miyagawa/"&gt;miyagawa&lt;/a&gt; on irc.perl.org #moose just told me that -&gt;can() returns the coderef, so that I don't need to do follows:&lt;pre&gt;&lt;code&gt;        if ( $self-&gt;dumper_class-&gt;can($meth) ) {&lt;br /&gt;            my $class = $self-&gt;dumper_class;&lt;br /&gt;            my $val = eval "${class}::${meth}(\@_)"; # no critic&lt;br /&gt;            return $val;&lt;br /&gt;        }&lt;/code&gt;&lt;/pre&gt;Instead, just do:&lt;pre&gt;&lt;code&gt;        if ( my $dump_code = $self-&gt;dumper_class-&gt;can($meth) ) {&lt;br /&gt;            return $dump_code-&gt;(@_);&lt;br /&gt;        }&lt;/code&gt;&lt;/pre&gt;Yup, much more simpler and cleaner.&lt;br /&gt;&lt;br /&gt;Thanks, miyagawa. 0.02 is on the way. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4553344945005749136?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4553344945005749136/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4553344945005749136" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4553344945005749136" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4553344945005749136" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/02/perl-tip-can-returns-coderef.html" title="Perl tip: can returns coderef" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4021492160114533470</id><published>2009-02-22T23:11:00.004+08:00</published><updated>2009-02-22T23:24:18.536+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Win32" /><title type="text">step by step: make daydayup as a WinXP service</title><content type="html">even it's very old, it's still very useful: &lt;a href="http://www.perlguy.com/articles/nt_service.html"&gt;http://www.perlguy.com/articles/nt_service.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;step 1, download the toolkit from &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;step 2, cmd: then&lt;pre&gt;C:\Documents and Settings\Administrator&gt;INSTSRV DayDayUp "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"&lt;br /&gt;&lt;br /&gt;The service was successfuly added!&lt;br /&gt;&lt;br /&gt;Make sure that you go into the Control Panel and use&lt;br /&gt;the Services applet to change the Account Name and&lt;br /&gt;Password that this newly installed service will use&lt;br /&gt;for its Security Context.&lt;/pre&gt;&lt;br /&gt;step 3, cmd, regedit, then find "DayDayUp"&lt;br /&gt;* Right click on the key and choose New, then Key. This will create what looks like a new folder. Name the new key &lt;i&gt;Parameters&lt;/i&gt;.&lt;br /&gt;* Right click on Parameters and select New, then String Value. In the space provided, type &lt;i&gt;Application&lt;/i&gt;.&lt;br /&gt;* Again, right click on Parameters and select New, then String Value. In the space provided, type &lt;i&gt;AppParameters&lt;/i&gt;.&lt;br /&gt;* Right click on &lt;i&gt;Application&lt;/i&gt; and choose Modify, then type in the path to your Perl binary like &lt;i&gt;C:\strawberry\perl\bin\perl.exe&lt;/i&gt;&lt;br /&gt;* Next, right click on &lt;i&gt;AppParameters&lt;/i&gt; and select Modify. type &lt;i&gt;E:\Fayland\gsvn\CPAN\day_day_up\bin\day_day_up daemon 3001&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;OK, everything is done now. if you go Services, you'll find DayDayUp in list, and you can start it (it will be started whenever computer gets start)&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4021492160114533470?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4021492160114533470/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4021492160114533470" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4021492160114533470" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4021492160114533470" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/02/step-by-step-make-daydayup-as-winxp.html" title="step by step: make daydayup as a WinXP service" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-7240227443679380983</id><published>2009-02-22T21:59:00.004+08:00</published><updated>2009-03-17T11:33:30.172+08:00</updated><title type="text">today's module: Scope::Guard</title><content type="html">&lt;i&gt;Updated: Thanks for Eddy to point out the errors. :)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I have been very happy with &lt;a href="http://search.cpan.org/perldoc?Scope::Guard"&gt;Scope::Guard&lt;/a&gt; recently.&lt;br /&gt;&lt;br /&gt;mainly the module can reduce the size of the code if you use it correctly.&lt;br /&gt;&lt;br /&gt;for example, we have some piece of code like follows to deal with Sphinx error.&lt;pre&gt;&lt;code&gt;sub while_error {&lt;br /&gt;    my ( $ret ) = @_;&lt;br /&gt;    &lt;br /&gt;    my $use_db = { use_db_please =&gt; 1 };&lt;br /&gt;    &lt;br /&gt;    # 1, connection to {localhost}:{3312} failed: Connection refused&lt;br /&gt;    if ($ret-&gt;{error} =~ /Connection refused/is) {&lt;br /&gt;       faked_try_to_reconnect();&lt;br /&gt;       print STDERR "$ret-&gt;{error}\n";&lt;br /&gt;       return $use_db;&lt;br /&gt;    }&lt;br /&gt;    # 2, received zero-sized searchd response&lt;br /&gt;    elsif ($ret-&gt;{error} =~ /zero-sized searchd/) {&lt;br /&gt;        faked_try_to_re_search();&lt;br /&gt;        print STDERR "$ret-&gt;{error}\n";&lt;br /&gt;        return $use_db;&lt;br /&gt;    }&lt;br /&gt;    # 3, unknown local index&lt;br /&gt;    elsif ( $ret-&gt;{error} =~ /unknown local index/ ) {&lt;br /&gt;        faked_try_to_re_index();&lt;br /&gt;        print STDERR "$ret-&gt;{error}\n";&lt;br /&gt;        return $use_db;&lt;br /&gt;    }&lt;br /&gt;    # 4, recv: Connection reset by peer&lt;br /&gt;    elsif ( $ret-&gt;{error} =~ /Connection reset by peer/ ) {&lt;br /&gt;        print STDERR "$ret-&gt;{error}\n";&lt;br /&gt;        return $use_db;&lt;br /&gt;    }&lt;br /&gt;    return $ret;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;OK, it's not so ugly.&lt;br /&gt;but with Scope::Guard, we can rewrite it much more clear and small-size.&lt;pre&gt;&lt;code&gt;sub while_error {&lt;br /&gt;    my ( $ret ) = @_;&lt;br /&gt;&lt;br /&gt;    my $use_db = { use_db_please =&gt; 1 };&lt;br /&gt;    &lt;br /&gt;    my $sg = Scope::Guard-&gt;new( sub {&lt;br /&gt;        print STDERR "$ret-&gt;{error}\n";&lt;br /&gt;    } );&lt;br /&gt;&lt;br /&gt;    # 1, connection to {localhost}:{3312} failed: Connection refused&lt;br /&gt;    if ($ret-&gt;{error} =~ /Connection refused/is) {&lt;br /&gt;       faked_try_to_reconnect();&lt;br /&gt;       return $use_db;&lt;br /&gt;    }&lt;br /&gt;    # 2, received zero-sized searchd response&lt;br /&gt;    elsif ($ret-&gt;{error} =~ /zero-sized searchd/) {&lt;br /&gt;        faked_try_to_re_search();&lt;br /&gt;        return $use_db;&lt;br /&gt;    }&lt;br /&gt;    # 3, unknown local index&lt;br /&gt;    elsif ( $ret-&gt;{error} =~ /unknown local index/ ) {&lt;br /&gt;        faked_try_to_re_index();&lt;br /&gt;        return $use_db;&lt;br /&gt;    }&lt;br /&gt;    # 4, recv: Connection reset by peer&lt;br /&gt;    elsif ( $ret-&gt;{error} =~ /Connection reset by peer/ ) {&lt;br /&gt;        return $use_db;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    $sg-&gt;dismiss();&lt;br /&gt;    &lt;br /&gt;    return $ret;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;I'm not sure if you're happy with it or not, but I like it. :)&lt;br /&gt;I had used it in &lt;a href="http://code.fayland.org/fayland/CPAN/day_day_up/lib/DayDayUp/Backup.pm"&gt;http://code.fayland.org/fayland/CPAN/day_day_up/lib/DayDayUp/Backup.pm&lt;/a&gt;. that's just another example.&lt;br /&gt;&lt;br /&gt;Thanks and Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-7240227443679380983?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/7240227443679380983/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=7240227443679380983" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/7240227443679380983" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/7240227443679380983" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/02/todays-module-scopeguard.html" title="today's module: Scope::Guard" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-4500297565598073719</id><published>2009-02-15T16:37:00.002+08:00</published><updated>2009-02-15T16:41:47.088+08:00</updated><title type="text">CPAN Top 100</title><content type="html">&lt;a href="http://ali.as/"&gt;Adam Kennedy&lt;/a&gt; just published his &lt;a href="http://ali.as/top100/"&gt;"The CPAN Top 100"&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;I just found that I take 11 places in "CPANTS Heavy 100". one is the Catalyst App Foorum and the others are Padre plugins. well, that's not a prize, I admire those listed in "CPANTS Volatile 100". :)&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4500297565598073719?l=www.fayland.org%2Fblog'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/4500297565598073719/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4500297565598073719" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4500297565598073719" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/23855943/posts/default/4500297565598073719" /><link rel="alternate" type="text/html" href="http://www.fayland.org/blog/2009/02/cpan-top-100.html" title="CPAN Top 100" /><author><name>Fayland</name><uri>http://www.blogger.com/profile/07225127136123374560</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="10225839595956653482" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry></feed>
