<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Planet Perl.jp</title>
  <link rel="alternate" href="http://hanekomu.at/planet-perl-jp/" type="text/html"/>
  <updated>2010-09-08T14:01:19+02:00</updated>
  <generator>Plagger/0.7.17</generator>
  <subtitle>Blogs relevant to Perl from Japan</subtitle>
  <id>tag:hanekomu.at,2006:smartfeed:all</id>
  <entry>
    <title>雨が降ったら虫はどうなるの？</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/antipop/20100907/1283872227" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			気になったので質問してみました。ふるってご回答ください。
			
			雨降りは、虫にとっては大変なことではないでしょうか？特に、蚊や羽虫のような小さな虫にとっては特に。そこで、以下の疑問にお答え願います。
			
				 雨粒に直撃されるとダメージを負うのでしょうか？
				 雨粒に囲まれて地面に叩きつけられるようなことがあるのでしょうか？
				 叩きつけられた後、水たまりで溺れて死んでしまったりするのでしょうか？
				 その他、なにか大変なことがあったりするのではないでしょうか？
			
			
			question:1283769171
		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p>気になったので質問してみました。ふるってご回答ください。</p>
			<blockquote>
			<p>雨降りは、虫にとっては大変なことではないでしょうか？特に、蚊や羽虫のような小さな虫にとっては特に。そこで、以下の疑問にお答え願います。</p>
			<ol>
				<li> 雨粒に直撃されるとダメージを負うのでしょうか？</li>
				<li> 雨粒に囲まれて地面に叩きつけられるようなことがあるのでしょうか？</li>
				<li> 叩きつけられた後、水たまりで溺れて死んでしまったりするのでしょうか？</li>
				<li> その他、なにか大変なことがあったりするのではないでしょうか？</li>
			</ol>
			</blockquote>
			<p><a href="http://q.hatena.ne.jp/1283769171">question:1283769171</a></p>
		</div>
</div>
    </content>
    <published>2010-09-08T00:10:27+09:00</published>
    <updated>2010-09-08T00:10:27+09:00</updated>
    <author>
      <name>antipop</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/antipop/20100907/1283872227</id>
  </entry>
  <entry>
    <title>PolycomをPerlから操作する</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/antipop/20100907/1283866114" type="text/html"/>
    <summary type="text">
		
			弊社では、東京オフィスと京都オフィスとを常時、Polycomという、ビデオチャットの高級版みたいなシステムで接続していて、東京・京都間でいつでも距離を感じさせずに自然にコミュニケーションを図れるような仕組みが整備されています。
			それは便利な一方、たまに静かであるべき状況で相手側の音声が入って鬱陶しい場合があって、IRCや口頭で、近くにいるひとにマイクのミュートをお願いしたりすることがあります。最近、PolycomのWebインタフェイスから、リモコンのような仕組みでPolycomを操作できることがわかって、それを使ってミュートすればいいじゃないかということになりました。ということはつまりなんかしらのAPIみたいなものがあるんだろうなーと思って見てみたら、案の定あったので、Perlから叩けるようにしてみました。
			
				 http://github.com/kentaro/perl-webservice-polycom-remotecontroller
			
			以下のサンプルスクリプトでは、シェルからPolycomの各種操作（カメラの向きをかえたり、音声レベルを上下したりなど、いろいろ）を行えます。

#!/usr/bin/env perl

use strict;
use warnings;
use Config::Pit;
use Term::ReadLine;

use FindBin::libs;
use WebService::Polycom::RemoteController;

my $config = pit_get('polycom.kyoto', require =&gt; {
    host     =&gt; 'your host for polycom',
    username =&gt; 'your username for polycom',
    password =&gt; 'your password for polycom',
});

my $polycom = WebService::Polycom::RemoteController-&gt;new;
   $polycom-&gt;host($config-&gt;{host});
   $polycom-&gt;username($config-&gt;{username});
   $polycom-&gt;password($config-&gt;{password});

my $term = Term::ReadLine-&gt;new('Polycom Controller');

while (defined (my $command = $term-&gt;readline('polycom&gt; '))) {
    my $res = $polycom-&gt;button($command);
    for my $command (@{$res-&gt;commands}) {
        printf "%s: %s\n", $command-&gt;is_success ? 'OK' : 'NG', $command-&gt;message
    }
}


			http://github.com/kentaro/perl-webservice-polycom-remotecontroller/blob/master/eg/controller.pl
			これだけでは何がうれしいんだという感じですが、一歩進んで、以下のようなスクリプトを書いて、社内IRCからPolycomコマンドを叩けるようにしてみました（WebService::Polycom::RemoteControllerをラップしたライブラリなどが他にあるけど、社内用なので非公開。以下は雰囲気で）。

#!/usr/bin/env perl

use strict;
use warnings;

use YAML::Syck;
use Encode;
use FindBin;
use UNIVERSAL::require;
use Getopt::Long;

use AnyEvent;
use AnyEvent::IRC::Client;

use lib      "$FindBin::Bin/../lib";
use lib glob "$FindBin::Bin/../modules/*/lib";

my $config_file = "$FindBin::Bin/../config/kyoto.yml";
GetOptions(
    "config=s" =&gt; \$config_file,
);

my $config = LoadFile($config_file);
my $polycom_class = $config-&gt;{polycom}{class};
$polycom_class-&gt;use or die $@;
my $polycom = $polycom_class-&gt;new;

my $cv     = AE::cv;
my $client = AnyEvent::IRC::Client-&gt;new;
$client-&gt;reg_cb(
    connect   =&gt; \&amp;on_connect,
    publicmsg =&gt; \&amp;on_publicmsg,
);

$client-&gt;connect(
    $config-&gt;{irc}{server}{host}, $config-&gt;{irc}{server}{port}, {
        user     =&gt; $config-&gt;{irc}{client}{user},
        nick     =&gt; $config-&gt;{irc}{client}{nick},
        real     =&gt; $config-&gt;{irc}{client}{real},
        password =&gt; $config-&gt;{irc}{server}{password},
        timeout  =&gt; 60,
    }
);

$cv-&gt;recv;

sub on_connect {
    my ($client, $error) = @_;
    if ($error) {
        die $error;
    }
    else {
        for my $channel (@{$config-&gt;{irc}{channels}}) {
            $client-&gt;send_srv('JOIN', '#'.$channel);
        }
    }
}

sub on_publicmsg {
    my ($client, $channel, $message) = @_;
    if ($message-&gt;{params}-&gt;[1] =~ /^@{[$config-&gt;{irc}{client}{nick}]}:\s+(.+)$/i) {
        my $command = $1;
        chomp $command;
        my $res = $polycom-&gt;button($command);
        for my $result (@{$res-&gt;commands}) {
            my $reply = sprintf "%s: %s", $result-&gt;is_success ? 'OK' : 'NG', $result-&gt;message;
            $client-&gt;send_chan(
                $channel, 'NOTICE', $channel, encode('iso-2022-jp', $reply)
            );
        }
    }
}


			これで、IRCにjoinしてるひとならPolycomを机に向かっていながらにして簡単に操作できて便利になり、生産性の向上を見込めます。
			どのバージョンのPolycomにもこのAPIがあるのかなどは知らないです。
		
</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p>弊社では、東京オフィスと京都オフィスとを常時、Polycomという、ビデオチャットの高級版みたいなシステムで接続していて、東京・京都間でいつでも距離を感じさせずに自然にコミュニケーションを図れるような仕組みが整備されています。</p>
			<p>それは便利な一方、たまに静かであるべき状況で相手側の音声が入って鬱陶しい場合があって、IRCや口頭で、近くにいるひとにマイクのミュートをお願いしたりすることがあります。最近、PolycomのWebインタフェイスから、リモコンのような仕組みでPolycomを操作できることがわかって、それを使ってミュートすればいいじゃないかということになりました。ということはつまりなんかしらのAPIみたいなものがあるんだろうなーと思って見てみたら、案の定あったので、Perlから叩けるようにしてみました。</p>
			<ul>
				<li> <a href="http://github.com/kentaro/perl-webservice-polycom-remotecontroller">http://github.com/kentaro/perl-webservice-polycom-remotecontroller</a></li>
			</ul>
			<p>以下のサンプルスクリプトでは、シェルからPolycomの各種操作（カメラの向きをかえたり、音声レベルを上下したりなど、いろいろ）を行えます。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/bin/env perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>Config::Pit;
