<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>怠惰は美徳</title>
	<atom:link href="http://blog.xeres.jp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xeres.jp</link>
	<description>楽をするために努力する</description>
	<lastBuildDate>Wed, 21 Sep 2011 02:49:21 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>vSphere 5 で Image Builder を使ってみた</title>
		<link>http://blog.xeres.jp/2011/09/using-image-builder-on-vsphere-5/</link>
		<comments>http://blog.xeres.jp/2011/09/using-image-builder-on-vsphere-5/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 03:02:49 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.xeres.jp/?p=555</guid>
		<description><![CDATA[vSphere 5 から Image Builder という機能が増えました。 ドライバーやパッチをプリインストールしたブータブル ESXi イメージが作れるという機能です。 何台も ESXi を立てる時に Ethern [...]]]></description>
			<content:encoded><![CDATA[<p>vSphere 5 から Image Builder という機能が増えました。<br />
ドライバーやパッチをプリインストールしたブータブル ESXi イメージが作れるという機能です。</p>
<p>何台も ESXi を立てる時に Ethernet や HBA の最新ドライバーを入れたり、VMware のパッチを<br />
当てたりするのが面倒なので、動作確認をしてみました。<br />
# vCenter があれば Update Manager が使えるって話もあるけど、使えない時もあるよね。</p>
<p>とりあえず、PowerCLI が入ってるものとして話を進めます。</p>
<p>まず VMware から素の ESXi5 ImageProfile を持ってきます。マニュアルには書いてないけど、<br />
<a href="http://www.yellow-bricks.com/2011/09/15/creating-an-image-profile-without-manually-downloading-a-bundle-stateless-esxi/">海外のブログ</a>を参考にしました。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Add-EsxSoftwareDepot -DepotUrl https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml<br />
<br />
Depot Url<br />
---------<br />
https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml</div></div>
<p>これでローカルの作業領域に ESXi5 ImageProfile が作られるので内容とかを確認します。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Get-EsxImageProfile<br />
<br />
Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Vendor &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Last Modified &nbsp; Acceptance Level<br />
---- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ------ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;------------- &nbsp; ----------------<br />
ESXi-5.0.0-20110904001-notools VMware, Inc. &nbsp; &nbsp;2011/08/26 1... PartnerSupported<br />
ESXi-5.0.0-469512-no-tools &nbsp; &nbsp; VMware, Inc. &nbsp; &nbsp;2011/08/19 1... PartnerSupported<br />
ESXi-5.0.0-20110904001-stan... VMware, Inc. &nbsp; &nbsp;2011/08/26 1... PartnerSupported<br />
ESXi-5.0.0-469512-standard &nbsp; &nbsp; VMware, Inc. &nbsp; &nbsp;2011/08/19 1... PartnerSupported</div></div>
<p>2011/09/20 時点では下記のものが登録されています。</p>
<ul>
<li>ESXi-5.0.0-469512-standard</li>
<li>ESXi-5.0.0-469512-no-tools</li>
<li>ESXi-5.0.0-20110904001-standard</li>
<li>ESXi-5.0.0-20110904001-notools</li>
</ul>
<p>469512 は 8/24 にリリースされた最初の 5.0.0 ですね。20110904001 は 9/4 に出たパッチが<br />
適応されたものです。</p>
<p>standard/notools となっているのは VMware Tools の有無です。VMware Tools を含まない<br />
イメージは PXE boot などで利用するようです。詳細は <a href="http://kb.vmware.com/kb/2004018">KB2004018</a> 参照。</p>
<p>今回は Image Builder を使って作ったカスタムイメージで普通にインストールしたいだけなので<br />
standard をベースにして、クローンします。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> New-EsxImageProfile -CloneProfile ESXi-5.0.0-20110904001-standard -Name MyProfile -AcceptanceLevel CommunitySupported<br />
<br />
Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Vendor &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Last Modified &nbsp; Acceptance Level<br />
---- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ------ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;------------- &nbsp; ----------------<br />
MyProfile &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VMware, Inc. &nbsp; &nbsp;2011/08/26 1... CommunitySupported</div></div>
<p>ドライバーやパッチを入れる場合は、この Image Profile に offline-bundle を適応します。</p>
<p>ここでは試しに Brocade の HBA のドライバーを入れてみましょう。<a href="http://www.brocade.com/services-support/drivers-downloads/CNA/VMWare.page">Brocade のサイト</a>から<br />
HBA のドライバーを落とします。BCD-bfa-3.0.0.0-00000-offline_bundle-465342.zip です。</p>
<p>で、こんな感じでインストールします。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Add-EsxSoftwareDepot D:\BCD-bfa-3.0.0.0-00000-offline_bundle-465342.zip<br />
<br />
Depot Url<br />
---------<br />
zip:D:\BCD-bfa-3.0.0.0-00000-offline_bundle-465342.zip?index.xml<br />
<br />
<br />
PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Get-EsxSoftwarePackage -Vendor Brocade<br />
<br />
Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Version &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Vendor &nbsp; &nbsp; Release Date<br />
---- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ------- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;------ &nbsp; &nbsp; ------------<br />
scsi-bfa &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.0.0.0-1OEM.500.0.0.406165 &nbsp; &nbsp;Brocade &nbsp; &nbsp;2011/07/22 23...<br />
<br />
<br />
PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Add-EsxSoftwarePackage -ImageProfile MyProfile -SoftwarePackage scsi-bfa<br />
<br />
Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Vendor &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Last Modified &nbsp; Acceptance Level<br />
---- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ------ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;------------- &nbsp; ----------------<br />
MyProfile &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VMware, Inc. &nbsp; &nbsp;2011/09/20 1... CommunitySupported</div></div>
<p>途中、Get-EsxSoftwarePackage で -Vendor Brocade を指定していますが、指定しないと<br />
VMware の VIBs もズラズラと表示されてアレなので便宜上こうしてます。</p>
<p>vihostupdate.pl のように追加で投入したドライバーやパッチだけ表示してほしいですね。<br />
まぁ、なんかやり方があるのかもしれませんが。</p>
<p>こんな感じでどんどん必要なドライバーやパッチを適応したら、最後に書き出して使います。<br />
書き出し方法は ZIP と ISO が選べます。</p>
<p>ZIP のほうが、後で Add-EsxSoftwareDepot してパッチを足したりできるようなので、<br />
ISO だけ必要な場合でも作っておくとメンテナンスが楽かも。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Export-EsxImageProfile -ImageProfile MyProfile -ExportToBundle D:\ESXi-5.0.0-474610+BCD-bfa.zip</div></div>
<p>ISO はブータブルになるので、これでインストールするとドライバーやパッチが適応された状態で<br />
インストールされます。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> Export-EsxImageProfile -ImageProfile MyProfile -ExportToIso D:\ESXi-5.0.0-474610+BCD-bfa.iso</div></div>
<p>完成後のサイズはこんな感じ。</p>
<div class="codecolorer-container dos dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">PowerCLI D:\<span style="color: #33cc33;">&gt;</span> <a href="http://www.ss64.com/nt/dir.html"><span style="color: #b1b100; font-weight: bold;">dir</span></a><br />
&nbsp; &nbsp; ディレクトリ: D:\<br />
Mode &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LastWriteTime &nbsp; &nbsp; Length Name<br />
---- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;------------- &nbsp; &nbsp; ------ ----<br />
-a--- &nbsp; &nbsp; &nbsp; &nbsp;2011/09/20 &nbsp; &nbsp; 14:38 &nbsp; &nbsp;1091422 BCD-bfa-3.0.0.0-00000-offline_bundle-465342.zip<br />
-a--- &nbsp; &nbsp; &nbsp; &nbsp;2011/09/20 &nbsp; &nbsp; 15:07 &nbsp;306077696 ESXi-5.0.0-474610+BCD-bfa.iso<br />
-a--- &nbsp; &nbsp; &nbsp; &nbsp;2011/09/20 &nbsp; &nbsp; 15:05 &nbsp;296550093 ESXi-5.0.0-474610+BCD-bfa.zip</div></div>
<p>ドライバーやパッチがキチンと適応されているかどうかは色々と確認方法がありますが、<br />
今回は Local ESXi Shell で確認しました。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~ <span style="color: #666666; font-style: italic;"># esxcli software vib list | grep Brocade</span><br />
scsi-bfa &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.0.0.0-10EM.500.0.0.406165 &nbsp; &nbsp; &nbsp; &nbsp;Brocade &nbsp;VMwareCertified &nbsp; <span style="color: #000000;">2011</span>-09-<span style="color: #000000;">20</span></div></div>
<p>日付は Release Date ではなく、イメージを作った日付になってしまうので使い勝手が微妙。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/09/using-image-builder-on-vsphere-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>petit restaurant tomy</title>
		<link>http://blog.xeres.jp/2011/08/petit-restaurant-tomy/</link>
		<comments>http://blog.xeres.jp/2011/08/petit-restaurant-tomy/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 19:09:22 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[グルメ]]></category>
		<category><![CDATA[フランス料理]]></category>

		<guid isPermaLink="false">http://xeres.jp/?p=205</guid>
		<description><![CDATA[店舗情報 petit restaurant tomy 前から通る度に気になっていたオサレっ気のあるお店に突撃してみた。 店内は10席ほどでカウンターのみ。店員はシェフ1人なので、こちらから 話し掛けない限りは黙々と調理し [...]]]></description>
			<content:encoded><![CDATA[<p>Flickr + Highslide encountered an error</p><p>Error: Photoset not found</p>
<h3>店舗情報</h3>
<p><a href="http://r.tabelog.com/tokyo/A1315/A131502/13110358/">petit restaurant tomy</a></p>
<p>前から通る度に気になっていたオサレっ気のあるお店に突撃してみた。</p>
<p>店内は10席ほどでカウンターのみ。店員はシェフ1人なので、こちらから<br />
話し掛けない限りは黙々と調理していて、皿が空いたころにスッと出てる。<br />
1人で飯を食う時はキッチンで調理しているのを見ながら自分のペースで<br />
食べたいので、この辺はありがたい。<br />
# ただし、混んでいる場合には若干待たされるかも。</p>
<p>コースは3800円から、アラカルトも1皿概ね1000～2000円程度で、飲み物も<br />
グラスの赤白スパークリングが500～1000円程度なので大変リーズナブル。</p>
<p>1人で調理されている都合上、メニューがある程度パターン化しているので、<br />
近い頻度で再訪問する場合にはその旨を伝えるか、アラカルトにしよう。</p>
<h3>場所</h3>

]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/08/petit-restaurant-tomy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>「W3 Total Cache」のススメ</title>
		<link>http://blog.xeres.jp/2011/04/w3-total-cache-no-susume/</link>
		<comments>http://blog.xeres.jp/2011/04/w3-total-cache-no-susume/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 16:41:55 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[W3 Total Cache]]></category>

		<guid isPermaLink="false">http://xeres.jp/?p=109</guid>
		<description><![CDATA[WordPress の入れ替えのため、何かしらの最適化プラグインを 入れようということで、色々調べた結果、一番ナウい(古)と噂の W3 Total Cache を入れてみた。 どれぐらい効果があるの？ 実際に計ってみた。 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress の入れ替えのため、何かしらの最適化プラグインを<br />
入れようということで、色々調べた結果、一番ナウい(古)と噂の<br />
<a rel="nofollow" href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/">W3 Total Cache</a> を入れてみた。</p>
<h3>どれぐらい効果があるの？</h3>
<p>実際に計ってみた。</p>
<p><a rel="lightbox" href="http://farm6.static.flickr.com/5029/5647338828_57d2588f5f.jpg"><img src="http://farm6.static.flickr.com/5029/5647338828_57d2588f5f.jpg" alt="W3 Total Cache の効果" class='alignnone' /></a></p>
<p><a rel="nofollow" href="http://www.webpagetest.org/">WebpageTest</a> で調べた Before/After がコレ。<br />
※CDN は CloudFlare を利用しているが、今回は割愛する。</p>
<h3>インストール方法</h3>
<p>管理画面から、</p>
<p><em>[プラグイン/新規追加]→[検索 "W3 Total Cache"]→[インストール]</em></p>
<p>簡単だね！</p>
<p>…というだけではアレなので。</p>
<p>W3 Total Cache は Apache2 のモジュールの機能を色々と利用しているので、<br />
下記のようなモジュールは入れておいたほうがよい。といっても、殆どの<br />
ディストリビューションでデフォルトで有効になってそうなものばかり。</p>
<ul>
<li>mod_mime</li>
<li>mod_headers</li>
<li>mod_deflate</li>
<li>mod_expires</li>
</ul>
<p>唯一、例外なのは mod_expires だろう。コイツはキャッシュに関する<br />
ヘッダを色々とアレするせいか、コンテンツを激しく変更している最中に<br />
弄ると、ブラウザや環境によっては副作用があるので、この時点で導入して<br />
いないのであれば、一通りデザインやプラグイン、W3 Total Cache 自体の<br />
設定が終わって落ち着いた後に導入するのがオススメである。</p>
<p>尚、[Performance / FAQ] にも記載がある通り、<strong>mod_rewrite は必須</strong>である。</p>
<p>あとは管理画面の左側メニューに[Performance]という項目が現れるので、<br />
Installのところをクリックすると .htaccess に書き込まれた内容が見れる。</p>
<p>それから、これは optional な機能だが、W3 Total Cache はキャッシュの<br />
バックエンドとして Memcached, XCache, Alternative PHP Cache (APC),<br />
eAccelerator と連携ができるので必要な方はインストールしておくとよい。</p>
<p>一番安定していて、かつインストールが楽なのは APC である。多分、<br />
効果もその分たかが知れているのだろうが、黙って入れておけばよい。<br />
Debian あたりだと apt-get/aptitude で php-apc を一発インストール可能、<br />
あとは Apache2 を再起動するだけだ。</p>
<p>当然といえば当然だが、WP Super Cache や Quick Cache のような、<br />
他のキャッシュ関係プラグインとはバッティングするみたいなので、<br />
無効にするか削除しておこう。</p>
<h3>設定方法</h3>
<h4>General Settings</h4>
<p>こんな感じにするよ。</p>
<ul>
<li>Page Cache: <em>Enabled</em></li>
<li>Minify: <em>Enabled</em></li>
<li>Database Cache: <em>Disabled</em></li>
<li>Object Cache: <em>Disabled</em></li>
<li>Content Delivery Network: <em>Disabled</em></li>
<li>Browser Cache: <em>Enabled</em></li>
</ul>
<p>Page Cache, Minify, Browser Cache は、各々「○○ Method」のプルダウンで<br />
キャッシュ方法が選べる。デフォルトは推奨値になっているようなので、<br />
とりあえずそのままにしよう。</p>
<p>インストール方法で説明した optional なキャッシュ方法を用意した場合は、<br />
それらを選んでおくと、多分、デフォルトよりは速いだろう。多分。メイビー。</p>
<p>Database Cache や Object Cache は、共有ホスト(レンタル鯖や VPS など)では<br />
ディスクのアクセス速度の関係で、逆にパフォーマンスが落ちる場合があるので、<br />
Disabled にするのがいいらしい。僕は APC を入れたので APC にお願いしてる。</p>
<p>Content Delivery Network (CDN) に関しては、W3 Total Cache でサポートする<br />
CDN が全て有料の CDN なので、ここでは無効にしておいて、<a rel="nofollow" href="http://www.cloudflare.com/">CloudFlare</a> を<br />
利用するのが良いと思う。CloudFlare については下記の記事を読むとよく分かる。<br />
WordPress のプラグインも用意されていて、利用も無料である。WordPress での<br />
導入方法については、気が向いたら何か書くかもしれない。</p>
<p>参考: <a rel="nofollow" href="http://fladdict.net/blog/2011/04/cloudflare.html">０円の広域負荷分散システムCloudFlareが素晴らしい件 &#8211; fladdict</a></p>
<h4>Page Cache</h4>
<p>生成したページのキャッシュについて。</p>
<ul>
<li>General / ☑ Don&#8217;t cache pages for logged in users</li>
<li>General / ☑ Cache home page</li>
<li>General / ☑ Cache feeds: site, categories, tags, comments</li>
<li>General / ☐ Cache URIs with query string variables</li>
<li>General / ☑ Cache 404 (not found) pages</li>
</ul>
<p>注意するべきは4つめで、これは Query String 付の URL (?foo=123&#038;bar=abc 等) を<br />
キャッシュするという設定で、利用しているプラグインなどによっては色々と<br />
要らんことをしそうなので Disabled にしてくのが良いと思う。</p>
<p>あとは別に問題なさげ。</p>
<ul>
<li>Advanced / Rejected User Agents</li>
</ul>
<p>Page Cache を無効にする User-Agent を指定する項目である。性能的な問題で<br />
機能上の制限があるモバイル端末が主な対象である。<br />
# IE6？Netscape？使ってる奴は一刻も早く死ね。</p>
<p>デフォルトでは空欄になっていると思うが、[Performance]-[User Agent Groups] に<br />
モバイル端末の User-Agent が列挙されているので、これをコピペしておくとよい。</p>
<ul>
<li>Cache Preload / ☑ Automatically prime the page cache</li>
</ul>
<p>Google Sitemap を用意している人は、ここにチェックを入れておこう。</p>
<h4>Minify</h4>
<p>HTML の余分な空白を削除したり、CSS や JavaScript を1個のファイルにまとめて<br />
負荷を下げようという機能である。</p>
<ul>
<li>General / ☑ Rewrite URL structure</li>
<li>General / ☑ Automatically upload modified files</li>
</ul>
<ul>
<li>HTML / HTML Minify settings / ☑ Enable</li>
<li>HTML / HTML Minify settings / ☐ Don&#8217;t minify feeds</li>
<li>HTML / HTML Minify settings / ☑ Inline CSS minification</li>
<li>HTML / HTML Minify settings / ☑ Inline JS minification</li>
<li>HTML / HTML Minify settings / ☑ Line break removal</li>
</ul>
<p>ここまでは特に深く考えず適当にチェックしても、あまり問題が出ることもない。</p>
<ul>
<li>JavaScript / JS minify settings / ☑ Enable</li>
<li>JavaScript / JS minify settings / ☐ Combine only after &lt;head&gt;</li>
<li>JavaScript / JS minify settings / ☐ Combine only after &lt;body&gt;</li>
<li>JavaScript / JS minify settings / ☐ Combine only before &lt;/body&gt;</li>
<li>JavaScript / JS minify settings / ☑ Comment removal</li>
<li>JavaScript / JS minify settings / ☑ Line break removal</li>
</ul>
<p>最大の鬼門である JavaScript。ここは、チェックを入れるだけでは機能せずに、<br />
[Add a script] を押して追加した JavaScript だけが Minify されるという仕組み。<br />
ところが、これがサッパリ動かない。いや、確かに Minify はされている。<br />
されているんだが、その JavaScript を使ったプラグインが全てまともに動かない。</p>
<p>そういうわけで僕は <em>No JS files added</em> のままで放置プレイしている。</p>
<ul>
<li>Cascading Style Sheets / CSS minify settings / ☑ Enable</li>
<li>Cascading Style Sheets / CSS minify settings / ☐ Combine only</li>
<li>Cascading Style Sheets / CSS minify settings / ☑ Comment removal</li>
<li>Cascading Style Sheets / CSS minify settings / ☑ Line break removal</li>
</ul>
<p>今度は CSS。これも JavaScript と同じで、[Add a style sheet] したものだけが<br />
Minify されるようになっている。JavaScript と違って、チェックボックスの下に<br />
テーマを選ぶプルダウンがあるが、テーマごとに CSS が違うので、それぞれの<br />
テーマで Minify するかしないかが選べるため。まぁ、(active) になっている<br />
テーマだけ Minify しておけばいいんじゃないでしょうか。</p>
<p>JavaScript と違い、元の CSS が余程の糞でもない限り、悪影響は出ないと思う。</p>
<h4>Browser Cache</h4>
<p>キャッシュコントロールに関するヘッダを吐くことで、ブラウザに必要な時だけ<br />
リクエストを送ってもらう。主に mod_expires に関する設定といってもよい。</p>
<ul>
<li>General / ☑ Set expires header</li>
<li>General / ☑ Set cache control header</li>
<li>General / ☐ Set entity tag (eTag)</li>
<li>General / ☑ Set W3 Total Cache header</li>
<li>General / ☑ Enable HTTP (gzip) compression</li>
<li>General / ☐ Do not process 404 errors for static objects with WordPress</li>
</ul>
<ul>
<li>Cascading Style Sheets &#038; JavaScript / ☑ Set expires header</li>
<li>Cascading Style Sheets &#038; JavaScript / ☑ Set cache control header</li>
<li>Cascading Style Sheets &#038; JavaScript / ☐ Set entity tag (eTag)</li>
<li>Cascading Style Sheets &#038; JavaScript / ☑ Set W3 Total Cache header</li>
<li>Cascading Style Sheets &#038; JavaScript / ☑ Enable HTTP (gzip) compression</li>
</ul>
<ul>
<li>HTML / ☑ Set expires header</li>
<li>HTML / ☑ Set cache control header</li>
<li>HTML / ☐ Set entity tag (eTag)</li>
<li>HTML / ☑ Set W3 Total Cache header</li>
<li>HTML / ☑ Enable HTTP (gzip) compression</li>
</ul>
<ul>
<li>Media &#038; Other Files / ☑ Set expires header</li>
<li>Media &#038; Other Files / ☑ Set cache control header</li>
<li>Media &#038; Other Files / ☐ Set entity tag (eTag)</li>
<li>Media &#038; Other Files / ☑ Set W3 Total Cache header</li>
<li>Media &#038; Other Files / ☑ Enable HTTP (gzip) compression</li>
</ul>
<p>大体こんな感じ。</p>
<p>ETag は Apache2 の現在の実装だと、i-node, mtime, size の情報を元にしか<br />
生成できない。複数サーバで冗長化している場合、i-node を同じにできないので<br />
全く同じファイルでも ETag が同じ値にならず、無駄なリクエストが発生する。</p>
<p>じゃー mtime や size で ETag 作ればいいじゃないかという話もあるが、今度は<br />
サイズと更新時刻さえ揃えてしまえば全く違うファイルでも ETag が同じ値に<br />
なるので、それはそれでアレ。…ということで、僕は基本的に ETag が嫌いで、<br />
一律オフにすることにした。</p>
<p>Expires header lifetime, Cache Control policy はコンテンツの種類に応じた推奨値が<br />
デフォルトで設定されているようなので、理由がない限りは弄る必要はない。</p>
<h3>最後に</h3>
<p>設定を変更したら必ず deploy ボタンを押すこと。設定が反映されなくて泣く。</p>
<p>あと、プラグインをインストールしたりすると上部に「キャッシュを消せ！」と<br />
通知が出るので、指示に従うように。出力が変になったりして、やっぱり泣く。</p>
<h3>なんか動作がおかしい</h3>
<p>キャッシュを消す。</p>
<p>[Performance]-[General Settings] の上部に [empty all caches] というボタンがあるので、<br />
とりあえずそれを押しておけば間違いない。</p>
<p>これはいちいち面倒くさいので、管理画面の大抵の場面で、右上のプルダウンから<br />
[Empty Caches] を選べば簡単にキャッシュをクリアできる。</p>
<p>投稿ごとにキャッシュを削除したい場合は、投稿一覧の [編集] とかがあるあたりに<br />
[Purge from Page Cache] が追加されているので、それで削除できる。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/04/w3-total-cache-no-susume/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>四川飯店 日本橋 ～Chen Kenichi’s China～</title>
		<link>http://blog.xeres.jp/2011/04/shisen-hanten-nihonbashi-chen-kenichi-s-china/</link>
		<comments>http://blog.xeres.jp/2011/04/shisen-hanten-nihonbashi-chen-kenichi-s-china/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 13:29:47 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[グルメ]]></category>
		<category><![CDATA[中華料理]]></category>

		<guid isPermaLink="false">http://xeres.jp/?p=70</guid>
		<description><![CDATA[店舗情報 四川飯店 日本橋 ～Chen Kenichi’s China～ 大学のゼミOB会で中華を食べよう、という話になったものの、店のチョイスを しようにも、中華といえば京都・大阪の各王将と銀座アスターぐらいしか 知っ [...]]]></description>
			<content:encoded><![CDATA[<p>Flickr + Highslide encountered an error</p><p>Error: Photoset not found</p>
<h3>店舗情報</h3>
<p><a href="http://r.gnavi.co.jp/gabe700/">四川飯店 日本橋 ～Chen Kenichi’s China～</a></p>
<p>大学のゼミOB会で中華を食べよう、という話になったものの、店のチョイスを<br />
しようにも、中華といえば京都・大阪の各王将と銀座アスターぐらいしか<br />
知ってる奴がという体たらく。</p>
<p>銀座アスターはサイトとか見ても何となくビビッと来なかったので、どうせだし<br />
鉄人・陳健一の店に行こうということで、行ってみた。</p>
<p>いやー、美味かった。</p>
<p>全体的にオサレ感が全開で、あまり中華らしくないよね、というのが全員の意見。<br />
一番美味かったのは満場一致でフォアグラとサーロインのオイスターソース炒めで、<br />
「どこが中華やねん」状態だったが、流石に麻婆豆腐は絶品。</p>
<p>僕は辛いものが苦手なんだけど (ココイチで甘口を食うぐらい)、日本人向けに<br />
アレンジされているとはいえ、そこそこ花山椒が効いた麻婆豆腐を「辛い辛い」と<br />
言いながら、結局は全部平らげてしまった。</p>
<p>陳建民の息子、ここにありといったところか。</p>
<h3>場所</h3>

]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/04/shisen-hanten-nihonbashi-chen-kenichi-s-china/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>atig.rbでbit.ly API v3を利用する その2</title>
		<link>http://blog.xeres.jp/2011/03/using-bitly-api-v3-for-atig_rb-part2/</link>
		<comments>http://blog.xeres.jp/2011/03/using-bitly-api-v3-for-atig_rb-part2/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 15:21:32 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.xeres.jp/?p=517</guid>
		<description><![CDATA[atig.rbでbit.ly API v3を利用するは取り込んでもらったんだけど、「j.mp使いてーなぁ」と思って弄っていたら、 実はbit.ly API v2 で動いていることが発覚して、「またいつか使えなくなるじゃん [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.xeres.jp/2011/02/28/using-bitly-api-v3-for-atig_rb">atig.rbでbit.ly API v3を利用する</a>は取り込んでもらったんだけど、「j.mp使いてーなぁ」と思って弄っていたら、<br />
実はbit.ly API v2 で動いていることが発覚して、「またいつか使えなくなるじゃん、ダメじゃん！」ということで、<br />
今度こそキチンとbit.ly API v3に対応しました。</p>
<p>手を付ける前(v0.3.2):<br />
　　<code class="codecolorer text dawn"><span class="text">http://api.bit.ly/shorten</span></code></p>
<p>前回弄った後:<br />
　　<code class="codecolorer text dawn"><span class="text">http://api.bit.ly/v3/shorten</span></code><br />
　　　　　　　　↓<br />
　　<code class="codecolorer ruby dawn"><span class="ruby">bitly.<span style="color:#9900CC;">path</span> = <span style="color:#996600;">'/shorten'</span></span></code> (atig/bitly.rb:30)<br />
　　　　　　　　↓<br />
　　<code class="codecolorer text dawn"><span class="text">http://api.bit.ly/shorten</span></code></p>
<p>正しいv3の使い方:<br />
　　<span style="font: 13px/1.4em Monaco, Lucida Console, monospace">http://api.<span style="color: #ff0000;">bitly.com</span>/v3/shorten</span></span></p>
<p>で、前回弄った時は何で動いたんだろうと疑問に持ったんだけれど、loginとapiKeyを追加している。<br />
v3になったタイミングでAPI keyが必須になったっぽいので、そのせいで使えなくなったのかと。<br />
(APIドキュメントではoptionalになってるけど、OAuthのaccess_token使うと要らないのかな？よく分からん)</p>
<p>まぁ何はともあれ、今度こそちゃんとv3 APIで動いてます。</p>
<p><code class="codecolorer text dawn"><span class="text">atig/bitly.rb</span></code></p>
<div class="codecolorer-container diff dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="diff codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #888822;">+++ bitly.rb &nbsp; &nbsp;2011-03-26 00:18:02.000000000 +0900</span><br />
<span style="color: #440088;">@@ -14,6 +14,10 @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;def login<span style="">&#40;</span>logger, login, key<span style="">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.new logger, login, key<br />
&nbsp; &nbsp; &nbsp; &nbsp;end<br />
<span style="color: #00b000;">+</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp;def domain=<span style="">&#40;</span>v<span style="">&#41;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;@@domain = v</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp;end</span><br />
&nbsp; &nbsp; &nbsp;end<br />
<br />
&nbsp; &nbsp; &nbsp;def initialize<span style="">&#40;</span>logger, login, key<span style="">&#41;</span><br />
<span style="color: #440088;">@@ -25,12 +29,21 @@</span><br />
<br />
&nbsp; &nbsp; &nbsp;def shorten<span style="">&#40;</span>url<span style="">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;return url if url =~ /bit.ly/<br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp;bitly = URI<span style="">&#40;</span>&quot;http://api.bit.ly/v3/shorten&quot;<span style="">&#41;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp;return url if url =~ /j.mp/</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp;bitly = URI<span style="">&#40;</span>&quot;http://api.bitly.com/v3/shorten&quot;<span style="">&#41;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;if @login and @key<br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp; &nbsp;bitly.path &nbsp;= &quot;/shorten&quot;</span><br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp; &nbsp;bitly.query = <span style="">&#123;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;query = <span style="">&#123;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:format =&gt; &quot;json&quot;, :longUrl =&gt; url, :login =&gt; @login, :apiKey =&gt; @key,<br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp; &nbsp;<span style="">&#125;</span>.to_query_str<span style="">&#40;</span>&quot;;&quot;<span style="">&#41;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;<span style="">&#125;</span></span><br />
<span style="color: #00b000;">+</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;if @@domain</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;query<span style="">&#91;</span>:domain<span style="">&#93;</span> = @@domain</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;end</span><br />
<span style="color: #00b000;">+</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;bitly.query = query.to_query_str<span style="">&#40;</span>&quot;&amp;&quot;<span style="">&#41;</span></span><br />
<span style="color: #00b000;">+</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;@log.debug bitly</span><br />
<span style="color: #00b000;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;req = @http.req<span style="">&#40;</span>:get, bitly, <span style="">&#123;</span><span style="">&#125;</span><span style="">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res = @http.http<span style="">&#40;</span>bitly, <span style="">5</span>, <span style="">10</span><span style="">&#41;</span>.request<span style="">&#40;</span>req<span style="">&#41;</span><br />
<br />
<span style="color: #440088;">@@ -40,7 +53,7 @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@log.error res<span style="">&#91;</span>'errorMessage'<span style="">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;url<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res<span style="">&#91;</span>&quot;results&quot;<span style="">&#93;</span><span style="">&#91;</span>url<span style="">&#93;</span><span style="">&#91;</span>'shortUrl'<span style="">&#93;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res<span style="">&#91;</span>'data'<span style="">&#93;</span><span style="">&#91;</span>'url'<span style="">&#93;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br />
&nbsp; &nbsp; &nbsp; &nbsp;else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;url</div></div>
<p>v3 APIを利用できている証拠として、<code class="codecolorer text dawn"><span class="text">~/.atig/config</span></code>に下記のように書くと、<br />
<code class="codecolorer text dawn"><span class="text">http://bit.ly/&lt;hash&gt;</span></code>ではなく、<code class="codecolorer text dawn"><span class="text">http://j.mp/&lt;hash&gt;</span></code>が返ってくるようになります。</p>
<div class="codecolorer-container ruby dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#6666ff; font-weight:bold;">Atig::Bitly</span>.<span style="color:#9900CC;">domain</span> = <span style="color:#996600;">'j.mp'</span></div></div>
<p>よしよし、これで満足。</p>
<p>参考: <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">bit.ly API Documentation</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/03/using-bitly-api-v3-for-atig_rb-part2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndroidでEdyチャージの時だけ標準ブラウザを使う</title>
		<link>http://blog.xeres.jp/2011/03/std-browser-for-edy-only/</link>
		<comments>http://blog.xeres.jp/2011/03/std-browser-for-edy-only/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 20:22:49 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.xeres.jp/?p=506</guid>
		<description><![CDATA[動作確認はT-01C。 標準ブラウザと使いたいブラウザ(ex. Miren Browser)のデフォルト起動をリセットする。[1] 適当なアプリケーション(ex. Twitterクライアント、メーラー)から、http:/ [...]]]></description>
			<content:encoded><![CDATA[<p>動作確認はT-01C。</p>
<ol>
<li>標準ブラウザと使いたいブラウザ(ex. Miren Browser)のデフォルト起動をリセットする。<a class="fn-ref-mark" href="#footnote-1" id="refmark-1"><sup>[1]</sup></a></li>
<li>適当なアプリケーション(ex. Twitterクライアント、メーラー)から、http://～で始まるリンクをクリック。<a class="fn-ref-mark" href="#footnote-2" id="refmark-2"><sup>[2]</sup></a></li>
<li>「アプリケーションを選択」画面が出る。</li>
<li>「常にこの操作で使用する」にチェックを入れ、使いたいブラウザ(ex. Miren Browser)を選択する。</li>
<li>標準ブラウザを開き、http://～で始まるリンクを開く。<a class="fn-ref-mark" href="#footnote-3" id="refmark-3"><sup>[3]</sup></a></li>
<li>標準ブラウザが立ち上がった後、「アプリケーションを選択」画面が出る。<span style="color: #ff0000;"><strong>なんでか知らんが出る。</strong></span></li>
<li>「常にこの操作で使用する」にチェックを入れ、標準ブラウザを選択する。</li>
<li>適当なアプリケーション(ex. Twitterクライアント、メーラー)から、https://～で始まるリンクをクリック。</li>
<li>「常にこの操作で使用する」にチェックを入れ、使いたいブラウザ(ex. Miren Browser)を選択する。</li>
<li>Edyクライアントを起動し、「チャージ (入金)」を押す。</li>
<li>標準ブラウザとおサイフケータイWebプラグインが立ち上がった後、「アプリケーションを選択」画面が出る。<br />
<span style="color: #ff0000;"><strong>なんでか知らんが出る。</strong></span></li>
<li>「常にこの操作で使用する」にチェックを入れ、標準ブラウザを選択する。</li>
</ol>
<p>多分これで、「URLをクリックすると使いたいブラウザが立ち上がるけど、Edyをチャージする時だけ<br />
標準ブラウザが起動する。」ということが当たり前にできるようになる。すげー面倒くさいけど、この手順を<br />
滅茶苦茶にやってしまうと、標準ブラウザを開くとなぜか使いたいブラウザが勝手に立ち上がってしまい<br />
一生Edyのチャージができないという状態になってしまうことがある。<span style="color: #ff0000;"><strong>というか、僕がそうなった。</strong></span></p>
<div id="footnote-list" style="display:inherit"><span id=fn-heading>Footnotes</span> &nbsp;&nbsp;&nbsp;(&crarr; returns to text)
<ol>
<li id="footnote-1" class="fn-text">[設定]-[アプリケーション]-[アプリケーションの管理]-(選択する)-[デフォルトでの起動]-[設定を消去]。<br />
標準ブラウザがアプリケーション一覧に表示されない場合は、フィルタを「すべて」に変えると表示される。<br />
Androidのバージョンによってはアプリケーション一覧の上部にフィルタが表示されている模様。<br />
Android 2.1の場合はアプリケーション一覧でメニューキー押下げでフィルタが選択できる。<a href="#refmark-1">&crarr;</a></li>
<li id="footnote-2" class="fn-text">適当なアプリケーションがない場合、Gmailで本文に何か適当なリンクを書いたメールを自分宛に送信すればいい。<a href="#refmark-2">&crarr;</a></li>
<li id="footnote-3" class="fn-text">大抵の場合、ホームが設定されているので起動時に開く。about:blankにしている場合はURLバーに何か適当なリンクを手打ちする。<a href="#refmark-3">&crarr;</a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/03/std-browser-for-edy-only/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>atig.rbでbit.ly API v3を利用する</title>
		<link>http://blog.xeres.jp/2011/02/using-bitly-api-v3-for-atig_rb/</link>
		<comments>http://blog.xeres.jp/2011/02/using-bitly-api-v3-for-atig_rb/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 06:44:17 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.xeres.jp/?p=502</guid>
		<description><![CDATA[atig.rb 開発版にてマージされました。 下記のパッチは v0.3.2 用ですので、最新バージョンにアップデートしてもらえば不要です。 何か急にURL入りのツイートが出来なくなってしまったのでクイックハックで修正。  [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong>atig.rb 開発版にてマージされました。<br />
下記のパッチは v0.3.2 用ですので、最新バージョンにアップデートしてもらえば不要です。</strong></span></p>
<p>何か急にURL入りのツイートが出来なくなってしまったのでクイックハックで修正。</p>
<p>XAuthに対応したり、/apiがなくなったり(?)と使い勝手がかなり変わっているので<br />
仕様を読んだ上で修正したいけど、時間がないのでとりあえず自分が使えればいいや的な修正。</p>
<p><code class="codecolorer text dawn"><span class="text">atig/bitly.rb</span></code> </p>
<div class="codecolorer-container diff dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="diff codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #888822;">--- bitly.rb.bak &nbsp; &nbsp; &nbsp; &nbsp;2010-06-12 02:16:44.000000000 +0900</span><br />
<span style="color: #888822;">+++ bitly.rb &nbsp; &nbsp;2011-02-28 15:30:29.000000000 +0900</span><br />
<span style="color: #440088;">@@ -25,13 +25,13 @@</span><br />
<br />
&nbsp; &nbsp; &nbsp;def shorten<span style="">&#40;</span>url<span style="">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;return url if url =~ /bit.ly/<br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp;bitly = URI<span style="">&#40;</span>&quot;http://api.bit.ly/shorten&quot;<span style="">&#41;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp;bitly = URI<span style="">&#40;</span>&quot;http://api.bit.ly/v3/shorten&quot;<span style="">&#41;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;if @login and @key<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitly.path &nbsp;= &quot;/shorten&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitly.query = <span style="">&#123;</span><br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:version =&gt; &quot;2.0.1&quot;, :format =&gt; &quot;json&quot;, :longUrl =&gt; url,</span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:format =&gt; &quot;json&quot;, :longUrl =&gt; url, :login =&gt; @login, :apiKey =&gt; @key,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="">&#125;</span>.to_query_str<span style="">&#40;</span>&quot;;&quot;<span style="">&#41;</span><br />
<span style="color: #991111;">- &nbsp; &nbsp; &nbsp; &nbsp;req = @http.req<span style="">&#40;</span>:get, bitly, <span style="">&#123;</span><span style="">&#125;</span>, <span style="">&#91;</span>@login, @key<span style="">&#93;</span><span style="">&#41;</span></span><br />
<span style="color: #00b000;">+ &nbsp; &nbsp; &nbsp; &nbsp;req = @http.req<span style="">&#40;</span>:get, bitly, <span style="">&#123;</span><span style="">&#125;</span><span style="">&#41;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res = @http.http<span style="">&#40;</span>bitly, <span style="">5</span>, <span style="">10</span><span style="">&#41;</span>.request<span style="">&#40;</span>req<span style="">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res = JSON.parse<span style="">&#40;</span>res.body<span style="">&#41;</span></div></div>
<p>参考1: <a href="http://d.hatena.ne.jp/mickey24/20110224/1298558599">bit.ly API ver 3.0をRubyから使う</a><br />
参考2: <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">bit.ly API Documentation</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/02/using-bitly-api-v3-for-atig_rb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>四谷三丁目『季旬 鈴なり』 – 美味しい和食が食べられるお店</title>
		<link>http://blog.xeres.jp/2011/01/yotsuyasantyoume-kisyun-suzunari/</link>
		<comments>http://blog.xeres.jp/2011/01/yotsuyasantyoume-kisyun-suzunari/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 07:27:54 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.xeres.jp/?p=472</guid>
		<description><![CDATA[高いお金を出せば美味しいものを食べられるお店はいくらでもあるけれど、このお店の良いところは お手頃価格で美味しいものが食べられるということだ。 というわけで、多分この価格ではピカイチのコストパフォーマンスを誇る季旬 鈴な [...]]]></description>
			<content:encoded><![CDATA[<p>高いお金を出せば美味しいものを食べられるお店はいくらでもあるけれど、このお店の良いところは<br />
お手頃価格で美味しいものが食べられるということだ。</p>
<p>というわけで、多分この価格ではピカイチのコストパフォーマンスを誇る<a href="http://r.gnavi.co.jp/a680800/">季旬 鈴なり</a>へ行ってきた。</p>
<p><strong>※諸事情で写真をロスト</strong></p>
<dl>
<dt>白子の天ぷら</dt>
<dd>美味しい。口の中で溶ける。生臭くはないので、苦手な人でも食べられると思う。</dd>
<dt>水菜の和え物</dt>
<dd>水菜大好きなのでテンション上がる。出汁がいい、出汁が。</dd>
<dt>前菜</dt>
<dd>ソラ豆、ワカサギとふきの天ぷら、白エビの酒盗和え、菜の花の出汁和え、赤貝ともずく酢、鮟肝…だったと思う(おい)。既に日本酒は1合終わり</dd>
<dt>雲丹入り玉地蒸し</dt>
<dd>文句なしに美味しい。出汁と雲丹が凄い。卵も凄い。</dd>
<dt>平目の刺身</dt>
<dd>ポン酢がついてるけど、ぶっちゃけスダチと薬味だけで食った方が美味い。</dd>
<dt>お造り</dt>
<dd>サバ、マグロ、タイ、イカ。醤油と塩がついてくるので、好きなように付けて食べる。美味い。</dd>
<dt>タケノコと牛肉の焼き物</dt>
<dd>運がいいと焼き物は赤身の魚になるらしい。</dd>
<dt>ぶりしゃぶ</dt>
<dd>そのまま食べても美味しいはずのブリを贅沢にもしゃぶしゃぶに。水菜と一緒にポン酢で。</dd>
<dt>ご飯もの</dt>
<dd>窯炊きのご飯もの。季節や仕入れによって内容が変わる。この日は貝柱。おかわり余裕でした。</dd>
</dl>
<p>八海山の生原酒があったので3合ほどやった。<br />
帰りに総武線で秋葉原乗り換えのつもりが市川まで行ってしまうハメに…(;´Д`)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2011/01/yotsuyasantyoume-kisyun-suzunari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新橋『新ばし 鮎正』 – 都内唯一の鮎専門店</title>
		<link>http://blog.xeres.jp/2010/08/shinbashi-shinbashi-ayumasa/</link>
		<comments>http://blog.xeres.jp/2010/08/shinbashi-shinbashi-ayumasa/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 15:39:08 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.xeres.jp/?p=445</guid>
		<description><![CDATA[表題の通り、都内唯一(多分)の鮎専門店に行ってきた。 鮎シーズンは8月一杯だからね！ ※諸事情により写真ロスト 付き出し 写真を撮り忘れた。 鮎のなれ鮨などを含む4品。既にグラスの日本酒は半分ぐらい消費される。 鮎こい  [...]]]></description>
			<content:encoded><![CDATA[<p>表題の通り、都内唯一(多分)の鮎専門店に行ってきた。<br />
鮎シーズンは8月一杯だからね！</p>
<p><strong>※諸事情により写真ロスト</strong></p>
<dl>
<dt>付き出し</dt>
<dd>写真を撮り忘れた。<br />
鮎のなれ鮨などを含む4品。既にグラスの日本酒は半分ぐらい消費される。</dd>
<dt>鮎こい</dt>
<dd>要は鮎入り味噌汁。<br />
普通の味噌汁のはずだけど、凄く柔らかい味。白子を溶いてるのかな。</dd>
<dt>鮎の背越し</dt>
<dd>わたを取り除いて骨ごと輪切りにして塩や日本酒をまぶして寝かせる。酒に合う。</dd>
<dt>鮎の塩焼き</dt>
<dd>参加した面子には蓼酢(たで酢)があまり人気なくて笑った。アクセントと殺菌作用が目的。</dd>
<dt>うるか茄子</dt>
<dd>鮎の&#8221;うるか&#8221;(はらわたの塩辛)で茄子を煮たもの。ご飯欲しいと思ったら出てきた。完璧!!</dd>
<dt>鮎の白子の塩辛</dt>
<dd>塩味が抑えられていて酒やご飯に合う。うるか茄子のご飯を食った後に出てくるとか拷問。</dd>
<dt>鮎の素揚げ</dt>
<dd>鮎もそうだけど、付け合わせの芋やしし唐の素揚げも旨い。酒が進む。</dd>
<dt>鮎の酢の物</dt>
<dd>今回一番のヒット。酸味は抑えて出汁が利いている。やはり酒に合う。</dd>
<dt>鮎の炊き込みご飯</dt>
<dd>旨い。いや、もうそれしか感想とか言えない。</dd>
<dt>みぞれ青梅</dt>
<dd>かき氷に甘く漬けた青梅を入れ、梅を崩して食う。<br />
ショボい店だと氷にシロップが混ぜてあるが、もちろんここはそんなことはない。</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2010/08/shinbashi-shinbashi-ayumasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>atig.rb でツイート検索</title>
		<link>http://blog.xeres.jp/2010/06/atig_rb-tweet-search/</link>
		<comments>http://blog.xeres.jp/2010/06/atig_rb-tweet-search/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 08:32:33 +0000</pubDate>
		<dc:creator>Xeres</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.xeres.jp/?p=409</guid>
		<description><![CDATA[atig.rb v0.3.0 にてマージされました。 下記のパッチは v0.2.1 用ですので、最新バージョンにアップデートしてもらえば不要です。 tig.rb から atig.rb に乗り換えたので、atig.rb で [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong>atig.rb v0.3.0 にてマージされました。<br />
下記のパッチは v0.2.1 用ですので、最新バージョンにアップデートしてもらえば不要です。</strong></span></p>
<p>tig.rb から atig.rb に乗り換えたので、atig.rb でも検索できるように適当にhack。<br />
例によって例のごとく、Ruby は良く分からんので自信はないが、動いてるので問題なし。</p>
<p>Usage:<br />
　<code class="codecolorer text dawn"><span class="text">/me search [option...] 文字列</span></code><br />
　<code class="codecolorer text dawn"><span class="text">/me s [option...] 文字列</span></code></p>
<p>オプションは今のところ <code class="codecolorer text dawn"><span class="text">:lang=&lt;国コード&gt;</span></code> のみサポート。<br />
例えば、<code class="codecolorer text dawn"><span class="text">/me s Twitter</span></code> すると外人のツイートも大量にヒットするが、<br />
<code class="codecolorer text dawn"><span class="text">/me s :lang=ja Twitter</span></code> だと日本人のツイートしかヒットしない。<br />
(Twitter API に頼ってるので、誤判定は Twitter に文句を言いましょう＾＾)</p>
<p>イケてない動作があるので要FIX。</p>
<p><code class="codecolorer text dawn"><span class="text">atig/search.rb</span></code> </p>
<div class="codecolorer-container ruby dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span><br />
<span style="color:#008000; font-style:italic;"># -*- mode:ruby; coding:utf-8 -*-</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'json'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'atig/http'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'atig/url_escape'</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">module</span> Atig<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">class</span> Search<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> search<span style="color:#006600; font-weight:bold;">&#40;</span>query, options = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; search = <span style="color:#CC00FF; font-weight:bold;">URI</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;http://search.twitter.com/search.json&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; search.<span style="color:#9900CC;">path</span> = <span style="color:#996600;">&quot;/search.json&quot;</span><br />
&nbsp; &nbsp; &nbsp; params = options; options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:q</span><span style="color:#006600; font-weight:bold;">&#93;</span> = query<br />
&nbsp; &nbsp; &nbsp; search.<span style="color:#9900CC;">query</span> = options.<span style="color:#9900CC;">to_query_str</span><br />
&nbsp; &nbsp; &nbsp; http = Http.<span style="color:#9900CC;">new</span> <span style="color:#0000FF; font-weight:bold;">nil</span><br />
&nbsp; &nbsp; &nbsp; req = http.<span style="color:#9900CC;">req</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, search<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; res = http.<span style="color:#9900CC;">http</span><span style="color:#006600; font-weight:bold;">&#40;</span>search, <span style="color:#006666;">5</span>, <span style="color:#006666;">10</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">request</span><span style="color:#006600; font-weight:bold;">&#40;</span>req<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; res = JSON.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>res.<span style="color:#9900CC;">body</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Errno</span>::ETIMEDOUT, <span style="color:#6666ff; font-weight:bold;">JSON::ParserError</span>, <span style="color:#CC00FF; font-weight:bold;">IOError</span>, <span style="color:#6666ff; font-weight:bold;">Timeout::Error</span>, <span style="color:#CC00FF; font-weight:bold;">Errno</span>::ECONNRESET <span style="color:#006600; font-weight:bold;">=&gt;</span> e<br />
&nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@log</span>.<span style="color:#9900CC;">error</span> e<br />
&nbsp; &nbsp; &nbsp; text<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p><code class="codecolorer text dawn"><span class="text">atig/command/search.rb</span></code> </p>
<div class="codecolorer-container ruby dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span><br />
<span style="color:#008000; font-style:italic;"># -*- mode:ruby; coding:utf-8 -*-</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'atig/command/command'</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'atig/search'</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">module</span> Atig<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> Command<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">class</span> Search <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">Atig::Command::Command</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> command_name; <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#40;</span>search s<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> action<span style="color:#006600; font-weight:bold;">&#40;</span>target, mesg, command, args<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> args.<span style="color:#9900CC;">empty</span>?<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">yield</span> <span style="color:#996600;">&quot;/me #{command} [option...] blah blah&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">return</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; q = mesg.<span style="color:#CC0066; font-weight:bold;">sub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>^<span style="color:#008000; font-style:italic;">#{command}s+/, '')</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; opts = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">while</span> <span style="color:#006600; font-weight:bold;">/</span>^:<span style="color:#006600; font-weight:bold;">&#40;</span>?:<span style="color:#006600; font-weight:bold;">&#40;</span>lang<span style="color:#006600; font-weight:bold;">&#41;</span>=<span style="color:#006600; font-weight:bold;">&#40;</span>w<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">/</span> =~ args.<span style="color:#9900CC;">first</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;opts<span style="color:#006600; font-weight:bold;">&#91;</span>$1<span style="color:#006600; font-weight:bold;">&#93;</span> = $2<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;q.<span style="color:#CC0066; font-weight:bold;">sub!</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>^<span style="color:#008000; font-style:italic;">#{args.first}W+/, &quot;&quot;)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;args.<span style="color:#9900CC;">shift</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; s = <span style="color:#6666ff; font-weight:bold;">Atig::Search</span>.<span style="color:#9900CC;">new</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; res = s.<span style="color:#9900CC;">search</span><span style="color:#006600; font-weight:bold;">&#40;</span>q, opts<span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> res<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'results'</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">empty</span>?<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">yield</span> <span style="color:#996600;">&quot;&quot;</span><span style="color:#008000; font-style:italic;">#{q}&quot;: not found. options=#{opts.inspect} (#{res['completed_in']} sec.)&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF; font-weight:bold;">return</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; res<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'results'</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">reverse</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>tw<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parsed_date = ParseDate.<span style="color:#9900CC;">parsedate</span><span style="color:#006600; font-weight:bold;">&#40;</span>tw<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'created_at'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; created_at = ::<span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">gm</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">*</span>parsed_date<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span> .. <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_i</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delta = ::<span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>.<span style="color:#9900CC;">to_i</span> <span style="color:#006600; font-weight:bold;">-</span> created_at<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># 参考: http://shinobibloglab.blog.shinobi.jp/Entry/135/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TODO: Twitter の仕様に合わせる</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; relative_to = <span style="color:#9966CC; font-weight:bold;">if</span> delta <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006666;">60</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#996600;">&quot;たった今&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> delta <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006666;">120</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#996600;">&quot;ついさっき&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> delta <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">45</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#996600;">&quot;#{(delta / 60).ceil}分前&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> delta <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">90</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#996600;">&quot;小1時間程前&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">elsif</span> delta <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">24</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">60</span> <span style="color:#006600; font-weight:bold;">*</span> <span style="color:#006666;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#996600;">&quot;#{(delta / (60 * 60)).ceil}時間前&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#996600;">&quot;#{(delta / (24 * 60 * 60)).ceil}日前&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TODO: 検索結果にも tid/sid を振りたい</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># TODO: Info.user() する度に各ユーザーの statuses/home_timeline にアクセスして API Limt がヤバい</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Info.<span style="color:#9900CC;">user</span><span style="color:#006600; font-weight:bold;">&#40;</span>db, api, tw<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'from_user'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>user<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; entry = TwitterStruct.<span style="color:#9900CC;">make</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'user'</span> &nbsp; <span style="color:#006600; font-weight:bold;">=&gt;</span> user,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#996600;">'status'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">'text'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#6666ff; font-weight:bold;">Net::IRC</span>.<span style="color:#9900CC;">ctcp_encode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{tw['text']} (#{relative_to})&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gateway<span style="color:#006600; font-weight:bold;">&#91;</span>target<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">message</span> entry, <span style="color:#6666ff; font-weight:bold;">Net::IRC::Constants::NOTICE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xeres.jp/2010/06/atig_rb-tweet-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

