<?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"
	>

<channel>
	<title>Tender Surrender</title>
	<atom:link href="http://devlog.agektmr.com/feed" rel="self" type="application/rss+xml" />
	<link>http://devlog.agektmr.com</link>
	<description>新時代のウェブ技術を分析するブログ</description>
	<pubDate>Thu, 28 Aug 2008 03:18:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>ja</language>
			<item>
		<title>Data AvailabilityでOAuthを試す</title>
		<link>http://devlog.agektmr.com/archives/107</link>
		<comments>http://devlog.agektmr.com/archives/107#comments</comments>
		<pubDate>Tue, 05 Aug 2008 16:27:19 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[OAuth]]></category>

		<category><![CDATA[Data Availability]]></category>

		<category><![CDATA[MySpace]]></category>

		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=107</guid>
		<description><![CDATA[前エントリでの予告通り、実際にサーバーサイドでコードを書き、MySpaceのData Availabilityを使ってOAuthを試してみます。Data Availabilityという名前は大げさに聞こえるかもしれません [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://devlog.agektmr.com/archives/79" ></a>前エントリでの予告通り、実際にサーバーサイドでコードを書き、MySpaceのData Availabilityを使ってOAuthを試してみます。<a href="http://developer.myspace.com/community/myspace/dataavailability.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/developer.myspace.com');" target="_blank">Data Availability</a>という名前は大げさに聞こえるかもしれませんが、実際はOpenSocial RESTful APIです。ちなみにData AvailabilityではまだJSON形式のみのサポートで、AtomPubには対応していません(しかも404が返ってくる。これに相当ハマった○|￣|＿)。</p>
<p>今回はOAuthを使って認証・認可を取得し、Data Availability APIを叩くところまでを解説します。</p>
<h2>下準備</h2>
<p>まずはサンドボックス環境にMySpaceにアプリを作ってください。細かい手順が分からない方は<a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20080708/310341/" onclick="javascript:pageTracker._trackPageview('/outbound/article/itpro.nikkeibp.co.jp');" target="_blank">この辺</a>を参考にしてください。</p>
<p>MySpaceではガジェットアプリも外部アプリも同じように扱われるようです。</p>
<p><img class="alignnone size-full wp-image-108" title="MySpaceApps" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-11.jpg" alt="" width="500" height="98" /></p>
<p>Edit Detailsを開くと、アプリケーションの詳細設定を編集することができます。</p>
<p>ここで<a href="http://devlog.agektmr.com/archives/79"  target="_blank">OAuthの利用に必要なもの</a>を思い出してください。まずはコンシューマキー(consumer_key)とコンシューマシークレット(consumer_secret)です。</p>
<p><span style="text-decoration: underline;"><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-31.jpg" ><img class="alignnone size-full wp-image-110" title="MySpaceAppConsumer" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-31.jpg" alt="" width="500" height="126" /></a></span></p>
<p>MySpaceの場合、アプリケーションを登録した段階でこれら2つが発行されます。コンシューマキーについては好きなものに変更できますが、ここではアプリケーションのガジェットXMLぽいURLにしてみました。後で必要になりますので、どこかにコピペっておきましょう。</p>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-4.jpg" ><img class="alignnone size-full wp-image-111" title="MySpaceAppDomain" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-4.jpg" alt="" width="500" height="309" /></a></p>
<p>次に、同じページの下の方にExternal Site Settingsという項目があります。これがData Availabilityの肝です。</p>
<ul>
<li>Use External Domainにチェックを入れる</li>
<li>External URLにMySpaceからの誘導先URLを入力</li>
<li>External Domainに実際に外部アプリを置くサーバーのドメインを入力</li>
<li>利用規約を読んで同意</li>
</ul>
<p>これで準備オッケー。</p>
<h2>OAuthを実装する</h2>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-3.jpg" ><img class="alignnone size-full wp-image-101" title="Inbound OAuth" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-3.jpg" alt="" width="500" height="148" /></a></p>
<p>今回試すのは上図の外部サービス、つまりコンシューマに当たる部分です。サービスプロバイダに当たるのはMySpace。ゼロから実装してもよいのですが、せっかく<a href="http://code.google.com/p/oauth/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">便利なライブラリ</a>がありますので、これのPHP版を使って試してみます。また、署名方式はHMAC-SHA1を使います。</p>
<p>OAuthのフローは下記の通り。<a href="http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.atmarkit.co.jp');" target="_blank">この辺り</a>を読んで仕様を理解しておく事をお勧めします。</p>
<ol>
<li>リクエストトークンを取得</li>
<li>ユーザー認証</li>
<li>アクセストークンを取得</li>
<li>リソースにアクセス</li>
</ol>
<h3><strong>リクエストトークンを取得</strong></h3>
<p>必要なライブラリをインクルードします。</p>
<pre name="code" class="php">
require_once &#039;oauth/OAuth.php&#039;;
require_once &#039;oauth/OAuth_TestServer.php&#039;;
</pre>
<p>各種変数をセットしておきましょう。先程メモった<strong>consumer_key</strong>と<strong>consumer_secret</strong>はここで使います。<strong>リクエストトークン</strong>を取得するためのエンドポイントは<a href="http://developer.myspace.com/community/myspace/dataavailability.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/developer.myspace.com');" target="_blank">MySpaceのドキュメント</a>に記載されています。</p>
<pre name="code" class="php">
$consumer[&#039;key&#039;] = &#039;http://devlab.agektmr.com/MyOpenSpace/DataAvailabilityExample&#039;;
$consumer[&#039;secret&#039;] = &#039;************&#039;;
$endpoint = &#039;http://api.myspace.com/request_token&#039;;
</pre>
<p>署名のロジックはめんどくさいのでライブラリにお任せ。</p>
<pre name="code" class="php">
$server = new TestOAuthServer(new MockOAuthDataStore());
$server-&gt;add_signature_method(new OAuthSignatureMethod_HMAC_SHA1());

$sig_methods = $server-&gt;get_signature_methods();
$sig_method = $sig_methods[&#039;HMAC-SHA1&#039;];

$consumer = new OAuthConsumer($consumer[&#039;key&#039;], $consumer[&#039;secret&#039;], NULL);
$request = OAuthRequest::from_consumer_and_token($consumer, NULL, &quot;GET&quot;, $endpoint, null);
$request-&gt;sign_request($sig_method, $consumer, NULL);

$req = curl_init($request);
curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($req);
</pre>
<p>ここまでのコードで$resultにリクエストトークンが返ってくることになります。URLのquery部と同じ形式で返ってきますので、必要に応じてパースしましょう。</p>
<pre name="code" class="php">
parse_str($result, $tmp);
</pre>
<p>これで、<strong>oauth_token</strong>と<strong>oauth_token_secret</strong>が取得できたはずです。</p>
<h3>認証</h3>
<p>次にユーザーに認証を行ってもらいます。エンドポイントはhttp://api.myspace.com/authorizeで行います。その際、先程取得した<strong>oauth_token</strong>と<strong>oauth_callback</strong>をパラメータとして付属します。oauth_callbackは認証後に呼び出されるページのURL。</p>
<pre name="code" class="php">
$callback_url = &#039;http://devlab.agektmr.com/MyOpenSpace/access.php&#039;;
$auth_url = &#039;http://api.myspace.com/authorize?oauth_token=&#039;.urlencode($tokens[&#039;oauth_token&#039;]).
    &#039;&amp;oauth_callback=&#039;.urlencode($callback_url);
</pre>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-2.jpg" ></a><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-5.jpg" ><img class="alignnone size-medium wp-image-115" title="MySpaceAppAuth" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-5-300x288.jpg" alt="" width="300" height="288" /></a></p>
<h3>アクセストークンを取得</h3>
<p>先程指定したoauth_callbackのURLに<strong>oauth_token</strong>をパラメータとして付属してリダイレクトされてきます。これはこのoauth_tokenが認証済みであることを示しており、<strong>アクセストークン</strong>への交換が可能となります。</p>
<pre name="code" class="php">
$consumer = new OAuthConsumer($consumer[&#039;key&#039;], $consumer[&#039;secret&#039;], NULL);
$tokener  = new OAuthConsumer($tokens[&#039;oauth_token&#039;], $tokens[&#039;oauth_token_secret&#039;]);
$access = OAuthRequest::from_consumer_and_token($consumer, $tokener, &quot;GET&quot;, $endpoint, null);
$access-&gt;sign_request($sig_method, $consumer, $tokener);

$req = curl_init($access);
curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($req);
</pre>
<p>コードはリクエストトークン取得の際とあまり変わりありません。これでアクセストークンの<strong>oauth_token</strong>と<strong>oauth_token_secret</strong>が返っきたら準備オッケー。</p>
<h3>RESTful APIを叩く</h3>
<p>ここまでに取得した<strong>consumer_key</strong>、<strong>consumer_secret</strong>、<strong>oauth_token</strong>、<strong>oauth_token_secret</strong>を使って署名したOAuthリクエストをRESTful APIに投げることにより、友達リストなどのデータ取得が可能になります。</p>
<pre name="code" class="php">
$consumer = new OAuthConsumer($consumer[&#039;key&#039;], $consumer[&#039;secret&#039;], NULL);
$tokener  = new OAuthConsumer($tokens[&#039;oauth_token&#039;], $tokens[&#039;oauth_token_secret&#039;]);
$resource = OAuthRequest::from_consumer_and_token($consumer, $tokener, &quot;GET&quot;, $endpoint, array(&#039;format&#039;=&gt;&#039;JSON&#039;));
$resource-&gt;sign_request($sig_method, $consumer, $tokener);

$req = curl_init($resource);
curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($req);
</pre>
<p>これでエンドポイント($endpoint)を取得したいリソースのURLにすればOK。レスポンスボディにJSON形式でデータが返ってきます。</p>
<h2>サンプルアプリ</h2>
<p>上記コードを使って一連の流れを見ながら動作を確認できるサンプルを用意しました。どういうリクエストを投げるのか参考になると思います。</p>
<p style="text-align: center;"><a href="http://devlab.agektmr.com/DataAvailability/"  target="_blank">実際に動作するサンプルはコチラ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/107/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenSocialのOAuthまとめ</title>
		<link>http://devlog.agektmr.com/archives/79</link>
		<comments>http://devlog.agektmr.com/archives/79#comments</comments>
		<pubDate>Fri, 01 Aug 2008 15:50:46 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[OAuth]]></category>

		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=79</guid>
		<description><![CDATA[OpenSocialでは、コンテナが外部サーバーとの通信を行う際、または外部サーバーがコンテナと通信を行う際、OAuthを使用して認可を行います。今回はOpenSocialにおけるOAuthについて、現段階でのまとめを書 [...]]]></description>
			<content:encoded><![CDATA[<p>OpenSocialでは、コンテナが外部サーバーとの通信を行う際、または外部サーバーがコンテナと通信を行う際、OAuthを使用して認可を行います。今回はOpenSocialにおけるOAuthについて、現段階でのまとめを書いてみます。</p>
<h2>OAuthって何だったっけ？</h2>
<p>OAuthは<strong>ユーザー</strong>、<strong>コンシューマ</strong>、<strong>サービスプロバイダ</strong>の3者間でデータのやり取りを行うとした場合、ユーザーがコンシューマにクレデンシャル(IDやパスワード)を渡すことなく、ユーザーが所有するサービスプロバイダ上の<strong>リソース</strong>にコンシューマをアクセスさせるためのものです。</p>
<p>例えば<strong>ユーザー</strong>が<strong>Google(サービスプロバイダ)</strong>の<strong>アドレス帳(リソース)</strong>を<strong>MySpace(コンシューマ)</strong>上で利用するシーンを思い浮かべてください。OAuthがなければ、MySpaceにGoogleのIDとパスワードを預けなければならなかったものが、OAuthを使うことで、ユーザーが直接Googleと認証のやりとりを行い、MySpaceにGoogleのID/パスワードを渡すことなく、アドレス帳のデータをMySpaceに渡すことができるようになります。</p>
<h2>2種類のOAuth</h2>
<p>さて、そんな便利なOAuthですが、OpenSocialで利用されるものには2種類あります。</p>
<h3>OAuth Core</h3>
<p><a href="http://oauth.net/core/1.0/" onclick="javascript:pageTracker._trackPageview('/outbound/article/oauth.net');" target="_blank">OAuth Core</a>では、先程説明したように、<strong>ユーザー</strong>、<strong>コンシューマ</strong>、<strong>サービスプロバイダ</strong>の3者間でやり取りを行います。ベーシックなものですので、詳細については<a href="http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.atmarkit.co.jp');" target="_blank">この辺</a>りを参考にしてください。</p>
<h3>OAuth Consumer Request</h3>
<p>一方<a href="http://oauth.googlecode.com/svn/spec/ext/consumer_request/1.0/drafts/1/spec.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/oauth.googlecode.com');" target="_blank">OAuth Consumer Request</a>は、OAuthの仕様からユーザー認証部分を除き、コンシューマとサービスプロバイダのやり取りにフォーカスした仕様で、一般に&#8221;<strong>two-legged OAuth</strong>&#8220;と呼ばれます。これはコンシューマとサービスプロバイダの信頼関係だけで、ユーザーによる認証を伴わない仕様のため、コンシューマがサービスプロバイダからパブリックな情報を取得したい場合に利用するケースが想定されます。</p>
<p>ちなみにOpenSocial v0.7ではOAuth Coreの利用は仕様に含まれておらず、このtwo-legged OAuthを利用することになっています。OAuth Coreが利用できるのはOpenSocial v0.8以降での話になります(もちろん、two-legged OAuthも利用できます)。</p>
<h2>OpenSocialにおけるOAuth利用パターン</h2>
<p>OpenSocialでOAuthを利用する形態として、さらに2通りが考えられます。</p>
<h3>ガジェットが外部サーバーとやり取りを行うOutbound OAuth</h3>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-1.jpg" ><img class="alignnone size-medium wp-image-100" title="Outbound OAuth" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-1-300x95.jpg" alt="" width="300" height="95" /></a></p>
<p>ここでは仮に<strong>Outbound OAuth</strong>と呼びます。type=&#8221;html&#8221;で作られたガジェットが、SNSコンテナをプロキシとしてコンシューマの役割を果たし、サービスプロバイダとなる外部サーバーとmakeRequestで通信を行うケースです。</p>
<h3>外部サーバーがコンテナとやり取りを行うInbound OAuth</h3>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-3.jpg" ><img class="alignnone size-medium wp-image-101" title="Inbound OAuth" src="http://devlog.agektmr.com/wp-content/uploads/2008/08/e38394e382afe38381e383a3-3-300x88.jpg" alt="" width="300" height="88" /></a></p>
<p>ここでは仮に<strong>Inbound OAuth</strong>と呼びます。コンシューマとなる外部サーバーがサービスプロバイダであるSNSコンテナのRESTful APIを叩くケースです。type=&#8221;url&#8221;のガジェットが外部サーバーを通してSNSコンテナのRESTful APIを叩くケースもこれに該当します。</p>
<h2>OAuthの利用に必要なもの</h2>
<p>OAuthの利用には前提条件がいくつか存在します。細かい仕様は別途調べていただくとして、事前に必要な条件が下記になります。</p>
<ul>
<li>コンシューマが、サービスプロバイダの発行する以下を事前に知っていること。
<ul>
<li>コンシューマキー(consumer_key)</li>
<li>コンシューマシークレット(consumer_secret)</li>
</ul>
</li>
<li>コンシューマが、サービスプロバイダとOAuthのやり取りを行う以下3つのURLを知っていること
<ul>
<li>サービスプロバイダのリクエストトークンURL</li>
<li>サービスプロバイダのアクセストークンURL</li>
<li>サービスプロバイダの認証URL</li>
</ul>
</li>
</ul>
<p>OAuth利用パターンごとにどのようにしてこの条件をクリアするかを検証してみます。</p>
<h3>Outbound OAuthのケース</h3>
<p>ガジェットが外部サーバーとやり取りを行うケースですので、まずはガジェット開発者がSNSコンテナにコンシューマキーとコンシューマシークレットを登録します。ですが僕の知る限り、まだ<strong>Outbound OAuthを実装しているSNSはありません</strong>。なので、ここでは何かしらの手段を用いて(SSLページでFormを使って投稿等)、コンシューマキーとコンシューマシークレットをコンテナに渡したものと想定してください。(今後順次、これを実現する方法は登場するものと思われます。)</p>
<p>次に、サービスプロバイダの各種URLを渡す必要がありますが、v0.8ではガジェットXMLで渡すよう規定されています。OAuthをModulePrefsの中に作成してください。</p>
<pre name="code" class="xml">
&lt;oauth&gt;
&lt;service name=&quot;google&quot;&gt;
&lt;request url=&quot;https://www.google.com/accounts/OAuthGetRequestToken?scope=http://www.google.com/m8/feeds/&quot; /&gt;
&lt;access url=&quot;https://www.google.com/accounts/OAuthGetAccessToken&quot; /&gt;
&lt;authorization url=&quot;https://www.google.com/accounts/OAuthAuthorizeToken&quot; /&gt;
&lt;/service&gt;
&lt;/oauth&gt;
</pre>
<p>OAuthは必ずしも1つのサーバーとやり取りするとは限りませんので、Serviceを追加することで複数をサポートすることができるようになっています。Service@nameで使い分けることが出来るようになっていますので、必要に応じてmakeRequestのopt_paramsに下記のパラメータを加え、サービスを指定してください。</p>
<pre>gadgets.io.RequestParameters.OAUTH_SERVICE_NAME</pre>
<p>サービスプロバイダとOAuthのやり取りを行うURLについては、XRDS-Simpleによって解決する方法もありますが、こちらについては別の機会にまとめてご紹介します。</p>
<h3>Inbound OAuthのケース</h3>
<p>外部アプリケーションがSNSコンテナのRESTful APIにアクセスする場合になります。これはまさに、FacebookのFacebook ConnectやMySpaceのData Availability、GoogleのFriendConnectに該当するもので、まだ実験的な段階にあると言えるものです。</p>
<p>コンシューマキーとコンシューマシークレットですが、SNSコンテナ上でアプリケーションを登録することで発行されます。それをディベロッパがメモ/コピペしてコンシューマとなるサーバーのコードに埋め込みましょう。URLについては、単純にヘルプページを見る方法と、XRDS-Simpleによるオートディスカバリを行う方法が考えられます。</p>
<h2>まとめ</h2>
<p>今回は大まかな話を書きましたが、次回は実際にMySpaceのData Availabilityを使ってOAuth認証を行い、データを取得するところまでを試してみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/79/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenSocial API仕様(v0.8)を翻訳しました</title>
		<link>http://devlog.agektmr.com/archives/78</link>
		<comments>http://devlog.agektmr.com/archives/78#comments</comments>
		<pubDate>Wed, 09 Jul 2008 15:30:27 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=78</guid>
		<description><![CDATA[OpenSocial API仕様(v0.8)
一ヶ月くらい前から出来てたのですが、一応ブログ記事にも書いておきます。何か間違い等ありましたらお知らせください。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://devlog.agektmr.com/wiki/index.php?cmd=read&amp;page=OpenSocial%2FOpenSocial%20API仕様%20%28v0.8%29" >OpenSocial API仕様(v0.8)</a></p>
<p>一ヶ月くらい前から出来てたのですが、一応ブログ記事にも書いておきます。何か間違い等ありましたらお知らせください。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/78/feed</wfw:commentRss>
		</item>
		<item>
		<title>FriendConnectから垣間見える未来のソーシャルウェブ</title>
		<link>http://devlog.agektmr.com/archives/77</link>
		<comments>http://devlog.agektmr.com/archives/77#comments</comments>
		<pubDate>Thu, 19 Jun 2008 17:49:38 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[DataPortability]]></category>

		<category><![CDATA[FriendConnect]]></category>

		<category><![CDATA[OpenSocial]]></category>

		<category><![CDATA[SocialWeb]]></category>

		<category><![CDATA[OAuth]]></category>

		<category><![CDATA[OpenID]]></category>

		<category><![CDATA[PortableContacts]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=77</guid>
		<description><![CDATA[今更ですが、先日サンフランシスコで開かれたGoogle I/Oに参加してきました。
その中でも特に印象に残ったのが、PlaxoのJoseph Smarr氏によるOpenSocial, OpenID, and OAuth: [...]]]></description>
			<content:encoded><![CDATA[<p>今更ですが、先日サンフランシスコで開かれたGoogle I/Oに参加してきました。</p>
<p>その中でも特に印象に残ったのが、PlaxoのJoseph Smarr氏によるOpenSocial, OpenID, and OAuth: Oh My!というセッション。僕が見たセッションの中ではダントツの人気で、部屋に用意された椅子はもちろん、立ち見で人が溢れ返るほどの盛況ぶり。</p>
<p>内容は、ソーシャルウェブの未来について。現在はOpenSocialというソーシャルグラフを所有するサービスに閉じた世界が中心となりつつありますが、少し未来のウェブはOpenSocial, OpenID, OAuth, <a href="http://www.portablecontacts.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.portablecontacts.net');" target="_blank">PortableContacts</a>等の技術によって、よりグローバルな意味でのソーシャル化が図れるようになる、というものです。</p>
<p>詳細は<a href="http://sites.google.com/site/io/opensocial-openid-and-oauth-oh-my" onclick="javascript:pageTracker._trackPageview('/outbound/article/sites.google.com');" target="_blank">Google Codeにビデオとスライドがアップされています</a>ので、ご覧ください。かなり早口ですが、大変面白い内容です。</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="src" value="http://www.youtube.com/v/6SYnlH5FXz0" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/6SYnlH5FXz0" wmode="transparent"></embed></object></p>
<h2>OpenSocialとFriendConnectの持つ意味</h2>
<p>OpenSocialにはv0.7まで、JavaScriptのAPIしか存在していませんでした。これはOpenSocialコンテナにとっては外部サービスからガジェットとしてアプリケーションを追加してもらい、そのOpenSocialコンテナが持つソーシャルグラフに閉じた形で利用されるものでした。アプリケーション開発者はOpenSocialのJavaScript APIを使い、ガジェットが置かれているコンテナサイトの友達リストを取得し、そこでアプリケーションを動かすことができます。もちろん、ガジェットを自分のサービスドメイン上でホスティングすることも可能ですが、ガジェットはコンテナ上でしか動作せず、友達リストを外部サービスとしてインポートしたりといったことも不可能で、実質的に囲い込みサービスしか生まれないものと言えたでしょう。</p>
<p>それがOpenSocial v0.8 + FriendConnectによって一気に世界を広げます。ユーザーはFriendConnect対応サイトを利用するに当たり、OAuthを使って自分が利用したいSNSサービスを選ぶ権利が与えられています。同時に、そのサイト上での活動内容は連携を選択したSNSサービスに戻されます。</p>
<p>ここでソーシャルサービスの要素を思い出してください。</p>
<ol>
<li>アイデンティティ</li>
<li>ソーシャルグラフ(友達リスト)</li>
<li>エントリの公開範囲の制御(プライバシー)</li>
<li>フィード</li>
</ol>
<p><strong>FriendConnectはアイデンティティをOpenIDで、ソーシャルグラフをOpenSocial v0.8のRESTful APIで、エントリの公開範囲の制御をOAuthで、フィードをActivity Streamで解決しようとしています。</strong></p>
<p>これらの意味するところを深く見つめて行くと、未来のソーシャルウェブが自ずと見えてきます。</p>
<h2>Joseph Smarr氏(Plaxo)による未来のソーシャルウェブ論</h2>
<p>FriendConnectのイメージをさらに深めるため、Joseph Smarr氏が、PlaxoのFriendConnect対応に際してアップしていたブログエントリをご紹介します。</p>
<p><a class="entryheader" href="http://blog.plaxo.com/archives/2008/06/plaxo_and_frien_1.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.plaxo.com');">Plaxo and FriendConnect are now Best Friends</a></p>
<blockquote><p>Plaxoが完全にFriendConnectと連携した。FriendConnectとは、あらゆるサイトをソーシャル化する、Googleによるウィジェットベースのツールである。これにより、FriendConnectに対応していれば、どんなサイトでもPlaxoアカウントに安全に接続し、サイト上に自分の友達がいるかを確認したり、友達を招待したりといったことができるようになる。何よりも素晴らしいのは、そのサイトでの活動内容をPulseに流し込むことができるようになり、Plaxoでの友達がウェブを跨いであなたと連絡を取り合うことができ、あなたが発見した新しいサイトを知ることができる点だ。</p>
<p>これは本当に便利でわくわくする連携機能だ &#8212; これはユーザーが自分のアイデンティティと関係をウェブ上のどこでも利用できるようにし、新しいサイトで知人を見つけ出し、活動内容を既存の友達に共有し、よりソーシャルな発見と共有という徳の高いサイクルを生み出す、<a href="http://therealmccrea.com/2008/05/02/can-lifestreaming-and-aggregation-go-mainstream/" onclick="javascript:pageTracker._trackPageview('/outbound/article/therealmccrea.com');" target="_blank">シームレスソーシャルウェブエコシステム</a>にさらに近付いたと言える。これこそソーシャルウェブの進むべき道だ &#8212; (現在あるほとんどのサービスがそうだが)新しいソーシャルサイトを使い始める度に最初からやり直さなければならないなんてとんでもない。あなたの新しい体験全てが、他の人をも魅了すべきだ。</p>
<p>これはサービスがユーザーに自分の持つデータの制御を与え、オープンスタンダードを使って安全なアクセス権を提供することによってのみ成り立つ。そしてこれこそまさに、PlaxoがFriendConnectを使ってやりたかったことだ。Plaxoアカウントを接続する際、我々は<a href="http://oauth.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/oauth.net');" target="_blank">OAuth</a>を使う。そのため、Plaxoのパスワードを渡す必要もないし、後で接続を断つことも可能だ。FriendConnectを使ってあなたが活動内容をPulseに共有する際は、<a href="http://devlog.agektmr.com/wiki/index.php?cmd=read&amp;page=OpenSocial%2FRESTful%20API%20Specification"  target="_blank">OpenSocial 0.8 RESTful Activities API</a>を利用する。オープンスタンダードではない連携はアドレス帳APIのみであり、我々はこのスタンダードについても<a href="http://portablecontacts.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/portablecontacts.net');" target="_blank">取り組みを開始している</a>。我々は<a href="http://blog.plaxo.com/archives/2008/05/plaxo_becomes_s.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.plaxo.com');" target="_blank">アイデンティティプロバイダとして、ソーシャルグラフプロバイダとして、そしてコンテンツアグリゲータとしての役割</a>を果たしていると強く信じている &#8212; つまり、我々はユーザーが自身のデータと関係性をウェブ上のどこにでも持ち回り、どこからでも共有できるようにしている &#8212; これはユーザーにとっても、Plaxoにとっても、ウェブ全体にとっても有益なことだ。だが、まだこの取り組みは始まったばかり &#8212; FriendConnect対応サイトから活動内容を共有する際、家族や友達、仕事関係など、共有相手をより細かい粒度で制御するなどの、更なる拡張を楽しみにしていて欲しい。</p>
<p>下のスクリーンショットはPlaxoとGoogle FriendConnectの連携したものだ &#8212; <a href="http://www.google.com/friendconnect/home/examples" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');" target="_blank">FriendConnectを利用しているサイト</a>でも体験してもらうことができる。</p></blockquote>
<p>画像は<a href="http://blog.plaxo.com/archives/2008/06/plaxo_and_frien_1.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.plaxo.com');" target="_blank">実際のページ</a>をご覧下さい。</p>
<h2>まとめ</h2>
<p>ガジェットコンテナとしてのOpenSocialには正直、懐疑的な部分があったのですが、FriendConnectの描く未来を想像し、またわくわくしています。今後もこの辺りの動向を追って行きます。</p>
<h2>追記</h2>
<p>似たような話題に触れた記事を見つけたので追記し、トラバっておく。(失敗したので断念○|￣|＿)</p>
<p><a href="http://japan.cnet.com/special/story/0,2000056049,20375542,00.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/japan.cnet.com');" target="_blank">グーグルが見たソーシャルネットワーキング&#8211;その3つの傾向:スペシャルレポート - CNET Japan</a></p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/77/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenSocial RESTful API Specificationを翻訳しました</title>
		<link>http://devlog.agektmr.com/archives/76</link>
		<comments>http://devlog.agektmr.com/archives/76#comments</comments>
		<pubDate>Mon, 16 Jun 2008 08:51:07 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[OpenSocial]]></category>

		<category><![CDATA[RESTful API]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=76</guid>
		<description><![CDATA[これまで公開していたOpenSocial RESTful API Proposalの翻訳を、OpenSocial v0.8仕様のリリースで公開されたOpenSocial RESTful API Specification [...]]]></description>
			<content:encoded><![CDATA[<p>これまで公開していたOpenSocial RESTful API Proposalの翻訳を、OpenSocial v0.8仕様のリリースで公開された<a href="http://devlog.agektmr.com/wiki/index.php?cmd=read&amp;page=OpenSocial%2FRESTful%20API%20Specification"  target="_blank">OpenSocial RESTful API Specification</a>に置き換えました。</p>
<p>ただし部分更新処理の項目についてはTBD(To Be Determined)のままになっています。問い合わせしているので、最新版に更新され次第アップします。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/76/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenSocialのAtomPubはXRDS-Simpleでディスカバリ</title>
		<link>http://devlog.agektmr.com/archives/75</link>
		<comments>http://devlog.agektmr.com/archives/75#comments</comments>
		<pubDate>Thu, 12 Jun 2008 02:52:55 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[AtomPub]]></category>

		<category><![CDATA[OpenSocial]]></category>

		<category><![CDATA[Service Document]]></category>

		<category><![CDATA[XRDS-Simple]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=75</guid>
		<description><![CDATA[OpenSocial v0.8のRESTful API仕様では、オートディスカバリにXRDS-Simpleを利用するよう規定されています。
他方、OpenSocial v0.8で利用されるRESTful APIはAtom [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/apis/opensocial/docs/0.8/restfulspec.html " onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">OpenSocial v0.8のRESTful API仕様</a>では、オートディスカバリに<a href="http://xrds-simple.net/core/1.0/" onclick="javascript:pageTracker._trackPageview('/outbound/article/xrds-simple.net');" target="_blank">XRDS-Simple</a>を利用するよう規定されています。</p>
<p>他方、OpenSocial v0.8で利用されるRESTful APIは<a href="http://tools.ietf.org/html/rfc5023" onclick="javascript:pageTracker._trackPageview('/outbound/article/tools.ietf.org');" target="_blank">AtomPub</a>形式となっており、AtomPubではService Documentを利用するよう規定されています。</p>
<p>これではコンテナサイトがどちらを使うのか、両方使うべきなのか疑問が残ってしまいます。この件について、<a href="http://groups.google.com/group/opensocial-and-gadgets-spec" onclick="javascript:pageTracker._trackPageview('/outbound/article/groups.google.com');" target="_blank">Google GroupsのOpenSocialの仕様を検討するグループ</a>に<a href="http://groups.google.com/group/opensocial-and-gadgets-spec/browse_thread/thread/a447a1f155f4f06b" onclick="javascript:pageTracker._trackPageview('/outbound/article/groups.google.com');" target="_blank">質問</a>を投げてみました。</p>
<p>質問</p>
<blockquote><p>コンテナサイトはAtomPubのService DocumentとXRDS-Simple、どちらを採用すべきなのでしょうか？両方サポートすべきでしょうか？</p></blockquote>
<p>David Primmer氏の回答</p>
<blockquote><p>AtomPubのService DocumentはURLの一部をテンプレート的に定義して変数を当てはめる用途には向いていない。ある程度固定されたURL上で指定することを想定されているようだ。<br />
その点、XRDS-Simpleは空白に値を埋める形でURLをディスカバリできる点で優れている。</p></blockquote>
<p>この点に関しては、AtomPubのPerlライブラリを実装された<a href="http://teahut.sakura.ne.jp/b/2008-04-09-1.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/teahut.sakura.ne.jp');" target="_blank">たけまるさんも指摘</a>されていて、XRDS-Simpleを利用する方が合理的であるという点では一致しています。</p>
<p>ただ、仕様に適合しないという意味では気持ちの悪いものであることは間違いなく、この点をどこかで解決できないかと考えています。先ほど紹介したGoogle Groupsで「AtomPubの仕様作成者に仕様変更の提案を行う予定はあるか」との質問を投げたのですが、その後応答はありません。</p>
<p>現時点でRod Yatesという方から<a href="http://tools.ietf.org/html/draft-snell-atompub-feature-12" onclick="javascript:pageTracker._trackPageview('/outbound/article/tools.ietf.org');" target="_blank">こちらの仕様書</a>から適用できるのではないかとの提案を頂いているので、AtomPub識者の方と相談して何かしらの働きかけを行っていこうと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/75/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mac OS XのちょっとマニアックなTips</title>
		<link>http://devlog.agektmr.com/archives/32</link>
		<comments>http://devlog.agektmr.com/archives/32#comments</comments>
		<pubDate>Mon, 02 Jun 2008 17:24:26 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=32</guid>
		<description><![CDATA[ことえり変換
変換中に

Ctrl + j : ひらがなに変換
Ctrl + k : カタカナに変換
Ctrl + l : 全角英数に変換
Ctrl + ; : 半角英数に変換

カーソル移動等
Vimと違うので使いやす [...]]]></description>
			<content:encoded><![CDATA[<h2>ことえり変換</h2>
<p>変換中に</p>
<ul>
<li><strong>Ctrl + j</strong> : ひらがなに変換</li>
<li><strong>Ctrl + k</strong> : カタカナに変換</li>
<li><strong>Ctrl + l</strong> : 全角英数に変換</li>
<li><strong>Ctrl + ;</strong> : 半角英数に変換</li>
</ul>
<h2>カーソル移動等</h2>
<p>Vimと違うので使いやすくはないけど・・・</p>
<ul>
<li><strong>Ctrl + p</strong> : 上</li>
<li><strong>Ctrl + n</strong> : 下</li>
<li><strong>Ctrl + b</strong> : 左</li>
<li><strong>Ctrl + f</strong> : 右</li>
<li><strong>Ctrl + k</strong> : 行削除</li>
<li><strong>Ctrl + y</strong> : ペースト</li>
<li><strong>Ctrl + a</strong> : 行先頭に移動</li>
<li><strong>Ctrl + e</strong> : 行末に移動</li>
</ul>
<h2>キャプチャ</h2>
<p><strong>Command + Shift + 3</strong>で全画面キャプチャは言うまでもないけど、</p>
<p><strong>Command + Shift + 4</strong>で範囲指定キャプチャ。キャプチャしたい範囲をドラッグしながら</p>
<ul>
<li><strong>Space</strong> : キャプチャ範囲をそのまま移動</li>
<li><strong>Shift</strong> : カーソルを動かした方向以外を固定して領域を変形させる</li>
<li><strong>Option</strong> : 領域の中心を基点に形を変形させる</li>
<li><strong>Ctrl</strong> : キャプチャ範囲をクリップボードにコピー</li>
<li><strong>Esc</strong> : キャプチャをキャンセル</li>
</ul>
<h2>QuickLook</h2>
<p>画像QuickLookで</p>
<ul>
<li><strong>Option + クリック</strong> : 拡大</li>
<li><strong>Option + Shift + クリック</strong> : 縮小</li>
<li><strong>Option + ホイール</strong> : 拡大/縮小</li>
</ul>
<p>PDFQuickLookで</p>
<ul>
<li><strong>Command + プラスキー(Command + Shift + ;)</strong> : 拡大</li>
<li><strong>Command + マイナスキー</strong> : 縮小</li>
</ul>
<h2>Dashboard</h2>
<p><strong>Option</strong>を押しながらマウスオーバーでウィジェット削除の×印が出る(いちいち画面左下の+をクリックしなくてよい)</p>
<h2>その他</h2>
<ul>
<li><strong>Ctrl + Shift + Eject</strong> : ディスプレイを切る</li>
<li><strong>Command + Option + Esc</strong> : 強制終了</li>
<li><strong>Command + Option + Ctrl + Eject</strong> : OSシャットダウン<strong></strong></li>
<li><strong>Ctrlを押しながらマウスホイールをグリグリ</strong> : 画面の拡大/縮小(結構感動的)<strong></strong></li>
<li><strong>SafariのタイトルバーをCommand + クリック</strong> : 同じサイトのURLを上位階層に移動</li>
<li>(たぶん全てのアプリで)<strong>Command + F1</strong> : 同じアプリのウィンドウを順番に行き来</li>
</ul>
<p>その他、集めたTipsの参考サイトは<a href="http://bookmark.goo.ne.jp/user/agektmr/search/?k=mac%20os%20x%2BTips" onclick="javascript:pageTracker._trackPageview('/outbound/article/bookmark.goo.ne.jp');" target="_blank">こちらに色々あります</a></p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/32/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenSocialコンテナの対応状況を調べるガジェット</title>
		<link>http://devlog.agektmr.com/archives/73</link>
		<comments>http://devlog.agektmr.com/archives/73#comments</comments>
		<pubDate>Mon, 02 Jun 2008 15:34:40 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[OpenSocial]]></category>

		<category><![CDATA[Gadget]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=73</guid>
		<description><![CDATA[OpenSocialコンテナにもOrkut, hi5, MySpaceだけでなく、iGoogle, hyves, Netlogなどが登場してきました。
それぞれのSNSには特徴がありますが、仕様をいちいち調べたり、開発に [...]]]></description>
			<content:encoded><![CDATA[<p>OpenSocialコンテナにも<a href="http://www.orkut.com/Home.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.orkut.com');" target="_blank">Orkut</a>, <a href="http://hi5.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hi5.com');" target="_blank">hi5</a>, <a href="http://www.myspace.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.myspace.com');" target="_blank">MySpace</a>だけでなく、<a href="http://www.google.com/ig?hl=en" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');" target="_blank">iGoogle</a>, <a href="http://www.hyves.nl/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.hyves.nl');" target="_blank">hyves</a>, <a href="http://en.netlog.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.netlog.com');" target="_blank">Netlog</a>などが登場してきました。</p>
<p>それぞれのSNSには特徴がありますが、仕様をいちいち調べたり、開発に当たって動作確認を行うのは面倒です。現在OpenSocial v0.8は登場したばかりということもあり、ほとんどがv0.7対応のものですが、v0.7への対応状況を確認できるガジェットというのがあります。</p>
<address>http://opensocial-resources.googlecode.com/svn/tests/trunk/compliancetests.xml</address>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/06/compliancetest.jpg" ><img class="alignnone size-medium wp-image-74" title="compliancetest" src="http://devlog.agektmr.com/wp-content/uploads/2008/06/compliancetest-257x299.jpg" alt="" width="257" height="299" /></a></p>
<p>これで開発も少しは楽になるのではないでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/73/feed</wfw:commentRss>
		</item>
		<item>
		<title>オープンソースのShindig対応SNS - Partuza!</title>
		<link>http://devlog.agektmr.com/archives/71</link>
		<comments>http://devlog.agektmr.com/archives/71#comments</comments>
		<pubDate>Mon, 02 Jun 2008 15:18:10 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[OpenSocial]]></category>

		<category><![CDATA[Partuza!]]></category>

		<category><![CDATA[Shindig]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=71</guid>
		<description><![CDATA[OpenSocialのコンテナと言えばShindigですが、PHP版は既にOpenSocial v0.7への対応を完了しています。Partuza!はPHP版Shindigの開発者であるChris Chabot氏がオープン [...]]]></description>
			<content:encoded><![CDATA[<p>OpenSocialのコンテナと言えば<a href="http://devlog.agektmr.com/archives/tag/shindig"  target="_blank">Shindig</a>ですが、PHP版は既にOpenSocial v0.7への対応を完了しています。<a href="http://code.google.com/p/partuza/" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');" target="_blank">Partuza!</a>はPHP版Shindigの開発者であるChris Chabot氏がオープンソースで開発したShindig対応SNSです。</p>
<p>Shindigがコンテナなのに、じゃあPartuza!は何をするの？と思われるかもしれません。今回はインストール方法と、Shindigとの関係について解説します。</p>
<h2>Partuza!をインストールする</h2>
<p><a href="http://devlog.agektmr.com/archives/11"  target="_blank">Shindigのインストール方法は以前解説しました</a>ので、ここでは割愛します。仮に、Shindigが~/shindig配下にインストールされ、http://localhost:8080/gadgets/&#8230;でアクセスできるものとします。</p>
<p>まず、環境としてApache、PHP5(要mcrypt)、MySQL5が必須となります。</p>
<h3>レポジトリからチェックアウト</h3>
<p>Google CodeのレポジトリからSVNでチェックアウトします。</p>
<pre>&gt; svn checkout <strong><em><span style="font-style: normal;"><span style="font-weight: normal;">http</span></span></em></strong>://partuza.googlecode.com/svn/trunk/ ~/partuza</pre>
<h3>データベースを用意</h3>
<p>適当なデータベース名、ユーザー名、パスワードで空のDBを作ってください。ひとまずここではそれぞれ、partuza、root、パスワードなしとします。この状態で、~/partuza/partuza.sqlをダンプします。</p>
<pre>&gt; mysql -u root partuza &lt; partuza.sql</pre>
<h3>DocumentRootを設定</h3>
<p>Apacheの設定(httpd.conf)でDocumentRootを~/partuza/htmlに設定し、http://localhost/でアクセスできるようにします。もちろん、Shindigとは別ドメインを用意する必要がありますので、バーチャルホストを使う等してください。</p>
<h3>設定ファイルを修正</h3>
<p>~/partuza/html/config.phpを編集します。ここでは先程作成したデータベース関連の情報とガジェットサーバーのルートURL(gadget_server)を設定します。ガジェットサーバーのURLが、ここではShindigのURLとなりますので、http://localhost:8080/になります。</p>
<h3>データベースハンドラをコピー</h3>
<p>~/partuza/Shindig/PartuzaDbFetcher.phpと~/partuza/Shindig/PartuzaHandler.phpを~/shindig/php/src/socialにコピーします。</p>
<pre>&gt; cp ~/partuza/Shindig/Partuza* ~/shindig/php/src/social</pre>
<h3>Shindigのデータベース設定を修正</h3>
<p>~/shindig/php/src/social/PartuzaDbFetcher.phpにもデータベース関連の情報があるので修正します。加えてShindigがデータベースハンドラを利用するよう、~/shindig/php/config.phpも修正します。ここでは、&#8221;handlers =&gt; PartuzaHandler&#8221;としてください。</p>
<p>これで一通りの準備は完了。http://localhost/にアクセスしてウェルカム画面が出れば成功です。このまま登録し、Orkutライクな一般的なSNSとして利用することができます。</p>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/05/partuza.jpg" ><img class="alignnone size-medium wp-image-72" title="partuza" src="http://devlog.agektmr.com/wp-content/uploads/2008/05/partuza-300x185.jpg" alt="" width="300" height="185" /></a></p>
<h2>Partuza!とShindigの関係</h2>
<p>OpenSocialのガジェットがiframeを介して表示されていることは以前も解説しましたが、簡単に言ってしまえば、iframeの手前がPartuza、後ろがShindigになります。Shindigでは以前から下記のURLにアクセスすることで簡易的なHTMLからOpenSocialぽい表示を行うことはできていましたが、Partuzaを使うことで完全なSNSとなります。</p>
<address>http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html</address>
<p>とはいえ、PartuzaHandlerを指定したところからも想像できるように、データベースは共有されます。なお、<a href="http://partuza.us.chabotc.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/partuza.us.chabotc.com');" target="_blank">Chris Chabot氏のサイト</a>で実際に動いているものを確認することができます。</p>
<p>Partuza!を使うことで、どうすればShindigをSNSに組み込むことができるかの解析をすることができるだけでなく、そのままちょっとしたSNSを開発することもできてしまいます。ぜひお試しください。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/71/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mac OS Xアプリを管理する強力コンボ AppFresh / iusethis.com</title>
		<link>http://devlog.agektmr.com/archives/67</link>
		<comments>http://devlog.agektmr.com/archives/67#comments</comments>
		<pubDate>Wed, 21 May 2008 17:39:44 +0000</pubDate>
		<dc:creator>えーじ</dc:creator>
		
		<category><![CDATA[Mac]]></category>

		<category><![CDATA[AppCast]]></category>

		<category><![CDATA[AppFresh]]></category>

		<category><![CDATA[iusethis.com]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/?p=67</guid>
		<description><![CDATA[最近のMac OS X用アプリには、自動的に更新をチェックしてアップデートしてくれるものも少なくありませんが、常に最新版を使いたい人にとって、そうでないアプリを管理するのは面倒なもの。チェック方法としてVersionTr [...]]]></description>
			<content:encoded><![CDATA[<p>最近のMac OS X用アプリには、自動的に更新をチェックしてアップデートしてくれるものも少なくありませんが、常に最新版を使いたい人にとって、そうでないアプリを管理するのは面倒なもの。チェック方法として<a href="http://www.versiontracker.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.versiontracker.com');" target="_blank">VersionTracker</a>や、デスクトップアプリケーションの<a href="http://www.logicielmac.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.logicielmac.com');" target="_blank">LogicielMac Update</a>といった選択肢がありますが、いずれも今日紹介するコンボと比較すれば、つまらないものに思えてきます。</p>
<h2>iusethis.com</h2>
<p>iuserthis.comは使っているMac OS X用アプリを登録して共有するSNSです。</p>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/05/iusethis_top.jpg" ><img class="alignnone size-medium wp-image-69" title="iusethis_top" src="http://devlog.agektmr.com/wp-content/uploads/2008/05/iusethis_top-300x224.jpg" alt="" width="300" height="224" /></a></p>
<p>サイトにサインアップしてから<a href="http://osx.iusethis.com/app/imakeprofile" onclick="javascript:pageTracker._trackPageview('/outbound/article/osx.iusethis.com');" target="_blank">imakeprofileというアプリ</a>を使うと、Macにインストールしてあるアプリを自動的にスキャンして、自分が主に使用しているアプリをiusethis.comに登録することができます。使用しているアプリが未登録の場合は、自分で追加することも可能。</p>
<p>登録したアプリは、サービスが最新版の情報を取得するので、更新が可能かどうかを調べることができます。もちろんレビューや、誰がそのアプリを使用しているのかを確認することもできます。さらには簡易的なSNS機能として、TwitterのようなFollow機能があるので、他の人のアプリ使用状況を追跡することもできます。</p>
<p>ちなみに<a href="http://osx.iusethis.com/iconbonanza/agektmr" onclick="javascript:pageTracker._trackPageview('/outbound/article/osx.iusethis.com');" target="_blank">僕が使用しているアプリ</a>はこんな感じ。</p>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/05/iusethis_icon.jpg" ><img class="alignnone size-medium wp-image-70" title="iusethis_icon" src="http://devlog.agektmr.com/wp-content/uploads/2008/05/iusethis_icon-300x191.jpg" alt="" width="300" height="191" /></a></p>
<p><a href="http://apps.facebook.com/iusethis/" onclick="javascript:pageTracker._trackPageview('/outbound/article/apps.facebook.com');" target="_blank">Facebookアプリ</a>も提供されているので、「俺こんなアプリ使ってんだぜ！」と叫びたいニーズも満たしてくれます。そのうちきっとOpenSocialにも対応してくれるでしょう。</p>
<h2>AppFresh</h2>
<p><a href="http://devlog.agektmr.com/wp-content/uploads/2008/05/appfresh.jpg" ><img class="alignnone size-medium wp-image-68" title="appfresh" src="http://devlog.agektmr.com/wp-content/uploads/2008/05/appfresh-300x238.jpg" alt="" width="300" height="238" /></a></p>
<p><a href="http://metaquark.de/appfresh/" onclick="javascript:pageTracker._trackPageview('/outbound/article/metaquark.de');" target="_blank">AppFresh</a>は<a href="http://osx.iusethis.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/osx.iusethis.com');" target="_blank">iusethis.com</a>と連携して使えるソフトウェア更新ツールです。iusethis.comのデータベースから自動的に最新版を確認して、どれが更新できるかを知らせてくれます。その場でダウンロードからインストールまでまとめて行うこともできますし、ダウンロードのみ行うこともできます。<a href="http://growl.info/" onclick="javascript:pageTracker._trackPageview('/outbound/article/growl.info');" target="_blank">Growl</a>に対応しているので、ダウンロードやインストールが完了すると通知もしてくれます。</p>
<h2>まとめ</h2>
<p>AppFresh / iusethis.comは、SNSの楽しさで集めたユーザーに、アプリ開発者やサイト管理者の煩雑な作業を集合知として解決してもらうことで、くまなく幅広いアプリケーションの更新情報を提供可能とした最強のコンボと言えるのではないでしょうか。</p>
<p>※ちなみに、アプリの自動更新チェックには、RSS2.0のenclosureにアプリのリソースURLを入れる<a href="http://connectedflow.com/appcasting/" onclick="javascript:pageTracker._trackPageview('/outbound/article/connectedflow.com');" target="_blank">AppCast</a>なるプロトコルが使われるケースが多いようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/archives/67/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