<span class="synStatement">use </span>Term::ReadLine;

<span class="synStatement">use </span>FindBin::libs;
<span class="synStatement">use </span>WebService::Polycom::RemoteController;

<span class="synStatement">my</span> <span class="synIdentifier">$config</span> = pit_get(<span class="synConstant">'polycom.kyoto'</span>, <span class="synStatement">require</span> =&gt; {
    <span class="synConstant">host     </span>=&gt; <span class="synConstant">'your host for polycom'</span>,
    <span class="synConstant">username </span>=&gt; <span class="synConstant">'your username for polycom'</span>,
    <span class="synConstant">password </span>=&gt; <span class="synConstant">'your password for polycom'</span>,
});

<span class="synStatement">my</span> <span class="synIdentifier">$polycom</span> = WebService::Polycom::RemoteController-&gt;<span class="synStatement">new</span>;
   <span class="synIdentifier">$polycom</span>-&gt;host(<span class="synIdentifier">$config</span>-&gt;{host});
   <span class="synIdentifier">$polycom</span>-&gt;username(<span class="synIdentifier">$config</span>-&gt;{username});
   <span class="synIdentifier">$polycom</span>-&gt;password(<span class="synIdentifier">$config</span>-&gt;{password});

<span class="synStatement">my</span> <span class="synIdentifier">$term</span> = Term::ReadLine-&gt;<span class="synStatement">new</span>(<span class="synConstant">'Polycom Controller'</span>);

<span class="synStatement">while</span> (<span class="synStatement">defined</span> (<span class="synStatement">my</span> <span class="synIdentifier">$command</span> = <span class="synIdentifier">$term</span>-&gt;<span class="synStatement">readline</span>(<span class="synConstant">'polycom&gt; '</span>))) {
    <span class="synStatement">my</span> <span class="synIdentifier">$res</span> = <span class="synIdentifier">$polycom</span>-&gt;button(<span class="synIdentifier">$command</span>);
    <span class="synStatement">for</span> <span class="synStatement">my</span> <span class="synIdentifier">$command</span> (@{<span class="synIdentifier">$res</span>-&gt;commands}) {
        <span class="synStatement">printf</span> <span class="synConstant">"</span><span class="synIdentifier">%s</span><span class="synConstant">: </span><span class="synIdentifier">%s</span><span class="synSpecial">\n</span><span class="synConstant">"</span>, <span class="synIdentifier">$command</span>-&gt;is_success ? <span class="synConstant">'OK'</span> : <span class="synConstant">'NG'</span>, <span class="synIdentifier">$command</span>-&gt;message
    }
}
</pre>

			<p><a href="http://github.com/kentaro/perl-webservice-polycom-remotecontroller/blob/master/eg/controller.pl">http://github.com/kentaro/perl-webservice-polycom-remotecontroller/blob/master/eg/controller.pl</a></p>
			<p>これだけでは何がうれしいんだという感じですが、一歩進んで、以下のようなスクリプトを書いて、社内IRCからPolycomコマンドを叩けるようにしてみました（WebService::Polycom::RemoteControllerをラップしたライブラリなどが他にあるけど、社内用なので非公開。以下は雰囲気で）。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/bin/env perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;

<span class="synStatement">use </span>YAML::Syck;
<span class="synStatement">use </span>Encode;
<span class="synStatement">use </span>FindBin;
<span class="synStatement">use </span>UNIVERSAL::<span class="synStatement">require</span>;
<span class="synStatement">use </span>Getopt::Long;

<span class="synStatement">use </span>AnyEvent;
<span class="synStatement">use </span>AnyEvent::IRC::Client;

<span class="synStatement">use lib</span>      <span class="synConstant">"</span><span class="synIdentifier">$FindBin::Bin</span><span class="synConstant">/../lib"</span>;
<span class="synStatement">use lib</span> <span class="synStatement">glob</span> <span class="synConstant">"</span><span class="synIdentifier">$FindBin::Bin</span><span class="synConstant">/../modules/*/lib"</span>;

<span class="synStatement">my</span> <span class="synIdentifier">$config_file</span> = <span class="synConstant">"</span><span class="synIdentifier">$FindBin::Bin</span><span class="synConstant">/../config/kyoto.yml"</span>;
GetOptions(
    <span class="synConstant">"config=s"</span> =&gt; <span class="synIdentifier">\$config_file</span>,
);

<span class="synStatement">my</span> <span class="synIdentifier">$config</span> = LoadFile(<span class="synIdentifier">$config_file</span>);
<span class="synStatement">my</span> <span class="synIdentifier">$polycom_class</span> = <span class="synIdentifier">$config</span>-&gt;{polycom}{class};
<span class="synIdentifier">$polycom_class</span>-&gt;<span class="synStatement">use or</span> <span class="synStatement">die</span> <span class="synIdentifier">$@</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$polycom</span> = <span class="synIdentifier">$polycom_class</span>-&gt;<span class="synStatement">new</span>;

<span class="synStatement">my</span> <span class="synIdentifier">$cv</span>     = AE::cv;
<span class="synStatement">my</span> <span class="synIdentifier">$client</span> = AnyEvent::IRC::Client-&gt;<span class="synStatement">new</span>;
<span class="synIdentifier">$client</span>-&gt;reg_cb(
    <span class="synStatement">connect</span>   =&gt; <span class="synIdentifier">\&amp;on_connect</span>,
    <span class="synConstant">publicmsg </span>=&gt; <span class="synIdentifier">\&amp;on_publicmsg</span>,
);

<span class="synIdentifier">$client</span>-&gt;<span class="synStatement">connect</span>(
    <span class="synIdentifier">$config</span>-&gt;{irc}{server}{host}, <span class="synIdentifier">$config</span>-&gt;{irc}{server}{port}, {
        <span class="synConstant">user     </span>=&gt; <span class="synIdentifier">$config</span>-&gt;{irc}{client}{user},
        <span class="synConstant">nick     </span>=&gt; <span class="synIdentifier">$config</span>-&gt;{irc}{client}{nick},
        <span class="synConstant">real     </span>=&gt; <span class="synIdentifier">$config</span>-&gt;{irc}{client}{real},
        <span class="synConstant">password </span>=&gt; <span class="synIdentifier">$config</span>-&gt;{irc}{server}{password},
        <span class="synConstant">timeout  </span>=&gt; <span class="synConstant">60</span>,
    }
);

<span class="synIdentifier">$cv</span>-&gt;<span class="synStatement">recv</span>;

<span class="synStatement">sub</span><span class="synIdentifier"> on_connect </span>{
    <span class="synStatement">my</span> (<span class="synIdentifier">$client</span>, <span class="synIdentifier">$error</span>) = <span class="synIdentifier">@_</span>;
    <span class="synStatement">if</span> (<span class="synIdentifier">$error</span>) {
        <span class="synStatement">die</span> <span class="synIdentifier">$error</span>;
    }
    <span class="synStatement">else</span> {
        <span class="synStatement">for</span> <span class="synStatement">my</span> <span class="synIdentifier">$channel</span> (@{<span class="synIdentifier">$config</span>-&gt;{irc}{channels}}) {
            <span class="synIdentifier">$client</span>-&gt;send_srv(<span class="synConstant">'JOIN'</span>, <span class="synConstant">'#'</span>.<span class="synIdentifier">$channel</span>);
        }
    }
}

