<?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'><id>tag:blogger.com,1999:blog-23855943</id><updated>2010-01-02T19:32:20.986+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='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><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>235</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23855943.post-8395484348800973463</id><published>2010-01-02T19:32:00.000+08:00</published><updated>2010-01-02T19:32:20.991+08:00</updated><title type='text'>WWW::Google::Contacts</title><content type='html'>this one is my first module of 2010 - &lt;A href='http://search.cpan.org/perldoc?WWW::Google::Contacts'&gt;WWW::Google::Contacts&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;it's nothing big but implement the &lt;a href='http://code.google.com/apis/contacts/docs/3.0/developers_guide_protocol.html'&gt;Google Contacts Data API&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;so Enjoy!&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-8395484348800973463?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/8395484348800973463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=8395484348800973463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/8395484348800973463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/8395484348800973463'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2010/01/wwwgooglecontacts.html' title='WWW::Google::Contacts'/><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-7946816193188171761</id><published>2009-12-25T21:52:00.000+08:00</published><updated>2009-12-25T21:52:37.484+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advent'/><title type='text'>The End of 2009 CN Perl Advent Calendar</title><content type='html'>I'm really very happy that we &lt;a href='http://perlchina.org/advent/'&gt;get it done&lt;/a&gt; today. the last article is &lt;a href='http://perlchina.org/advent/2009/perlthanks.html'&gt;perlthanks&lt;/a&gt; from I. and we didn't miss one day. 25 tips 25 days.&lt;br /&gt;&lt;br /&gt;I have totally 18 articles published, really Wow! they include ack, autodie, dzil, local::lib, Devel::NYTProf, Padre, pip, Plack, REPL, perlthanks and more.&lt;br /&gt;check them if you missed. :)&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-7946816193188171761?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/7946816193188171761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=7946816193188171761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/7946816193188171761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/7946816193188171761'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/12/end-of-2009-cn-perl-advent-calendar.html' title='The End of 2009 CN Perl Advent Calendar'/><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-2172039223095072804</id><published>2009-12-01T16:39:00.000+08:00</published><updated>2009-12-01T16:39:29.005+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advent'/><title type='text'>2009 CN Perl Advent Calendar</title><content type='html'>we just have the first article for our first advent calendar, from I. :)&lt;br /&gt;&lt;br /&gt;&lt;a href='http://perlchina.org/advent/'&gt;http://perlchina.org/advent/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;besides:&lt;br /&gt;&lt;a href="http://www.catalystframework.org/calendar/"&gt;http://www.catalystframework.org/calendar/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://advent.rjbs.manxome.org/"&gt;http://advent.rjbs.manxome.org/&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-2172039223095072804?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/2172039223095072804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2172039223095072804' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/2172039223095072804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/2172039223095072804'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/12/2009-cn-perl-advent-calendar.html' title='2009 CN Perl Advent Calendar'/><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-6180430452408594440</id><published>2009-10-23T22:24:00.002+08:00</published><updated>2009-10-24T18:38:10.255+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Plack'/><title type='text'>PSGI and Plack</title><content type='html'>The most exciting thing in Perl world today is &lt;a href="http://search.cpan.org/perldoc?PSGI::FAQ"&gt;PSGI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The homepage is &lt;a href='http://plackperl.org/'&gt;http://plackperl.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I tried that today. there are some tips for Win32 user.&lt;br /&gt;* Don't try to run under Standalone server, the alarm is not supported in Win32&lt;br /&gt;* after install &lt;a href="http://search.cpan.org/dist/Plack/"&gt;Plack&lt;/a&gt; (maybe notest install Plack), try install &lt;a href="http://search.cpan.org/perldoc?Plack::Server::AnyEvent"&gt;Plack::Server::AnyEvent&lt;/a&gt; or &lt;a href="http://search.cpan.org/perldoc?Plack::Server::ServerSimple"&gt;Plack::Server::ServerSimple&lt;/a&gt;&lt;br /&gt;* at last, to know a bit of the Plack, cd the cpan build dir or download the tar.gz&lt;br /&gt;&lt;pre&gt;&lt;code&gt;C:\strawberry\cpan\build\Plack-0.9006-ZEaDbK\eg\dot-psgi&gt;plackup -a Hello.psgi -s AnyEvent&lt;br /&gt;Accepting requests at http://0.0.0.0:5000/&lt;/code&gt;&lt;/pre&gt;OR&lt;pre&gt;&lt;code&gt;C:\strawberry\cpan\build\Plack-0.9006-ZEaDbK\eg\dot-psgi&gt;plackup -a Hello.psgi -s ServerSimple&lt;br /&gt;Plack::Server::ServerSimple: You can connect to your server at http://localhost:5000/&lt;br /&gt;127.0.0.1 - - [23/十月/2009 22:19:15] "GET / HTTP/1.1" 200 11 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 GTB5"&lt;br /&gt;127.0.0.1 - - [23/十月/2009 22:19:15] "GET /favicon.ico HTTP/1.1" 200 11 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 GTB5"&lt;/code&gt;&lt;/pre&gt;try visit http://127.0.0.1:5000/ then you'll get the access_log like above.&lt;br /&gt;&lt;br /&gt;well, I think the &lt;a href="http://search.cpan.org/perldoc?Plack::Middleware::AccessLog"&gt;Plack::Middleware::AccessLog&lt;/a&gt; should use &amp;POSIX::setlocale(&amp;POSIX::LC_ALL); on qw( .ISO8859-1 .ISO_8859-15 .US-ASCII .UTF-8 ) to avoid 十月 the Chinese.&lt;br /&gt;&lt;br /&gt;you can try more with the all the .psgi files under eg/dot-psgi, and you might have some ideas to write a Middleware. :)&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;&lt;br /&gt;(Updates on Oct 24th)&lt;br /&gt;&lt;a href='http://search.cpan.org/~miyagawa/'&gt;miyagawa&lt;/a&gt; applied the &lt;a href='http://github.com/miyagawa/Plack/commit/202aba6c850f802e834ac18ab3927285e745e667'&gt;patch&lt;/a&gt; with &lt;a href='http://github.com/miyagawa/Plack/commit/9b64c5b52766706b48f09d2c268fc9315535f7b0'&gt;some changes&lt;/a&gt; and it works pretty well now. &lt;br /&gt;Thanks very much. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-6180430452408594440?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/6180430452408594440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=6180430452408594440' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/6180430452408594440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/6180430452408594440'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/10/psgi-and-plack.html' title='PSGI and Plack'/><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-3180769121959423368</id><published>2009-10-23T09:49:00.000+08:00</published><updated>2009-10-23T09:49:31.921+08:00</updated><title type='text'>《Perl 语言入门（第五版）》</title><content type='html'>&lt;a href="http://www.china-pub.com/48392"&gt;《Perl 语言入门（第五版）》&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Translated by &lt;a href="http://chunzi.me/post/759"&gt;chunzi&lt;/a&gt;, joe.jiang and cnhackTNT&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-3180769121959423368?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/3180769121959423368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=3180769121959423368' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/3180769121959423368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/3180769121959423368'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/10/perl.html' title='《Perl 语言入门（第五版）》'/><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-1080336693214665409</id><published>2009-09-26T14:47:00.000+08:00</published><updated>2009-09-26T14:47:32.345+08:00</updated><title type='text'>Canon IXUS 95 IS</title><content type='html'>I bought a digit camera today: &lt;a href="http://www.newegg.com.cn/Product/90-c01-980.htm"&gt;Canon IXUS 95 IS&lt;/a&gt; (Chinese).&lt;br /&gt;&lt;br /&gt;not so bad. :)&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/jD10Y7tb2Wl_maQVIOwEXw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_HcKjmb1GDks/Sr24MOoc0wI/AAAAAAAAAkM/JTTYJg8Z0iM/s144/IMG_0026.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-1080336693214665409?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/1080336693214665409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=1080336693214665409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/1080336693214665409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/1080336693214665409'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/09/canon-ixus-95-is.html' title='Canon IXUS 95 IS'/><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_HcKjmb1GDks/Sr24MOoc0wI/AAAAAAAAAkM/JTTYJg8Z0iM/s72-c/IMG_0026.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-1763065965876657676</id><published>2009-09-17T16:51:00.000+08:00</published><updated>2009-09-17T16:51:53.946+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='CPAN'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>OpenSocialX::Shindig::Crypter long story</title><content type='html'>The long story is&lt;br /&gt;&lt;br /&gt;we (&lt;a href='http://www.zorpia.cn'&gt;Zorpia&lt;/a&gt;) were developing &lt;a href="http://wiki.opensocial.org/"&gt;OpenSocial&lt;/a&gt; in last days. The first choice to build a opensocial container is &lt;a href="http://incubator.apache.org/shindig/"&gt;Shindig&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;unlucky, it ONLY has PHP and Java version. yeah, I do all my code in Perl, I know nothing about PHP or Java. (well, I know a little PHP now because I was writing Service package with PHP in last days, and I must say, PHP sucks.)&lt;br /&gt;&lt;br /&gt;lucky, the Shindig author points me to an URL: &lt;a href="http://www.chabotc.com/generic/using-shindig-in-a-non-php-or-java-envirionment/"&gt;Using Shindig in a non PHP or Java environment&lt;/a&gt;&lt;br /&gt;that I can write the 'Application' section in Perl. It IS great, really very great.&lt;br /&gt;&lt;br /&gt;so at last, I google around and wrote my last solution: &lt;a href="http://search.cpan.org/dist/OpenSocialX-Shindig-Crypter/lib/OpenSocialX/Shindig/Crypter.pm"&gt;OpenSocialX::Shindig::Crypter&lt;/a&gt; and the php lib &lt;a href="http://github.com/fayland/opensocialx-shindig-crypter/raw/master/php/BasicBlobCrypter.php"&gt;BasicBlobCrypter.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and now I'm happy to share it with your guys. if you have the same situation with me, you can try that module and tell me your feeling. :)&lt;br /&gt;&lt;br /&gt;Thanks. (OK, it's not so long.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-1763065965876657676?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/1763065965876657676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=1763065965876657676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/1763065965876657676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/1763065965876657676'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/09/opensocialxshindigcrypter-long-story.html' title='OpenSocialX::Shindig::Crypter long story'/><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-5549909248115848615</id><published>2009-09-17T10:07:00.001+08:00</published><updated>2009-09-17T16:53:13.447+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shindig'/><category scheme='http://www.blogger.com/atom/ns#' term='CPAN'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>OpenSocialX::Shindig::Crypter short story</title><content type='html'>the short story is that I released the &lt;a href="http://search.cpan.org/dist/OpenSocialX-Shindig-Crypter/"&gt;OpenSocialX::Shindig::Crypter&lt;/a&gt; yesterday.&lt;br /&gt;&lt;br /&gt;the short story is if you want to find a way that encrypt data by Perl and decrypt the encrypted data by PHP, you come to the right place.&lt;br /&gt;&lt;br /&gt;Perl: &lt;a href="http://github.com/fayland/opensocialx-shindig-crypter/raw/master/sample/crypt.pl"&gt;crypt.pl&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;my $str = 'o=1&amp;v=3&amp;p=5';&lt;br /&gt;my $cipher = Crypt::CBC-&gt;new( {&lt;br /&gt;    'key' =&gt; 'length16length16',&lt;br /&gt;    'cipher'=&gt; 'Rijndael',&lt;br /&gt;    'iv' =&gt; '1234567890abcdef',&lt;br /&gt;    'literal_key' =&gt; 1,&lt;br /&gt;    'padding' =&gt; 'null',&lt;br /&gt;    'header' =&gt; 'none',&lt;br /&gt;    keysize =&gt; 128/8&lt;br /&gt;} );&lt;br /&gt;my $encrypted = $cipher-&gt;encrypt($str);&lt;br /&gt;print "encrypted: ".encode_base64($encrypted)."\n";&lt;br /&gt;print "decrypted: ".$cipher-&gt;decrypt($encrypted)."\n";&lt;br /&gt;&lt;br /&gt;my $hmac = Digest::SHA::hmac_sha1($encrypted, 'hmackey');&lt;br /&gt;print "hmac: " . encode_base64($hmac) . "\n";&lt;br /&gt;print "total: " . encode_base64($encrypted . $hmac) . "\n";&lt;/code&gt;&lt;/pre&gt;PHP: &lt;a href="http://github.com/fayland/opensocialx-shindig-crypter/raw/master/sample/crypt.php"&gt;crypt.php&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$str = 'o=1&amp;v=3&amp;p=5';&lt;br /&gt;$encrypted = mcrypt_cbc(MCRYPT_RIJNDAEL_128, 'length16length16', $str, MCRYPT_ENCRYPT, '1234567890abcdef');&lt;br /&gt;$decrypted = mcrypt_cbc(MCRYPT_RIJNDAEL_128, 'length16length16', $encrypted, MCRYPT_DECRYPT, '1234567890abcdef');&lt;br /&gt;echo "encrypted: ".base64_encode($encrypted)."\n"; &lt;br /&gt;echo "decrypted: ".$decrypted."\n"; &lt;br /&gt;&lt;br /&gt;$blabla = hash_hmac('sha1', $encrypted, 'hmackey', 1);&lt;br /&gt;echo "hmac: " . base64_encode($blabla) . "\n";&lt;br /&gt;echo "total: " . base64_encode($encrypted . $blabla) . "\n";&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;both of them show the same output:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;# perl crypt.pl&lt;br /&gt;encrypted: rgPZe6swWb3t3yIoIZFQaQ==&lt;br /&gt;decrypted: o=1&amp;v=3&amp;p=5&lt;br /&gt;hmac: WLTGeyesYTUhwg6fjVqDudrKRz0=&lt;br /&gt;total: rgPZe6swWb3t3yIoIZFQaVi0xnsnrGE1IcIOn41ag7naykc9&lt;br /&gt;# php crypt.php&lt;br /&gt;encrypted: rgPZe6swWb3t3yIoIZFQaQ==&lt;br /&gt;decrypted: o=1&amp;v=3&amp;p=5&lt;br /&gt;hmac: WLTGeyesYTUhwg6fjVqDudrKRz0=&lt;br /&gt;total: rgPZe6swWb3t3yIoIZFQaVi0xnsnrGE1IcIOn41ag7naykc9&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I'll post a &lt;a href="http://www.fayland.org/blog/2009/09/opensocialxshindigcrypter-long-story.html"&gt;long story&lt;/a&gt; later today.&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-5549909248115848615?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/5549909248115848615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=5549909248115848615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/5549909248115848615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/5549909248115848615'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/09/opensocialxshindigcrypter-short-story.html' title='OpenSocialX::Shindig::Crypter short story'/><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-7085298536032723412</id><published>2009-09-03T17:38:00.005+08:00</published><updated>2009-09-03T18:03:11.907+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Moose'/><title type='text'>use Moose; or no Moose;</title><content type='html'>recently "Moose or no Moose" is spreading to the Perl world.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://perlhacks.com/2009/09/moose-or-no-moose.php"&gt;Moose or No Moose&lt;/a&gt;&lt;br /&gt;&lt;a href="http://chris.prather.org/perl/command-line-moose-or-knowing-what-you-dont-know/"&gt;Command Line Moose or Knowing what You Don't know.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stevan-little.blogspot.com/2009/09/re-moose-or-no-moose.html"&gt;Re: Moose Or No Moose&lt;/a&gt;&lt;br /&gt;&lt;a href="http://chris.prather.org/perl/take-arms-against-a-sea-of-troubles/"&gt;Take arms against a sea of troubles&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stevan-little.blogspot.com/2009/09/re-re-moose-or-no-moose.html"&gt;Re: Re: Moose Or No Moose&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stevan-little.blogspot.com/2009/09/moose-startup-time-over-time_02.html"&gt;Moose Startup Time over Time&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;basically I agree with &lt;a href="http://rt.cpan.org/Public/Bug/Display.html?id=49270"&gt;Adam Kennedy&lt;/a&gt; that Array::Compare shouldn't based on Moose. Test::Warn is a popular module and Array::Compare without Moose can totally ease the install of the Test::Warn.&lt;br /&gt;&lt;br /&gt;in the meantime, I would agree with Stevan Little that we shouldn't hold the usage of the Moose. it's a great module with great idea and great contributors. I use it in my daily life and it works great. once more and more people/module use Moose, the problem wouldn't become a problem.&lt;br /&gt;&lt;br /&gt;I think Padre should use Moose, I know &lt;A href="http://use.perl.org/~alias/journal"&gt;Adam&lt;/a&gt; would reject that, but I insist on that Padre will benefit from Moose even Class::XSAccessor is the fastest accessor module now. Padre will be in a better structure and much more easy to read if it's coded with Moose. Plugin/Document/Highlighter would be easily written and plugged.&lt;br /&gt;&lt;br /&gt;another thing is that I met the problem before. Long time ago &lt;a href="http://cpanratings.perl.org/dist/WWW-Contact"&gt;people rate down&lt;/a&gt; WWW::Contact because it uses Moose. but I think it's not true. Moose helps me to build the module.&lt;br /&gt;&lt;br /&gt;at last and in short, I think simple module (like only use the accessor of Moose) shouldn't use Moose but large software/module like Padre should use Moose.&lt;br /&gt;&lt;br /&gt;Thanks. just personal thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-7085298536032723412?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/7085298536032723412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=7085298536032723412' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/7085298536032723412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/7085298536032723412'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/09/use-moose-or-no-moose.html' title='use Moose; or no Moose;'/><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-5953119454967460932</id><published>2009-08-24T19:06:00.002+08:00</published><updated>2009-08-24T19:12:17.798+08:00</updated><title type='text'>life updates</title><content type='html'>I'm sick these days. 1 day fever, 4 days cough, 3 injections. very bad.&lt;br /&gt;&lt;br /&gt;my modem got broken yesterday. it's not bad. I updated my book a little when there is no internet access. have a check if you haven't. :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/Book-Chinese-MasterPerlToday/"&gt;http://search.cpan.org/dist/Book-Chinese-MasterPerlToday/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope everything is fine tomorrow. God bless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-5953119454967460932?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/5953119454967460932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=5953119454967460932' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/5953119454967460932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/5953119454967460932'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/08/life-updates.html' title='life 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'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23855943.post-6580240592185879650</id><published>2009-08-07T10:24:00.003+08:00</published><updated>2009-08-07T10:27:34.939+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MasterPerlToday'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Book::Chinese::MasterPerlToday</title><content type='html'>&lt;a href="http://chunzi.me/archives/612"&gt;some of you&lt;/a&gt; may be &lt;a href="http://www.newsmth.net/bbstcon.php?board=Perl&amp;gid=51263"&gt;noticed&lt;/a&gt; that I'm writing a &lt;a href="http://github.com/fayland/chinese-perl-book/tree/master"&gt;free perl book&lt;/a&gt; in Chinese.&lt;br /&gt;&lt;br /&gt;yeah, I released it as a CPAN module yesterday: &lt;a href='http://search.cpan.org/~fayland/Book-Chinese-MasterPerlToday/'&gt;Book::Chinese::MasterPerlToday&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;it's not finished yet but I promise I will. so have fun and stay tuned.&lt;br /&gt;&lt;br /&gt;patches or suggestions are welcome. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-6580240592185879650?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/6580240592185879650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=6580240592185879650' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/6580240592185879650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/6580240592185879650'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/08/bookchinesemasterperltoday.html' title='Book::Chinese::MasterPerlToday'/><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-4054177884049335445</id><published>2009-07-26T23:21:00.002+08:00</published><updated>2009-07-26T23:26:14.482+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>The Definitive Guide to Catalyst</title><content type='html'>&lt;a href="http://www.amazon.com/Definitive-Guide-Catalyst-Maintainable-Applications/dp/1430223650/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1247118476&amp;sr=8-2"&gt;The Definitive Guide to Catalyst: Writing Extensible, Scalable and Maintainable Perl–Based Web Applications&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My boss (Jeffrey Ng) just brought this book for me (thanks to my college Calvin getting it for me from USA).&lt;br /&gt;&lt;br /&gt;I haven't read it yet, but I will. it's a good book. I'll post a review once I read it through.&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23855943-4054177884049335445?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/4054177884049335445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=4054177884049335445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/4054177884049335445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/4054177884049335445'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/07/definitive-guide-to-catalyst.html' title='The Definitive Guide to Catalyst'/><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-2336523193459213120</id><published>2009-07-22T12:08:00.001+08:00</published><updated>2009-07-22T12:10:12.676+08:00</updated><title type='text'>Beijing Perl Workshop - Sep 19, 2009</title><content type='html'>&lt;a href="http://conference.perlchina.org/bjpw2009/"&gt;http://conference.perlchina.org/bjpw2009/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm afraid I will not go there, but it's still recommended to attend. :)&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-2336523193459213120?l=www.fayland.org%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/2336523193459213120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=23855943&amp;postID=2336523193459213120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/2336523193459213120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23855943/posts/default/2336523193459213120'/><link rel='alternate' type='text/html' href='http://www.fayland.org/blog/2009/07/beijing-perl-workshop-sep-19-2009.html' title='Beijing Perl Workshop - Sep 19, 2009'/><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-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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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&apos;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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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' alt='' /&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></feed>