<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>いわぶろ（ろてん）</title>
	
	<link>http://blog.iss.ms</link>
	<description>issmの公私混同的おぼえがき</description>
	<lastBuildDate>Sat, 28 Jan 2012 09:45:59 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/issm" /><feedburner:info uri="issm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>[coffeescript] かなり久しぶりにちょこっとだけ再帰処理</title>
		<link>http://feedproxy.google.com/~r/issm/~3/PJHBwSPi2Qg/184419</link>
		<comments>http://blog.iss.ms/2012/01/28/184419#comments</comments>
		<pubDate>Sat, 28 Jan 2012 09:44:19 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[小ネタ]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3673</guid>
		<description><![CDATA[特定要素を3回点滅させるために，特定のクラス属性を追加したり削除したりを繰り返す処理について． 素直に書くとこんな感じ： $target = $&#40;...&#41; interval_blink = 250 &#038;nb [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:[coffeescript] かなり久しぶりにちょこっとだけ再帰処理--></p>
<p>特定要素を3回点滅させるために，特定のクラス属性を追加したり削除したりを繰り返す処理について．</p>
<p>素直に書くとこんな感じ：</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;">$target        = $<span style="color: black;">&#40;</span>...<span style="color: black;">&#41;</span>
interval_blink = <span style="color: #ff4500;">250</span>
&nbsp;
setTimeout<span style="color: black;">&#40;</span>
    <span style="color: #66cc66;">-&gt;</span>
        $target.<span style="color: black;">addClass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
        setTimeout<span style="color: black;">&#40;</span>
            <span style="color: #66cc66;">-&gt;</span>
                $target.<span style="color: black;">removeClass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
                setTimeout<span style="color: black;">&#40;</span>
                    <span style="color: #66cc66;">-&gt;</span>
                        $target.<span style="color: black;">addClass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
                        setTimeout<span style="color: black;">&#40;</span>
                            <span style="color: #66cc66;">-&gt;</span>
                                $target.<span style="color: black;">removeClass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
                                setTimeout<span style="color: black;">&#40;</span>
                                    <span style="color: #66cc66;">-&gt;</span>
                                        $target.<span style="color: black;">addClass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
                                        setTimeout<span style="color: black;">&#40;</span>
                                            <span style="color: #66cc66;">-&gt;</span>
                                                $target.<span style="color: black;">removeClass</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
                                            interval_blink
                                        <span style="color: black;">&#41;</span>
                                    interval_blink
                                <span style="color: black;">&#41;</span>
                            interval_blink
                        <span style="color: black;">&#41;</span>
                    interval_blink
                <span style="color: black;">&#41;</span>
            interval_blink
        <span style="color: black;">&#41;</span>
    <span style="color: #ff4500;">0</span>
<span style="color: black;">&#41;</span></pre></div></div>

<p>再帰を使えばこんな感じ：</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;">$target        = $<span style="color: black;">&#40;</span>...<span style="color: black;">&#41;</span>
n_blink        = <span style="color: #ff4500;">3</span>
interval_blink = <span style="color: #ff4500;">250</span>
&nbsp;
setTimeout<span style="color: black;">&#40;</span>
    <span style="color: #66cc66;">-&gt;</span>
        <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>b<span style="color: #66cc66;">,</span> n<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #0000cd;">true</span>  <span style="color: #ff7700;font-weight:bold;">if</span> n <span style="color: #66cc66;">&lt;</span>= <span style="color: #ff4500;">0</span>
            f = arguments.<span style="color: black;">callee</span>
            setTimeout<span style="color: black;">&#40;</span>
                <span style="color: #66cc66;">-&gt;</span>
                    meth = <span style="color: #ff7700;font-weight:bold;">if</span> b <span style="color: #ff7700;font-weight:bold;">then</span> <span style="color: #483d8b;">'addClass'</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: #483d8b;">'removeClass'</span>
                    $target<span style="color: black;">&#91;</span>meth<span style="color: black;">&#93;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'highlighted'</span><span style="color: black;">&#41;</span>
                    f<span style="color: black;">&#40;</span> <span style="color: #66cc66;">!</span>b<span style="color: #66cc66;">,</span> <span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">if</span> b <span style="color: #ff7700;font-weight:bold;">then</span> n <span style="color: #ff7700;font-weight:bold;">else</span> n <span style="color: #66cc66;">-</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
                interval_blink
            <span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #0000cd;">false</span>
        <span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: #0000cd;">true</span><span style="color: #66cc66;">,</span> n_blink<span style="color: black;">&#41;</span>
    <span style="color: #ff4500;">0</span>
<span style="color: black;">&#41;</span></pre></div></div>

<p>ということで，久しぶりに再帰とか考えた気がします．こういうこと考えるの楽しいですねｗ</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2012/01/28/184419/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2012/01/28/184419</feedburner:origLink></item>
		<item>
		<title>Jartyなテンプレート中で使える「フィルタ」を追加する</title>
		<link>http://feedproxy.google.com/~r/issm/~3/9au5HboldTY/204400</link>
		<comments>http://blog.iss.ms/2012/01/25/204400#comments</comments>
		<pubDate>Wed, 25 Jan 2012 11:44:00 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[jarty]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3664</guid>
		<description><![CDATA[はじめに ちょっと前から，「Jarty」という JavaScript なテンプレートエンジンを使ってみていたりします．GTDme とかでも使ってみていたりしてます． JavaScript 用テンプレートエンジン Jart [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:Jartyなテンプレート中で使える「フィルタ」を追加する--></p>
<h3>はじめに</h3>
<p>ちょっと前から，「Jarty」という JavaScript なテンプレートエンジンを使ってみていたりします．<a href="https://github.com/issm/GTDme">GTDme</a> とかでも使ってみていたりしてます．</p>
<ul class="links">
<li><a href="http://info.dwango.co.jp/rd/2010/04/javascript-jarty.html" title="JavaScript 用テンプレートエンジン Jarty の紹介 - ドワンゴ 研究開発ブログ">JavaScript 用テンプレートエンジン Jarty の紹介 &#8211; ドワンゴ 研究開発ブログ</a></li>
<li><a href="https://github.com/kotas/jarty" title="kotas/jarty - GitHub">kotas/jarty &#8211; GitHub</a></li>
</ul>
<p>特徴は次のような感じ：</p>
<blockquote cite="http://info.dwango.co.jp/rd/2010/04/javascript-jarty.html"><p>
Jarty には以下のような機能があります。書式の多くは Smarty 互換です。</p>
<ul>
<li>変数の置換 {$foo} => &#8220;abc&#8221;</li>
<li>{if} {else} {/if} などの条件分岐</li>
<li>{foreach} {/foreach} などのループ</li>
<li>{$foo|upper|escape} などのフィルタ (パイプ)</li>
<li>etc.</li>
</ul>
<p><cite><a href="http://info.dwango.co.jp/rd/2010/04/javascript-jarty.html" title="JavaScript 用テンプレートエンジン Jarty の紹介 - ドワンゴ 研究開発ブログ">JavaScript 用テンプレートエンジン Jarty の紹介 &#8211; ドワンゴ 研究開発ブログ</a></cite>
</p></blockquote>
<p>Jartyなテンプレート中で，自分で定義した処理を「フィルタ」として使えんだろうか，とソースコードを覗いていたら，意外と簡単に追加できそうな感じだったので，そのあたりを紹介します．（どこかにドキュメントされているのかもしれませんが！）</p>
<p>なお，記述はすべて CoffeeScript で書いています．適宜翻訳してくださいまし．</p>
<h3>基本</h3>
<p><code>Jarty.Pipe.prototype</code> のプロパティに，処理したい関数を追加すればよさげです．そのプロパティ名が，「フィルタ」の名前となります．ただし，フィルタ名をスネークケースで使いたいときは，それをキャメルケースでプロパティに追加する必要があります．</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;">Jarty.<span style="color: black;">Pipe</span>.<span style="color: black;">prototype</span>.<span style="color: black;">fooBar</span> = <span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
    ...</pre></div></div>

<p>また，パイプの入力値は，関数の中で <code>@value</code> として参照します．</p>
<p>例えば，「何もしない」フィルタを，次のように追加できる感じです：</p>

<div class="wp_syntax"><div class="code"><pre class="javascreipt" style="font-family:monospace;">Jarty.Pipe.prototype.doNothing = () -&gt;
    return @value</pre></div></div>

<p>こうしておけば，Jartyなテンプレート中で，次のようにフィルタが使えるようになります：</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">{$foo|do_nothing}
{$bar|doNothing}</pre></div></div>

<h3>メンドイので関数化しておく</h3>
<p>毎回 <code>Jarty.Pipe.prototype. ...</code> とかするのはメンドイので，関数を定義しておくとラクです．</p>
<p>とりあえず <code>add_jarty_filter</code> という名前ででっち上げてみました：</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;">window.<span style="color: black;">add_jarty_filter</span> = <span style="color: black;">&#40;</span>name<span style="color: #66cc66;">,</span> func<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
    <span style="color: #808080; font-style: italic;"># foo_bar -&gt; fooBar</span>
    name = name.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>
        <span style="color: #dc143c;">new</span> RegExp<span style="color: black;">&#40;</span><span style="color: #483d8b;">'_(.)'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'g'</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
        <span style="color: black;">&#40;</span>p<span style="color: #66cc66;">,</span> c<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> c.<span style="color: black;">toUpperCase</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: black;">&#41;</span>
    Jarty<span style="color: #66cc66;">?</span>.<span style="color: black;">Pipe</span><span style="color: #66cc66;">?</span>.<span style="color: black;">prototype</span><span style="color: #66cc66;">?</span><span style="color: black;">&#91;</span>name<span style="color: black;">&#93;</span> = func</pre></div></div>

<p>こうしておけば，先の「何もしない」フィルタは，次のように書けます：</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;">add_jarty_filter<span style="color: black;">&#40;</span>
    <span style="color: #483d8b;">'do_nothing'</span>
    <span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #66cc66;">@</span>value
<span style="color: black;">&#41;</span></pre></div></div>

<p>追加するフィルタが多くなれば，こうしておいた方がラクかもです．</p>
<h3>ユーティリティ関数とかをフィルタ化しておく</h3>
<p>文字列操作をはじめとする，小粒な関数とかをフィルタ化しておくと便利そうです．</p>
<p>例えば，与えた数値を3桁ごとに区切ってコンマ「,」を挿入するような関数 <code>commify</code> があったとします：</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">###
 * 数字を3桁ごとにコンマで区切る
 *   参考: http://www.din.or.jp/~ohzaki/perl.htm
 *
###</span>
window.<span style="color: black;">commify</span> = <span style="color: black;">&#40;</span>num<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">typeof</span> num <span style="color: #008000;">is</span> <span style="color: #483d8b;">'number'</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> num.<span style="color: black;">toString</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">/</span><span style="color: black;">&#40;</span>\d<span style="color: black;">&#123;</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">3</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?</span>=<span style="color: black;">&#40;</span><span style="color: #66cc66;">?:</span>\d\d\d<span style="color: black;">&#41;</span><span style="color: #66cc66;">+</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">?!</span>\d<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">/</span>g<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'$1,'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> num</pre></div></div>

<p>これは，こんな感じでフィルタ化できます：</p>

<div class="wp_syntax"><div class="code"><pre class="coffeescript" style="font-family:monospace;">window.<span style="color: black;">add_jarty_filter</span><span style="color: black;">&#40;</span>
    <span style="color: #483d8b;">'commify'</span>
    <span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> commify<span style="color: black;">&#40;</span> parseInt<span style="color: black;">&#40;</span><span style="color: #66cc66;">@</span>value<span style="color: #66cc66;">,</span> <span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
<span style="color: black;">&#41;</span></pre></div></div>

<p>そうすれば，Jartyなテンプレート中で，</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">{$foo|commify}</pre></div></div>

<p>みたいに使えて便利です．</p>
<h3>おわりに</h3>
<p>以上，Jartyなテンプレート中で，自分で定義した処理を行うための「フィルタ」を追加してみるお話でした．</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2012/01/25/204400/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2012/01/25/204400</feedburner:origLink></item>
		<item>
		<title>GTDmeの「Inbox」に放り込むAlfred拡張を書いてみた</title>
		<link>http://feedproxy.google.com/~r/issm/~3/6DeD09i9NVE/212345</link>
		<comments>http://blog.iss.ms/2012/01/06/212345#comments</comments>
		<pubDate>Fri, 06 Jan 2012 12:23:45 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[開発ごっこ]]></category>
		<category><![CDATA[alfred]]></category>
		<category><![CDATA[gtdme]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3656</guid>
		<description><![CDATA[はじめに 1つ前のエントリ の「今後」として書いたうちの1つ： ランチャからInboxに放り込めると便利そう 「GTDme」というオレオレGTDツールを作って使い始めようとしています « いわぶろ（ろてん） 今のうちに作 [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:GTDmeの「Inbox」に放り込むAlfred拡張を書いてみた--></p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6646465165/" title="ss-1325848366 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7149/6646465165_5d6e06a8b3_o.png" width="640" height="180" alt="ss-1325848366"></a>
</div>
<h3>はじめに</h3>
<p><a href="http://blog.iss.ms/2012/01/06/123500">1つ前のエントリ</a> の「今後」として書いたうちの1つ：</p>
<blockquote cite="http://blog.iss.ms/2012/01/06/123500"><p>
ランチャからInboxに放り込めると便利そう<br />
<cite><a href="http://blog.iss.ms/2012/01/06/123500" title="「GTDme」というオレオレGTDツールを作って使い始めようとしています « いわぶろ（ろてん）">「GTDme」というオレオレGTDツールを作って使い始めようとしています « いわぶろ（ろてん）</a></cite>
</p></blockquote>
<p>今のうちに作ってしまった方が今後恩恵に与れそうなので，「Alfredの拡張機能」という形でひとつこさえてみました．</p>
<p>以下，そのあたりの紹介などです．</p>
<h3>Alfredって何？</h3>
<p>いわゆる「ランチャ」の1つです．</p>
<ul class="links">
<li><a href="http://www.alfredapp.com/" title="Alfred App">Alfred App</a></li>
</ul>
<p>もともと <a href="http://code.google.com/p/qsb-mac/">qsb-mac</a> を使っていたのですが，ここ2年近くアップデートもなくてマンネリ化してきたので，「Mac ランチャ」とかでググっていたところ，次のエントリに行き当たりました．</p>
<ul class="links">
<li><a href="http://veadardiary.blog29.fc2.com/blog-entry-2695.html" title="格好いい・使いやすい・軽快と三拍子揃ったランチャ『Alfred』 | Macの手書き説明書">格好いい・使いやすい・軽快と三拍子揃ったランチャ『Alfred』 | Macの手書き説明書</a></li>
</ul>
<blockquote cite="http://veadardiary.blog29.fc2.com/blog-entry-2695.html"><p>
現在ベータ版で普通にはダウンロードができませんが、メールアドレスを登録するとダウンロードリンクが送られてきます。</p>
<p>Google Quick Search Boxをよりお洒落に使いやすくしたような印象。</p>
<p>なにより軽快に動いて、わかりやすい操作方法なのがいいですね。</p>
<p><cite><a href="http://veadardiary.blog29.fc2.com/blog-entry-2695.html" title="格好いい・使いやすい・軽快と三拍子揃ったランチャ『Alfred』 | Macの手書き説明書">格好いい・使いやすい・軽快と三拍子揃ったランチャ『Alfred』 | Macの手書き説明書</a></cite>
</p></blockquote>
<p>エントリ時期自体はちょっと前のものですが，「Google Quick Search Boxをよりお洒落に使いやすくしたような印象。」の一文で，使ってみる気になった感じです．（QSBの使い勝手は好きなので．）</p>
<p>で，Alfred の半分くらいの機能は，&pound; 15 の「Powerpack」を購入する必要があり，本エントリで触れる「拡張」機能もこの範囲に入っていたかと思います．が，他の機能も含めて，その価値は十分にあると思いますよ．例えば，Free版では，ランチャの表示・非表示の際必ずフェイドイン・フェイドアウトがかかり，サクサク感を得にくいのですが，Powerpackによって，この設定を解除することができるようになる，といった具合です．</p>
<h3>セットアップ</h3>
<h4>拡張機能のインポート</h4>
<p><span id="more-3656"></span></p>
<ul class="links">
<li><a href="https://github.com/issm/gtdme-alfred-inbox-extension" title="issm/gtdme-alfred-inbox-extension - GitHub">issm/gtdme-alfred-inbox-extension &#8211; GitHub</a></li>
</ul>
<p>これをどこかテキトーなところに <code>git clone</code> します．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6646592681/" title="ss-1325851309 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7021/6646592681_c8b6f213f3_o.png" width="506" height="263" alt="ss-1325851309"></a>
</div>
<p>そして，<code>packs</code> ディレクトリ下にある <code>GTDme Alfred Inbox.alfredextension</code> をファイラ上から開くことで，Alfredへの拡張機能インポートを行います．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6646465355/" title="ss-1325848749 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7005/6646465355_54384d2b32_o.png" width="640" height="360" alt="ss-1325848749"></a>
</div>
<p>こんな感じで拡張機能が入ります．</p>
<h4>API設定</h4>
<p>項目「Command:」のテキストエリアを編集することで，APIを叩くための設定を行います．</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="shellscript" style="font-family:monospace;">#
# GTDme Alfred Inbox Extension - 0.01
#
#   Usage: in &lt;text &gt;
#
PERL=&quot;/usr/bin/env perl&quot;
GTDME_URL=&quot;http://gtdme.local:1080/&quot;
GTDME_APIKEY=&quot;WxmFXSffMFMfEYeI2wX1sWvULrnnAUO6JI5MB7wKMf80z90RGTMQ3hxCIh3HR6di&quot;
&nbsp;
...</pre></td></tr></table></div>

<p>7行目の <code>GTDME_URL</code> に，GTDme アプリケーションが動作しているURL（のベース）を，8行目の <code>GTDME_APIKEY</code> に，利用するユーザに対して発行されるAPIキーを設定します．</p>
<p>※ 2012-01-06 21:00 時点で，APIキーを発行する機能が実装されていません＞＜ データベースを直接触れば好きにすることができます．．．</p>
<h3>Alfredから入力してみる</h3>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6646465165/" title="ss-1325848366 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7149/6646465165_5d6e06a8b3_o.png" width="640" height="180" alt="ss-1325848366"></a>
</div>
<p>Alfred を表示して，キーワード <code>in</code> （とスペース）に続いて，Inboxに放り込みたい内容を入力して Enter，です．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6646465271/" title="ss-1325848589 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7013/6646465271_4c0d589383_o.png" width="640" height="120" alt="ss-1325848589"></a>
</div>
<p>こんな感じで Growl に表示されれば，POST成功です．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6646489401/" title="ss-1325849283 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7142/6646489401_b9cc01a2ba_o.png" width="640" height="120" alt="ss-1325849283"></a>
</div>
<p>Inboxに入ってます．やったね！</p>
<h3>おわりに</h3>
<p>以上，拙作（途中） GTDme の Inbox に，ランチャアプリ「Alfred」から気軽に放り込むための拡張機能「gtdme-alfred-inbox-extension」の紹介でした．</p>
<p>こんな感じで，Inbox に放り込むための入り口をいろいろ増やして行ってみたいと思ってます．</p>
<p>また，今回を経て，Alfred の拡張機能もけっこう簡単に作れるんだな，ということがわかったので，こちらもいろいろ試してみたいですね！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2012/01/06/212345/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2012/01/06/212345</feedburner:origLink></item>
		<item>
		<title>「GTDme」というオレオレGTDツールを作って使い始めようとしています</title>
		<link>http://feedproxy.google.com/~r/issm/~3/EIg01hJLj8Q/123500</link>
		<comments>http://blog.iss.ms/2012/01/06/123500#comments</comments>
		<pubDate>Fri, 06 Jan 2012 03:35:00 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[開発ごっこ]]></category>
		<category><![CDATA[amon2]]></category>
		<category><![CDATA[gtd]]></category>
		<category><![CDATA[gtdme]]></category>
		<category><![CDATA[mylifehacks]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3641</guid>
		<description><![CDATA[はじめに ここ2年ほどで，未実施なプロジェクトリスト == 紙の束を持ち運ぶのが大変になってきたり，毎度紙におこすのがメンドかったりと，週次レビューに対するモチベーションが，本題とは外れた部分をきっかけに下がり始めてきた [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:「GTDme」というオレオレGTDツールを作って使い始めようとしています--></p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644230029/" title="ss-1325810374 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7016/6644230029_d624d103f5_o.png" width="640" height="480" alt="ss-1325810374"></a>
</div>
<h3>はじめに</h3>
<p>ここ2年ほどで，未実施なプロジェクトリスト == 紙の束を持ち運ぶのが大変になってきたり，毎度紙におこすのがメンドかったりと，週次レビューに対するモチベーションが，本題とは外れた部分をきっかけに下がり始めてきたので，ちょっとツールを切り替えてみようかな，などと思い立ちました．</p>
<p>で，これまでやってきたオレオレ週次レビューの流れをそれなりに活かせそうな形で，「GTDme」というツールを作り始めてみてます．ネーミングは気にしない．</p>
<p>多少形になってきたので，以下，現状での紹介など．</p>
<h3>そもそもGTDって何？</h3>
<p>ここでは省略．</p>
<p>まずは実践してみることをオススメします．「脳はHDDではなくCPUである」という考えに賛同できれば，コンセプトは吸収しやすいんじゃないかな，と思います．</p>
<ul class="links">
<li><a href="http://bizmakoto.jp/bizid/articles/0606/27/news003.html" title="はじめてのGTD - ITmedia Biz.ID">はじめてのGTD &#8211; ITmedia Biz.ID</a></li>
<li><a href="http://ja.wikipedia.org/wiki/Getting_Things_Done" title="Getting Things Done - Wikipedia">Getting Things Done &#8211; Wikipedia</a></li>
</ul>
<h3>現状をざっと詳細</h3>
<h4>認証</h4>
<p>Twitter な OAuth のみサポートしています．個人レベルでの利用とかいいながら，認証はソーシャルっぽく．</p>
<h4>ナビゲーション</h4>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644193433/" title="ss-1325807388 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7154/6644193433_312f69bb85_o.png" width="640" height="100" alt="ss-1325807388"></a>
</div>
<p>GTDにおいて，一般的に「準備しよう」とされている各種の「リスト（フォルダ）」に相当するようにナビゲーションを置いてます．だいたい次のような感じです：</p>
<dl>
<dt><code>Home</code></dt>
<dd>「次に取るべき行動」リスト</dd>
<dt><code>Inbox</code></dt>
<dd>「In-box」</dd>
<dt><code>Calendar</code></dt>
<dd>「カレンダー」．オレオレ的に，特定日（期間）もの，週次反復もの，月次反復もの，と分割していたり</dd>
<dt><code>Background</code></dt>
<dd>「連絡待ち」リスト</dd>
<dt><code>Materials</code></dt>
<dd>「資料」．単語に違和感＞＜</dd>
<dt><code>Someday</code></dt>
<dd>「多分やる・いつかやる」リスト</dd>
<dt><code>Projects</code></dt>
<dd>「プロジェクト」リスト</dd>
</dl>
<h4>Add to Inbox?</h4>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644193607/" title="ss-1325807448 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7018/6644193607_c4bbe5f4a7_o.png" width="640" height="360" alt="ss-1325807448"></a>
</div>
<p>どのページにも，右上のあたりに「Add to Inbox?」という，ボタンのようなものを置いてます．これをクリックすると．．．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644193717/" title="ss-1325807658 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7026/6644193717_8968114e17_o.png" width="640" height="320" alt="ss-1325807658"></a>
</div>
<p>．．．何か入力フォームが表示されるので，頭に浮かんだ気になったことを書いて Enter すれば，その内容が <code>Inbox</code> に入ります．</p>
<h4>Inbox</h4>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644193937/" title="ss-1325808195 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7021/6644193937_c1a706e76d_o.png" width="640" height="320" alt="ss-1325808195"></a>
</div>
<p>こんな感じで，「Add to Inbox」した内容がいろいろたまります．それらにマウスを乗せると．．．<br />
<span id="more-3641"></span></p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194071/" title="ss-1325808307 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7159/6644194071_1605944dfd_o.png" width="640" height="240" alt="ss-1325808307"></a>
</div>
<p>．．．ボタンっぽいものがいくつか表示されます（デザイン募集中ですｗ）．いわゆる「GTDのワークフロー」におけるいくつもの分岐先をワンクリックで行えるようになっています．</p>
<dl>
<dt>Done!</dt>
<dd>既に完了したときに選択</dd>
<dt>Can do now!</dt>
<dd>2分以内に完了できそうなときに選択（後述）</dd>
<dt>Next action</dt>
<dd>「次にとるべき行動」リストへ</dd>
<dt>Calendar</dt>
<dd>「カレンダー」へ</dd>
<dt>Material</dt>
<dd>「資料」へ</dd>
<dt>Background</dt>
<dd>「連絡待ち」リストへ</dd>
<dt>Someday</dt>
<dd>「多分やる・いつかやる」リストへ</dd>
<dt>Project</dt>
<dd>行動が複数ありそうなときに選択（後述）</dd>
<dt>No need</dt>
<dd>不要であればポイ</dd>
<dt>Edit</dt>
<dd>内容を編集（後述）</dd>
</dl>
<h5>Can do now!</h5>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194417/" title="ss-1325808797 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7007/6644194417_8ea7801866_o.png" width="640" height="320" alt="ss-1325808797"></a>
</div>
<p>その場で2分以内にできそうな場合に選択します．このボタンをクリックしてさっそく行動しましょう．ダイアログの「OK」を選択すれば，そのタスクは完了扱いとなります．</p>
<h5>Project</h5>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194185/" title="ss-1325808405-1 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7168/6644194185_4f4b69cfe7_o.png" width="640" height="240" alt="ss-1325808405-1"></a>
</div>
<p>そのタスクを「プロジェクト」として作成する（Create）か，既存の「プロジェクト」に一行動として追加するか，を選択します．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194281/" title="ss-1325808563 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7029/6644194281_539960905d_o.png" width="640" height="240" alt="ss-1325808563"></a>
</div>
<p>作成した場合，その元となったタスクは削除されます．</p>
<h5>Edit</h5>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194523/" title="ss-1325808899 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7162/6644194523_21c3436608_o.png" width="640" height="180" alt="ss-1325808899"></a>
</div>
<p>その場で内容を編集できます．</p>
<h4>Calendar</h4>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194649/" title="ss-1325809230 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7156/6644194649_ccf1c3497c_o.png" width="640" height="320" alt="ss-1325809230"></a>
</div>
<p>タスクの内容により，次の4種類に分けられます：</p>
<ul>
<dt>The day</dt>
<dd>特定年月日日，または特定期間が指定されたもの</dd>
<dt>Weekly</dt>
<dd>特定の曜日が指定されたもの</dd>
<dt>Monthly</dt>
<dd>特定の「日」が指定されたもの</dd>
<dt>Unclassified</dt>
<dd>上記の指定がないもの．「Edit」によりいずれかの指定を行う必要がある</dd>
</ul>
<p>Inbox 同様，ここからいつくかの操作を行えます．</p>
<h4>Projects</h4>
<p>「プロジェクト」の一覧やそれぞれに属するタスク・行動を確認したり操作したりできます．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194753/" title="ss-1325809504 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7020/6644194753_0ae96a670f_o.png" width="640" height="180" alt="ss-1325809504"></a>
</div>
<p>「プロジェクト」の一覧です．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194873/" title="ss-1325809565 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7144/6644194873_6756d9b009_o.png" width="640" height="320" alt="ss-1325809565"></a>
</div>
<p>特定の「プロジェクト」に属するタスク・行動の一覧です．</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644194989/" title="ss-1325809647 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7015/6644194989_2caa486595_o.png" width="640" height="180" alt="ss-1325809647"></a>
</div>
<p>Inbox 同様，ここからいくつかの操作を行えます．</p>
<h4>特殊記法</h4>
<p>タスク内容の入力の際に特定の書式で記述することで，特別な情報を付加することができます．</p>
<ul>
<li>タグ</li>
<li>年月日・期間</li>
<li>（毎週の）曜日</li>
<li>（毎月の）日</li>
<li>「ステップ」の数（「ステップ」の定義は特にない＞＜）</li>
</ul>
<h4>Home</h4>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6644195145/" title="ss-1325809808 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7175/6644195145_6f59ebc365_o.png" width="640" height="680" alt="ss-1325809808"></a>
</div>
<p>「次にとるべき行動」の一覧が表示されます．特定のプロジェクトや，自分で定義したタグによる絞り込みも行えます．あと並び替えとかもきっと．</p>
<h3>開発がらみのメモ</h3>
<p>Perl な Webアプリケーションフレームワーク <a href="http://amon.64p.org/">Amon2</a> の「Large」フレーバーをベースに，シンプル O/R マッパ<a href="http://search.cpan.org/dist/Teng/">Teng</a>，テンプレートエンジン <a href="http://search.cpan.org/dist/Text-Xslate/">Text::Xslate</a> を中心とした構成で作ってます．</p>
<p>関連して，Amon2 や Teng のちょっとしたプラグインも作って組み込んでみてます．</p>
<p>また，表側は，Amon2に同梱の <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> をベースに，<a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> とか <a href="https://github.com/kotas/jarty">Jarty</a> とか使ってみてます．</p>
<p>あと，まだまだ途中ですが，一応 GitHub に上げながらやってます．</p>
<ul class="links">
<li><a href="https://github.com/issm/GTDme" title="issm/GTDme - GitHub">issm/GTDme &#8211; GitHub</a></li>
</ul>
<h3>今後</h3>
<ul>
<li>DotCloud へデプロイできるようにしたい</li>
<li>スマフォ向けインタフェイスを準備したい</li>
<li>ランチャからInboxに放り込めると便利そう</li>
<li>とにかく「Inboxに放り込む」ための手段についていろいろ考えたい</li>
</ul>
<p>とりあえずこんなことを考えてます．</p>
<h3>おわりに</h3>
<p>以上，私が週次レビューのモチベーションを上げるために作り始めたGTDツール「GTDme」の現状を紹介しました．</p>
<p>もう少し整理した後，今晩か明日かにでも，紙で書かれた無数のタスクをどんどん放り込んでいってみることにします．</p>
<h3>Amazonさん</h3>
<p><a href="http://www.100shiki.com/">百式</a> の中の人による三部作（？）．</p>
<ul class="amazlet">
<li>
<div class="amazlet-box">
<div class="amazlet-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576060732/issm-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51QrUAYs8kL._SL160_.jpg" alt="ストレスフリーの仕事術―仕事と人生をコントロールする52の法則" /></a></div>
<div class="amazlet-info">
<div class="amazlet-name"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576060732/issm-22/ref=nosim/" name="amazletlink" target="_blank">ストレスフリーの仕事術―仕事と人生をコントロールする52の法則</a>
<div class="amazlet-powered-date">posted with <a href="http://www.amazlet.com/browse/ASIN/4576060732/issm-22/ref=nosim/" title="ストレスフリーの仕事術―仕事と人生をコントロールする52の法則" target="_blank">amazlet</a> at 12.01.06</div>
</div>
<div class="amazlet-detail">デビッド アレン <br />二見書房 <br />売り上げランキング: 8033</div>
<div class="amazlet-sub-info">
<div class="amazlet-link"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576060732/issm-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer"></div>
</div>
</li>
<li>
<div class="amazlet-box">
<div class="amazlet-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576082116/issm-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51umAMmeSlL._SL160_.jpg" alt="はじめてのGTD ストレスフリーの整理術" /></a></div>
<div class="amazlet-info">
<div class="amazlet-name"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576082116/issm-22/ref=nosim/" name="amazletlink" target="_blank">はじめてのGTD ストレスフリーの整理術</a>
<div class="amazlet-powered-date">posted with <a href="http://www.amazlet.com/browse/ASIN/4576082116/issm-22/ref=nosim/" title="はじめてのGTD ストレスフリーの整理術" target="_blank">amazlet</a> at 12.01.06</div>
</div>
<div class="amazlet-detail">デビッド・アレン <br />二見書房 <br />売り上げランキング: 641</div>
<div class="amazlet-sub-info">
<div class="amazlet-link"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576082116/issm-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer"></div>
</div>
</li>
<li>
<div class="amazlet-box">
<div class="amazlet-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576101714/issm-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51rqNl71s%2BL._SL160_.jpg" alt="ひとつ上のＧＴＤ　ストレスフリーの整理術　実践編　仕事というゲームと人生というビジネスに勝利する方法" /></a></div>
<div class="amazlet-info">
<div class="amazlet-name"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576101714/issm-22/ref=nosim/" name="amazletlink" target="_blank">ひとつ上のＧＴＤ　ストレスフリーの整理術　実践編　仕事というゲームと人生というビジネスに勝利する方法</a>
<div class="amazlet-powered-date">posted with <a href="http://www.amazlet.com/browse/ASIN/4576101714/issm-22/ref=nosim/" title="ひとつ上のＧＴＤ　ストレスフリーの整理術　実践編　仕事というゲームと人生というビジネスに勝利する方法" target="_blank">amazlet</a> at 12.01.06</div>
</div>
<div class="amazlet-detail">デビッド・アレン <br />二見書房 <br />売り上げランキング: 4267</div>
<div class="amazlet-sub-info">
<div class="amazlet-link"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4576101714/issm-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer"></div>
</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2012/01/06/123500/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2012/01/06/123500</feedburner:origLink></item>
		<item>
		<title>[javascript] 追加した関数を順次実行するためのJobSequencerというのを書いてみた</title>
		<link>http://feedproxy.google.com/~r/issm/~3/36rhbaQ6vjg/164513</link>
		<comments>http://blog.iss.ms/2011/12/29/164513#comments</comments>
		<pubDate>Thu, 29 Dec 2011 07:45:13 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[小ネタ]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3636</guid>
		<description><![CDATA[はじめに ちょっと必要になって10分ほどで書いてみました．リハビリ． jobsequencer.js — Gist 「ジョブ」の定義とかよく知りません＞＜ 使い方 var jobseq = new JobSequence [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:[javascript] 追加した関数を順次実行するためのJobSequencerというのを書いてみた--></p>
<h3>はじめに</h3>
<p>ちょっと必要になって10分ほどで書いてみました．リハビリ．</p>
<ul class="links">
<li><a href="https://gist.github.com/1532557" title="jobsequencer.js — Gist">jobsequencer.js — Gist</a></li>
</ul>
<p>「ジョブ」の定義とかよく知りません＞＜</p>
<h3>使い方</h3>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> jobseq <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> JobSequencer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> interval<span style="color: #339933;">:</span> <span style="color: #CC0000;">1000</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
jobseq.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span> o.<span style="color: #660066;">id</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// 1</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
jobseq.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span> o.<span style="color: #660066;">id</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">// 2</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
jobseq.<span style="color: #660066;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jobseq.<span style="color: #000066;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>コールバック関数を順番で追加していき， <code>start</code> メソッドでその順番に，指定したインターバルをおいて実行される感じです．</p>
<p>すべて完了する前に <code>stop</code> メソッドを呼ぶことで，中断することもできます．その後 <code>start</code> メソッドを再度呼ぶことで再開します．</p>
<h3>ソースコード</h3>
<p>冒頭のリンクを参照頂ければよいのですが，ページ稼ぎのためこちらにもｗ</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #660066;">JobSequencer</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">init</span>.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
JobSequencer.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    init<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        params <span style="color: #339933;">=</span> params <span style="color: #339933;">||</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> self <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
        self._queue   <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        self._stopped <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        self._count   <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
        self.<span style="color: #660066;">interval</span> <span style="color: #339933;">=</span> params.<span style="color: #660066;">interval</span> <span style="color: #339933;">||</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">return</span> self<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
    push<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> sec<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>._queue.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> f<span style="color: #339933;">:</span> f<span style="color: #339933;">,</span> s<span style="color: #339933;">:</span> sec <span style="color: #339933;">||</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">interval</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
    shift<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>._queue.<span style="color: #660066;">shift</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
    start<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>._stopped <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>._exec<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #000066;">stop</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>._stopped <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
    _exec<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> self <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> f_this <span style="color: #339933;">=</span> arguments.<span style="color: #660066;">callee</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> self._stopped <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> o <span style="color: #339933;">=</span> self.<span style="color: #660066;">shift</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">typeof</span> o <span style="color: #339933;">!==</span> <span style="color: #3366CC;">'undefined'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> params <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
                id<span style="color: #339933;">:</span> <span style="color: #339933;">++</span>self._count
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
            setTimeout<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                o.<span style="color: #660066;">f</span><span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                f_this.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>self<span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> o.<span style="color: #660066;">s</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>おわりに</h3>
<p>順番に追加していった関数を，その順番に実行していく JobSequencer っていう JavaScriptなクラスを書いてみたお話でした．</p>
<h3>Amazonさん</h3>
<p>まだ読んでない＞＜</p>
<ul class="amazlet">
<li>
<div class="amazlet-box">
<div class="amazlet-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414813X/issm-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51yrjFsf-2L._SL160_.jpg" alt="パーフェクトJavaScript (PERFECT SERIES 4)" /></a></div>
<div class="amazlet-info">
<div class="amazlet-name"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414813X/issm-22/ref=nosim/" name="amazletlink" target="_blank">パーフェクトJavaScript (PERFECT SERIES 4)</a>
<div class="amazlet-powered-date">posted with <a href="http://www.amazlet.com/browse/ASIN/477414813X/issm-22/ref=nosim/" title="パーフェクトJavaScript (PERFECT SERIES 4)" target="_blank">amazlet</a> at 11.12.29</div>
</div>
<div class="amazlet-detail">井上 誠一郎 土江 拓郎 浜辺 将太 <br />技術評論社 <br />売り上げランキング: 2169</div>
<div class="amazlet-sub-info">
<div class="amazlet-link"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414813X/issm-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer"></div>
</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2011/12/29/164513/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2011/12/29/164513</feedburner:origLink></item>
		<item>
		<title>[git][perl] rebase祭りを支援するツール「git-rebase-matsuri」というのを書いてみた</title>
		<link>http://feedproxy.google.com/~r/issm/~3/Qniz14Zp5yw/114441</link>
		<comments>http://blog.iss.ms/2011/12/26/114441#comments</comments>
		<pubDate>Mon, 26 Dec 2011 02:44:41 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[開発ごっこ]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3625</guid>
		<description><![CDATA[はじめに どのブランチがどのブランチの上に乗っかるか，というルールが複数定義されたファイルを読んでひたすら git rebase を行うためのツール「git-rebase-matsuri」というのを書いてみたので，本エン [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:[git][perl] rebase祭りを支援するツール「git-rebase-matsuri」というのを書いてみた--></p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6571913917/" title="ss-1324860051 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7142/6571913917_0de54b22d7_o.png" width="500" height="280" alt="ss-1324860051"></a>
</div>
<h3>はじめに</h3>
<p>どのブランチがどのブランチの上に乗っかるか，というルールが複数定義されたファイルを読んでひたすら <code>git rebase</code> を行うためのツール「git-rebase-matsuri」というのを書いてみたので，本エントリで軽く紹介します．</p>
<ul class="links">
<li><a href="https://github.com/issm/git-rebase-matsuri" title="issm/git-rebase-matsuri - GitHub">issm/git-rebase-matsuri &#8211; GitHub</a></li>
</ul>
<p>※ とあるコミットポイントにおいてちょっとした主要なコミットが発生したおかげで，そこから派生していたすべてのブランチに対して <code>git rebaase</code> する作業が発生することを，私は勝手に「rebase祭り」などと呼んでおります．</p>
<h3>背景</h3>
<p>「この機能の実装を進めて」「ちょっとあれを直してほしい」先方からそんな要求がくるたびに，その数だけトピックブランチを，公開状態のコミットポイントから生やして作業しています．で，こちらが作業を完了して報告，公開向けの準備の指示を仰ぐのですが，そこから返信がこなくなります．（まぁお忙しいのでしょうね．）その結果，「公開待ち」な状態のブランチが増えてきます．</p>
<p>コミットツリーは次のような感じになります：</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6571897519/" title="ss-1324859692 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7021/6571897519_07a3fbb0e9_o.png" width="450" height="240" alt="ss-1324859692"></a>
</div>
<p>そこで飛び込んでくる「これ，あのお客さんにどうしても対応したいから，すぐに実装して反映してほしい」といった要求．私の少量メモリな脳内ではスワップを起こしていますが，対応しなければなりません．そしてその修正を先に公開します．</p>
<p>（本エントリを書いている最中にも，何か1件飛び込んできましたｗ）</p>
<p>コミットツリーは次のような感じになります：</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6571913917/" title="ss-1324860051 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7142/6571913917_0de54b22d7_o.png" width="500" height="280" alt="ss-1324860051"></a>
</div>
<p>さて，本来の開発作業に戻りますか．しかし，安心して開発を再開するには，コミットツリーを次のようにしておきたいところですね：</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6571945375/" title="ss-1324860499 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7025/6571945375_021cf1d52c_o.png" width="500" height="280" alt="ss-1324860499"></a>
</div>
<p>まぁ <code>git rebase</code> しまくればよいだけですが，いかんせんメンドイ！</p>
<h3>使い方</h3>
<h4>インストール</h4>
<p><span id="more-3625"></span></p>
<p>App::gitrebasematsuri として，CPANモジュール形式で作ってみました．今のところ GitHub にだけ上がってます：</p>
<ul class="links">
<li><a href="https://github.com/issm/git-rebase-matsuri" title="issm/git-rebase-matsuri - GitHub">issm/git-rebase-matsuri &#8211; GitHub</a></li>
</ul>
<p><code>cpanm</code> とかで入れればよいと思います．</p>
<p>インストールできたら， <code>git-rebase-matsuri</code> というコマンドが使えるようになります．</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% git-rebase-matsuri
Usage:
      git-rebase-matsuri --conf=&lt;config_file&gt;
      git-rebase-matsuri --conf=&lt;config_file&gt; --doit  # really execute &quot;git rebase&quot;</pre></div></div>

<h4>コンフィグファイル</h4>
<p>「どのブランチが，どのブランチ（コミット）に乗っかるか」というルールを任意のファイルを作って記述していきます．</p>
<p>例えば，先の「背景」での rebaase祭り前のヤツ：</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6571913917/" title="ss-1324860051 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7142/6571913917_0de54b22d7_o.png" width="500" height="280" alt="ss-1324860051"></a>
</div>
<p>を，公開最新状態である <code>release-3</code> タグ （ここでは <code>master</code> ブランチをいっしょ）を起点とした形に rebase したい：</p>
<div class="flickr2-photo-o">
<a href="http://www.flickr.com/photos/issm/6571945375/" title="ss-1324860499 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7025/6571945375_021cf1d52c_o.png" width="500" height="280" alt="ss-1324860499"></a>
</div>
<p>とします．</p>
<p>この場合，次のように記述します：</p>

<div class="wp_syntax"><div class="code"><pre class="conf" style="font-family:monospace;"># &lt;branch&gt; -&gt; &lt;onto&gt;
id/1 -&gt; master
id/2 -&gt; ^
id/3 -&gt; master
id/6 -&gt; ^
id/4 -&gt; master
id/5 -&gt; master</pre></div></div>

<p>「<code>-&gt;</code>」の左側が「乗っかる」側のブランチ，右側が「起点となる」ブランチ，となります．</p>
<p>記号「<code>^</code>」は，「直前のルールの『左側』のブランチを起点にする」という意味を持っています．もちろん，ブランチ名を直接指定してもOKです．</p>
<p>ファイル名は <code>rebase-matsuri.conf</code> とでもしておきましょう．</p>
<h4>コマンドの実行</h4>
<p>コンフィグファイルを <code>--conf</code> または <code>-c</code> オプションで指定して実行します．</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% git-rebase-matsuri -c rebase-matsuri.conf
2011-12-26T09:46:33 [INFO] rebase rule has been added: id/1 -&gt; master
2011-12-26T09:46:33 [INFO] rebase rule has been added: id/2 -&gt; id/1
2011-12-26T09:46:33 [INFO] rebase rule has been added: id/3 -&gt; master
2011-12-26T09:46:33 [INFO] rebase rule has been added: id/6 -&gt; id/3
2011-12-26T09:46:33 [INFO] rebase rule has been added: id/4 -&gt; master
2011-12-26T09:46:33 [INFO] rebase rule has been added: id/5 -&gt; master
2011-12-26T09:46:33 [WARN] Do you really rebase? specify &quot;--doit&quot; option.</pre></div></div>

<p>ルールの確認<strong>だけ</strong>できました．実際に <code>git rebase</code> も行うには，<code>--doit</code> オプションをつける必要があります．一応予防線をはってみましたｗ</p>
<p>では，<code>--doit</code> オプションもつけて実行します．</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% git-rebase-matsuri -c rebase-matsuri.conf --doit
2011-12-26T09:46:59 [INFO] rebase rule has been added: id/1 -&gt; master
2011-12-26T09:46:59 [INFO] rebase rule has been added: id/2 -&gt; id/1
2011-12-26T09:46:59 [INFO] rebase rule has been added: id/3 -&gt; master
2011-12-26T09:46:59 [INFO] rebase rule has been added: id/6 -&gt; id/3
2011-12-26T09:46:59 [INFO] rebase rule has been added: id/4 -&gt; master
2011-12-26T09:46:59 [INFO] rebase rule has been added: id/5 -&gt; master
2011-12-26T09:46:59 [INFO] current branch/commit: id/7
2011-12-26T09:46:59 [WARN] Switched to branch 'id/1'
2011-12-26T09:46:59 [INFO] First, rewinding head to replay your work on top of it...
2011-12-26T09:46:59 [INFO] Applying: 7l9mSClY2I6MDToR8Fu5mEhn16Xvxrr4jSiqnyfI. refs #1
2011-12-26T09:46:59 [INFO] Applying: CR5q38OuoIj63HrhelKAFQEshtGPvd6H1mglSaPU. refs #1
2011-12-26T09:46:59 [WARN] Switched to branch 'id/2'
2011-12-26T09:46:59 [INFO] First, rewinding head to replay your work on top of it...
2011-12-26T09:46:59 [INFO] Applying: eymEmpKebkoBHXMvBKh6VoYL0D0S3vYASDf3Evv6. refs #2
2011-12-26T09:46:59 [WARN] Switched to branch 'id/3'
2011-12-26T09:47:00 [INFO] First, rewinding head to replay your work on top of it...
2011-12-26T09:47:00 [INFO] Applying: OJBncdWk5xzkINMCCqiPlRkdH3E7ZEAiUirPWEPq. refs #3
2011-12-26T09:47:00 [INFO] Applying: LFeSI6SsTyKi6ZDIUXQK69zWX4IfB6OT14FCmPU2. refs #3
2011-12-26T09:47:00 [INFO] Applying: YPgXUdxQJCKqOFsukt5jpxOuUCo9gSpLIuOmXQlv. refs #3
2011-12-26T09:47:00 [WARN] Switched to branch 'id/6'
2011-12-26T09:47:00 [INFO] First, rewinding head to replay your work on top of it...
2011-12-26T09:47:00 [INFO] Applying: n3gYUd9m1z12NJ63D3hIrVL7ZDvWnAqFbtbuupdT. refs #6
2011-12-26T09:47:00 [WARN] Switched to branch 'id/4'
2011-12-26T09:47:00 [INFO] First, rewinding head to replay your work on top of it...
2011-12-26T09:47:00 [INFO] Applying: bdqD7UZ9VLyyov3FIQ8Y4r2kGFUsmDlTQHqZYeN4. refs #4
2011-12-26T09:47:00 [INFO] Applying: rQZGVsQrhswVVskKHJ7P3HcDqCR7OtmccozHrRXa. refs #4
2011-12-26T09:47:00 [WARN] Switched to branch 'id/5'
2011-12-26T09:47:01 [INFO] First, rewinding head to replay your work on top of it...
2011-12-26T09:47:01 [INFO] Applying: GL6q8fM3EI1FhxPqlHInVPfgRfdmdhpmj7uDDKAL. refs #5
2011-12-26T09:47:01 [INFO] Applying: 4nVra34dYs5SrY1it2cACZ3jJw87JQrkSt6Hg3YX. refs #5
2011-12-26T09:47:01 [WARN] Switched to branch 'id/7'</pre></div></div>

<p>こんな感じで rebase祭りを手軽に執り行うことができます．</p>
<p>もちろん，未コミットなファイルがあったりするとできないので，コミットするか <code>git stash</code> などするかしておくところは従来と同様です．</p>
<p>また，conflictが発生したときは，そこは自力でガンバる必要がありますｗ</p>
<h3>おわりに</h3>
<p>以上，rebase祭りを手軽に執り行なうための支援ツール「git-rebase-matsuri」の紹介と，その使い方についてのエントリでした．</p>
<p>さて，飛び込んできた修正依頼に対応して公開して，またrebase祭りを始めるとしますかねｗ</p>
<h3>Amazonさん</h3>
<ul class="amazlet">
<li>
<div class="amazlet-box">
<div class="amazlet-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798023809/issm-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41R5gj5VRFL._SL160_.jpg" alt="入門Git" /></a></div>
<div class="amazlet-info">
<div class="amazlet-name"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798023809/issm-22/ref=nosim/" name="amazletlink" target="_blank">入門Git</a>
<div class="amazlet-powered-date">posted with <a href="http://www.amazlet.com/browse/ASIN/4798023809/issm-22/ref=nosim/" title="入門Git" target="_blank">amazlet</a> at 11.12.26</div>
</div>
<div class="amazlet-detail">濱野 純(Junio C Hamano) <br />秀和システム <br />売り上げランキング: 91450</div>
<div class="amazlet-sub-info">
<div class="amazlet-link"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798023809/issm-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer"></div>
</div>
</li>
<li>
<div class="amazlet-box">
<div class="amazlet-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/issm-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41k7xonwpdL._SL160_.jpg" alt="入門git" /></a></div>
<div class="amazlet-info">
<div class="amazlet-name"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/issm-22/ref=nosim/" name="amazletlink" target="_blank">入門git</a>
<div class="amazlet-powered-date">posted with <a href="http://www.amazlet.com/browse/ASIN/427406767X/issm-22/ref=nosim/" title="入門git" target="_blank">amazlet</a> at 11.12.26</div>
</div>
<div class="amazlet-detail">Travis Swicegood <br />オーム社 <br />売り上げランキング: 8628</div>
<div class="amazlet-sub-info">
<div class="amazlet-link"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/issm-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer"></div>
</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2011/12/26/114441/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2011/12/26/114441</feedburner:origLink></item>
		<item>
		<title>Net::Google::Analyticsを使ってGoogle Analyticsのデータを引っ張る</title>
		<link>http://feedproxy.google.com/~r/issm/~3/JV9_WR2ajRA/124620</link>
		<comments>http://blog.iss.ms/2011/12/13/124620#comments</comments>
		<pubDate>Tue, 13 Dec 2011 03:46:20 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3621</guid>
		<description><![CDATA[．．．というタイトルで，Perl Advent Calendar 2011 の Casual Track に，13日目のエントリを書かせていただきました． Net::Google::Analyticsを使ってGoogle [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:Net::Google::Analyticsを使ってGoogle Analyticsのデータを引っ張る--></p>
<p>．．．というタイトルで，<a href="http://perl-users.jp/articles/advent-calendar/2011/">Perl Advent Calendar 2011</a> の <a href="http://perl-users.jp/articles/advent-calendar/2011/casual/">Casual Track</a> に，13日目のエントリを書かせていただきました．</p>
<ul class="links">
<li><a href="http://perl-users.jp/articles/advent-calendar/2011/casual/13" title="Net::Google::Analyticsを使ってGoogle Analyticsのデータを引っ張る - Perl Advent Calendar Japan 2011 Casual Track">Net::Google::Analyticsを使ってGoogle Analyticsのデータを引っ張る &#8211; Perl Advent Calendar Japan 2011 Casual Track</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2011/12/13/124620/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2011/12/13/124620</feedburner:origLink></item>
		<item>
		<title>皆既月食の写真何点か＠名古屋</title>
		<link>http://feedproxy.google.com/~r/issm/~3/WNyLEtfzmQQ/020429</link>
		<comments>http://blog.iss.ms/2011/12/11/020429#comments</comments>
		<pubDate>Sat, 10 Dec 2011 17:04:29 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[写真ライフ]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3613</guid>
		<description><![CDATA[今回の皆既月食，雲だらの名古屋でこのUstを見ていました： USTREAM: astro135ch: 2012年12月10日の皆既月食を兵庫県明石市から中継します。明石月食中継プロジェクト2011提供。放送時間は10日2 [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:皆既月食の写真何点か＠名古屋--></p>
<p>今回の皆既月食，雲だらの名古屋でこのUstを見ていました：</p>
<ul class="links">
<li><a href="http://www.ustream.tv/channel/astro135ch" title="USTREAM: astro135ch: 2012年12月10日の皆既月食を兵庫県明石市から中継します。明石月食中継プロジェクト2011提供。放送時間は10日21時30分~11日1時30分の予定です。. ...">USTREAM: astro135ch: 2012年12月10日の皆既月食を兵庫県明石市から中継します。明石月食中継プロジェクト2011提供。放送時間は10日21時30分~11日1時30分の予定です。. &#8230;</a></li>
</ul>
<p>幸い名古屋でも皆既のあたりから雲が切れ始め，お仕事場前の道路から見上げたら，肉眼ではっきりと見ることができました．</p>
<p>そんなわけで，手持ちのカメラで撮ったものをざっとまとめてみました．</p>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6486760215/" title="IMGP6399 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7016/6486760215_f5595ae6f0.jpg" width="500" height="333" alt="IMGP6399"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6486824451/" title="IMGP6426 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7172/6486824451_95620fa04f.jpg" width="500" height="333" alt="IMGP6426"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6486871143/" title="IMGP6436 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7021/6486871143_d14b3d034e.jpg" width="500" height="333" alt="IMGP6436"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6486932301/" title="IMGP6455 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7012/6486932301_e1d0c2168a.jpg" width="500" height="333" alt="IMGP6455"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487001769/" title="IMGP6465 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7010/6487001769_538c89cbf4.jpg" width="500" height="333" alt="IMGP6465"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487088107/" title="IMGP6485 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7014/6487088107_00345a2b0d.jpg" width="500" height="333" alt="IMGP6485"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487160543/" title="IMGP6524 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7009/6487160543_4e9a01af63.jpg" width="500" height="333" alt="IMGP6524"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487160803/" title="IMGP6532 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7174/6487160803_6220f84568.jpg" width="500" height="333" alt="IMGP6532"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487294597/" title="IMGP6536 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7175/6487294597_e09e60ed9b.jpg" width="500" height="333" alt="IMGP6536"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487295589/" title="IMGP6553 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7153/6487295589_c4c0724a01.jpg" width="500" height="333" alt="IMGP6553"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487296967/" title="IMGP6569 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7021/6487296967_706a320661.jpg" width="500" height="333" alt="IMGP6569"></a>
</div>
<div class="flickr2-photo">
<a href="http://www.flickr.com/photos/issm/6487334295/" title="IMGP6586 by issm, on Flickr"><img src="http://farm8.staticflickr.com/7151/6487334295_0afac5b243.jpg" width="500" height="333" alt="IMGP6586"></a>
</div>
<p>他にも重複してるっぽい写真を含め，Flickrに上がってますのでよろしければ：</p>
<ul>
<li><a href="http://www.flickr.com/photos/issm/tags/20111210lunareclipse/" title="Flickr: issm's stuff tagged with 20111210lunareclipse">Flickr: issm&#8217;s stuff tagged with 20111210lunareclipse</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2011/12/11/020429/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2011/12/11/020429</feedburner:origLink></item>
		<item>
		<title>PHP::Serializationを使ったPerl・PHP間でのデータ共有の足がかりのためのメモ</title>
		<link>http://feedproxy.google.com/~r/issm/~3/RZFtAUq7234/141715</link>
		<comments>http://blog.iss.ms/2011/12/09/141715#comments</comments>
		<pubDate>Fri, 09 Dec 2011 05:17:15 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3605</guid>
		<description><![CDATA[PHPでシリアライズしたデータをPerlで復元したり，その逆を行うったりするためのモジュール PHP::Serialization を使ってみたメモ． Tomas Doran / PHP-Serialization &# [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:PHP::Serializationを使ったPerl・PHP間でのデータ共有の足がかりのためのメモ--></p>
<p>PHPでシリアライズしたデータをPerlで復元したり，その逆を行うったりするためのモジュール <a href="http://search.cpan.org/dist/PHP-Serialization/">PHP::Serialization</a> を使ってみたメモ．</p>
<ul class="links">
<li><a href="http://search.cpan.org/dist/PHP-Serialization/" title="Tomas Doran / PHP-Serialization - search.cpan.org">Tomas Doran / PHP-Serialization &#8211; search.cpan.org</a></li>
</ul>
<p>なお，Perl は 5.12.2，PHP は 5.3.4．</p>
<h4>簡単なデータいくつか（Perl側でシリアライズ）</h4>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=serialize -le 'say serialize($_)  for 1, [1], [1 =&gt; 2], +{1 =&gt; 2}'
i:1;
a:1:{i:0;i:1;}
a:2:{i:0;i:1;i:1;i:2;}
a:1:{i:1;i:2;}</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ i:1;  a:1:{i:0;i:1;}  a:2:{i:0;i:1;i:1;i:2;}  a:1:{i:1;i:2;} /'
1
[1]
[1, 2]
{ 1 =&gt; 2 }</pre></div></div>

<h4>簡単なデータいくつか（PHP側でシリアライズ）</h4>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% echo '&lt;?php print serialize(array()) ?&gt;' | php
a:0:{}
% echo '&lt;?php print serialize(array( 1, 2 )) ?&gt;' | php
a:2:{i:0;i:1;i:1;i:2;}
% echo '&lt;?php print serialize(array( 1 =&gt; 2 )) ?&gt;' | php
a:1:{i:1;i:2;}
% echo '&lt;?php print serialize(array( '1' =&gt; 2 )) ?&gt;' | php
a:1:{i:1;i:2;}
% echo '&lt;?php print serialize(array( 'a' =&gt; 2 )) ?&gt;' | php
a:1:{s:1:&quot;a&quot;;i:2;}</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ a:0:{}  a:2:{i:0;i:1;i:1;i:2;}  a:1:{i:1;i:2;}  a:1:{s:1:&quot;a&quot;;i:2;} /'
[]
[1, 2]
{ 1 =&gt; 2 }
{ a =&gt; 2 }</pre></div></div>

<h4>空のリストリファレンス・空のハッシュリファレンス（Perl側でシリアライズ）</h4>
<p>空のリストリファレンス，空のハッシュリファレンスを，それぞれ Perl側でシリアライズしてみる：</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=serialize -le 'say serialize([]); say serialize(+{})'
a:0:{}
a:0:{}</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'print dump(unserialize($_))  for qw/ a:0:{} /'
[]</pre></div></div>

<p>ハマる予感しまくりなので，何らかのダミーデータを入れておくのがよさげっぽい．</p>
<h4><code>NULL</code>（PHP側でシリアライズ）</h4>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% echo '&lt;?php print serialize(NULL) ?&gt;' | php
N;
% echo '&lt;?php print serialize(array(NULL)) ?&gt;' | php
a:1:{i:0;N;}
% echo '&lt;?php print serialize(array(NULL, NULL)) ?&gt;' | php
a:2:{i:0;N;i:1;N;}
% echo '&lt;?php print serialize(array(NULL =&gt; NULL)) ?&gt;' | php
a:1:{s:0:&quot;&quot;;N;}</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ N;  a:1:{i:0;N;}  a:2:{i:0;N;i:1;N;}  a:1:{s:0:&quot;&quot;;N;} /'
undef
[undef]
[undef, undef]
{ &quot;&quot; =&gt; undef }</pre></div></div>

<h4><code>undef</code>（Perl側でシリアライズ）</h4>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=serialize -le 'say serialize($_)  for undef, [undef], [undef =&gt; undef], +{undef =&gt; undef}'
N;
a:1:{i:0;N;}
a:2:{i:0;s:5:&quot;undef&quot;;i:1;N;}
a:1:{s:5:&quot;undef&quot;;N;}</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ N;  a:1:{i:0;N;}  a:2:{i:0;s:5:&quot;undef&quot;;i:1;N;}  a:1:{s:5:&quot;undef&quot;;N;} /'
undef
[undef]
[&quot;undef&quot;, undef]
{ undef =&gt; undef }</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2011/12/09/141715/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2011/12/09/141715</feedburner:origLink></item>
		<item>
		<title>[perl] Cache::FileCacheが保存するファイルの中身を覗いてみるメモ</title>
		<link>http://feedproxy.google.com/~r/issm/~3/WBpOV7SGXdY/195232</link>
		<comments>http://blog.iss.ms/2011/12/07/195232#comments</comments>
		<pubDate>Wed, 07 Dec 2011 10:52:32 +0000</pubDate>
		<dc:creator>issm</dc:creator>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.iss.ms/?p=3586</guid>
		<description><![CDATA[2011-12-08 11:25 追記 Can't locate object が出る件に追記しました． はじめに Cache::FileCache が保存するデータの中身を，外部のPerlスクリプトから参照するためのち [...]]]></description>
			<content:encoded><![CDATA[<p><!--Title:[perl] Cache::FileCacheが保存するファイルの中身を覗いてみるメモ--></p>
<p><ins datetime="2011-12-08T11:15:00+09:00"></p>
<div class="note">
  <b>2011-12-08 11:25 追記</b><br />
  <code>Can't locate object</code> が出る件に追記しました．
</div>
<p></ins></p>
<h3>はじめに</h3>
<p><a href="http://search.cpan.org/perldoc?Cache::FileCache">Cache::FileCache</a> が保存するデータの中身を，外部のPerlスクリプトから参照するためのちょっとした実験のメモ．</p>
<h3>事前準備</h3>
<p>キャッシュを2パタンセットするためのスクリプト <code>set.pl</code>，キャッシュデータが保存されているファイルを見つけてダンプ出力するスクリプト <code>find.pl</code> の2つを順に実行して，それを確認してみます．</p>
<p>コードの内容は後述しますが，次でも参照できます：</p>
<ul class="links">
<li><a href="https://gist.github.com/1442136" title="2011-12-07.cache-filecache — Gist">2011-12-07.cache-filecache — Gist</a></li>
</ul>
<p>構成としては次のような感じ．どこかのディレクトリに2つのスクリプトが置いてあるだけです：</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% tree .
.
├── find.pl
└── set.pl
&nbsp;
0 directories, 2 files</pre></div></div>

<h3><code>set.pl</code> を実行する</h3>
<p><code>set.pl</code> は次のような感じです：</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> 5<span style="color: #339933;">.</span>12<span style="color: #339933;">.</span>0<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> FindBin<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Cache<span style="color: #339933;">::</span><span style="color: #006600;">FileCache</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$cache</span> <span style="color: #339933;">=</span> Cache<span style="color: #339933;">::</span><span style="color: #006600;">FileCache</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    cache_root <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">&quot;${FindBin::Bin}/cache&quot;</span><span style="color: #339933;">,</span>
    namespace  <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'mycache'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># 600秒後にexpire</span>
<span style="color: #0000ff;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">set</span><span style="color: #009900;">&#40;</span>
    <span style="color: #ff0000;">'hogehoge'</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span> foo <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> bar <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> baz <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span> <span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #cc66cc;">600</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># expireしない</span>
<span style="color: #0000ff;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">set</span><span style="color: #009900;">&#40;</span>
    <span style="color: #ff0000;">'fugafuga'</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#91;</span><span style="color: #000066;">qw</span><span style="color: #339933;">/</span> a b c d e <span style="color: #339933;">/</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>これを実行すると，ファイル構成は次のようになります：</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl set.pl
% tree .
.
├── cache
│   └── mycache
│       └── 3
│           ├── 9
│           │   └── 9
│           │       └── 39975bb0ba31825c4fdd3de775dd468081b3522b
│           └── b
│               └── 2
│                   └── 3b2c6c10d0e78072d14e02cc4c587814d0f10f3a
├── find.pl
└── set.pl
&nbsp;
7 directories, 4 files</pre></div></div>

<h3><code>find.pl</code> を実行する</h3>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> 5<span style="color: #339933;">.</span>12<span style="color: #339933;">.</span>0<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> FindBin<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> File<span style="color: #339933;">::</span><span style="color: #006600;">Find</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Storable <span style="color: #009966; font-style: italic;">qw/thaw/</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> Data<span style="color: #339933;">::</span><span style="color: #006600;">Dumper</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$target</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;${FindBin::Bin}/cache&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> _do_something <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$raw</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #0000ff;">$raw</span> <span style="color: #339933;">=</span> <span style="color: #b1b100;">do</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$a</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">local</span> <span style="color: #0000ff;">$/</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">open</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$fh</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'&lt;'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$f</span>  <span style="color: #b1b100;">or</span>  <span style="color: #000066;">die</span> <span style="color: #0000ff;">$!</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$a</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$fh</span><span style="color: #339933;">&gt;;</span>
        <span style="color: #000066;">close</span> <span style="color: #0000ff;">$fh</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$a</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$data</span> <span style="color: #339933;">=</span> thaw<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$raw</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    say Dumper <span style="color: #0000ff;">$data</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> _handle_found <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$f</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$File</span><span style="color: #339933;">::</span><span style="color: #006600;">Find</span><span style="color: #339933;">::</span><span style="color: #006600;">name</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span>  <span style="color: #b1b100;">if</span> <span style="color: #339933;">-</span>d <span style="color: #0000ff;">$f</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> _do_something<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
find <span style="color: #0000ff;">\&amp;_handle_found</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$target</span><span style="color: #339933;">;</span></pre></div></div>

<p>実行結果は次のようになります：</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">% perl find.pl
$VAR1 = [
          'fugafuga',
          bless( {
                   '_Expires_At' =&gt; 'never',
                   '_Size' =&gt; undef,
                   '_Created_At' =&gt; '1323249367',
                   '_Key' =&gt; undef,
                   '_Data' =&gt; [
                                'a',
                                'b',
                                'c',
                                'd',
                                'e'
                              ],
                   '_Accessed_At' =&gt; '1323249367'
                 }, 'Cache::Object' )
        ];
&nbsp;
$VAR1 = [
          'hogehoge',
          bless( {
                   '_Expires_At' =&gt; '1323249967',
                   '_Size' =&gt; undef,
                   '_Created_At' =&gt; '1323249367',
                   '_Key' =&gt; undef,
                   '_Data' =&gt; {
                                'bar' =&gt; 2,
                                'baz' =&gt; [
                                           3,
                                           4,
                                           5
                                         ],
                                'foo' =&gt; 1
                              },
                   '_Accessed_At' =&gt; '1323249367'
                 }, 'Cache::Object' )
        ];</pre></div></div>

<p>復元できているようですね．</p>
<h3>簡単なまとめ</h3>
<p>Cache::FileCache でファイルとして保存されるデータは，次の要素：</p>
<ol>
<li>キャシュのキー</li>
<li>Cache::Object オブジェクト</li>
</ol>
<p>が順に入っているリストリファレンスを Storable でシリアライズしたもの，ということがわかった感じです．（<code>Storable::thaw</code> で復元できた，という結果からに拠ります．今のところソースコードを確認していません＞＜）</p>
<p>また，「無期限」なキャッシュオブジェクトには，<code>_Expires_At</code> の値として <code>never</code> が付いているので，判別に利用できますね．</p>
<p>あと，上記のように復元したら，<a href="http://search.cpan.org/perldoc?Cache::Object">Cache::Object</a> のメソッドが使えないのは私の行いが悪いからでしょうか？</p>

<div class="wp_syntax"><div class="code"><pre class="terminal" style="font-family:monospace;">Can't locate object method &quot;get_acceced_at&quot; via package &quot;Cache::Object&quot; at (ry</pre></div></div>

<p><ins datetime="2011-12-08T11:25:00+09:00"><br />
  <b>2011-12-08 11:25 追記</b><br />
  スクリプト中で <code>use Cache::Object</code> すれば使えました＞＜<br />
</ins></p>
<h3>おわりに</h3>
<p>以上，Cache::FileCache が保存するデータの中身を，外部のスクリプトから参照するちょっとした実験のメモ，でした．</p>
<h3 class="appendix">おまけ： Storableはどこで使われている？</h3>
<p>上記スクリプトでは，当然のように <code>Storable::thaw</code> を使いましたが，Cache::FileCache が Storable を利用しているかどうかは，次のような順でソースコードをさかのぼっていった結果，確認することができました．</p>
<p>最終的に，Cache::CacheUtils の中で，次の記述を見つけました：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>19
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> Storable <span style="color: #000066;">qw</span><span style="color: #009900;">&#40;</span> nfreeze thaw dclone <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>また，さかのぼった順序は，つぎのような感じです．</p>
<h4>Cache::FileCache:96 (Cache::Cache 1.06)</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>96
97
98
99
100
101
102
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> _Get_Backend
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_optional_cache_root</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> Static_Params<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">@_</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000066;">return</span> <span style="color: #000000; font-weight: bold;">new</span> Cache<span style="color: #339933;">::</span><span style="color: #006600;">FileBackend</span><span style="color: #009900;">&#40;</span> _Build_Cache_Root<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_optional_cache_root</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4>Cache::FileBackend:646 (Cache::Cache 1.06)</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> _read_data
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$p_path</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
&nbsp;
  Assert_Defined<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_path</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$frozen_data_ref</span> <span style="color: #339933;">=</span> _Read_File_Without_Time_Modification<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_path</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">or</span>
    <span style="color: #000066;">return</span> <span style="color: #009900;">&#91;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span> <span style="color: #000066;">undef</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$data_ref</span> <span style="color: #339933;">=</span> <span style="color: #000066;">eval</span><span style="color: #009900;">&#123;</span> Thaw_Data<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$$frozen_data_ref</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$@</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$data_ref</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">ne</span> <span style="color: #ff0000;">'ARRAY'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">unlink</span> _Untaint_Path<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_path</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #009900;">&#91;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span> <span style="color: #000066;">undef</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">else</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$data_ref</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4>Cache::CacheUtils:114 (Cache::Cache 1.06)</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>114
115
116
117
118
119
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">sub</span> Thaw_Data
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_frozen_object</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000066;">return</span> <span style="color: #000066;">defined</span> <span style="color: #0000ff;">$p_frozen_object</span> <span style="color: #339933;">?</span> thaw<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$p_frozen_object</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.iss.ms/2011/12/07/195232/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.iss.ms/2011/12/07/195232</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.677 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-01-28 19:13:32 -->