<span class="synStatement">sub</span><span class="synIdentifier"> on_publicmsg </span>{
    <span class="synStatement">my</span> (<span class="synIdentifier">$client</span>, <span class="synIdentifier">$channel</span>, <span class="synIdentifier">$message</span>) = <span class="synIdentifier">@_</span>;
    <span class="synStatement">if</span> (<span class="synIdentifier">$message</span>-&gt;{params}-&gt;[<span class="synConstant">1</span>] =~<span class="synStatement"> /</span><span class="synConstant">^@{</span><span class="synSpecial">[$config-&gt;{irc}{client}{nick}]</span><span class="synConstant">}:</span><span class="synSpecial">\s+(.+)</span><span class="synConstant">$</span><span class="synStatement">/i</span>) {
        <span class="synStatement">my</span> <span class="synIdentifier">$command</span> = <span class="synIdentifier">$1</span>;
        <span class="synStatement">chomp</span> <span class="synIdentifier">$command</span>;
        <span class="synStatement">my</span> <span class="synIdentifier">$res</span> = <span class="synIdentifier">$polycom</span>-&gt;button(<span class="synIdentifier">$command</span>);
        <span class="synStatement">for</span> <span class="synStatement">my</span> <span class="synIdentifier">$result</span> (@{<span class="synIdentifier">$res</span>-&gt;commands}) {
            <span class="synStatement">my</span> <span class="synIdentifier">$reply</span> = <span class="synStatement">sprintf</span> <span class="synConstant">"</span><span class="synIdentifier">%s</span><span class="synConstant">: </span><span class="synIdentifier">%s</span><span class="synConstant">"</span>, <span class="synIdentifier">$result</span>-&gt;is_success ? <span class="synConstant">'OK'</span> : <span class="synConstant">'NG'</span>, <span class="synIdentifier">$result</span>-&gt;message;
            <span class="synIdentifier">$client</span>-&gt;send_chan(
                <span class="synIdentifier">$channel</span>, <span class="synConstant">'NOTICE'</span>, <span class="synIdentifier">$channel</span>, encode(<span class="synConstant">'iso-2022-jp'</span>, <span class="synIdentifier">$reply</span>)
            );
        }
    }
}
</pre>

			<p>これで、IRCにjoinしてるひとならPolycomを机に向かっていながらにして簡単に操作できて便利になり、生産性の向上を見込めます。</p>
			<p>どのバージョンのPolycomにもこのAPIがあるのかなどは知らないです。</p>
		</div>
</div>
    </content>
    <published>2010-09-07T22:28:34+09:00</published>
    <updated>2010-09-07T22:28:34+09:00</updated>
    <author>
      <name>antipop</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/antipop/20100907/1283866114</id>
  </entry>
  <entry>
    <title>Syabusyabu and drinking party at Yamatoji after YAPC::Asia 2010</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100907/1283829435" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			http://yapcasia.org/2010/
			http://atnd.org/events/7811
			Kan Fushihara organize drinking party after YAPC::Asia 2010. Join us!
			If you cannot understand  how to use atnd.org, contact to us by e-mail to me: tokuhriom at gmail.com.
			Let's drink!
			
			YAPC::Asia 2010 のあとに目黒の大和路という、おれらがよくつかってるしゃぶしゃぶ屋で打ち上げをやろうとおもうので、ふるってご参加ください。YAPC に参加してなくて、たんに perl mongers と飲みたいっていうだけの人とかでも OK です。
		
</div>
    </summary>
    <content type="html">
		&lt;div class="section"&gt;
			&lt;p&gt;&lt;a href="http://yapcasia.org/2010/" target="_blank"&gt;http://yapcasia.org/2010/&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;&lt;a href="http://atnd.org/events/7811" target="_blank"&gt;http://atnd.org/events/7811&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;Kan Fushihara organize drinking party after YAPC::Asia 2010. Join us!&lt;/p&gt;
			&lt;p&gt;If you cannot understand  how to use atnd.org, contact to us by e-mail to me: tokuhriom at gmail.com.&lt;/p&gt;
			&lt;p&gt;Let's drink!&lt;/p&gt;
			&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
			&lt;p&gt;YAPC::Asia 2010 のあとに目黒の大和路という、おれらがよくつかってるしゃぶしゃぶ屋で打ち上げをやろうとおもうので、ふるってご参加ください。YAPC に参加してなくて、たんに perl mongers と飲みたいっていうだけの人とかでも OK です。&lt;/p&gt;
		&lt;/div&gt;
</content>
    <published>2010-09-07T12:17:15+09:00</published>
    <updated>2010-09-07T12:17:15+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100907/1283829435</id>
  </entry>
  <entry>
    <title>本日の早朝勉強会の成果: added accessor: Text::MicroTemplate::File-&gt;include_path</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100906/1283740881" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		

0.18
	- added accessor: Text::MicroTemplate::File-&gt;include_path


			T::MT::File-&gt;include_path があると、Plack::App::MicroTemplate みたいなのをつくるときに便利だよねーっということで。
			これは read only accessor としているが、これをうわがきすると、キャッシュが混乱するため(まあ、キャッシュをクリアする方向で調整してもいいのだが、そもそもそうそう書換えるもんでもないので read only とした)。
		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
<pre>
0.18
	- added accessor: Text::MicroTemplate::File-&gt;include_path
</pre>

			<p>T::MT::File-&gt;include_path があると、Plack::App::MicroTemplate みたいなのをつくるときに便利だよねーっということで。</p>
			<p>これは read only accessor としているが、これをうわがきすると、キャッシュが混乱するため(まあ、キャッシュをクリアする方向で調整してもいいのだが、そもそもそうそう書換えるもんでもないので read only とした)。</p>
		</div>
</div>
    </content>
    <published>2010-09-06T11:41:21+09:00</published>
    <updated>2010-09-06T11:41:21+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100906/1283740881</id>
  </entry>
  <entry>
    <title>rafl’s Devel::bt is awesome.</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100905/1283645852" type="text/html"/>
    <summary type="text">
		
			http://frepan.64p.org/~flora/Devel-bt-0.01/lib/Devel/bt.pm

    $ perl -d:bt -MB -e'(bless \(my $o = 0), q{B::SV})-&gt;REFCNT'
    #0  0x00007f9c3215ab0e in __libc_waitpid (pid=&lt;value optimized out&gt;, stat_loc=0x7fff4c5ffbe8, options=&lt;value optimized out&gt;) at ../sysdeps/unix/sysv/linux/waitpid.c:32
    #1  0x00007f9c319168c1 in backtrace () at bt.xs:129
    #2  0x00007f9c319168ec in sighandler (sig=11) at bt.xs:135
    #3  &lt;signal handler called&gt;
    #4  0x00007f9c316c8ccf in XS_B__SV_REFCNT (my_perl=0x151c010, cv=0x177bfb8) at B.c:3360
    #5  0x000000000057d5a0 in Perl_pp_entersub (my_perl=0x151c010) at pp_hot.c:2882
    #6  0x000000000051a331 in Perl_runops_debug (my_perl=0x151c010) at dump.c:2049
    #7  0x0000000000454ab0 in S_run_body (my_perl=0x151c010, oldscope=1) at perl.c:2308
    #8  0x0000000000453d78 in perl_run (my_perl=0x151c010) at perl.c:2233
    #9  0x00000000004230fd in main (argc=6, argv=0x7fff4c600788, env=0x7fff4c6007c0) at perlmain.c:117


			このように、簡単に、gdb とかつかったことない人でも segv 時の stacktrace がとれる。内部の実装的には、gdb を起動しちゃってるんで、そこが微妙かなあ。
			catchsegv とかつかっとけやという話もあるけど。
			参考文献:
			http://0xcc.net/blog/archives/000067.html
		
</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p><a href="http://frepan.64p.org/~flora/Devel-bt-0.01/lib/Devel/bt.pm" target="_blank">http://frepan.64p.org/~flora/Devel-bt-0.01/lib/Devel/bt.pm</a></p>
<pre>
    $ perl -d:bt -MB -e'(bless \(my $o = 0), q{B::SV})-&gt;REFCNT'
    #0  0x00007f9c3215ab0e in __libc_waitpid (pid=&lt;value optimized out&gt;, stat_loc=0x7fff4c5ffbe8, options=&lt;value optimized out&gt;) at ../sysdeps/unix/sysv/linux/waitpid.c:32
    #1  0x00007f9c319168c1 in backtrace () at bt.xs:129
    #2  0x00007f9c319168ec in sighandler (sig=11) at bt.xs:135
    #3  &lt;signal handler called&gt;
    #4  0x00007f9c316c8ccf in XS_B__SV_REFCNT (my_perl=0x151c010, cv=0x177bfb8) at B.c:3360
    #5  0x000000000057d5a0 in Perl_pp_entersub (my_perl=0x151c010) at pp_hot.c:2882
    #6  0x000000000051a331 in Perl_runops_debug (my_perl=0x151c010) at dump.c:2049
    #7  0x0000000000454ab0 in S_run_body (my_perl=0x151c010, oldscope=1) at perl.c:2308
    #8  0x0000000000453d78 in perl_run (my_perl=0x151c010) at perl.c:2233
    #9  0x00000000004230fd in main (argc=6, argv=0x7fff4c600788, env=0x7fff4c6007c0) at perlmain.c:117
