<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>cloudrop &#187; Twitter</title>
	<atom:link href="http://cloudrop.jp/tag/twitter/feed" rel="self" type="application/rss+xml" />
	<link>http://cloudrop.jp</link>
	<description>クラウド使ったインターネットサービスの技術支援、ウェブサービスの開発</description>
	<lastBuildDate>Thu, 09 Sep 2010 15:20:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/tag/twitter/feed" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>さくらのVPS+MongoDBでTwitterクライアントランキングを作ってみた</title>
		<link>http://cloudrop.jp/labs/mongodb_on_sakura_vps?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mongodb_on_sakura_vps</link>
		<comments>http://cloudrop.jp/labs/mongodb_on_sakura_vps#comments</comments>
		<pubDate>Tue, 17 Aug 2010 03:46:15 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[実験・研究]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[さくらのVPS]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=460</guid>
		<description><![CDATA[

はじめに
さくらのVPS
Twitter Streaming API
MongoDB
使い方


はじめに
さくらのVPSをベータ*1として使わせてもらっているのに何もしないのはもったいない＆申し訳ないので、Twit [...]]]></description>
			<content:encoded><![CDATA[<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-">はじめに</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-vps">さくらのVPS</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-twitter-streaming-api">Twitter Streaming API</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-mongodb">MongoDB</a></li>
<li><a href="http://cloudrop.jp/labs/mongodb_on_sakura_vps#toc-1">使い方</a></li>
</ol>
</div>
<h3 id="toc-">はじめに</h3>
<p>さくらのVPSをベータ<a href="#fc001">*1</a>として使わせてもらっているのに何もしないのはもったいない＆申し訳ないので、<a href="http://tr.labs.cloudrop.jp/">Twitter Client Ranking by Streaming API</a>というのを、さくらのVPSのパフォーマンスとMongoDBのパフォーマンス・使用感をテーマに実験的に作ってみました。</p>
<p>TwitterのStreaming APIからツイートを取得、保存、解析してどんなクライアントが使われているかをランキング形式に表示するという単純なものです。</p>
<p>解析結果をブログで公開している例があるものの、なかなか直近で連続的なデータを公開しているところがなかったので、勢いで作りました。</p>
<h3 id="toc-vps">さくらのVPS</h3>
<p>さくらのVPSの仕様は以下の通りです。</p>
<table id="sakura_table">
<tr>
<th>メモリ</th>
<td>512MB</td>
</tr>
<tr>
<th>HDD</th>
<td>20GB</td>
</tr>
<tr>
<th>回線</th>
<td>100Mbps</td>
</tr>
<tr>
<th>OS</th>
<td>CentOS 5 x86_64</td>
</tr>
<tr>
<th>グローバル IP アドレス</th>
<td>IPv4 アドレス×1 個</td>
</tr>
<tr>
<th>データ転送量</th>
<td>無制限</td>
</tr>
<tr>
<th>管理者権限</th>
<td>root 権限付与</td>
</tr>
</table>
<p>データを継続的に保存するのにHDDが20GBと心許ないので古くなったデータはどんどん削除していく必要がありそうです。一方でデータ転送量が無制限となっているので、APIからの取得に（料金的な意味で）気を使う必要はなさそうです。<br />
OSは最新のCentOS5.5で、サービスはsendmailとssh以外は何も入っていないので、httpdなどを自由に追加して利用します。また、ポートはすべて公開状態なのでiptablesを設定、有効にすることも必要です。</p>
<h3 id="toc-twitter-streaming-api">Twitter Streaming API</h3>
<p><a href="http://dev.twitter.com/pages/streaming_api">Twitter Streaming API</a>のstatuses/sampleメソッドを利用します。sampleメソッドは公開タイムラインの1%未満がサンプリングされたデータとなります。実際にアクセスをしてみると1分間に350〜650ツイート取得でき、量にかなりムラがあることがわかりました。<br />
HDDの容量を考えて、データはcronで6分毎に1分間取得することにしたので、サンプルは1/6%、全ツイートの約0.167%未満になりそうです。数日間取得してみたところ、1日で約10万〜12万ツイートをサンプリングできています。</p>
<h3 id="toc-mongodb">MongoDB</h3>
<p>MongoDBはドキュメント指向DBと呼ばれる仲間で、Key-Value StoreにRDBMSの色を少し足したようなイメージです。スキーマはダイナミックに変更できる一方で、SQLこそ使えないものの、where, sort, limit, group(by), max, min,などが用意されていて、RDBMSに慣れている人にもとっつきやすいと思います。<br />
さらに、スケールアウトを容易にするSharding機能を標準装備していて、分散したデータベースから複雑な集計ができるMap/Reduceが利用できます。</p>
<p>RDBMSでDBやテーブルにデータを入れようと思った時はあらかじめCREATEしておく必要がありますが、MongoDBは必要ないので存在しないDBやコレクション（RDBMSでいうテーブル）にいきなりデータを投入してもエラーは出ず、コレクションやDBすらダイナミックに作られます。この辺りの挙動はファイル操作に近いので、日付ごとにダイナミックにコレクションを作ることもでき、今回のログの保管などの用途にも適しています。</p>
<p>日付ごとにコレクションを作り、値にはtimestamp, date, source, source_url, time_zone, utc_offset, langを保存することにしました。Sharding環境ではないのでMap/Reduceの力を発揮することもできないのですが、実験的な意味で、データの集計にはMap/Reduce<a href="#fc002">*2</a>を利用しています。</p>
<h3 id="toc-1">使い方</h3>
<p>デフォルトは1日前のサンプリングしたすべてのデータが表示されます。そこから、日付、Lang、Time zone、UTC offsetで絞り込みすることで様々な形で抽出することができます。<br />
例えば、「8月12日のツイートの中から東京（time_zone=Tokyo）で日本語（lang=ja）のツイートをするのに利用されているクライアント」などを抽出・集計することができます。</p>
<p>ランキングだけでは味気ないので、TOP10を円グラフで表すのと、各クライアントが時間ごとにどのくらい利用されているのか3つまで比較出来る機能を用意してみました。住んでいるところやクライアントの種類で利用されている時間外が全然違うのがわかります。</p>
<p>現状、なかなかもっさりとした感じなので、イライラするかもしれません。<br />
実験なので、負荷の問題でサービスを終了するかもしれませんし、逆に、作っただけではなくMongoDBのTipsやチューニングなどで改善し、それをさらにネタにして行きたいとも思っています。</p>
<blockquote><p>
<a name="fc001" id="fc001">*1</a>&#160;7月15日〜8月31日までクローズドベータとして会員限定でプレリリースされたホスティングサービス。2010年9月1日から初期費用無料、月額980円の「さくらのVPS 980」として正式リリースされる。</p>
<p><a name="fc002" id="fc002">*2</a>&#160;今回の実験ではmapReduce()よりgroup()を使った集計の方が速度が速いことが多かったので、当日分のリアルタイム集計ではgroup()を利用しています。mapReduce()の結果は新しくコレクションとして保存することができるので、過去分に関してはmapReduce()で抽出→コレクションとして保存→そこから再集計という実装にしています。
</p></blockquote>
<style type="text/css">
table#sakura_table{
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
border-left: 1px solid #ccc;
margin-bottom: 15px;
padding:0;
border-collapse:collapse;
}
table#sakura_table th{
border-right: 1px solid #ccc;
border-top: 1px solid #ccc;
padding:2px 2px;
}
table#sakura_table td{
border-top: 1px solid #ccc;
padding:2px 2px;
}
</style>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/labs/mongodb_on_sakura_vps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/labs/mongodb_on_sakura_vps" />
	</item>
		<item>
		<title>モバイル向けTwitterクライアントをsymfonyで作った</title>
		<link>http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=twitter_client_for_mobile_by_symfony</link>
		<comments>http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#comments</comments>
		<pubDate>Mon, 07 Dec 2009 16:47:44 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[yubitter]]></category>
		<category><![CDATA[オープンソース]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=378</guid>
		<description><![CDATA[『yubitter』という携帯電話向けのTwitterクライアントサービス（ゲートウェイ）をsymfonyで作りました。（サービスの詳細はリンク先でご確認下さい。）

cloudrop発のアウトプットとして開発に取り組ん [...]]]></description>
			<content:encoded><![CDATA[<p>『<a href="http://yubitter.com/">yubitter</a>』という携帯電話向けのTwitterクライアントサービス（ゲートウェイ）を<a href="http://symfony-project.org/">symfony</a>で作りました。（サービスの詳細はリンク先でご確認下さい。）</p>
<p><a href="http://yubitter.com/"><img src="http://cloudrop.jp/wp-content/uploads/2009/12/yubitter_banner.png" alt="yubitter" title="yubitter" width="615" height="92" class="alignnone size-full wp-image-411" /></a></p>
<p>cloudrop発のアウトプットとして開発に取り組んだもので、初めてのリリースとなります。<br />
タイトルにはsymfonyと書きましたが、開発には数多くのオープソースソフトウェアのお世話になっています。</p>
<p>できる事ならyubitterもソースを公開したいのですが、利用しているライブラリのライセンスの確認、環境依存部分の抽象化、symfony1.4系への対応、ドイヒーなコードの修正などを行う必要があり、今は難しいところです。<br />
最終的にはそういう諸々を乗り越えての公開を目指して行きたいと思っています。</p>
<p>事実上のモバイル向けクライアントの標準である<a href="http://movatwitter.jp/">モバツイッター</a>や、多機能でアジャイルな<a href="http://movatter.jp/">Movatter</a>、さらには公式の携帯版がある中で、いまさら感の否めないサービスですから、サービス自体による貢献というよりも、サービスやシステムの内部を公開することによる貢献を目指していくつもりです。</p>
<p>そういう意味でも、開発・運用をするにあたっての裏話はどんどん公開していきたいと思います。</p>
<p>もちろん、魅力のないサービスは、システムとしても魅力がないのと同じなので、<br />
サービスとしておざなりにするということではありません。</p>
<p>サービスに関する質問や不具合の報告などは、Twitterで受け付けております。<br />
お気軽にお問い合わせください。（<a href="http://twitter.com/ms76">@ms76</a>）</p>
<p>最後に、利用させていただいているサービスやソフトウェアを紹介いたします。（順不同）<br />
この場を借りて、感謝いたします。ありがとうございます。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-">インフラ</a></p>
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-rackspace-cloud-servers">Rackspace Cloud Servers</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-amazon-s3">Amazon S3</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-amazon-cloudfront">Amazon CloudFront</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-os">OS・サーバー・ミドルウェア</a>
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-centos-5-3">CentOS 5.3</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-apache-2-2-13php-5-3-0">Apache 2.2.13、PHP 5.3.0</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-mysql-5-0-77">MySQL 5.0.77</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-squid-2-6-stable21">Squid 2.6.STABLE21</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-postfix-2-3-3">Postfix 2.3.3</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-flare-1-0-8">flare 1.0.8</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-phppear">PHP、PEARライブラリ</a>
<ol>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-symfony-1-2-10">symfony 1.2.10</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-mail_mime-1-5-2mail_mimedecode-1-5-1">Mail_Mime  1.5.2、Mail_mimeDecode 1.5.1</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-net_ipv4-1-3-1">Net_IPv4  1.3.1</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-net_useragent_mobile-1-0-0">Net_UserAgent_Mobile 1.0.0</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-amazon-s3-php-class-0-4-0">Amazon S3 PHP class 0.4.0</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-qdmail-1-2-6b">qdmail 1.2.6b</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-twitteroauth-library">TwitterOAuth library</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-qrcode-image-php-scripts-version-0-50g">QRcode image PHP scripts  version 0.50g</a></li>
<li><a href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony#toc-html_css_mobile">HTML_CSS_Mobile </a></li>
</ol>
</li>
</ol>
</div>
<h3 id="toc-">インフラ</h3>
<h4 id="toc-rackspace-cloud-servers">Rackspace Cloud Servers</h4>
<p>Webサーバー、アプリケーションサーバー、DBサーバー、セッションサーバーとして利用。</p>
<ul>
<li><a href="http://www.rackspacecloud.com/cloud_hosting_products/servers">Cloud Servers &#8211; Powerful Cloud Computing Servers by Rackspace</a></li>
</ul>
<h4 id="toc-amazon-s3">Amazon S3</h4>
<p>メールによる写真アップロードを受け取るストレージサーバーとして利用。</p>
<ul>
<li><a href="http://aws.amazon.com/s3/">Amazon Simple Storage Service (Amazon S3)</a></li>
</ul>
<h4 id="toc-amazon-cloudfront">Amazon CloudFront</h4>
<p>ストレージサーバーのフロントエンドとして利用。</p>
<ul>
<li><a href="http://aws.amazon.com/cloudfront/">Amazon CloudFront</a></li>
</ul>
<h3 id="toc-os">OS・サーバー・ミドルウェア</h3>
<h4 id="toc-centos-5-3">CentOS 5.3</h4>
<p>Rackspace Cloud Serversにて標準で選択できるOSを利用。</p>
<ul>
<li><a href="http://www.centos.org/">www.centos.org &#8211; The Community ENTerprise Operating System</a></li>
</ul>
<h4 id="toc-apache-2-2-13php-5-3-0">Apache 2.2.13、PHP 5.3.0</h4>
<p>Webサーバー、アプリケーションサーバー（mod_php）として利用。</p>
<ul>
<li><a href="http://httpd.apache.org/">Welcome! &#8211; The Apache HTTP Server Project</a></li>
<li><a href="http://www.php.net/">PHP: Hypertext Preprocessor</a></li>
</ul>
<h4 id="toc-mysql-5-0-77">MySQL 5.0.77</h4>
<p>DBサーバーとして認証用ユーザー情報、設定情報などの保存に利用。</p>
<ul>
<li><a href="http://www.mysql.com/">MySQL ::  The world&#8217;s most popular open source database</a></li>
</ul>
<h4 id="toc-squid-2-6-stable21">Squid 2.6.STABLE21</h4>
<p>外部API接続時のプロキシキャッシュサーバーとして利用。</p>
<ul>
<li><a href="http://www.squid-cache.org/">squid : Optimising Web Delivery</a></li>
</ul>
<h4 id="toc-postfix-2-3-3">Postfix 2.3.3</h4>
<p>メール投稿、メール登録、メール送信時のメールサーバーとして利用。</p>
<ul>
<li><a href="http://www.postfix.org/">The Postfix Home Page</a></li>
</ul>
<h4 id="toc-flare-1-0-8">flare 1.0.8</h4>
<p>セッションサーバーとして利用。</p>
<ul>
<li><a href="http://labs.gree.jp/Top/OpenSource/Flare.html">Flare  &#8211; GREE Labs</a></li>
</ul>
<h3 id="toc-phppear">PHP、PEARライブラリ</h3>
<h4 id="toc-symfony-1-2-10">symfony 1.2.10</h4>
<p>Webフレームワークとして利用。</p>
<ul>
<li><a href="http://www.symfony-project.org/">symfony | Web PHP Framework</a></li>
</ul>
<p>携帯向けに下記プラグインを利用。</p>
<ul>
<li><a href="http://openpear.org/package/sfMobileIPPlugin">sfMobileIPPlugin</a></li>
<li><a href="http://blog.asial.co.jp/380">sfPictogramMobilePlugin</a></li>
</ul>
<h4 id="toc-mail_mime-1-5-2mail_mimedecode-1-5-1">Mail_Mime  1.5.2、Mail_mimeDecode 1.5.1</h4>
<p>受信したメールの処理に利用。</p>
<ul>
<li><a href="http://pear.php.net/package/Mail_Mime">Mail_Mime</a></li>
<li><a href="http://pear.php.net/package/Mail_mimeDecode">Mail_mimeDecode</a></li>
</ul>
<h4 id="toc-net_ipv4-1-3-1">Net_IPv4  1.3.1</h4>
<p>IPアドレスが特定のネットワークアドレスの範囲にあるかどうかの計算に利用。</p>
<ul>
<li><a href="http://pear.php.net/package/Net_IPv4">Net_IPv4</a></li>
</ul>
<h4 id="toc-net_useragent_mobile-1-0-0">Net_UserAgent_Mobile 1.0.0</h4>
<p>携帯電話のUser Agentの取得に利用。</p>
<ul>
<li><a href="http://pear.php.net/package/Net_UserAgent_Mobile/">Net_UserAgent_Mobile </a></li>
</ul>
<h4 id="toc-amazon-s3-php-class-0-4-0">Amazon S3 PHP class 0.4.0</h4>
<p>Amazon S3 APIとの通信に利用。</p>
<ul>
<li><a href="http://code.google.com/p/amazon-s3-php-class/">amazon-s3-php-class &#8211; Project Hosting on Google Code</a></li>
</ul>
<h4 id="toc-qdmail-1-2-6b">qdmail 1.2.6b</h4>
<p>メール送信に利用。</p>
<ul>
<li><a href="http://hal456.net/qdmail/">PHP高機能日本語メール送信ライブラリ・文字化けフリー &#8211; Qdmail &#8211; PHP::Mail Library , Quick and Detailed for Multibyte</a></li>
</ul>
<h4 id="toc-twitteroauth-library">TwitterOAuth library</h4>
<p>Twitter APIのOAuth認証に利用。</p>
<ul>
<li><a href="https://docs.google.com/View?docID=dcf2dzzs_2339fzbfsf4">Twitter-OAuth-PHP</a></li>
</ul>
<h4 id="toc-qrcode-image-php-scripts-version-0-50g">QRcode image PHP scripts  version 0.50g</h4>
<p>QRコード生成に利用。</p>
<ul>
<li><a href="http://www.swetake.com/qr/qr_cgi.html">ＱＲコード CGI &amp; PHP scripts &#8211; QRcode generator for perl &amp; php</a></li>
</ul>
<h4 id="toc-html_css_mobile">HTML_CSS_Mobile </h4>
<p>外部CSSをインラインCSSに変換する際に利用。</p>
<ul>
<li><a href="http://openpear.org/package/HTML_CSS_Mobile">HTML_CSS_Mobile &#8211; Openpear</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/symfony/twitter_client_for_mobile_by_symfony" />
	</item>
		<item>
		<title>WordPressをPubSubHubbubに対応させてTwitterへリアルタイムで通知されるようにした</title>
		<link>http://cloudrop.jp/wordpress/pubsubhubbub_twitter?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pubsubhubbub_twitter</link>
		<comments>http://cloudrop.jp/wordpress/pubsubhubbub_twitter#comments</comments>
		<pubDate>Mon, 14 Sep 2009 04:57:51 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[FriendFeed]]></category>
		<category><![CDATA[PubSubHubbub]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=176</guid>
		<description><![CDATA[ブログの更新をTwitterへ通知するのにFriendFeedを利用しているのですが、FriendFeedのクローラ―がフィードを取得しにくるまでTwitterへは通知されず、ひどい時は1日経っても通知されないことがあり [...]]]></description>
			<content:encoded><![CDATA[<p>ブログの更新をTwitterへ通知するのに<a href="http://friendfeed.com/">FriendFeed</a>を利用しているのですが、FriendFeedのクローラ―がフィードを取得しにくるまでTwitterへは通知されず、ひどい時は1日経っても通知されないことがありました。</p>
<p>これを解消するために、最近Googleによって開発・公開された新しいプロトコル<a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a>に対応させました。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub">PubSubHubbubとは</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-wordpress">WordPressで対応するには</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub1">PubSubHubbubの実力</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub2">その他のPubSubHubbub対応サービス</a>
<ol>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-google-reader">Google Reader</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-livedoor-reader">livedoor Reader</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub3">わかりにくいPubSubHubbub</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-">参考サイト</a></li>
</ol>
</div>
<h3 id="toc-pubsubhubbub">PubSubHubbubとは</h3>
<p>PubSubHubbubは、今までの配信者（Publishers。以下、ブログ）と購読者（Subscribers。以下、RSSリーダー）が直接やり取りをしていたその間に、ハブ（Hubs）と呼ばれる中間サーバーを配置して、そのハブを介してメッセージのやり取りをWeb Hooksの仕組みで行うものです。<br />
Web Hooksはある決められたアクション（たとえば、「ブログの公開ボタンを押す」など）をきっかけに動作して、決められたデータを決められたURLに決められた方法で送信する仕組みです。</p>
<p>いままで「更新されました？」「いや、まだです。」と304の繰り返しだったフィードの世界に、「更新したしました」きっかけで、購読者に一斉に通知が行くわけですから、こんなエコな仕組みはないと思います。</p>
<h3 id="toc-wordpress">WordPressで対応するには</h3>
<p>簡単です。プラグインを入れるだけです。<br />
現在PubSubHubbubに対応させるためのプラグインは2つ出ていて、どちらも最新の2.8.4に対応していますし、機能的には同じですので好みで導入しましょう。</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/pubsubhubbub/">PubSubHubbub</a></li>
<li><a href="http://wordpress.org/extend/plugins/wp-pubsubhubbub/">WP Pubsubhubbub</a></li>
</ul>
<p>ハブのURLを登録するだけの簡単な設定画面で、しかもすでに2つのハブが登録されているので特に設定することはありません。</p>
<p>プラグインを有効にすると、出力されたAtomに<br />
&lt;atom:link rel=&quot;hub&quot; href=&quot;http://pubsubhubbub.appspot.com&quot;/&gt;<br />
&lt;atom:link rel=&quot;hub&quot; href=&quot;http://superfeedr.com/hubbub&quot;/&gt;<br />
とハブへのリンクが追加されます。</p>
<p>ここから以下の流れで更新の通知がされるようになります。</p>
<ol>
<li>この新しいフィードを取得したPubSubHubbubに対応したRSSリーダーがハブへのリンクを読み取って、ハブに購読の依頼を行います。</li>
<li>ハブは本当にRSSリーダーが依頼してきたのか確認します。確認ができたら次回の更新から通知するように動作します。</li>
<li>WordPressで新しく記事が公開されたタイミングで、プラグインがハブに対して公開の通知を送信します。</li>
<li>ハブは本当に記事が公開されたのか確認します。確認ができたら購読の依頼があったRSSリーダーへ通知を行います。</li>
</ol>
<h3 id="toc-pubsubhubbub1">PubSubHubbubの実力</h3>
<p>実際に前回の投稿がどのようになったかを追ってみました。</p>
<p>まず投稿後、ハブからチェックがきます（apacheのログ）。</p>
<pre class="terminal">
64.233.172.18 - - [12/Sep/2009:18:42:23 +0900] "GET /feed HTTP/1.1" 200 14246 "-" "AppEngine-Google; (+http://code.google.com/appengine; appid pubsubhubbub)"
</pre>
<p>ハブの<a href="http://pubsubhubbub.appspot.com/publish">デバッグツール</a>でハブにどのように登録されているか確認してみると、</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/push_gae.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_gae-300x165.png" alt="ハブのデバッグツールのキャプチャ" title="push_gae" width="300" height="165" class="aligncenter size-medium wp-image-232" /></a></p>
<p>無事登録されているようです。（クリックで拡大）</p>
<p>ではFriendFeedの方はというと、</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_friendfeed.png" alt="FriendFeedのキャプチャ" title="FriendFeedのキャプチャ" width="530" height="80" class="aligncenter size-full wp-image-236" /></p>
<p>WordPressの投稿ボタンを押して、登録が終わってから一拍おいてすぐ画面に現れたくらいの感覚です。</p>
<p>さて、本題のTwitterは</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_twitter.png" alt="Twitterのキャプチャ" title="Twitterのキャプチャ" width="530" height="79" class="aligncenter size-full wp-image-235" /></p>
<p>素晴らしい！画面の更新タイミングに影響していますがが、ほぼリアルタイム。</p>
<h3 id="toc-pubsubhubbub2">その他のPubSubHubbub対応サービス</h3>
<p>FriendFeed以外にも、<a href="http://jp.techcrunch.com/archives/20090805google-reader-speeds-up-sharing-with-pubsubhubbub/">Google Reader</a>や<a href="http://jp.techcrunch.com/archives/20090819google-continues-to-feed-the-pubsubhubbub-google-alerts-now-in-real-time/">Google Alerts</a>、<a href="http://www.itmedia.co.jp/news/articles/0908/18/news090.html">livedoor Reader</a>などが対応していて、確認できるGoogle Readerとlivedoor Readerでも確認してみました。</p>
<h4 id="toc-google-reader">Google Reader</h4>
<p>PubSubHubbubへの対応という記事は共有機能からということだったので、対応していないかもしれないと思ったんですが、</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/push_gr.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_gr-300x61.png" alt="Google Readerのキャプチャ" title="Google Readerのキャプチャ" width="300" height="61" class="aligncenter size-medium wp-image-230" /></a></p>
<p>時差なしできっちり更新に上がってきました。（クリックで拡大）</p>
<h4 id="toc-livedoor-reader">livedoor Reader</h4>
<p>こちらは更新がされず…。</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_ldr.png" alt="ライブドアリーダーのキャプチャ" title="ライブドアリーダーのキャプチャ" width="258" height="352" class="aligncenter size-full wp-image-231" /></p>
<p>PubSubHubbub対応後にlivedoor Readerのクローラが来ていることは確認しているので、腑に落ちないところです。</p>
<blockquote><p>(※ 最初の更新でLDRがそのブログのpubsubhubbub対応を検出し，次の更新から更新情報を受けるようになるので，二回目の更新から反映が最速になります。)<br />
<a href="http://blog.livedoor.jp/nabokov7/archives/904777.html">PubSubHubbub で最速に更新を通知しつつ，舌をかまないためのテスト ： nabokov7; rehash &#8211; livedoor Blog</a>
</p></blockquote>
<p>ということなので、この更新から反映されるようになるかもしれません。<br />
今回は確認できず。</p>
<blockquote><p><strong>2009/9/15 追記</strong><br />
やはりlivedoor Readerではすぐに更新されませんでした。<br />
時間が経ってからの更新だとクロールによる更新なのか、ハブからの通知によるものなのか判断できないので、やはり確認できず。<br />
livedoor Readerでちゃんとリアルタイムで更新されてるというパブリッシャーはいらっしゃるんでしょうか。livedoor Blog以外で。<br />
ざっと調べてみたところ実践している方はいらっしゃいましたが、やはりリアルタイムでの更新は確認できていないようです。</p>
<ul>
<li><a href="http://blog.nomadscafe.jp/2009/08/pubsubhubbub.html">昨日のPubSubHubbub記事がどのように反映されたか &#8211; blog.nomadscafe.jp</a></li>
</ul>
</blockquote>
<h3 id="toc-pubsubhubbub3">わかりにくいPubSubHubbub</h3>
<p>読み方の話ではなく。<br />
複数の要素が絡まっているため、仕様が明らかとは言え、ブログ側からするとハブやRSSリーダーの挙動がわからず、更新が通知されない場合に理由がわかりにくい側面があります。</p>
<p>例えば、ハブへ購読依頼をするRSSリーダーが、エントリーが更新されているかどうかにかかわらず、フィード内にハブへのリンクを検出したらハブへ購読依頼をする仕様なのか（FriendFeedはこちらのようです）、エントリーが更新されたタイミングで検出・通知する仕様なのか（livedoor Readerはこちらのようです）、などです。</p>
<p>FriendFeedは前者のようなので、PubSubHubbub対応を行った後に、1度フィードを手動で読み込ませれば次のポストから反映されるはずです。</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/friendfeed_update.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/friendfeed_update-300x119.png" alt="FriendFeedでフィードの手動取得" title="FriendFeedでフィードの手動取得" width="300" height="119" class="aligncenter size-medium wp-image-250" /></a>
<div style="text-align:center;margin-bottom:15px;">設定→サービス 追加/編集→マイサービスのリンクをクリック→Blogを更新（クリックで拡大）</div>
<p>まだまだ新しい仕組みなので、確立されるまでもう少し時間がかかるかもしれませんが、多くのサービスが対応してさらに便利になることを望みます。</p>
<h3 id="toc-">参考サイト</h3>
<p>FriendFeed→Twitterの詳しい説明が載っています。</p>
<ul>
<li><a href="http://www.ideaxidea.com/archives/2009/06/twitter_via_friendfeed.html">ブログの更新情報は『Friendfeed』で流すことにした &#8211; IDEA*IDEA ～ 百式管理人のライフハックブログ</a></li>
</ul>
<p>PubSubHubbubに関する参考サイト</p>
<ul>
<li><a href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub &#8211;  Project Hosting on Google Code</a></li>
<li><a href="http://labs.unoh.net/2009/08/what-is-pubsubhubbub.html">ウノウラボ Unoh Labs: PubSubHubbubとは</a></li>
<li><a href="http://d.hatena.ne.jp/snaka72/20090902/1251916771">自宅でPubsubhubbubのPub,Sub,Hub一式を動かしてみた &#8211; 今日もスミマセン。</a></li>
<li><a href="http://www.ryo.com/2009/09/04/991/">PubSubHubBubのpubに対応する : ryo.com</a></li
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/wordpress/pubsubhubbub_twitter/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter" />
	</item>
	</channel>
</rss>
