<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

<channel rdf:about="http://vkgtaro.jp/">
<title>僕ト云フ事</title>
<link>http://vkgtaro.jp/</link>
<description>geek というよりは nerd な海賊たろがたらたら綴るよ。</description>
<image rdf:resource="http://vkgtaro.jp/bnr_img/taro_sky.gif" />
<dc:language>ja</dc:language>
<dc:creator>海賊たろ</dc:creator>
<dc:date>2009-11-09T00:03:35+09:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.32-ja" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://vkgtaro.jp/2009/11/09/nabewariyama" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/11/06/0x20" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/11/01/karumeya_e_sorede" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/10/26/lazy_people_nabewariyama" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/10/26/lazy_san_on_twitter_and_irc_by_ruby" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/10/25/toho_saigessyou" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/10/12/perl_moose_observer" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/10/12/thanksbot_on_lazy-people" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/10/10/count_wdays" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/09/17/oauth_signature" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/09/11/yapcasia2009" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/09/08/strobe_light" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/09/07/twitpacker" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/09/07/yapcasia2009_tokyo" />
<rdf:li rdf:resource="http://vkgtaro.jp/2009/08/26/text_livedoor_wiki_mt" />
</rdf:Seq>
</items>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/viking" type="application/rss+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" /></channel>

<image rdf:about="http://vkgtaro.jp/bnr_img/taro_sky.gif">
  <title>僕ト云フ事</title>
  <link>http://vkgtaro.jp/</link>
  <url>http://vkgtaro.jp/bnr_img/taro_sky.gif</url>
</image>

<item rdf:about="http://vkgtaro.jp/2009/11/09/nabewariyama">
<title>[lazy-peole][山]表丹沢・鍋割山登ってきました</title>
<link>http://vkgtaro.jp/2009/11/09/nabewariyama</link>
<description>鍋割山登ってきました

高尾山、富士山、高尾-陣馬山と登ってきた我々ですが、今回はなかなか大変だった。



前日までにじわりじわりと減る参加者、前日夜になって仕事に捕まってしまった人、寝坊フラグを立ててしまった人など、登る前にリタイアが続出したw

当日朝に集まったのは、tomyhero さん、tsubotax さんと自分の3人でした。
渋沢駅で食料を調達し、うどんを食べてバスに乗って大倉へ。



渋沢駅で少しのんびりしたのもあって、予定より1時間ほど遅れての大倉出発でした。



二俣までの道のりは緩く長く、ずいぶん歩いた。この時点で少し tomyhero さん、tsubotax さんの足手まといにw





二俣を経過したあたりから傾斜がすごくきつかった。赤ちゃん背負ったお父さんとか見たけどスゲーなーという感じだった。





二俣過ぎた後は、登っては休憩を入れて、という感じで進んでいたので、そこでお会いした老夫婦に休憩中に道を譲ったり、譲られたりしながら山頂まで登っていった。ちなみに山頂には老夫婦の方が先に着いてました。明らかに自分が足を引っ張ってました。サーセン &gt;_

もう道のほとんどが木の根っこでできた階段で、だんだん膝が上がらなくなり、道を譲ってもらうときに「いやぁ、これは足があがらなくなりますねー」なんて言ったら、先行く tomyhero さんに「おいそこ、言い訳せんではよこい」とか言われたり。



鍋割山山頂にある山荘が見えたところで tsubotax さんが走って登りだしたのもきつかったw
しかも全然山頂に届く距離ではなく、下山中の方がだいぶ先の方でよけてくださったがためにそこまでは走り抜かないと行けなくなったりとかw





山頂で二人は名物の鍋焼きうどんを食べてましたが、自分はもう胃に入れられる状況ではなくて、コーヒー飲んだ。





山頂までの道のりで何度かお会いした老夫婦にはチョコレート頂きました。ありがとう。

ちなみに出発が1時間遅れたにもかかわらず山頂到着は予定時刻だった。通常よりはハイペースなんじゃないでしょうか！

そして、少しのんびりしすぎたせいか、山頂には山荘に泊まる人以外残ってない状況になってから下山開始したりして。
下山がまた大変だった。陣馬山の下山も急傾斜だったけど、今回も大変だった。直滑降ではなかったのが良かったくらい。膝が笑ってしまって押さえ効かなくて転けたりとか。

靴擦れ、爪の中の内出血とかはだいたい下山でできる。陣馬山もそうだった。



tsubotax さんが山荘の方から聞いた話だと、日が落ちるとほんとに真っ暗になると言われて急ぎ足で下りてたんだけど、日が落ちきる前に二俣まで戻れたので大丈夫でした。
下山中の夕日に染まる山々はなかなか良かったような気がします。

あとわずかと言うところで日が落ちきってしまったけど、ライト持ってきてたのでそこで合流した家族の方と一緒に大倉までの道のりを同行した。「もう暗いし歩けないよー」と泣いていた男の子がなんか微笑ましかった。