</pre>

			<p>このように、簡単に、gdb とかつかったことない人でも segv 時の stacktrace がとれる。内部の実装的には、gdb を起動しちゃってるんで、そこが微妙かなあ。</p>
			<p>catchsegv とかつかっとけやという話もあるけど。</p>
			<p>参考文献:</p>
			<p><a href="http://0xcc.net/blog/archives/000067.html" target="_blank">http://0xcc.net/blog/archives/000067.html</a></p>
		</div>
</div>
    </content>
    <published>2010-09-05T09:17:32+09:00</published>
    <updated>2010-09-05T09:17:32+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100905/1283645852</id>
  </entry>
  <entry>
    <title>[Perl] Iteration あれこれ</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/ZIGOROu/20100904/1283615808" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			sharding やら partitioning とかし始めると段々とその key が特定のノートやパーティションに収まるように分類した上で処理とかしたくなる訳です。
			最近、モバゲーのオープンプラットフォームのプロダクト全てで使っている、DBIx-DBHResolver にちょこちょこ新機能を入れたりしてるんですが、これに resolve_node_keys ってメソッドを最近つけたりしました。

#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);
use Data::Dump qw(dump);
use DBIx::DBHResolver;

my $resolver = DBIx::DBHResolver-&gt;new;
$resolver-&gt;config(
    +{
        clusters =&gt; +{
            TIMELINE =&gt;
              +{ nodes =&gt; [qw/TIMELINE001 TIMELINE002/], strategy =&gt; 'Key' }
        },
        connect_info =&gt; +{
            TIMELINE001 =&gt; +{},
            TIMELINE002 =&gt; +{},
        }
    }
);

my %node_keys = $resolver-&gt;resolve_node_keys( TIMELINE =&gt; [ 1 .. 20 ] );
while ( my ( $node, $keys ) = each %node_keys ) {
    say $node;
    say dump $keys;
}


			まぁこんな感じで使うんですが、

TIMELINE001
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
TIMELINE002
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]


			という出力となります。各ノードに分割アルゴリズムに則った形でノート名とキーの配列として返してくれます。余談ですがこの分割アルゴリズムは現在は Key, Range, List に対応してます。
			このキーが今度はまた万単位であってそれらのキーを元に bulk insert するとかそんな処理が出てきたりする訳ですが、毎回のごとく

my @all_values = ( 1 .. 100000 );
my @values;
while ( ( @values = splice(@all_values, 0, 1000) ) &gt; 0 ) {
  ### bulk insert by each @values
}


			みたいな処理を書いて居た訳ですがどうにもスマートじゃないなぁと前から思ってました。
			でこんな風にしてみるのはどうかなと思い立ったのがこちら。

#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

use Array::AsHash;
use Data::Dump qw(dump);
use Data::Util qw(is_scalar_ref is_number);
use Iterator::Simple qw(iterator);
use SQL::Abstract;
use SQL::Abstract::Plugin::InsertMulti;

sub bulk_insert_iterator {
    my ( $values, $size ) = @_;
    $size ||= 100;
    iterator {
        my @next = splice( @$values, 0, $size );
        return unless ( @next &gt; 0 );
        \@next;
    };
}

sub as_sql {
    my ( $stmt, @bind ) = @_;
    for my $v (@bind) {
        if ( is_scalar_ref $v ) {
            $stmt =~ s/\?/%s/;
        }
        elsif ( is_number $v ) {
            $stmt =~ s/\?/%d/;
        }
        else {
            $stmt =~ s/\?/'%s'/;
        }
    }
    sprintf( $stmt, @bind );
}

my $sql = SQL::Abstract-&gt;new;
my ( $stmt, @bind );
my %node_keys = (
    PEOPLE001_MASTER =&gt; [ map { $_ * 2 } ( 1 .. 25 ) ],
    PEOPLE002_MASTER =&gt; [ map { ( $_ * 2 ) - 1 } ( 1 .. 25 ) ]
);
my @cols = qw( id ref_id created_on );

my $ah = Array::AsHash-&gt;new( +{ array =&gt; [%node_keys] } );

while ( my ( $node, $keys ) = $ah-&gt;each ) {
    say $node;
    say '-' x 100;
    my $iter =
      bulk_insert_iterator( [ map { [ 1, $_, \'NOW()' ] } @$keys ], 10 );
    while ( my $values = $iter-&gt;next ) {
        ( $stmt, @bind ) = $sql-&gt;insert_multi( 'hidek', \@cols, $values );
        say as_sql( $stmt, @bind );
    }
    say '-' x 100;
}


			で出力はこんな風になります。

PEOPLE001_MASTER
----------------------------------------------------------------------------------------------------
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 2, NOW() ), ( 1, 4, NOW() ), ( 1, 6, NOW() ), ( 1, 8, NOW() ), ( 1, 10, NOW() ), ( 1, 12, NOW() ), ( 1, 14, NOW() ), ( 1, 16, NOW() ), ( 1, 18, NOW() ), ( 1, 20, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 22, NOW() ), ( 1, 24, NOW() ), ( 1, 26, NOW() ), ( 1, 28, NOW() ), ( 1, 30, NOW() ), ( 1, 32, NOW() ), ( 1, 34, NOW() ), ( 1, 36, NOW() ), ( 1, 38, NOW() ), ( 1, 40, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 42, NOW() ), ( 1, 44, NOW() ), ( 1, 46, NOW() ), ( 1, 48, NOW() ), ( 1, 50, NOW() )
----------------------------------------------------------------------------------------------------
PEOPLE002_MASTER
----------------------------------------------------------------------------------------------------
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 1, NOW() ), ( 1, 3, NOW() ), ( 1, 5, NOW() ), ( 1, 7, NOW() ), ( 1, 9, NOW() ), ( 1, 11, NOW() ), ( 1, 13, NOW() ), ( 1, 15, NOW() ), ( 1, 17, NOW() ), ( 1, 19, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 21, NOW() ), ( 1, 23, NOW() ), ( 1, 25, NOW() ), ( 1, 27, NOW() ), ( 1, 29, NOW() ), ( 1, 31, NOW() ), ( 1, 33, NOW() ), ( 1, 35, NOW() ), ( 1, 37, NOW() ), ( 1, 39, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 41, NOW() ), ( 1, 43, NOW() ), ( 1, 45, NOW() ), ( 1, 47, NOW() ), ( 1, 49, NOW() )
----------------------------------------------------------------------------------------------------


			まぁ最初の Array::AsHash は each でも一向に構わない訳ですが、何となく試しに使ってみました。
			汎用的な Iterator を作りたいのであれば、Iterator::Simple が一番軽量で汎用的だなーという印象。
		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p>sharding やら partitioning とかし始めると段々とその key が特定のノートやパーティションに収まるように分類した上で処理とかしたくなる訳です。</p>
			<p>最近、モバゲーのオープンプラットフォームのプロダクト全てで使っている、<a href="http://search.cpan.org/~zigorou/DBIx-DBHResolver/">DBIx-DBHResolver</a> にちょこちょこ新機能を入れたりしてるんですが、これに resolve_node_keys って<a href="http://javascript.g.hatena.ne.jp/keyword/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89" class="okeyword">メソッド</a>を最近つけたりしました。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/bin/perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>feature <span class="synConstant">qw(say)</span>;
<span class="synStatement">use </span>Data::Dump <span class="synConstant">qw(dump)</span>;
<span class="synStatement">use </span>DBIx::DBHResolver;

<span class="synStatement">my</span> <span class="synIdentifier">$resolver</span> = DBIx::DBHResolver-&gt;<span class="synStatement">new</span>;
<span class="synIdentifier">$resolver</span>-&gt;config(
    +{
        <span class="synConstant">clusters </span>=&gt; +{
            <span class="synConstant">TIMELINE </span>=&gt;
              +{ <span class="synConstant">nodes </span>=&gt; [<span class="synConstant">qw/TIMELINE001 TIMELINE002/</span>], <span class="synConstant">strategy </span>=&gt; <span class="synConstant">'Key'</span> }
        },
        <span class="synConstant">connect_info </span>=&gt; +{
            <span class="synConstant">TIMELINE001 </span>=&gt; +{},
            <span class="synConstant">TIMELINE002 </span>=&gt; +{},
        }
    }
);

<span class="synStatement">my</span> <span class="synIdentifier">%node_keys</span> = <span class="synIdentifier">$resolver</span>-&gt;resolve_node_keys( <span class="synConstant">TIMELINE </span>=&gt; [ <span class="synConstant">1</span> .. <span class="synConstant">20</span> ] );
<span class="synStatement">while</span> ( <span class="synStatement">my</span> ( <span class="synIdentifier">$node</span>, <span class="synIdentifier">$keys</span> ) = <span class="synStatement">each</span> <span class="synIdentifier">%node_keys</span> ) {
    say <span class="synIdentifier">$node</span>;
    say <span class="synStatement">dump</span> <span class="synIdentifier">$keys</span>;
}
</pre>

			<p>まぁこんな感じで使うんですが、</p>
<pre>
TIMELINE001
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
TIMELINE002
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
</pre>

			<p>という出力となります。各ノードに分割アルゴリズムに則った形でノート名とキーの<a href="http://javascript.g.hatena.ne.jp/keyword/%E9%85%8D%E5%88%97" class="okeyword">配列</a>として返してくれます。余談ですがこの分割アルゴリズムは現在は Key, Range, List に対応してます。</p>
			<p>このキーが今度はまた万単位であってそれらのキーを元に bulk insert するとかそんな処理が出てきたりする訳ですが、毎回のごとく</p>
<pre class="syntax-highlight">
<span class="synStatement">my</span> <span class="synIdentifier">@all_values</span> = ( <span class="synConstant">1</span> .. <span class="synConstant">100000</span> );
<span class="synStatement">my</span> <span class="synIdentifier">@values</span>;
<span class="synStatement">while</span> ( ( <span class="synIdentifier">@values</span> = <span class="synStatement">splice</span>(<span class="synIdentifier">@all_values</span>, <span class="synConstant">0</span>, <span class="synConstant">1000</span>) ) &gt; <span class="synConstant">0</span> ) {
  <span class="synComment">### bulk insert by each @values</span>
}
</pre>

			<p>みたいな処理を書いて居た訳ですがどうにもスマートじゃないなぁと前から思ってました。</p>
			<p>でこんな風にしてみるのはどうかなと思い立ったのがこちら。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/bin/perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>feature <span class="synConstant">qw(say)</span>;

<span class="synStatement">use </span>Array::AsHash;
<span class="synStatement">use </span>Data::Dump <span class="synConstant">qw(dump)</span>;
<span class="synStatement">use </span>Data::Util <span class="synConstant">qw(is_scalar_ref is_number)</span>;
<span class="synStatement">use </span>Iterator::Simple <span class="synConstant">qw(iterator)</span>;
<span class="synStatement">use </span>SQL::Abstract;
<span class="synStatement">use </span>SQL::Abstract::Plugin::InsertMulti;

<span class="synStatement">sub</span><span class="synIdentifier"> bulk_insert_iterator </span>{
    <span class="synStatement">my</span> ( <span class="synIdentifier">$values</span>, <span class="synIdentifier">$size</span> ) = <span class="synIdentifier">@_</span>;
    <span class="synIdentifier">$size</span> ||= <span class="synConstant">100</span>;
    iterator {
        <span class="synStatement">my</span> <span class="synIdentifier">@next</span> = <span class="synStatement">splice</span>( <span class="synIdentifier">@$values</span>, <span class="synConstant">0</span>, <span class="synIdentifier">$size</span> );
        <span class="synStatement">return</span> <span class="synStatement">unless</span> ( <span class="synIdentifier">@next</span> &gt; <span class="synConstant">0</span> );
        <span class="synIdentifier">\@next</span>;
    };
}

<span class="synStatement">sub</span><span class="synIdentifier"> as_sql </span>{
    <span class="synStatement">my</span> ( <span class="synIdentifier">$stmt</span>, <span class="synIdentifier">@bind</span> ) = <span class="synIdentifier">@_</span>;
    <span class="synStatement">for</span> <span class="synStatement">my</span> <span class="synIdentifier">$v</span> (<span class="synIdentifier">@bind</span>) {
        <span class="synStatement">if</span> ( is_scalar_ref <span class="synIdentifier">$v</span> ) {
            <span class="synIdentifier">$stmt</span> =~ <span class="synStatement">s/</span><span class="synSpecial">\?</span><span class="synStatement">/</span><span class="synIdentifier">%s</span><span class="synStatement">/</span>;
        }
        <span class="synStatement">elsif</span> ( is_number <span class="synIdentifier">$v</span> ) {
            <span class="synIdentifier">$stmt</span> =~ <span class="synStatement">s/</span><span class="synSpecial">\?</span><span class="synStatement">/</span><span class="synIdentifier">%d</span><span class="synStatement">/</span>;
        }
        <span class="synStatement">else</span> {
            <span class="synIdentifier">$stmt</span> =~ <span class="synStatement">s/</span><span class="synSpecial">\?</span><span class="synStatement">/</span><span class="synConstant">'</span><span class="synIdentifier">%s</span><span class="synConstant">'</span><span class="synStatement">/</span>;
        }
    }
    <span class="synStatement">sprintf</span>( <span class="synIdentifier">$stmt</span>, <span class="synIdentifier">@bind</span> );
}

<span class="synStatement">my</span> <span class="synIdentifier">$sql</span> = SQL::Abstract-&gt;<span class="synStatement">new</span>;
<span class="synStatement">my</span> ( <span class="synIdentifier">$stmt</span>, <span class="synIdentifier">@bind</span> );
<span class="synStatement">my</span> <span class="synIdentifier">%node_keys</span> = (
    <span class="synConstant">PEOPLE001_MASTER </span>=&gt; [ <span class="synStatement">map</span> { <span class="synIdentifier">$_</span> * <span class="synConstant">2</span> } ( <span class="synConstant">1</span> .. <span class="synConstant">25</span> ) ],
    <span class="synConstant">PEOPLE002_MASTER </span>=&gt; [ <span class="synStatement">map</span> { ( <span class="synIdentifier">$_</span> * <span class="synConstant">2</span> ) - <span class="synConstant">1</span> } ( <span class="synConstant">1</span> .. <span class="synConstant">25</span> ) ]
);
<span class="synStatement">my</span> <span class="synIdentifier">@cols</span> = <span class="synConstant">qw( id ref_id created_on )</span>;

<span class="synStatement">my</span> <span class="synIdentifier">$ah</span> = Array::AsHash-&gt;<span class="synStatement">new</span>( +{ <span class="synConstant">array </span>=&gt; [<span class="synIdentifier">%node_keys</span>] } );

<span class="synStatement">while</span> ( <span class="synStatement">my</span> ( <span class="synIdentifier">$node</span>, <span class="synIdentifier">$keys</span> ) = <span class="synIdentifier">$ah</span>-&gt;<span class="synStatement">each</span> ) {
    say <span class="synIdentifier">$node</span>;
    say <span class="synConstant">'-'</span> x <span class="synConstant">100</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$iter</span> =
      bulk_insert_iterator( [ <span class="synStatement">map</span> { [ <span class="synConstant">1</span>, <span class="synIdentifier">$_</span>, \<span class="synConstant">'NOW()'</span> ] } <span class="synIdentifier">@$keys</span> ], <span class="synConstant">10</span> );
    <span class="synStatement">while</span> ( <span class="synStatement">my</span> <span class="synIdentifier">$values</span> = <span class="synIdentifier">$iter</span>-&gt;<span class="synStatement">next</span> ) {
        ( <span class="synIdentifier">$stmt</span>, <span class="synIdentifier">@bind</span> ) = <span class="synIdentifier">$sql</span>-&gt;insert_multi( <span class="synConstant">'hidek'</span>, <span class="synIdentifier">\@cols</span>, <span class="synIdentifier">$values</span> );
        say as_sql( <span class="synIdentifier">$stmt</span>, <span class="synIdentifier">@bind</span> );
    }
    say <span class="synConstant">'-'</span> x <span class="synConstant">100</span>;
}
</pre>

			<p>で出力はこんな風になります。</p>