そんな感じで登ってきましたー。tomyhero さん、tsubotax さんお疲れさまでした−。
足腰が痛い！
</description>
<content:encoded><![CDATA[<p><a href="http://lazy-people.org/wiki/event/hillwalking2">鍋割山登ってきました</a></p>

<p><a href="http://vkgtaro.jp/2008/07/21/000637">高尾山</a>、<a href="http://vkgtaro.jp/2008/08/11/000639">富士山</a>、<a href="http://vkgtaro.jp/2009/07/26/jinbasan_hiking">高尾-陣馬山</a>と登ってきた我々ですが、今回はなかなか大変だった。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4085402094/" title="2009_11_07_1837 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2766/4085402094_3fd09f9206.jpg" width="500" height="333" alt="2009_11_07_1837" /></a></p>

<p>前日までにじわりじわりと減る参加者、前日夜になって仕事に捕まってしまった人、寝坊フラグを立ててしまった人など、登る前にリタイアが続出したw</p>

<p>当日朝に集まったのは、tomyhero さん、tsubotax さんと自分の3人でした。<br />
渋沢駅で食料を調達し、うどんを食べてバスに乗って大倉へ。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4084624125/" title="2009_11_07_1768 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2622/4084624125_7b22ee3dda.jpg" width="500" height="333" alt="2009_11_07_1768" /></a></p>

<p>渋沢駅で少しのんびりしたのもあって、予定より1時間ほど遅れての大倉出発でした。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4084626927/" title="2009_11_07_1773 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2758/4084626927_13db769330.jpg" width="500" height="333" alt="2009_11_07_1773" /></a></p>

<p>二俣までの道のりは緩く長く、ずいぶん歩いた。この時点で少し tomyhero さん、tsubotax さんの足手まといにw</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4084628975/" title="2009_11_07_1780 by vkgtaro, on Flickr"><img src="http://farm4.static.flickr.com/3530/4084628975_ea475b5301.jpg" width="500" height="333" alt="2009_11_07_1780" /></a></p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4084629953/" title="2009_11_07_1784 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2750/4084629953_c56410dea4.jpg" width="500" height="333" alt="2009_11_07_1784" /></a></p>

<p>二俣を経過したあたりから傾斜がすごくきつかった。赤ちゃん背負ったお父さんとか見たけどスゲーなーという感じだった。</p>

<p><img src="http://www.kankou-hadano.org/hadano_mountain/img_mountain/mountainmap_highlow-nbw.gif" width="447" height="289" /></p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4084636619/" title="2009_11_07_1793 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2612/4084636619_c610988c42.jpg" width="500" height="333" alt="2009_11_07_1793" /></a></p>

<p>二俣過ぎた後は、登っては休憩を入れて、という感じで進んでいたので、そこでお会いした老夫婦に休憩中に道を譲ったり、譲られたりしながら山頂まで登っていった。ちなみに山頂には老夫婦の方が先に着いてました。明らかに自分が足を引っ張ってました。サーセン >_<</p>

<p>もう道のほとんどが木の根っこでできた階段で、だんだん膝が上がらなくなり、道を譲ってもらうときに「いやぁ、これは足があがらなくなりますねー」なんて言ったら、先行く tomyhero さんに「おいそこ、言い訳せんではよこい」とか言われたり。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4085405714/" title="2009_11_07_1849 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2639/4085405714_2d2ccfc84f.jpg" width="500" height="333" alt="2009_11_07_1849" /></a></p>

<p>鍋割山山頂にある山荘が見えたところで tsubotax さんが走って登りだしたのもきつかったw<br />
しかも全然山頂に届く距離ではなく、下山中の方がだいぶ先の方でよけてくださったがためにそこまでは走り抜かないと行けなくなったりとかw</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4085409624/" title="2009_11_07_1859 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2508/4085409624_a934370b8b.jpg" width="333" height="500" alt="2009_11_07_1859" /></a></p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4085408452/" title="2009_11_07_1858 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2627/4085408452_98a28bb4be.jpg" width="333" height="500" alt="2009_11_07_1858" /></a></p>

<p>山頂で二人は名物の鍋焼きうどんを食べてましたが、自分はもう胃に入れられる状況ではなくて、コーヒー飲んだ。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4085410938/" title="2009_11_07_1866 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2506/4085410938_247faacfdf.jpg" width="500" height="333" alt="2009_11_07_1866" /></a></p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4084653453/" title="2009_11_07_1870 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2698/4084653453_80d7c07399.jpg" width="500" height="333" alt="2009_11_07_1870" /></a></p>

<p>山頂までの道のりで何度かお会いした老夫婦にはチョコレート頂きました。ありがとう。</p>

<p>ちなみに出発が1時間遅れたにもかかわらず山頂到着は予定時刻だった。通常よりはハイペースなんじゃないでしょうか！</p>

<p>そして、少しのんびりしすぎたせいか、山頂には山荘に泊まる人以外残ってない状況になってから下山開始したりして。<br />
下山がまた大変だった。陣馬山の下山も急傾斜だったけど、今回も大変だった。直滑降ではなかったのが良かったくらい。膝が笑ってしまって押さえ効かなくて転けたりとか。</p>

<p>靴擦れ、爪の中の内出血とかはだいたい下山でできる。陣馬山もそうだった。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4085413884/" title="2009_11_07_1871 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2657/4085413884_876e149507.jpg" width="500" height="333" alt="2009_11_07_1871" /></a></p>

<p>tsubotax さんが山荘の方から聞いた話だと、日が落ちるとほんとに真っ暗になると言われて急ぎ足で下りてたんだけど、日が落ちきる前に二俣まで戻れたので大丈夫でした。<br />
下山中の夕日に染まる山々はなかなか良かったような気がします。</p>

<p>あとわずかと言うところで日が落ちきってしまったけど、ライト持ってきてたのでそこで合流した家族の方と一緒に大倉までの道のりを同行した。「もう暗いし歩けないよー」と泣いていた男の子がなんか微笑ましかった。</p>

<p>そんな感じで登ってきましたー。tomyhero さん、tsubotax さんお疲れさまでした−。<br />
足腰が痛い！<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/lazy-peole" rel="TAG" title="TAG:lazy-peole">lazy-peole</a>][<a href="http://vkgtaro.jp/tag/%E5%B1%B1" rel="TAG" title="TAG:山">山</a>]<p>]]>
</content:encoded>
<dc:subject>Lazy People</dc:subject><dc:subject>lazy-peole</dc:subject><dc:subject>山</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-11-09T00:03:35+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/11/06/0x20">
<title>[life]0x20 歳になりました！</title>
<link>http://vkgtaro.jp/2009/11/06/0x20</link>
<description>べたべたなネタですがとうとう 0x20 歳になりました。CGI な掲示板の改造から perl プログラミングに入ったころ、プログラマらしき人の日記でこういうネタをたまに見かけては、自分もいつかやろうと思ってた訳ですが、0x20 の意味を知ったときは「だいぶ遠いなぁ、忘れそうだなぁ」と思ってたけど思い出してしまいましたw 遠かったw

こんどから自分の年を数えるのに両手が必要です。もういいか、この手のネタは。
あー、30girl の加奈子さんと寺島くんと同い年になってしまったなぁー。

振り返ればいろいろあった気もします。おおよそ楽しい人生を過ごしているような気もします。イライラすることや思ったとおりにいかないのもまた人生です。不幸は幸福のアントニムではないと谷川俊太郎さんはおっしゃってました。まぁおおよそ幸せな人生を過ごしている気もしますが、満足すると死んでしまうので適度にああしたいこうしたいを持ちながら残りの人生を生きていこうと思います。まぁなんと言うか、いろんな意味で節目の歳になりそうです。

メメント・モリだ！

明日は鍋割山に登ってきます！


</description>
<content:encoded><![CDATA[<p>べたべたなネタですがとうとう 0x20 歳になりました。CGI な掲示板の改造から perl プログラミングに入ったころ、プログラマらしき人の日記でこういうネタをたまに見かけては、自分もいつかやろうと思ってた訳ですが、0x20 の意味を知ったときは「だいぶ遠いなぁ、忘れそうだなぁ」と思ってたけど思い出してしまいましたw 遠かったw</p>

<p>こんどから自分の年を数えるのに両手が必要です。もういいか、この手のネタは。<br />
あー、<a href="http://www.30girl.com/">30girl</a> の加奈子さんと寺島くんと同い年になってしまったなぁー。</p>

<p>振り返ればいろいろあった気もします。おおよそ楽しい人生を過ごしているような気もします。イライラすることや思ったとおりにいかないのもまた人生です。不幸は幸福のアントニムではないと谷川俊太郎さんはおっしゃってました。まぁおおよそ幸せな人生を過ごしている気もしますが、満足すると死んでしまうので適度にああしたいこうしたいを持ちながら残りの人生を生きていこうと思います。まぁなんと言うか、いろんな意味で節目の歳になりそうです。</p>

<p>メメント・モリだ！</p>

<p><a href="http://lazy-people.org/wiki/event/hillwalking2">明日は鍋割山に登ってきます！</a></p>

<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4087484254/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/21R0DPDCMNL._SL160_.jpg" alt="ONCE(ワンス)―私の20歳代 (集英社文庫)" style="border: none;" /></a><br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/life" rel="TAG" title="TAG:life">life</a>]<p>]]>
</content:encoded>
<dc:subject>日常</dc:subject><dc:subject>life</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-11-06T20:36:28+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/11/01/karumeya_e_sorede">
<title>[かるめ屋][芝居]かるめ屋「え、それで！？」</title>
<link>http://vkgtaro.jp/2009/11/01/karumeya_e_sorede</link>
<description>かるめ屋さんの芝居、土曜夜の千秋楽の回を観て、そのまま打ち上げに混ざってきました。

今回も劇団古田工務店の古田さんによる脚本でした。古田工務店さんは11/14-15に20回記念公演がありますね。

今回の話は笑いどころが多くて面白かった。初っぱなでまめさんの出オチかと思って吹きそうになったw アイドルはないわーw
売れないアイドル役にまめさんと大迫さん、マネージャに今泉さん、女社長役のトミーと途中に突如登場したさえない神様役のキリフさんと各々キャラが立っててよかった。





終演後、出演者関係者を交えて和む方々。



事務所を支える売れっ子アイドルのポスターの子は観客にいた。



そのまま会場内で打ち上げ。



皆さんお疲れさまでした−。
</description>
<content:encoded><![CDATA[<p><a href="http://carumeya.rakurakuhp.net/">かるめ屋</a>さんの芝居、土曜夜の千秋楽の回を観て、そのまま打ち上げに混ざってきました。</p>

<p>今回も<a href="http://www.h3.dion.ne.jp/~furukou/">劇団古田工務店</a>の古田さんによる脚本でした。古田工務店さんは<a href="http://www.h3.dion.ne.jp/~furukou/new.htm">11/14-15に20回記念公演</a>がありますね。</p>

<p>今回の話は笑いどころが多くて面白かった。初っぱなでまめさんの出オチかと思って吹きそうになったw アイドルはないわーw<br />
売れないアイドル役にまめさんと大迫さん、マネージャに今泉さん、女社長役のトミーと途中に突如登場したさえない神様役のキリフさんと各々キャラが立っててよかった。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4064243068/" title="2009_10_31_1739 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2696/4064243068_46079dc742.jpg" width="500" height="333" alt="2009_10_31_1739" /></a></p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4063500369/" title="2009_10_31_1744 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2543/4063500369_4214fa15d7.jpg" width="500" height="333" alt="2009_10_31_1744" /></a></p>

<p>終演後、出演者関係者を交えて和む方々。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4063501841/" title="2009_10_31_1745 by vkgtaro, on Flickr"><img src="http://farm4.static.flickr.com/3536/4063501841_fb7f1cd17b.jpg" width="333" height="500" alt="2009_10_31_1745" /></a></p>

<p>事務所を支える売れっ子アイドルのポスターの子は観客にいた。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4064251946/" title="2009_10_31_1746 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2607/4064251946_72f8d415e3.jpg" width="500" height="333" alt="2009_10_31_1746" /></a></p>

<p>そのまま会場内で打ち上げ。</p>

<p><a href="http://www.flickr.com/photos/vkgtaro/4063505525/" title="2009_10_31_1751 by vkgtaro, on Flickr"><img src="http://farm3.static.flickr.com/2789/4063505525_0677516afd.jpg" width="500" height="333" alt="2009_10_31_1751" /></a></p>

<p>皆さんお疲れさまでした−。<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/%E3%81%8B%E3%82%8B%E3%82%81%E5%B1%8B" rel="TAG" title="TAG:かるめ屋">かるめ屋</a>][<a href="http://vkgtaro.jp/tag/%E8%8A%9D%E5%B1%85" rel="TAG" title="TAG:芝居">芝居</a>]<p>]]>
</content:encoded>
<dc:subject>観劇</dc:subject><dc:subject>かるめ屋</dc:subject><dc:subject>芝居</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-11-01T23:12:53+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/10/26/lazy_people_nabewariyama">
<title>[lazy-people][山]告知: 11/07 表丹沢の鍋割山に登ります。</title>
<link>http://vkgtaro.jp/2009/10/26/lazy_people_nabewariyama</link>
<description>まさか、自分の blog でこんなにも山タグつけることになるとは思いませんでしたw
今なら「lazy-people は山に登る集団です」と答えますw
秋ということで紅葉を楽しみつつ表丹沢の鍋割山に登ります。
（自分はその余裕があるかどうか心配だ）

詳しくはここに書いてます

もし「自分も登りたい」という方がいたら、@lazy_san をフォローして教えてください。
もしくは irc.lazy-people.org:6667#project (utf-8) へ join now!

11月はこの登山に加えて、かるめ屋の芝居があったり、後輩の芝居があったり、古田工務店の芝居があったりで週末が一気に埋まったw
みんなまとまって芝居しすぎじゃないですかw
</description>
<content:encoded><![CDATA[<p>まさか、自分の blog でこんなにも山タグつけることになるとは思いませんでしたw<br />
今なら「lazy-people は山に登る集団です」と答えますw<br />
秋ということで紅葉を楽しみつつ表丹沢の鍋割山に登ります。<br />
（自分はその余裕があるかどうか心配だ）</p>

<p><a href="http://lazy-people.org/wiki/event/hillwalking2">詳しくはここに書いてます</a></p>

<p>もし「自分も登りたい」という方がいたら、<a href="http://twitter.com/lazy_san">@lazy_san</a> をフォローして教えてください。<br />
もしくは <a href="irc://irc.lazy-people.org:6667#project">irc.lazy-people.org:6667#project (utf-8)</a> へ join now!</p>

<p>11月はこの登山に加えて、<a href="http://carumeya.rakurakuhp.net/">かるめ屋の芝居</a>があったり、<a href="http://www.puriseta.com/blog/?p=974">後輩の芝居</a>があったり、<a href="http://www.h3.dion.ne.jp/~furukou/">古田工務店の芝居</a>があったりで週末が一気に埋まったw<br />
みんなまとまって芝居しすぎじゃないですかw<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/lazy-people" rel="TAG" title="TAG:lazy-people">lazy-people</a>][<a href="http://vkgtaro.jp/tag/%E5%B1%B1" rel="TAG" title="TAG:山">山</a>]<p>]]>
</content:encoded>
<dc:subject>Lazy People</dc:subject><dc:subject>lazy-people</dc:subject><dc:subject>山</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-10-26T01:40:18+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/10/26/lazy_san_on_twitter_and_irc_by_ruby">
<title>[irc][lazy-people][ruby][twitter]IRC と twitter の橋渡しをする lazy さんを作りました</title>
<link>http://vkgtaro.jp/2009/10/26/lazy_san_on_twitter_and_irc_by_ruby</link>
<description> lazy people のマスコット、lazy さんの twitter ボットを作りました。今後はイベントごとがあるときはこっちにも通知していこうと思います。
また、twitter で連絡したい人は @lazy_san にもリプライすると良いと思いますよ。


  @lazy_san


（@lazysan は関係ない人ですw）

@lazy_san に reply すると irc.lazy-people.org 上の #project にいる irc bot, lazy_san が IRC 内に通知してくれます。

また、IRC 上の lazy_san に話しかけると twitter 上の @lazy_san が発言します。


09:25 d**y: lazy_san: オーハーヨーーーウィ
09:25 lazy_san: d**y: lazy_san: オーハーヨーーーウィ




あとはフォローしてくれたら自動でフォロー返します。お気軽にフォローオ願いします。

ソースはここ。前回の thanksbot と同じディレクトリにいます。

前回書いた thanksbot にもフックするためにまた ruby で書きました。というか、ruby の練習台ですw
あー、thanksbot のプロセス殺して lazy_san 側で呼びかけられ方で振り分けても良いなぁ。でも nick 一覧にないと補完されなくて面倒か。

個人的には thread に触れたことがないので、こんなんで良いのかどうか気になります。


#!/usr/bin/env ruby
# encoding: utf-8
 
$LOAD_PATH _

クラス構成が LazySan::IRC と LazySan::Twitter とあって、LazySan::IRC が LazySan::Twitter に依存してるのも少し変な気がする。

プログラミング言語 Rubyposted with amazlet at 09.10.26まつもと ゆきひろ David Flanagan オライリージャパン 売り上げランキング: 33589おすすめ度の平均:  最も信頼できるRubyの本 基本書にふさわしい本 rubyマスターになるために 鬱にされる鬱然たるRuby教科書 For RubistAmazon.co.jp で詳細を見る
</description>
<content:encoded><![CDATA[<p><img alt="lazy_san_iphone.png" src="http://vkgtaro.jp/img/lazy_san_iphone.png" width="64" height="64" /> lazy people のマスコット、<a href="http://lazy-people.org/wiki/lazy_san">lazy さん</a>の twitter ボットを作りました。今後はイベントごとがあるときはこっちにも通知していこうと思います。<br />
また、twitter で連絡したい人は @lazy_san にもリプライすると良いと思いますよ。</p>

<ul>
  <li><a href="http://twitter.com/lazy_san">@lazy_san</a></li>
</ul>

<p>（<a href="http://twitter.com/lazysan">@lazysan</a> は関係ない人ですw）</p>

<p>@lazy_san に reply すると <a href="irc://irc.lazy-people.org:6667#project">irc.lazy-people.org 上の #project</a> にいる irc bot, lazy_san が IRC 内に通知してくれます。</p>

<p>また、IRC 上の lazy_san に話しかけると twitter 上の @lazy_san が発言します。</p>

<pre>
09:25 d**y: lazy_san: オーハーヨーーーウィ
09:25 lazy_san: d**y: lazy_san: オーハーヨーーーウィ
</pre>

<p><img alt="lazy_san.png" src="http://vkgtaro.jp/img/lazy_san.png" width="361" height="146" /></p>

<p>あとはフォローしてくれたら自動でフォロー返します。お気軽にフォローオ願いします。</p>

<p><a href="http://lazy-people.org/browser/project/lazy-people/thanksbot/">ソースはここ。</a>前回の thanksbot と同じディレクトリにいます。</p>

<p>前回書いた <a href="http://vkgtaro.jp/2009/10/12/thanksbot_on_lazy-people">thanksbot</a> にもフックするためにまた ruby で書きました。というか、ruby の練習台ですw<br />
あー、thanksbot のプロセス殺して lazy_san 側で呼びかけられ方で振り分けても良いなぁ。でも nick 一覧にないと補完されなくて面倒か。</p>

<p>個人的には thread に触れたことがないので、こんなんで良いのかどうか気になります。</p>

<pre class="prettyprint">
#!/usr/bin/env ruby
# encoding: utf-8
 
$LOAD_PATH << "lib"
 
require 'rubygems'
require 'net/irc'
require 'observer'
require 'lazysan'
require 'yaml'
 
class LazySan::IRC < Net::IRC::Client
 
  def initialize(config)
    @channel = config[:irc][:opts][:channel]
 
    @lazysan = LazySan::Twitter.new(config[:twitter][:user], config[:twitter][:pass])
 
    super(
      config[:irc][:host],
      config[:irc][:port],
      config[:irc][:opts]
    )
  end
 
  def on_rpl_welcome(m)
    post JOIN, @channel
    run_observe_twitter()
  end
 
  def run_observe_twitter()
    @message_thread = Thread.new do
      loop do
        begin
          @lazysan.auto_follow
          @lazysan.replies.each {|status|
            post NOTICE, @channel, "@#{status['user']['screen_name']}: #{status['text']}"
          }
        rescue
          # TODO: Net::IRC の log
        end
        sleep 300
      end
    end
  end
 
  def on_privmsg(m)
    if match = m[1].match(/^lazy_san:\s*(.*)/)
      begin
        @lazysan.update(match[1])
        post NOTICE, @channel, "#{m.prefix.nick}: #{match[0]}"
      rescue
        post NOTICE, @channel, "投稿ミスった >_<"
      end
    end
  end
 
end
 
config = YAML.load_file('lazysan.yaml')
 
lazy_san = LazySan::IRC.new(config)
 
lazy_san.start
</pre>

<p>クラス構成が LazySan::IRC と LazySan::Twitter とあって、LazySan::IRC が LazySan::Twitter に依存してるのも少し変な気がする。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41CGDEMgyoL._SL160_.jpg" alt="プログラミング言語 Ruby" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">プログラミング言語 Ruby</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113946/taroweb-22/ref=nosim/" title="プログラミング言語 Ruby" target="_blank">amazlet</a> at 09.10.26</div></div><div class="amazlet-detail">まつもと ゆきひろ David Flanagan <br />オライリージャパン <br />売り上げランキング: 33589<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 最も信頼できるRubyの本<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 基本書にふさわしい本<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> rubyマスターになるために<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 鬱にされる鬱然たるRuby教科書<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-2-0.gif" alt="2" /> For Rubist<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>
]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/irc" rel="TAG" title="TAG:irc">irc</a>][<a href="http://vkgtaro.jp/tag/lazy-people" rel="TAG" title="TAG:lazy-people">lazy-people</a>][<a href="http://vkgtaro.jp/tag/ruby" rel="TAG" title="TAG:ruby">ruby</a>][<a href="http://vkgtaro.jp/tag/twitter" rel="TAG" title="TAG:twitter">twitter</a>]<p>]]>
</content:encoded>
<dc:subject>ruby</dc:subject><dc:subject>irc</dc:subject><dc:subject>lazy-people</dc:subject><dc:subject>ruby</dc:subject><dc:subject>twitter</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-10-26T01:25:41+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/10/25/toho_saigessyou">
<title>[マンガ][東方]東方儚月抄~Silent Sinner in Blue. 底</title>
<link>http://vkgtaro.jp/2009/10/25/toho_saigessyou</link>
<description>まー、なんというか、こんな風にまとめてマンガで東方が読めるとは思わなかったです。
シューティングゲームって、たいていの場合ストーリーは置いておいてという感じなんだけど、このゲームはボス戦の前にキャラクタの会話があるからね。
キャラクタの設定とあやふやなストーリーが毎年更新されて、界隈で勝手に広がっていったあげく元の作者を原作者としてマンガが出るってのはなんか面白いですね。

東方儚月抄~Silent Sinner in Blue. 底 (3) (IDコミックス REXコミックス)posted with amazlet at 09.10.25ZUN 一迅社 (2009-10-09)おすすめ度の平均:  東方初心者ですが・・・ まさに「底」というにふさわしい 東方の雰囲気が出てる 上、中ときて最後が底と・・・ 好き嫌い分かれそうな内容Amazon.co.jp で詳細を見る

このマンガ読んで、なんか久々に東方永夜抄やりたくなって魔理沙に打ちのめされたりした。風神録から先、クリアできてないんだよねぇ。ラスボスみて満足してる。スペルカードプラクティスモードが欲しいです。

あとこれを描いてる秋★枝さんのマンガは、なんというか全体的に可愛らしいくて好きです。
口元がくりんとしてたり、にへらっとした笑顔とかイライラが出てるのとか表情がいいです。今ふと思うと、自分の本棚には男性のマンガ家のマンガの方が多いんだけど、そういう差異はあるかもなぁ。

 

秋★枝さんのマンガは純真ミラクル100%も好きです。主人公のメンタリティが良いです。
東方のは元のネタがわからない人には全くお勧めできないですが、こっちはオリジナルなのでおすすめ。いや、好みは分かれるかもしれないけどw

純真ミラクル100% (1) (まんがタイムKRコミックス エールシリーズ)posted with amazlet at 09.10.25秋★枝 芳文社 おすすめ度の平均:  タイトル通り”純真ミラクル１００％”となってくれれば傑作かも 息詰まる展開 秋★枝先生の真骨頂！Amazon.co.jp で詳細を見る
</description>
<content:encoded><![CDATA[<p>まー、なんというか、こんな風にまとめてマンガで東方が読めるとは思わなかったです。<br />
シューティングゲームって、たいていの場合ストーリーは置いておいてという感じなんだけど、このゲームはボス戦の前にキャラクタの会話があるからね。<br />
キャラクタの設定とあやふやなストーリーが毎年更新されて、界隈で勝手に広がっていったあげく元の作者を原作者としてマンガが出るってのはなんか面白いですね。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4758061696/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/619Wtw%2B-okL._SL160_.jpg" alt="東方儚月抄~Silent Sinner in Blue. 底 (3) (IDコミックス REXコミックス)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4758061696/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">東方儚月抄~Silent Sinner in Blue. 底 (3) (IDコミックス REXコミックス)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4758061696/taroweb-22/ref=nosim/" title="東方儚月抄~Silent Sinner in Blue. 底 (3) (IDコミックス REXコミックス)" target="_blank">amazlet</a> at 09.10.25</div></div><div class="amazlet-detail">ZUN <br />一迅社 (2009-10-09)<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 東方初心者ですが・・・<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-1-0.gif" alt="1" /> まさに「底」というにふさわしい<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 東方の雰囲気が出てる<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 上、中ときて最後が底と・・・<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 好き嫌い分かれそうな内容<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4758061696/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<p>このマンガ読んで、なんか久々に東方永夜抄やりたくなって魔理沙に打ちのめされたりした。風神録から先、クリアできてないんだよねぇ。ラスボスみて満足してる。スペルカードプラクティスモードが欲しいです。</p>

<p>あとこれを描いてる<a href="http://www.h7.dion.ne.jp/~fakefur/">秋★枝</a>さんのマンガは、なんというか全体的に可愛らしいくて好きです。<br />
口元がくりんとしてたり、にへらっとした笑顔とかイライラが出てるのとか表情がいいです。今ふと思うと、自分の本棚には男性のマンガ家のマンガの方が多いんだけど、そういう差異はあるかもなぁ。</p>

<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4758060894/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/61dKIysgJvL._SL160_.jpg" alt="東方儚月抄 ‾Silent Sinner in Blue. 上巻 (IDコミックス REXコミックス)" style="border: none;" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4758061246/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51hf6-S4sOL._SL160_.jpg" alt="東方儚月抄~Silent Sinner in Blue. 中 (IDコミックス REXコミックス)" style="border: none;" /></a></p>

<p>秋★枝さんのマンガは純真ミラクル100%も好きです。主人公のメンタリティが良いです。<br />
東方のは元のネタがわからない人には全くお勧めできないですが、こっちはオリジナルなのでおすすめ。いや、好みは分かれるかもしれないけどw</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4832277200/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51LSs36CnKL._SL160_.jpg" alt="純真ミラクル100% (1) (まんがタイムKRコミックス エールシリーズ)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4832277200/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">純真ミラクル100% (1) (まんがタイムKRコミックス エールシリーズ)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4832277200/taroweb-22/ref=nosim/" title="純真ミラクル100% (1) (まんがタイムKRコミックス エールシリーズ)" target="_blank">amazlet</a> at 09.10.25</div></div><div class="amazlet-detail">秋★枝 <br />芳文社 <br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-5.gif" alt="4.5" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> タイトル通り”純真ミラクル１００％”となってくれれば傑作かも<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 息詰まる展開<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 秋★枝先生の真骨頂！<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4832277200/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>
]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/%E3%83%9E%E3%83%B3%E3%82%AC" rel="TAG" title="TAG:マンガ">マンガ</a>][<a href="http://vkgtaro.jp/tag/%E6%9D%B1%E6%96%B9" rel="TAG" title="TAG:東方">東方</a>]<p>]]>
</content:encoded>
<dc:subject>マンガ</dc:subject><dc:subject>マンガ</dc:subject><dc:subject>東方</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-10-25T23:37:23+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/10/12/perl_moose_observer">
<title>[designpattern][moose][perl]perl で Observer パターン</title>
<link>http://vkgtaro.jp/2009/10/12/perl_moose_observer</link>
<description>Ruby で Observer パターンをやってみたところで、Perl でもやってみたくなったので書いてみました。お題はコードの世界に載っているテキスト表示の時計です。

ruby にある observer モジュールは include で mixin して使うので、Perl では Moose の Role を使って実装してみます。（モダン Perl 入門にもデザパタの章で Observer パターンがありますが、あえて ruby の observer モジュールを模してみます。）

で、これが Observable な Role です。これは時計の心臓部 Tick の Role なので Tick::Role::Observable としました。


package Tick::Role::Observable;
 
use Moose::Role;
 
has observer =&gt; (
    is =&gt; 'rw',
    default =&gt; sub { {} },
);
 
has state =&gt; (
    is =&gt; 'rw',
    default =&gt; 0,
);
 
sub is_changed {
    my ($self) = @_;
    return $self-&gt;state();
}
 
sub changed {
    my ($self) = @_;
    $self-&gt;state(1);
}
 
sub notify_observers {
    my ($self, @args) = @_;
 
    return unless $self-&gt;is_changed;
    $self-&gt;state(0);
 
    foreach my $package ( keys %{$self-&gt;observer} ) {
        eval {
            $self-&gt;observer-&gt;{$package}-&gt;update(@args);
        };
        if ( $@ ) {
            confess $@;
        }
    }
 
    return 1;
}
 
sub add_observer {
    my ($self, $obj) = @_;
 
    my $package = ref $obj;
    confess $obj . 'is not object'
        unless $package;
 
    confess $package . 'can not update'
        unless $obj-&gt;can('update');
 
    $self-&gt;observer-&gt;{$package} = $obj;
}
 
1;


このモジュールを with 'Tick::Role::Observable'; するとそのモジュールに Observer な振る舞いが付与されます。

元のお題の時計モジュールはこんな感じ。


package Tick;
 
use Moose;
 
with 'Tick::Role::Observable';
 
__PACKAGE__-&gt;meta-&gt;make_immutable();
 
no Moose;
 
use DateTime;
use DateTime::TimeZone;
use Time::HiRes qw(sleep gettimeofday);
 
sub start {
    my ($self, @args) = @_;
 
    my $tz = DateTime::TimeZone-&gt;new( name =&gt; 'Asia/Tokyo' );
    while (1) {
        my $now = DateTime-&gt;now( time_zone =&gt; $tz );
        $self-&gt;changed();
        $self-&gt;notify_observers($now-&gt;hour, $now-&gt;minute, $now-&gt;second);
 
        # micro second 単位のズレを調整
        sleep 1.0 - (gettimeofday)[1] / 1000000.0;
    }
}
 
1;


Tick-&gt;new-&gt;start すると1秒ごと sleep するループに陥ります。
1秒ごとに changed メソッドで更新フラグを立てて、notify_observers メソッドで監視者のオブジェクトに更新を通知します。

では、監視者として時刻をテキスト表示するオブジェクトを用意します。


package TextClock;
 
use Moose;
 
__PACKAGE__-&gt;meta-&gt;make_immutable();
 
no Moose;
 
sub update {
    my ($self, @args) = @_;
 
    local $| = 1;
    printf "\e[8D%02d:%02d:%02d", @args;
}
 
1;


Observable なモジュールの監視者になるには update メソッドが必要です。
notify_observer メソッドで更新通知される際には update メソッドが呼ばれるからです。
なので、 TextClock モジュールにも update メソッドを用意します。
引数には notify_observer メソッドに渡された引数が全部渡ってきます。

さて、これで時計の心臓部である Tick モジュールと TextClock モジュールができました。この二つを監視者と被監視者としてスクリプトにまとめてみます。


use Tick;
use TextClock;
 
my $tick = Tick-&gt;new();
$tick-&gt;add_observer( TextClock-&gt;new() );
$tick-&gt;start();


add_observer に update メソッドを持ったオブジェクトを渡してあげると、監視者と被監視者の関係が簡単にできます。
このスクリプトを実行すると現在時刻がテキストで表示され、1秒ごとに更新されます。

肝は接点が add_observer メソッドだけなところですね。
時計の表示を変えたくなったら update メソッドを持ったオブジェクトを作って add_observer してあげるだけで良くなります。（とコードの世界に書いてあった）

自分が普段使ってる言語で書き直せたらそれなりに理解できてるかしら？

まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法posted with amazlet at 09.10.12まつもとゆきひろ 日経BP出版センター 売り上げランキング: 44091おすすめ度の平均:  Rubyに導入された思考法Amazon.co.jp で詳細を見る

モダンPerl入門 (CodeZine BOOKS)posted with amazlet at 09.10.12牧 大輔 翔泳社 売り上げランキング: 18356おすすめ度の平均:  perl経験者は読んで損はしない Perl中級者におすすめしたいAmazon.co.jp で詳細を見る
</description>
<content:encoded><![CDATA[<p><a href="http://vkgtaro.jp/2009/10/12/thanksbot_on_lazy-people">Ruby で Observer パターンをやってみた</a>ところで、Perl でもやってみたくなったので書いてみました。お題は<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/">コードの世界</a>に載っているテキスト表示の時計です。</p>

<p>ruby にある <a href="http://doc.okkez.net/static/187/class/Observable.html">observer モジュール</a>は include で mixin して使うので、Perl では Moose の Role を使って実装してみます。（モダン Perl 入門にもデザパタの章で Observer パターンがありますが、あえて ruby の observer モジュールを模してみます。）</p>

<p>で、これが Observable な Role です。これは時計の心臓部 Tick の Role なので Tick::Role::Observable としました。</p>

<pre class="prettyprint">
package Tick::Role::Observable;
 
use Moose::Role;
 
has observer => (
    is => 'rw',
    default => sub { {} },
);
 
has state => (
    is => 'rw',
    default => 0,
);
 
sub is_changed {
    my ($self) = @_;
    return $self->state();
}
 
sub changed {
    my ($self) = @_;
    $self->state(1);
}
 
sub notify_observers {
    my ($self, @args) = @_;
 
    return unless $self->is_changed;
    $self->state(0);
 
    foreach my $package ( keys %{$self->observer} ) {
        eval {
            $self->observer->{$package}->update(@args);
        };
        if ( $@ ) {
            confess $@;
        }
    }
 
    return 1;
}
 
sub add_observer {
    my ($self, $obj) = @_;
 
    my $package = ref $obj;
    confess $obj . 'is not object'
        unless $package;
 
    confess $package . 'can not update'
        unless $obj->can('update');
 
    $self->observer->{$package} = $obj;
}
 
1;
</pre>

<p>このモジュールを with 'Tick::Role::Observable'; するとそのモジュールに Observer な振る舞いが付与されます。</p>

<p>元のお題の時計モジュールはこんな感じ。</p>

<pre class="prettyprint">
package Tick;
 
use Moose;
 
with 'Tick::Role::Observable';
 
__PACKAGE__->meta->make_immutable();
 
no Moose;
 
use DateTime;
use DateTime::TimeZone;
use Time::HiRes qw(sleep gettimeofday);
 
sub start {
    my ($self, @args) = @_;
 
    my $tz = DateTime::TimeZone->new( name => 'Asia/Tokyo' );
    while (1) {
        my $now = DateTime->now( time_zone => $tz );
        $self->changed();
        $self->notify_observers($now->hour, $now->minute, $now->second);
 
        # micro second 単位のズレを調整
        sleep 1.0 - (gettimeofday)[1] / 1000000.0;
    }
}
 
1;
</pre>

<p>Tick->new->start すると1秒ごと sleep するループに陥ります。<br />
1秒ごとに changed メソッドで更新フラグを立てて、notify_observers メソッドで監視者のオブジェクトに更新を通知します。</p>

<p>では、監視者として時刻をテキスト表示するオブジェクトを用意します。</p>

<pre class="prettyprint">
package TextClock;
 
use Moose;
 
__PACKAGE__->meta->make_immutable();
 
no Moose;
 
sub update {
    my ($self, @args) = @_;
 
    local $| = 1;
    printf "\e[8D%02d:%02d:%02d", @args;
}
 
1;
</pre>

<p>Observable なモジュールの監視者になるには update メソッドが必要です。<br />
notify_observer メソッドで更新通知される際には update メソッドが呼ばれるからです。<br />
なので、 TextClock モジュールにも update メソッドを用意します。<br />
引数には notify_observer メソッドに渡された引数が全部渡ってきます。</p>

<p>さて、これで時計の心臓部である Tick モジュールと TextClock モジュールができました。この二つを監視者と被監視者としてスクリプトにまとめてみます。</p>

<pre class="prettyprint">
use Tick;
use TextClock;
 
my $tick = Tick->new();
$tick->add_observer( TextClock->new() );
$tick->start();
</pre>

<p>add_observer に update メソッドを持ったオブジェクトを渡してあげると、監視者と被監視者の関係が簡単にできます。<br />
このスクリプトを実行すると現在時刻がテキストで表示され、1秒ごとに更新されます。</p>

<p>肝は接点が add_observer メソッドだけなところですね。<br />
時計の表示を変えたくなったら update メソッドを持ったオブジェクトを作って add_observer してあげるだけで良くなります。（とコードの世界に書いてあった）</p>

<p>自分が普段使ってる言語で書き直せたらそれなりに理解できてるかしら？</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41y65zf27LL._SL160_.jpg" alt="まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4822234312/taroweb-22/ref=nosim/" title="まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法" target="_blank">amazlet</a> at 09.10.12</div></div><div class="amazlet-detail">まつもとゆきひろ <br />日経BP出版センター <br />売り上げランキング: 44091<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> Rubyに導入された思考法<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798119172/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/417K6qXAgvL._SL160_.jpg" alt="モダンPerl入門 (CodeZine BOOKS)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798119172/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">モダンPerl入門 (CodeZine BOOKS)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4798119172/taroweb-22/ref=nosim/" title="モダンPerl入門 (CodeZine BOOKS)" target="_blank">amazlet</a> at 09.10.12</div></div><div class="amazlet-detail">牧 大輔 <br />翔泳社 <br />売り上げランキング: 18356<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> perl経験者は読んで損はしない<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> Perl中級者におすすめしたい<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798119172/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>
]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/designpattern" rel="TAG" title="TAG:designpattern">designpattern</a>][<a href="http://vkgtaro.jp/tag/moose" rel="TAG" title="TAG:moose">moose</a>][<a href="http://vkgtaro.jp/tag/perl" rel="TAG" title="TAG:perl">perl</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>designpattern</dc:subject><dc:subject>moose</dc:subject><dc:subject>perl</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-10-12T21:20:56+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/10/12/thanksbot_on_lazy-people">
<title>[irc][lazy-people][ruby]irc.lazy-people.org#project に thanksbot を復帰させました。</title>
<link>http://vkgtaro.jp/2009/10/12/thanksbot_on_lazy-people</link>
<description>少し間が開いてしまいましたが、irc.lazy-people.org#project にありがとうを伝える thanksbot を放流しました。
この bot に対してありがとうを伝えると http://lazy-people.org/#ありがとう新着順 の一覧に載ります。まぁ、単純なボットですね。

このチャンネルには元々 thanksbot がいたのですが、lazy-people.org Xen 化作戦失敗以降復帰させていなかったのでした。
旧 thanksbot は mojunc という tomyhero 製 Web API を使っていたのですが、これを復帰させるのがめんどうだったので Wedata を使うことにしました。ｻｰｾﾝ &gt;_
Wedata の使い方はこれで良いのかも謎w

そして、せっかくだからと覚え立ての ruby を使って書くことにしました。
IRC の bot 化には Net::IRC::Client を使い、Wedata への投稿には、こちらのモジュールを使わせていただきました。オリジナルの wedata.rb は、JsonParser に依存していたのですが、gem でインストールできる JSON を使うように少し修正しています。（修正したコード）

新規追加しかしないから wedata.rb は大げさだったかも。


#!/usr/bin/env ruby
# encoding: utf-8
 
$LOAD_PATH  message })
  end
end
 
thanksbot = ThanksBot.new(thanks_config['irc']['host'], thanks_config['irc']['port'], thanks_config['irc']['channel'],thanks_config['irc']['nicks'])
 
thanksdb = ThanksDB.new('thanks', thanks_config['wedata_api'])
 
thanksbot.add_observer(thanksdb)
thanksbot.start


ソースはここにあります。

Net::IRC::Client を継承した ThankBot と WedataDatabase を継承した ThanksDB は ovserver ライブラリを使って observer パターンで動作をひもづけてます。まつもとゆきひろ コードの世界を読んでいて、これを試して見たかったというのが大きいかもw

たぶんなにげに初めて書いた ruby プログラムのような気がします。
既存のライブラリを組み合わせただけでお手軽でした。ありがとうありがとう！

プログラミング言語 Rubyposted with amazlet at 09.10.12まつもと ゆきひろ David Flanagan オライリージャパン 売り上げランキング: 13443おすすめ度の平均:  基本書にふさわしい本 rubyマスターになるために 鬱にされる鬱然たるRuby教科書 For RubistAmazon.co.jp で詳細を見る

まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法posted with amazlet at 09.10.12まつもとゆきひろ 日経BP出版センター 売り上げランキング: 40925おすすめ度の平均:  Rubyに導入された思考法Amazon.co.jp で詳細を見る
</description>
<content:encoded><![CDATA[<p>少し間が開いてしまいましたが、irc.lazy-people.org#project にありがとうを伝える thanksbot を放流しました。<br />
この bot に対してありがとうを伝えると <a href="http://lazy-people.org/#%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E6%96%B0%E7%9D%80%E9%A0%86">http://lazy-people.org/#ありがとう新着順</a> の一覧に載ります。まぁ、単純なボットですね。</p>

<p>このチャンネルには元々 thanksbot がいたのですが、lazy-people.org Xen 化作戦失敗以降復帰させていなかったのでした。<br />
旧 thanksbot は mojunc という tomyhero 製 Web API を使っていたのですが、これを復帰させるのがめんどうだったので <a href="http://wedata.net/">Wedata</a> を使うことにしました。ｻｰｾﾝ >_<<br />
Wedata の使い方はこれで良いのかも謎w</p>

<p>そして、せっかくだからと覚え立ての ruby を使って書くことにしました。<br />
IRC の bot 化には <a href="http://github.com/cho45/net-irc">Net::IRC::Client</a> を使い、Wedata への投稿には、<a href="http://d.hatena.ne.jp/Constellation/20080503/1209844562">こちらのモジュール</a>を使わせていただきました。オリジナルの wedata.rb は、<a href="http://webos-goodies.jp/archives/51071565.html">JsonParser</a> に依存していたのですが、gem でインストールできる JSON を使うように少し修正しています。（<a href="http://lazy-people.org/browser/project/lazy-people/thanksbot/lib/wedata.rb">修正したコード</a>）</p>

<p>新規追加しかしないから wedata.rb は大げさだったかも。</p>

<pre class="prettyprint">
#!/usr/bin/env ruby
# encoding: utf-8
 
$LOAD_PATH << "lib"
 
require 'rubygems'
require 'net/irc'
require 'wedata'
require 'observer'
require 'yaml'
 
require 'pp'
 
thanks_config = YAML.load_file('config.yaml')
 
class ThanksBot < Net::IRC::Client
  include Observable
 
 
  def initialize(*args)
    p args
    @channel = args[2]
    args.delete_at 2
    super
  end
 
  def on_rpl_welcome(m)
    post JOIN, @channel
  end
 
  def on_privmsg(m)
    if match = m[1].match(/^thanksbot:\s*(.*)/)
      changed
      notify_observers('', match[0])
      post NOTICE, m[0], "#{m.prefix.nick}: #{match[0]}"
    end
  end
end
 
class ThanksDB < WedataDatabase
  def update(name, message)
    create_item(name, { 'message' => message })
  end
end
 
thanksbot = ThanksBot.new(thanks_config['irc']['host'], thanks_config['irc']['port'], thanks_config['irc']['channel'],thanks_config['irc']['nicks'])
 
thanksdb = ThanksDB.new('thanks', thanks_config['wedata_api'])
 
thanksbot.add_observer(thanksdb)
thanksbot.start
</pre>

<p><a href="http://lazy-people.org/browser/project/lazy-people/thanksbot">ソースはここ</a>にあります。</p>

<p>Net::IRC::Client を継承した ThankBot と WedataDatabase を継承した ThanksDB は ovserver ライブラリを使って observer パターンで動作をひもづけてます。<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/">まつもとゆきひろ コードの世界</a>を読んでいて、これを試して見たかったというのが大きいかもw</p>

<p>たぶんなにげに初めて書いた ruby プログラムのような気がします。<br />
既存のライブラリを組み合わせただけでお手軽でした。ありがとうありがとう！</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41CGDEMgyoL._SL160_.jpg" alt="プログラミング言語 Ruby" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">プログラミング言語 Ruby</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113946/taroweb-22/ref=nosim/" title="プログラミング言語 Ruby" target="_blank">amazlet</a> at 09.10.12</div></div><div class="amazlet-detail">まつもと ゆきひろ David Flanagan <br />オライリージャパン <br />売り上げランキング: 13443<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 基本書にふさわしい本<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> rubyマスターになるために<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 鬱にされる鬱然たるRuby教科書<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-2-0.gif" alt="2" /> For Rubist<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113946/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41y65zf27LL._SL160_.jpg" alt="まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4822234312/taroweb-22/ref=nosim/" title="まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法" target="_blank">amazlet</a> at 09.10.12</div></div><div class="amazlet-detail">まつもとゆきひろ <br />日経BP出版センター <br />売り上げランキング: 40925<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> Rubyに導入された思考法<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4822234312/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>
]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/irc" rel="TAG" title="TAG:irc">irc</a>][<a href="http://vkgtaro.jp/tag/lazy-people" rel="TAG" title="TAG:lazy-people">lazy-people</a>][<a href="http://vkgtaro.jp/tag/ruby" rel="TAG" title="TAG:ruby">ruby</a>]<p>]]>
</content:encoded>
<dc:subject>ruby</dc:subject><dc:subject>irc</dc:subject><dc:subject>lazy-people</dc:subject><dc:subject>ruby</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-10-12T21:10:05+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/10/10/count_wdays">
<title>[perl]指定日から一ヶ月後までに指定した曜日が何個あるか求める</title>
<link>http://vkgtaro.jp/2009/10/10/count_wdays</link>
<description>一ヶ月だとどの曜日も4回は必ずあるよね。29日以上ある月の場合に余った日の中に指定した曜日があれば ++ する。もっとスマートにかけるような気もする。そしてあってるのかどうかわからないw


use strict;
use warnings;
use utf8;
 
use Test::More qw/no_plan/;
use DateTime;
 
is count_wdays(7, 2009, 10, 10), 5;
is count_wdays(6, 2009, 10, 10), 5;
is count_wdays(6, 2009, 9, 13), 4;
is count_wdays(1, 2010, 1, 12), 4;
is count_wdays(3, 2010, 1, 12), 5;
is count_wdays(7, 2010, 2, 1), 4;
is count_wdays(3, 2010, 6, 11), 4;
 
sub count_wdays {
    my ( $wday, $year, $month, $day ) = @_;
 
    my $first = DateTime-&gt;new(year =&gt; $year, month =&gt; $month, day =&gt; $day);
    my $last = $first-&gt;clone-&gt;add( months =&gt; 1, end_of_month =&gt; 'limit' );
 
    # 指定日から一ヶ月後までの日数を求める
    my $dur = $last-&gt;delta_days($first);
    my $days = $dur-&gt;in_units('days');
 
    my $count = sprintf("%d", $days / 7);
    my $remainder = $days % 7;
 
    if ( $remainder ) {
        my $min = $last-&gt;subtract( days =&gt; $remainder )-&gt;wday;
        my $max = $min + $remainder;
        if ( $min = $wday ) {
            $count++;
        }
    }
 
    return $count;
}


これで間違いなければ、たぶん引数増やして最終日指定できるようにしてもうまく計算できると思うんだけどどうだろ。

こういう CPAN モジュールありそうだけどわからなかった。
</description>
<content:encoded><![CDATA[<p>一ヶ月だとどの曜日も4回は必ずあるよね。29日以上ある月の場合に余った日の中に指定した曜日があれば ++ する。もっとスマートにかけるような気もする。そしてあってるのかどうかわからないw</p>

<pre class="prettyprint">
use strict;
use warnings;
use utf8;
 
use Test::More qw/no_plan/;
use DateTime;
 
is count_wdays(7, 2009, 10, 10), 5;
is count_wdays(6, 2009, 10, 10), 5;
is count_wdays(6, 2009, 9, 13), 4;
is count_wdays(1, 2010, 1, 12), 4;
is count_wdays(3, 2010, 1, 12), 5;
is count_wdays(7, 2010, 2, 1), 4;
is count_wdays(3, 2010, 6, 11), 4;
 
sub count_wdays {
    my ( $wday, $year, $month, $day ) = @_;
 
    my $first = DateTime->new(year => $year, month => $month, day => $day);
    my $last = $first->clone->add( months => 1, end_of_month => 'limit' );
 
    # 指定日から一ヶ月後までの日数を求める
    my $dur = $last->delta_days($first);
    my $days = $dur->in_units('days');
 
    my $count = sprintf("%d", $days / 7);
    my $remainder = $days % 7;
 
    if ( $remainder ) {
        my $min = $last->subtract( days => $remainder )->wday;
        my $max = $min + $remainder;
        if ( $min <= $wday && $max >= $wday ) {
            $count++;
        }
    }
 
    return $count;
}
</pre>

<p>これで間違いなければ、たぶん引数増やして最終日指定できるようにしてもうまく計算できると思うんだけどどうだろ。</p>

<p>こういう CPAN モジュールありそうだけどわからなかった。<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/perl" rel="TAG" title="TAG:perl">perl</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>perl</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-10-10T00:45:02+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/09/17/oauth_signature">
<title>[oauth][perl]OAuth の署名付きリクエストを受け取る</title>
<link>http://vkgtaro.jp/2009/09/17/oauth_signature</link>
<description>OpenSocial で gadgets.io.makeReqeust() を受け付けとるときに OAuth の署名を確認したのでメモ。具体的に言うと mixi アプリで makeRequest() を受け取るとき。

perl で OAuth の署名確認には *::Lite の人のOAuth::Liteを使った。

mixi アプリのドキュメントにある公開鍵は、OAuth::Lite::SignatureMethod::RSA_SHA1 ではそのままだと使えなかったので public key だけ取り出しました。（Crypt::OpenSSL::RSA の new_public_key にそのまま渡されてるので）

openssl x509 -in mixi_rsa.pem -pubkey -noout

取り出した pub key を使って署名の確認。下記のコードは Catalyst のコントローラにべったり書いた。


use OAuth::Lite::SignatureMethod::RSA_SHA1;
use OAuth::Lite::Util qw(create_signature_base_string);
 
my $public_key = new(
    consumer_secret =&gt; $public_key,
);
 
my $params = $c-&gt;req-&gt;params;
 
# oauth sigunature も渡ってくるのでこれだけ取っておく。
my $oauth_signature = $params-&gt;{oauth_signature};
delete $params-&gt;{oauth_signature};
 
# HTTP Method, リクエストしてきた URI, oauth_signature 以外の parameter 全部を使って base_string 生成
my $base_string = create_signature_base_string($c-&gt;req-&gt;method, $c-&gt;uri_for(), $params );
 
# 真なら ok
my $result = $verifier-&gt;verify($base_string, $oauth_signature);
</description>
<content:encoded><![CDATA[<p>OpenSocial で gadgets.io.makeReqeust() を受け付けとるときに OAuth の署名を確認したのでメモ。具体的に言うと <a href="http://developer.mixi.co.jp/appli/pc/lets_enjoy_making_mixiapp/require_servers">mixi アプリで makeRequest() を受け取るとき</a>。</p>

<p>perl で OAuth の署名確認には *::Lite の人の<a href="http://search.cpan.org/~lyokato/OAuth-Lite-1.19/">OAuth::Lite</a>を使った。</p>

<p>mixi アプリのドキュメントにある公開鍵は、OAuth::Lite::SignatureMethod::RSA_SHA1 ではそのままだと使えなかったので public key だけ取り出しました。（<a href="http://search.cpan.org/~iroberts/Crypt-OpenSSL-RSA-0.25/">Crypt::OpenSSL::RSA</a> の new_public_key にそのまま渡されてるので）</p>

<pre class="prettyprint">openssl x509 -in mixi_rsa.pem -pubkey -noout</pre>

<p>取り出した pub key を使って署名の確認。下記のコードは Catalyst のコントローラにべったり書いた。</p>

<pre class="prettyprint">
use OAuth::Lite::SignatureMethod::RSA_SHA1;
use OAuth::Lite::Util qw(create_signature_base_string);
 
my $public_key = <<__END_OF_PUBLIC__;
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDASPndWVBy/VYe99aVM/5PWVdS
D3Vb5uAlK4cAPz091V/1SOeL3YSRuOposPMDjf5TlQuUr/TmNE6cbAUFV0hLFQuB
69KmJN+Bt8JwptFbuFetNKaMVESntg69+VPeuvuqo2+Ob7dcTXnvNxTfdJcwga9f
W5Af9jh82kQTWmZf5QIDAQAB
-----END PUBLIC KEY-----
__END_OF_PUBLIC__
 
# mixi アプリは RSA_SHA1 方式
my $verifier = OAuth::Lite::SignatureMethod::RSA_SHA1->new(
    consumer_secret => $public_key,
);
 
my $params = $c->req->params;
 
# oauth sigunature も渡ってくるのでこれだけ取っておく。
my $oauth_signature = $params->{oauth_signature};
delete $params->{oauth_signature};
 
# HTTP Method, リクエストしてきた URI, oauth_signature 以外の parameter 全部を使って base_string 生成
my $base_string = create_signature_base_string($c->req->method, $c->uri_for(), $params );
 
# 真なら ok
my $result = $verifier->verify($base_string, $oauth_signature);
</pre>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/oauth" rel="TAG" title="TAG:oauth">oauth</a>][<a href="http://vkgtaro.jp/tag/perl" rel="TAG" title="TAG:perl">perl</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>oauth</dc:subject><dc:subject>perl</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-09-17T00:10:53+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/09/11/yapcasia2009">
<title>[yapc]YAPC::Asia2009 で話してきました</title>
<link>http://vkgtaro.jp/2009/09/11/yapcasia2009</link>
<description>まずは、二日目のスピーチは到着が遅くなってご心配おかけしてすいませんでした。

今年は JPA 初の運営ということで、lestrrat さん、スタッフの皆さん、お疲れさまでした。
YAPC は、手を挙げて受理されればセッションをもらえるというのはわかっていましたが、なかなか手を挙げる勇気もなく、毎年聞く側として参加していました。
ですが、今年はコーポレートトラックがあったので YAPC で話す良いきっかけとなったと思います。「せっかくだったら一般参加でも話そう！」と踏み切れました。

私たちの Catalyst の使い方

自分が勤めている株式会社 Plugin and Core での Catalyst の使い方を紹介させていただきました。

Plucore way of using CatalystView more documents from Daisuke Komatsu.

Chaostrのソースコードはここです。

今日紹介した構成は、事例の中で紹介してる マンガ市場 DL が一番近いです。今はやっぱり $c-&gt;req, $c-&gt;session を渡すのをやめてしまってたりします。

ちなみにマンガ市場 DL の運営を行っているのはブックヴィレッジさんです。弊社は開発協力という形でリニューアルをお手伝いさせていただきました。
姉妹サイトの ToMiCo にも先日マンガ市場 DL との連携機能が付いたようです。

FormValidator::LazyWay で検証ルールをまとめよう

もう一つのセッションでは一般参加として、FormValidator::LazyWay を紹介させていただきました。

FormValidator::LazyWay で検証ルールをまとめようView more documents from Daisuke Komatsu.

話し終わった後に質問をいただいたりして本当にうれしかったです。そして返答がおどおどしててすいません。

今思い出すと、「自分でルールを作るのはどうしたら良いか」という質問で、「自分で作ったルールを読み込ませる方法」を答えていたような気がする orz

ルールの作り方は、後日 POD に掲載したいと思いますが、簡単に説明すると（ご質問いただいた方がここを見てるとは限らないんですが……）、OreOre::Rule::Hoge というルールクラスを作って、その中に入力内容を検証するメソッドを書きます。
この検証するメソッドは、入力内容が検証ルールに沿っていたら1, 沿っていなかったら0を返す用にします。

参考）Rule::Email

それから、設定で指定した言語での表記名を入れたモジュールが無いとエラーになってしまうので、OreOre::Rule::Hoge::JA などを作って、そのルールに従わなかったときのルールを表す文章を返すメソッドを用意してください。
「__field__には、__rule__が使用できます。」といったメッセージで __rule__ に当てはまる部分です。（__field__ は項目名が入ってきます）

参考）Rule::Email::JA

ちなみに発表の最後に多言語化の仕組みを変えたいと言ってたのはここの部分で、.po にしたいなぁと考えてたりします。

あと、このご質問で「いちいちコンフィグで読み込むルールモジュールを指定しておかないと行けないのも外したかったんだ、」というのを思い出しました。settings のとこに書いてあるルールモジュールを自動で読み込めばいいよね、と。

なんか早速パッチが届いたりしていて、YAPC::Asia で発表して良かったと思いました。
ほとんど blog とかで書いてなかったので、ユーザがいたとは自分でも驚きです。本当にありがとう！

自分のセッション以外では、自分以外のセッションを聞いたりしたのはもちろん、kansai.pm の人たちと再会したりいろんな人と話ができて楽しかったです。
来年も是非参加して、またなにか発表できたらいいなぁと思います。

お疲れさまでした−！
</description>
<content:encoded><![CDATA[<p>まずは、二日目のスピーチは到着が遅くなってご心配おかけしてすいませんでした。</p>

<p>今年は JPA 初の運営ということで、lestrrat さん、スタッフの皆さん、お疲れさまでした。<br />
YAPC は、手を挙げて受理されればセッションをもらえるというのはわかっていましたが、なかなか手を挙げる勇気もなく、毎年聞く側として参加していました。<br />
ですが、今年はコーポレートトラックがあったので YAPC で話す良いきっかけとなったと思います。「せっかくだったら一般参加でも話そう！」と踏み切れました。</p>

<h4>私たちの Catalyst の使い方</h4>

<p>自分が勤めている<a href="http://plucore.jp">株式会社 Plugin and Core</a> での Catalyst の使い方を紹介させていただきました。</p>

<div style="width:425px;text-align:left" id="__ss_1983860"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/vkgtaro/plucore-way-of-using-catalyst" title="Plucore way of using Catalyst">Plucore way of using Catalyst</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=plucorewayofusingcatalyst-090911084535-phpapp01&stripped_title=plucore-way-of-using-catalyst" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=plucorewayofusingcatalyst-090911084535-phpapp01&stripped_title=plucore-way-of-using-catalyst" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/vkgtaro">Daisuke Komatsu</a>.</div></div>

<p><a href="http://svn.coderepos.org/share/lang/perl/Chaostr/trunk/">Chaostrのソースコードはここです。</a></p>

<p>今日紹介した構成は、事例の中で紹介してる <a href="http://www.mangaichiba.com">マンガ市場 DL</a> が一番近いです。今はやっぱり $c->req, $c->session を渡すのをやめてしまってたりします。</p>

<p>ちなみに<a href="http://www.mangaichiba.com">マンガ市場 DL</a> の運営を行っているのはブックヴィレッジさんです。弊社は開発協力という形でリニューアルをお手伝いさせていただきました。<br />
姉妹サイトの <a href="http://tomico.jp/">ToMiCo</a> にも先日マンガ市場 DL との<a href="http://blog.tomico.jp/archives/442">連携機能が付いたようです。</a></p>

<h4>FormValidator::LazyWay で検証ルールをまとめよう</h4>

<p>もう一つのセッションでは一般参加として、<a href="http://search.cpan.org/~taro/FormValidator-LazyWay-0.06/">FormValidator::LazyWay</a> を紹介させていただきました。</p>

<div style="width:425px;text-align:left" id="__ss_1983870"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/vkgtaro/formvalidatorlazyway" title="FormValidator::LazyWay で検証ルールをまとめよう">FormValidator::LazyWay で検証ルールをまとめよう</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=formvalidator-lazyway-090911084838-phpapp01&stripped_title=formvalidatorlazyway" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=formvalidator-lazyway-090911084838-phpapp01&stripped_title=formvalidatorlazyway" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/vkgtaro">Daisuke Komatsu</a>.</div></div>

<p>話し終わった後に質問をいただいたりして本当にうれしかったです。そして返答がおどおどしててすいません。</p>

<p>今思い出すと、「自分でルールを作るのはどうしたら良いか」という質問で、「自分で作ったルールを読み込ませる方法」を答えていたような気がする orz</p>

<p>ルールの作り方は、後日 POD に掲載したいと思いますが、簡単に説明すると（ご質問いただいた方がここを見てるとは限らないんですが……）、OreOre::Rule::Hoge というルールクラスを作って、その中に入力内容を検証するメソッドを書きます。<br />
この検証するメソッドは、入力内容が検証ルールに沿っていたら1, 沿っていなかったら0を返す用にします。</p>

<p>参考）<a href="http://cpansearch.perl.org/src/TARO/FormValidator-LazyWay-0.06/lib/FormValidator/LazyWay/Rule/Email.pm">Rule::Email</a></p>

<p>それから、設定で指定した言語での表記名を入れたモジュールが無いとエラーになってしまうので、OreOre::Rule::Hoge::JA などを作って、そのルールに従わなかったときのルールを表す文章を返すメソッドを用意してください。<br />
「__field__には、__rule__が使用できます。」といったメッセージで __rule__ に当てはまる部分です。（__field__ は項目名が入ってきます）</p>

<p>参考）<a href="http://cpansearch.perl.org/src/TARO/FormValidator-LazyWay-0.06/lib/FormValidator/LazyWay/Rule/Email/JA.pm">Rule::Email::JA</a></p>

<p>ちなみに発表の最後に多言語化の仕組みを変えたいと言ってたのはここの部分で、.po にしたいなぁと考えてたりします。</p>

<p>あと、このご質問で「いちいちコンフィグで読み込むルールモジュールを指定しておかないと行けないのも外したかったんだ、」というのを思い出しました。settings のとこに書いてあるルールモジュールを自動で読み込めばいいよね、と。</p>

<p>なんか早速パッチが届いたりしていて、YAPC::Asia で発表して良かったと思いました。<br />
ほとんど blog とかで書いてなかったので、ユーザがいたとは自分でも驚きです。本当にありがとう！</p>

<p>自分のセッション以外では、自分以外のセッションを聞いたりしたのはもちろん、kansai.pm の人たちと再会したりいろんな人と話ができて楽しかったです。<br />
来年も是非参加して、またなにか発表できたらいいなぁと思います。</p>

<p>お疲れさまでした−！<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/yapc" rel="TAG" title="TAG:yapc">yapc</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>yapc</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-09-11T22:54:51+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/09/08/strobe_light">
<title>[マンガ]青山景「ストロボライト」</title>
<link>http://vkgtaro.jp/2009/09/08/strobe_light</link>
<description>表紙買いした。こういうカケアミとかで全体のトーンを表現した絵とか好きなのかも。

ストロボライトposted with amazlet at 09.09.08青山 景 太田出版 おすすめ度の平均:  ボディブロウ。 甘く切ない、大二病Amazon.co.jp で詳細を見る

ストーリーが良く練られてておもしろかったです。現在と過去を交錯させた演出とか好きなんだよね。その上、劇中に出てくる映画のシーンがも混じって出てきたりとかも良かったです。
ちょっとしたすれ違いが浮き彫りになっていく様子とかね。少し甘酸っぱい感じの青春ものでした。

なんにも考えないと面白かったとか楽しかったとか、小学生みたいな感想しか書けないですねw
</description>
<content:encoded><![CDATA[<p>表紙買いした。こういうカケアミとかで全体のトーンを表現した絵とか好きなのかも。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4778320956/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51u6KKGLx4L._SL160_.jpg" alt="ストロボライト" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4778320956/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">ストロボライト</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4778320956/taroweb-22/ref=nosim/" title="ストロボライト" target="_blank">amazlet</a> at 09.09.08</div></div><div class="amazlet-detail">青山 景 <br />太田出版 <br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> ボディブロウ。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 甘く切ない、大二病<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4778320956/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<p>ストーリーが良く練られてておもしろかったです。現在と過去を交錯させた演出とか好きなんだよね。その上、劇中に出てくる映画のシーンがも混じって出てきたりとかも良かったです。<br />
ちょっとしたすれ違いが浮き彫りになっていく様子とかね。少し甘酸っぱい感じの青春ものでした。</p>

<p>なんにも考えないと面白かったとか楽しかったとか、小学生みたいな感想しか書けないですねw<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/%E3%83%9E%E3%83%B3%E3%82%AC" rel="TAG" title="TAG:マンガ">マンガ</a>]<p>]]>
</content:encoded>
<dc:subject>マンガ</dc:subject><dc:subject>マンガ</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-09-08T00:29:59+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/09/07/twitpacker">
<title>[lazy-people][twitter]twitpacker で一気にフォローしましょう</title>
<link>http://vkgtaro.jp/2009/09/07/twitpacker</link>
<description>どうもデザイナの vkgtaro です。
lazy people の twitter アプリ第3段です。ロゴとか作ったりちょこっとだけ手伝った。



このサービスは wiki ページみたいに twitter アカウントをまとめておけて、そのパッケージをフォローするボタンを押すと一気にフォローできるってな仕組みらしいです。

YAPC::Asia 2009 のスピーカーとかもまとまってますねー。

OpenID 対応もされて、twitter OAuth による認証以外でも編集できるようになったみたいです。

詳しいことはWiki的なTwitter Followeeレコメンドサービス、「Twitpacker」にまとまってます。
</description>
<content:encoded><![CDATA[<p>どうもデザイナの vkgtaro です。<br />
<a href="http://lazy-people.org">lazy people</a> の twitter アプリ第3段です。ロゴとか作ったりちょこっとだけ手伝った。</p>

<p><a href="http://twitpacker.lazy-people.org"><img alt="twitpacker.png" src="http://vkgtaro.jp/img/twitpacker.png" width="329" height="111" /></a></p>

<p>このサービスは wiki ページみたいに twitter アカウントをまとめておけて、そのパッケージをフォローするボタンを押すと一気にフォローできるってな仕組みらしいです。</p>

<p><a href="http://twitpacker.lazy-people.org/package/YAPC::Asia%202009">YAPC::Asia 2009 のスピーカー</a>とかもまとまってますねー。</p>

<p><a href="http://d.hatena.ne.jp/tomyhero/20090905/1252160140">OpenID 対応もされて</a>、twitter OAuth による認証以外でも編集できるようになったみたいです。</p>

<p>詳しいことは<a href="http://tadateto.net/2009/09/04/2243.html">Wiki的なTwitter Followeeレコメンドサービス、「Twitpacker」</a>にまとまってます。<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/lazy-people" rel="TAG" title="TAG:lazy-people">lazy-people</a>][<a href="http://vkgtaro.jp/tag/twitter" rel="TAG" title="TAG:twitter">twitter</a>]<p>]]>
</content:encoded>
<dc:subject>Lazy People</dc:subject><dc:subject>lazy-people</dc:subject><dc:subject>twitter</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-09-07T21:49:11+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/09/07/yapcasia2009_tokyo">
<title>[perl][yapc]再度告知: YAPC::Asia Tokyo 2009 で「Catalyst」と「FormValidator::LazyWay」について話します！</title>
<link>http://vkgtaro.jp/2009/09/07/yapcasia2009_tokyo</link>
<description>もう今週ですよ！ やばい！



YAPC::Asia Tokyo 2009 で自分たちの Catalyst の使い方についてと、僕が開発のお手伝いとメンテをしている FormValidator::LazyWay について話します！


  2009/09/10 14:50 Six Apart 講堂: プラコアでは Catalyst をこう使ってます！ / Plucore way of using Catayst
  2009/09/11 09:45 西5号館: FormValidator::LazyWay で検証ルールをまとめよう


正直、段々と逃げたくなってまいりました！
昨日ちょっと練習してみたところ、おおよそ 20 分にはおさまってますというか、本番は緊張して早口になって15分くらいで終わったらどうしようとか、もう少し資料修正しようかなぁとか、LazyWay もう少し手直ししておけば良かったとか考えつつ、週末は風呂掃除でカビキラーまきすぎて気分悪くなったりしてました。

YAPC のチケットはもう追加販売分も売り切れたのかしら？　その後の特別研修は参加したいけどこれ以上休めないのよね &gt;_

あと前夜祭の yokohama.pm も行けそうにない orz

YAPC::Asia Tokyo×gihyo.jp presents―まもなく開催！アジア最大のPerl開発者の祭典，YAPC::Asia Tokyo 2009

各トラックの紹介記事へのリンク。


  第1回　開催の経緯とコーポレートトラック
  第2回　ハッカートラック
  第3回　一般トラック

</description>
<content:encoded><![CDATA[<p>もう今週ですよ！ やばい！</p>

<p><a href="http://conferences.yapcasia.org/ya2009/"><img alt="yapc2009_logo.gif" src="http://vkgtaro.jp/img/yapc2009_logo.gif" width="250" height="80" /></a></p>

<p><a href="http://conferences.yapcasia.org/ya2009/">YAPC::Asia Tokyo 2009</a> で<a href="http://plucore.jp">自分たち</a>の Catalyst の使い方についてと、僕が開発のお手伝いとメンテをしている <a href="http://search.cpan.org/~taro/FormValidator-LazyWay-0.05/">FormValidator::LazyWay</a> について話します！</p>

<ul>
  <li>2009/09/10 14:50 Six Apart 講堂: <a href="http://conferences.yapcasia.org/ya2009/talk/2168">プラコアでは Catalyst をこう使ってます！ / Plucore way of using Catayst</a></li>
  <li>2009/09/11 09:45 西5号館: <a href="http://conferences.yapcasia.org/ya2009/talk/2268">FormValidator::LazyWay で検証ルールをまとめよう</a></li>
</ul>

<p>正直、段々と逃げたくなってまいりました！<br />
昨日ちょっと練習してみたところ、おおよそ 20 分にはおさまってますというか、本番は緊張して早口になって15分くらいで終わったらどうしようとか、もう少し資料修正しようかなぁとか、LazyWay もう少し手直ししておけば良かったとか考えつつ、週末は風呂掃除でカビキラーまきすぎて気分悪くなったりしてました。</p>

<p>YAPC のチケットはもう追加販売分も売り切れたのかしら？　その後の<a href="http://conferences.yapcasia.org/ya2009/wiki?node=TrainingHome">特別研修</a>は参加したいけどこれ以上休めないのよね >_<</p>

<p>あと<a href="http://yokohama.pm.org/2009/08/yokohamapm-in-yapcasia-2009.html">前夜祭の yokohama.pm</a> も行けそうにない orz</p>

<h4>YAPC::Asia Tokyo×gihyo.jp presents―まもなく開催！アジア最大のPerl開発者の祭典，YAPC::Asia Tokyo 2009</h4>

<p>各トラックの紹介記事へのリンク。</p>

<ul>
  <li><a href="http://gihyo.jp/dev/serial/01/yapc-asia2009/0001">第1回　開催の経緯とコーポレートトラック</a></li>
  <li><a href="http://gihyo.jp/dev/serial/01/yapc-asia2009/0002">第2回　ハッカートラック</a></li>
  <li><a href="http://gihyo.jp/dev/serial/01/yapc-asia2009/0003">第3回　一般トラック</a></li>
</ul>
]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/perl" rel="TAG" title="TAG:perl">perl</a>][<a href="http://vkgtaro.jp/tag/yapc" rel="TAG" title="TAG:yapc">yapc</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>perl</dc:subject><dc:subject>yapc</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-09-07T21:31:46+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2009/08/26/text_livedoor_wiki_mt">
<title>[livedoor][mt][wiki]MovableType で Text::Livedoor::Wiki 記法</title>
<link>http://vkgtaro.jp/2009/08/26/text_livedoor_wiki_mt</link>
<description>先日、polocky さんによって Text::Livedoor::Wiki がリリースされてますね。（livedoor wiki の中の人ですよね？ って wiki に思いっきり書いてあったw）

全部の記法が plugin として書かれてて、その気になれば自分記法も作れそうな本気実装です。
自身の blog ではてな記法を livedoor 記法に含める と行ったネタも披露されてますねw

結構 Moose の話題とか書かれてたので、ひっそり読んでたところへの記法モジュール公開だったので、これを機会になにかトラックバック送るネタでもないかなぁと思って作ってみました。



mt の plugins ディレクトリ以下に TextLivedoorWiki ってディレクトリ作って TextLivedoorWiki.pl ってファイル名で突っ込んでおくと記事書くときのフォーマット欄に出てくると思います。



Text::Livedoor::Wiki の引数に渡してる storage は各々、CSS とか画像をダウンロードして、自分の URI に変えてください。（POD にも書いてありました）

MTOS-4.261-ja で確認しました。（ちなみにこの blog はまだ 3 系だったりする。MTOS にしたいけど、妙なカスタマイズしてしまってるのがアレです。）

MT の plugin はこんな書き方でよかったのかもちょっと自信ないけど動いてるのでよしとする polocky さん応援エントリw
（そして wiki ユーザとしては不良ユーザです、すいませんw）
</description>
<content:encoded><![CDATA[<p>先日、<a href="http://wiki.livedoor.jp/polocky/">polocky</a> さんによって <a href="http://search.cpan.org/dist/Text-Livedoor-Wiki/">Text::Livedoor::Wiki</a> がリリースされてますね。（<a href="http://wiki.livedoor.com/">livedoor wiki</a> の中の人ですよね？ って <a href="http://wiki.livedoor.jp/polocky/">wiki</a> に思いっきり書いてあったw）</p>

<p>全部の記法が plugin として書かれてて、その気になれば自分記法も作れそうな本気実装です。<br />
自身の blog で<a href="http://blog.livedoor.jp/polocky/archives/1445552.html">はてな記法を livedoor 記法に含める</a> と行ったネタも披露されてますねw</p>

<p>結構 Moose の話題とか書かれてたので、ひっそり読んでたところへの記法モジュール公開だったので、これを機会になにかトラックバック送るネタでもないかなぁと思って作ってみました。</p>

<p><script src="http://gist.github.com/174801.js"></script></p>

<p>mt の plugins ディレクトリ以下に TextLivedoorWiki ってディレクトリ作って TextLivedoorWiki.pl ってファイル名で突っ込んでおくと記事書くときのフォーマット欄に出てくると思います。</p>

<p><img alt="livedoorwiki_format.png" src="http://vkgtaro.jp/img/livedoorwiki_format.png" width="271" height="68" /></p>

<p>Text::Livedoor::Wiki の引数に渡してる storage は各々、CSS とか画像をダウンロードして、自分の URI に変えてください。（<a href="http://search.cpan.org/~polocky/Text-Livedoor-Wiki-0.01/lib/Text/Livedoor/Wiki.pm#DESCRIPTION">POD にも書いてありました</a>）</p>

<p>MTOS-4.261-ja で確認しました。（ちなみにこの blog はまだ 3 系だったりする。MTOS にしたいけど、妙なカスタマイズしてしまってるのがアレです。）</p>

<p>MT の plugin はこんな書き方でよかったのかもちょっと自信ないけど動いてるのでよしとする polocky さん応援エントリw<br />
（そして wiki ユーザとしては<a href="http://wiki.livedoor.jp/vkgtaro/">不良ユーザ</a>です、すいませんw）<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/livedoor" rel="TAG" title="TAG:livedoor">livedoor</a>][<a href="http://vkgtaro.jp/tag/mt" rel="TAG" title="TAG:mt">mt</a>][<a href="http://vkgtaro.jp/tag/wiki" rel="TAG" title="TAG:wiki">wiki</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>livedoor</dc:subject><dc:subject>mt</dc:subject><dc:subject>wiki</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2009-08-26T00:35:47+09:00</dc:date>
</item>


</rdf:RDF>