<pre>
PEOPLE001_MASTER
----------------------------------------------------------------------------------------------------
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 2, NOW() ), ( 1, 4, NOW() ), ( 1, 6, NOW() ), ( 1, 8, NOW() ), ( 1, 10, NOW() ), ( 1, 12, NOW() ), ( 1, 14, NOW() ), ( 1, 16, NOW() ), ( 1, 18, NOW() ), ( 1, 20, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 22, NOW() ), ( 1, 24, NOW() ), ( 1, 26, NOW() ), ( 1, 28, NOW() ), ( 1, 30, NOW() ), ( 1, 32, NOW() ), ( 1, 34, NOW() ), ( 1, 36, NOW() ), ( 1, 38, NOW() ), ( 1, 40, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 42, NOW() ), ( 1, 44, NOW() ), ( 1, 46, NOW() ), ( 1, 48, NOW() ), ( 1, 50, NOW() )
----------------------------------------------------------------------------------------------------
PEOPLE002_MASTER
----------------------------------------------------------------------------------------------------
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 1, NOW() ), ( 1, 3, NOW() ), ( 1, 5, NOW() ), ( 1, 7, NOW() ), ( 1, 9, NOW() ), ( 1, 11, NOW() ), ( 1, 13, NOW() ), ( 1, 15, NOW() ), ( 1, 17, NOW() ), ( 1, 19, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 21, NOW() ), ( 1, 23, NOW() ), ( 1, 25, NOW() ), ( 1, 27, NOW() ), ( 1, 29, NOW() ), ( 1, 31, NOW() ), ( 1, 33, NOW() ), ( 1, 35, NOW() ), ( 1, 37, NOW() ), ( 1, 39, NOW() )
INSERT INTO hidek ( id, ref_id, created_on ) VALUES ( 1, 41, NOW() ), ( 1, 43, NOW() ), ( 1, 45, NOW() ), ( 1, 47, NOW() ), ( 1, 49, NOW() )
----------------------------------------------------------------------------------------------------
</pre>

			<p>まぁ最初の <a href="http://search.cpan.org/dist/Array-AsHash/lib/Array/AsHash.pm">Array::AsHash</a> は each でも一向に構わない訳ですが、何となく試しに使ってみました。</p>
			<p>汎用的な Iterator を作りたいのであれば、<a href="http://search.cpan.org/dist/Iterator-Simple/lib/Iterator/Simple.pm">Iterator::Simple</a> が一番軽量で汎用的だなーという印象。</p>
		</div>
</div>
    </content>
    <category term="Perl"/>
    <published>2010-09-05T00:56:48+09:00</published>
    <updated>2010-09-05T00:56:48+09:00</updated>
    <author>
      <name>ZIGOROu</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/ZIGOROu/20100904/1283615808</id>
  </entry>
  <entry>
    <title>How to authenticate with basic auth + htpasswd</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100904/1283573706" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
<pre class="syntax-highlight">
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>Authen::Htpasswd;
<span class="synStatement">use </span>Plack::Builder;

<span class="synStatement">my</span> <span class="synIdentifier">$app</span> =<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
    [<span class="synConstant">200</span>, [], [<span class="synConstant">'OK'</span>]]
};

builder {
    <span class="synStatement">my</span> <span class="synIdentifier">$authen</span> = Authen::Htpasswd-&gt;<span class="synStatement">new</span>(<span class="synConstant">'user.txt'</span>, {<span class="synConstant">encrypt_hash </span>=&gt; <span class="synConstant">'md5'</span>});
    enable <span class="synConstant">'Auth::Basic'</span>,
        <span class="synConstant">authenticator </span>=&gt;<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
            <span class="synStatement">my</span> (<span class="synIdentifier">$username</span>, <span class="synIdentifier">$password</span>) = <span class="synIdentifier">@_</span>;
            <span class="synStatement">my</span> <span class="synIdentifier">$user</span> = <span class="synIdentifier">$authen</span>-&gt;lookup_user(<span class="synIdentifier">$username</span>);
            <span class="synStatement">return</span> <span class="synIdentifier">$user</span> &amp;&amp; <span class="synIdentifier">$user</span>-&gt;check_password(<span class="synIdentifier">$password</span>);
        };
    <span class="synIdentifier">$app</span>;
};
</pre>

		</div>
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
<pre class="syntax-highlight">
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>Authen::Htpasswd;
<span class="synStatement">use </span>Plack::Builder;

<span class="synStatement">my</span> <span class="synIdentifier">$app</span> =<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
    [<span class="synConstant">200</span>, [], [<span class="synConstant">'OK'</span>]]
};

builder {
    <span class="synStatement">my</span> <span class="synIdentifier">$authen</span> = Authen::Htpasswd-&gt;<span class="synStatement">new</span>(<span class="synConstant">'user.txt'</span>, {<span class="synConstant">encrypt_hash </span>=&gt; <span class="synConstant">'md5'</span>});
    enable <span class="synConstant">'Auth::Basic'</span>,
        <span class="synConstant">authenticator </span>=&gt;<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
            <span class="synStatement">my</span> (<span class="synIdentifier">$username</span>, <span class="synIdentifier">$password</span>) = <span class="synIdentifier">@_</span>;
            <span class="synStatement">my</span> <span class="synIdentifier">$user</span> = <span class="synIdentifier">$authen</span>-&gt;lookup_user(<span class="synIdentifier">$username</span>);
            <span class="synStatement">return</span> <span class="synIdentifier">$user</span> &amp;&amp; <span class="synIdentifier">$user</span>-&gt;check_password(<span class="synIdentifier">$password</span>);
        };
    <span class="synIdentifier">$app</span>;
};
</pre>

		</div>
</div>
    </content>
    <published>2010-09-04T13:15:06+09:00</published>
    <updated>2010-09-04T13:15:06+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100904/1283573706</id>
  </entry>
  <entry>
    <title>tokuhirom.vox.com 移転のおしらせ</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100903/1283508291" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			vox がおわるというので tokuhirom.wordpress.com にうつした。
			import tool があるので簡単だった。
			しかし今後も更新の予定はない。
		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p>vox がおわるというので tokuhirom.wordpress.com にうつした。</p>
			<p>import tool があるので簡単だった。</p>
			<p>しかし今後も更新の予定はない。</p>
		</div>
</div>
    </content>
    <published>2010-09-03T19:04:51+09:00</published>
    <updated>2010-09-03T19:04:51+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100903/1283508291</id>
  </entry>
  <entry>
    <title>Data-MessagePack 0.16 だした</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100903/1283508290" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			
				Duselongdouble してるときに、double の文字列表現がちがくなるのでテストがこけるという問題があって、それをなおした。
			
			あと、PP 版の pull request がまかまかさんからきており、review して 2 点ほど追加要望をつけてさしもどし中(お前がやれってはなしなんですが、ちょっと手をつける余裕がなくてすみません)。
			というわけで、ぼちぼち PP 版もでるんじゃないかとおもいます。
		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<ul>
				<li>Duselongdouble してるときに、double の文字列表現がちがくなるのでテストがこけるという問題があって、それをなおした。</li>
			</ul>
			<p>あと、PP 版の pull request がまかまかさんからきており、review して 2 点ほど追加要望をつけてさしもどし中(お前がやれってはなしなんですが、ちょっと手をつける余裕がなくてすみません)。</p>
			<p>というわけで、ぼちぼち PP 版もでるんじゃないかとおもいます。</p>
		</div>
</div>
    </content>
    <published>2010-09-03T19:04:50+09:00</published>
    <updated>2010-09-03T19:04:50+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100903/1283508290</id>
  </entry>
  <entry>
    <title>withoutworldwritables の話</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100903/1283503900" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			http://use.perl.org/~cosimo/journal/37554
			
				withoutworldwritables という謎の suffix をつけて CPAN にアップしてる人がいて、だいたいそういうモジュールはクオリティがひくいなあとおもっていたのだけど、この suffix は PAUSE が自動的につけていて、world writable なファイルがふくまれているときに自動的につくものだということを miyagawa さんからおしえていただきました。
			

		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p><a href="http://use.perl.org/~cosimo/journal/37554" target="_blank">http://use.perl.org/~cosimo/journal/37554</a></p>
			<ul>
				<li>withoutworldwritables という謎の suffix をつけて CPAN にアップしてる人がいて、だいたいそういうモジュールはクオリティがひくいなあとおもっていたのだけど、この suffix は PAUSE が自動的につけていて、world writable なファイルがふくまれているときに自動的につくものだということを miyagawa さんからおしえていただきました。</li>
			</ul>

		</div>
</div>
    </content>
    <published>2010-09-03T17:51:40+09:00</published>
    <updated>2010-09-03T17:51:40+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100903/1283503900</id>
  </entry>
  <entry>
    <title>Re: Algorithm - 0と1を次々と返す簡単なお仕事</title>
    <link rel="alternate" href="http://d.hatena.ne.jp/tokuhirom/20100903/1283466812" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		
			http://blog.livedoor.jp/dankogai/archives/51512419.html
			Perl5.10 なら state がつかえるから、以下のように書けるのではないか。

#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use Test::More;

sub flipflop {
    state $p = !shift;
    $p = !$p
}

ok !flipflop();
ok flipflop();
ok !flipflop();
ok flipflop();

done_testing;


		
</div>
    </summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
		<div class="section">
			<p><a href="http://blog.livedoor.jp/dankogai/archives/51512419.html" target="_blank">http://blog.livedoor.jp/dankogai/archives/51512419.html</a></p>
			<p>Perl5.10 なら state がつかえるから、以下のように書けるのではないか。</p>
<pre>
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use Test::More;

sub flipflop {
    state $p = !shift;
    $p = !$p
}

ok !flipflop();
ok flipflop();
ok !flipflop();
ok flipflop();

done_testing;
</pre>

		</div>
</div>
    </content>
    <published>2010-09-03T07:33:32+09:00</published>
    <updated>2010-09-03T07:33:32+09:00</updated>
    <author>
      <name>tokuhirom</name>
    </author>
    <id>tag:hanekomu.at,2006:http://d.hatena.ne.jp/tokuhirom/20100903/1283466812</id>
  </entry>
  <entry>
    <title>$hidek-&gt;{age}++; #40</title>
    <link rel="alternate" href="http://feedproxy.google.com/~r/hidek/~3/8b8meSYeCI8/hidek-age_40.php" type="text/html"/>
    <summary type="text">赤外線通信って本当に危険ですね。
こんばんは。

2010年9月2日をもってわたくし、とうとう40歳を迎えました。

昨日は&lt;a href="http://twitter.com/myfinder"&gt;myfinder&lt;/a&gt;さん幹事のもと、ダブル成人式と題して30人を超える人に祝って頂きました。たくさんのプレゼントと暖かいお祝いの言葉を頂いて本当に感激でした。


&lt;a href="http://hidek.ficia.com/pl/album-photo/A349BD40-B6AA-11DF-9732-6FCD6E373816/gpShX6q23xGKDe5ar-Uyjg" target="_blank"&gt;&lt;img src="http://hidek.pst.ficia.com/m/gpShX6q23xGKDe5ar-Uyjg.jpg" title="hidek Ficia Photo" alt="hidek Ficia Photo" width="375" \ /&gt;&lt;/a&gt;


中でも&lt;a href="http://twitter.com/__gfx__"&gt;gfx&lt;/a&gt;さん、&lt;a href="http://twitter.com/hirose31"&gt;hirose31&lt;/a&gt;さん、&lt;a href="http://twitter.com/moriyoshi"&gt;moriyoshi&lt;/a&gt;さんという豪華すぎる面々によるLT大会までしていただいて感謝感謝です。というかあれは一おっさんの誕生日だけでやるにはもったいないクオリティだと思います。本当にありがとうございました。


&lt;a href="http://hidek.ficia.com/pl/album-photo/A349BD40-B6AA-11DF-9732-6FCD6E373816/PgJxV6q23xGNqe5ar-Uyjg" target="_blank"&gt;&lt;img src="http://hidek.pst.ficia.com/m/PgJxV6q23xGNqe5ar-Uyjg.jpg" title="hidek Ficia Photo" alt="hidek Ficia Photo" width="375" /&gt;&lt;/a&gt;


あんな大勢の方々に笑顔で祝って頂ける自分は本当に幸せだと思います。
本当にありがとうございます。
40歳と言えば不惑ということでこれからも惑わずに楽しく過ごせたらと思います。
今後ともよろしくお願い申し上げます！


&lt;a href="http://fujiwara.ficia.com/pl/album-photo/0668D4C8-B62A-11DF-AEE5-EE5AAFE5328E/hEg8Zf-13xGUb-5ar-Uyjg" target="_blank"&gt;&lt;img src="http://fujiwara.pst.ficia.com/m/hEg8Zf-13xGUb-5ar-Uyjg.jpg" title=" Ficia Photo" alt=" Ficia Photo" width="375" /&gt;&lt;/a&gt;


そういえば、出社したらガリガリ君40本とコーラ40本いう粋なプレゼントも待っていました。


&lt;a href="http://www.flickr.com/photos/hidek/4951649820/" title="P1000476.jpg by hidek, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4129/4951649820_7af70be7bc.jpg" width="375" height="500" alt="P1000476.jpg" /&gt;&lt;/a&gt;


では、頂いた篠田麻里子の写真集を読みながら40代最初の睡眠に就こうと思います。
おやすみなさい。


&lt;a href="http://hidek.ficia.com/pl/album-photo/A349BD40-B6AA-11DF-9732-6FCD6E373816/dEieJKy23xGnFm_Nbjc4Fg" target="_blank"&gt;&lt;img src="http://hidek.pst.ficia.com/m/dEieJKy23xGnFm_Nbjc4Fg.jpg" title="hidek Ficia Photo" alt="hidek Ficia Photo" width="375" /&gt;&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/hidek?a=8b8meSYeCI8:8bnMOvGYCGM:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hidek?i=8b8meSYeCI8:8bnMOvGYCGM:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/hidek?a=8b8meSYeCI8:8bnMOvGYCGM:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hidek?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/hidek?a=8b8meSYeCI8:8bnMOvGYCGM:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hidek?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</summary>
    <content type="text">赤外線通信って本当に危険ですね。
こんばんは。

2010年9月2日をもってわたくし、とうとう40歳を迎えました。

昨日は&lt;a href="http://twitter.com/myfinder"&gt;myfinder&lt;/a&gt;さん幹事のもと、ダブル成人式と題して30人を超える人に祝って頂きました。たくさんのプレゼントと暖かいお祝いの言葉を頂いて本当に感激でした。


&lt;a href="http://hidek.ficia.com/pl/album-photo/A349BD40-B6AA-11DF-9732-6FCD6E373816/gpShX6q23xGKDe5ar-Uyjg" target="_blank"&gt;&lt;img src="http://hidek.pst.ficia.com/m/gpShX6q23xGKDe5ar-Uyjg.jpg" title="hidek Ficia Photo" alt="hidek Ficia Photo" width="375" \ /&gt;&lt;/a&gt;


中でも&lt;a href="http://twitter.com/__gfx__"&gt;gfx&lt;/a&gt;さん、&lt;a href="http://twitter.com/hirose31"&gt;hirose31&lt;/a&gt;さん、&lt;a href="http://twitter.com/moriyoshi"&gt;moriyoshi&lt;/a&gt;さんという豪華すぎる面々によるLT大会までしていただいて感謝感謝です。というかあれは一おっさんの誕生日だけでやるにはもったいないクオリティだと思います。本当にありがとうございました。


&lt;a href="http://hidek.ficia.com/pl/album-photo/A349BD40-B6AA-11DF-9732-6FCD6E373816/PgJxV6q23xGNqe5ar-Uyjg" target="_blank"&gt;&lt;img src="http://hidek.pst.ficia.com/m/PgJxV6q23xGNqe5ar-Uyjg.jpg" title="hidek Ficia Photo" alt="hidek Ficia Photo" width="375" /&gt;&lt;/a&gt;


あんな大勢の方々に笑顔で祝って頂ける自分は本当に幸せだと思います。
本当にありがとうございます。
40歳と言えば不惑ということでこれからも惑わずに楽しく過ごせたらと思います。
今後ともよろしくお願い申し上げます！


&lt;a href="http://fujiwara.ficia.com/pl/album-photo/0668D4C8-B62A-11DF-AEE5-EE5AAFE5328E/hEg8Zf-13xGUb-5ar-Uyjg" target="_blank"&gt;&lt;img src="http://fujiwara.pst.ficia.com/m/hEg8Zf-13xGUb-5ar-Uyjg.jpg" title=" Ficia Photo" alt=" Ficia Photo" width="375" /&gt;&lt;/a&gt;


そういえば、出社したらガリガリ君40本とコーラ40本いう粋なプレゼントも待っていました。


&lt;a href="http://www.flickr.com/photos/hidek/4951649820/" title="P1000476.jpg by hidek, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4129/4951649820_7af70be7bc.jpg" width="375" height="500" alt="P1000476.jpg" /&gt;&lt;/a&gt;


では、頂いた篠田麻里子の写真集を読みながら40代最初の睡眠に就こうと思います。
おやすみなさい。


&lt;a href="http://hidek.ficia.com/pl/album-photo/A349BD40-B6AA-11DF-9732-6FCD6E373816/dEieJKy23xGnFm_Nbjc4Fg" target="_blank"&gt;&lt;img src="http://hidek.pst.ficia.com/m/dEieJKy23xGnFm_Nbjc4Fg.jpg" title="hidek Ficia Photo" alt="hidek Ficia Photo" width="375" /&gt;&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/hidek?a=8b8meSYeCI8:8bnMOvGYCGM:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hidek?i=8b8meSYeCI8:8bnMOvGYCGM:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/hidek?a=8b8meSYeCI8:8bnMOvGYCGM:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hidek?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/hidek?a=8b8meSYeCI8:8bnMOvGYCGM:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hidek?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
    <published>2010-09-03T00:03:19+09:00</published>
    <updated>2010-09-03T00:03:19+09:00</updated>
    <author>
      <name>nobody</name>
    </author>
    <id>tag:hanekomu.at,2006:http://blog.hide-k.net/archives/2010/09/hidek-age_40.php</id>
  </entry>
  <entry>
    <title>祝！共著『ソーシャルストリーム・ビジネス』重版決定♪　好評発売中！ </title>
    <link rel="alternate" href="http://feedproxy.google.com/~r/at/webry/info/~3/mdjfJVviD6c/article_2.html" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">川崎がリクルートの メディアテクノロジーラボ が執筆した書籍『ソーシャルストリーム・ビジネスTwitter、Facebook、iPhone時代の消費者を巻き込むビジネスの新ルール』の増刷が決定しました！8888!

</div>
    </summary>
    <content type="text">川崎がリクルートの メディアテクノロジーラボ が執筆した書籍『ソーシャルストリーム・ビジネスTwitter、Facebook、iPhone時代の消費者を巻き込むビジネスの新ルール』の増刷が決定しました！8888!
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hASzcihJe289fwuFbfb2w4hEhOM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hASzcihJe289fwuFbfb2w4hEhOM/0/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hASzcihJe289fwuFbfb2w4hEhOM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hASzcihJe289fwuFbfb2w4hEhOM/1/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/at/webry/info/~4/mdjfJVviD6c"&gt;</content>
    <category term="ソーシャルストリーム リクルート"/>
    <published>2010-09-01T03:17:00+09:00</published>
    <updated>2010-09-01T03:17:00+09:00</updated>
    <author>
      <name>Kawanet Tech Blog</name>
    </author>
    <id>tag:hanekomu.at,2006:http://feedproxy.google.com/~r/at/webry/info/~3/mdjfJVviD6c/article_2.html</id>
  </entry>
  <entry>
    <title>ウェブリブログに、はてなスターを貼る手順</title>
    <link rel="alternate" href="http://feedproxy.google.com/~r/at/webry/info/~3/N9H9B-BBwSg/article_1.html" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">ウェブリブログに、はてなスター を貼ってみた手順メモ。はてなスターは、最近話題の『いいね！』『Like！』みたいなレイティング・投票機能の一種です。はてなダイヤリーに限らず、他のサイトにも 簡単な JavaScript だけで手軽に★機能を追加できます。

</div>
    </summary>
    <content type="text">ウェブリブログに、はてなスター を貼ってみた手順メモ。はてなスターは、最近話題の『いいね！』『Like！』みたいなレイティング・投票機能の一種です。はてなダイヤリーに限らず、他のサイトにも 簡単な JavaScript だけで手軽に★機能を追加できます。
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ceTAXJe9Ye-o9Pp78hx3AZ7lMJc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ceTAXJe9Ye-o9Pp78hx3AZ7lMJc/0/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ceTAXJe9Ye-o9Pp78hx3AZ7lMJc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ceTAXJe9Ye-o9Pp78hx3AZ7lMJc/1/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/at/webry/info/~4/N9H9B-BBwSg"&gt;</content>
    <category term="ウェブリブログ はてな JavaScript"/>
    <published>2010-09-01T01:19:00+09:00</published>
    <updated>2010-09-01T01:19:00+09:00</updated>
    <author>
      <name>Kawanet Tech Blog</name>
    </author>
    <id>tag:hanekomu.at,2006:http://feedproxy.google.com/~r/at/webry/info/~3/N9H9B-BBwSg/article_1.html</id>
  </entry>
  <entry>
    <title>DISQUS CommentsのTwitterコメント投稿・表示欄を掲載する手順</title>
    <link rel="alternate" href="http://feedproxy.google.com/~r/at/webry/info/~3/PlCLrJb737s/article_8.html" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">TechCrunch でも使われている DISQUS COMMETNS が便利です。JavaScript のコードを貼るだけで、自分のブログやウェブサイトにコメント欄を追加できます。コメントを投稿する人は、Twitter アカウントで認証できるのでラク。（OpenIDも可）投稿されたコメントは、そのまま Twitter で流れる。Twitter 上でその URL について言及された他のツイートも、コメントとして表示してくれる。Twitter のリアルタイム検索ではツイー...

</div>
    </summary>
    <content type="text">TechCrunch でも使われている DISQUS COMMETNS が便利です。JavaScript のコードを貼るだけで、自分のブログやウェブサイトにコメント欄を追加できます。コメントを投稿する人は、Twitter アカウントで認証できるのでラク。（OpenIDも可）投稿されたコメントは、そのまま Twitter で流れる。Twitter 上でその URL について言及された他のツイートも、コメントとして表示してくれる。Twitter のリアルタイム検索ではツイー...
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yZagGx5E8I0LjYsktwcX_5aOnjA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yZagGx5E8I0LjYsktwcX_5aOnjA/0/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yZagGx5E8I0LjYsktwcX_5aOnjA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yZagGx5E8I0LjYsktwcX_5aOnjA/1/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/at/webry/info/~4/PlCLrJb737s"&gt;</content>
    <category term="ウェブリブログ Twitter JavaScript"/>
    <published>2010-08-28T19:41:00+09:00</published>
    <updated>2010-08-28T19:41:00+09:00</updated>
    <author>
      <name>Kawanet Tech Blog</name>
    </author>
    <id>tag:hanekomu.at,2006:http://feedproxy.google.com/~r/at/webry/info/~3/PlCLrJb737s/article_8.html</id>
  </entry>
  <entry>
    <title>ウェブリブログでトラックバックの表示を削除するスクリプト</title>
    <link rel="alternate" href="http://feedproxy.google.com/~r/at/webry/info/~3/XqTc27IInzM/article_7.html" type="text/html"/>
    <summary type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">トラックバックは死んだ と言われて久しいですが、ウェブリブログは「ブログ」サービスなので、今もトラックバック機能が付いています。表示エリアも結構大きい。ときどきは便利なんですが、最近は滅多に使われないので、『トラックバック　（0件）』の表示エリアをまるごと削除してしまうスクリプトを書いてみました。ウェブリブログの表示が少しスッキリします。

</div>
    </summary>
    <content type="text">トラックバックは死んだ と言われて久しいですが、ウェブリブログは「ブログ」サービスなので、今もトラックバック機能が付いています。表示エリアも結構大きい。ときどきは便利なんですが、最近は滅多に使われないので、『トラックバック　（0件）』の表示エリアをまるごと削除してしまうスクリプトを書いてみました。ウェブリブログの表示が少しスッキリします。
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XecDfyI1v8abog9oStIYjr95asQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XecDfyI1v8abog9oStIYjr95asQ/0/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XecDfyI1v8abog9oStIYjr95asQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XecDfyI1v8abog9oStIYjr95asQ/1/di"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/at/webry/info/~4/XqTc27IInzM"&gt;</content>
    <category term="ウェブリブログ JavaScript trackback"/>
    <published>2010-08-28T18:49:00+09:00</published>
    <updated>2010-08-28T18:49:00+09:00</updated>
    <author>
      <name>Kawanet Tech Blog</name>
    </author>
    <id>tag:hanekomu.at,2006:http://feedproxy.google.com/~r/at/webry/info/~3/XqTc27IInzM/article_7.html</id>
  </entry>
</feed>
