<?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>Tender Surrender &#187; OpenSocial</title>
	<atom:link href="http://devlog.agektmr.com/ja/archives/category/opensocial/feed" rel="self" type="application/rss+xml" />
	<link>http://devlog.agektmr.com</link>
	<description>未来のソーシャルウェブを夢見るブログ</description>
	<lastBuildDate>Tue, 10 Aug 2010 15:55:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>JA</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>「OpenSocialのアーキテクチャ」スライドを公開します</title>
		<link>http://devlog.agektmr.com/ja/archives/683</link>
		<comments>http://devlog.agektmr.com/ja/archives/683#comments</comments>
		<pubDate>Sat, 14 Nov 2009 14:50:21 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[勉強会]]></category>
		<category><![CDATA[Shindig]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=683</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F683", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F683%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%80%8COpenSocial%E3%81%AE%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%80%8D%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%99%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F683", "style": "big", "title": "「OpenSocialのアーキテクチャ」スライドを公開します" });</script></div>
<p>去る11月11日にリクルートメディアテクノロジーラボの「カフェ」でTokyo GTUG(Google Technology User Group) #4のイベントが開催されました。テーマはOpenSocialで、今回は「OpenSocialのアーキテクチャ」というテーマで講演させて頂きましたので、スライドを公開します。</p>
<div id="__ss_2499345" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="OpenSocialのアーキテクチャ" href="http://www.slideshare.net/agektmr/opensocial-2499345">OpenSocialのアーキテクチャ</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=opensocial-091114084123-phpapp01&amp;stripped_title=opensocial-2499345" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=opensocial-091114084123-phpapp01&amp;stripped_title=opensocial-2499345" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/agektmr">Eiji Kitamura</a>.</div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/683/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenSocial Hackathon in 会津</title>
		<link>http://devlog.agektmr.com/ja/archives/682</link>
		<comments>http://devlog.agektmr.com/ja/archives/682#comments</comments>
		<pubDate>Tue, 15 Sep 2009 03:01:41 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[勉強会]]></category>
		<category><![CDATA[Hackathon]]></category>
		<category><![CDATA[会津ITサマーフォーラム]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/archives/682</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F682", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F682%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OpenSocial%20Hackathon%20in%20%E4%BC%9A%E6%B4%A5%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F682", "style": "big", "title": "OpenSocial Hackathon in 会津" });</script></div>
<p>9月18日に会津大学で行われる<a href="http://www.ubic-u-aizu.pref.fukushima.jp/it-summer/2009overview" target="_blank">会津ITサマーフォーラム</a>で講演することになりました。僕のセッションでは「OpenSocialのアーキテクチャ」というマニアックなネタをお話をさせて頂く予定です。  また、せっかくの会津なので<a href="http://mashupaward.jp/" target="_blank">Mashup Awards5</a>のキャラバンも兼ねて、翌19日にOpenSocial Hackathonも開催することになりました。  OpenSocial入門を執筆されたmixiの<a href="http://www.eisbahn.jp/yoichiro/" target="_blank">田中洋一郎さん</a>やMTLの<a href="http://www.kawa.net/xp/index-j.html" target="_blank">川崎有亮さん</a>も参加されます。地元の方は滅多にない機会だと思いますので、ぜひご参加ください。  詳細と参加フォームはこちら: <a href="https://spreadsheets.google.com/a/agektmr.com/viewform?formkey=dGtZbVFaSzNhbTdZb1RPd3h3azhHSmc6MA.." target="_blank">OpenSocial Hackathon in 会津</a></p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/682/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shindigのコミッターになりました</title>
		<link>http://devlog.agektmr.com/ja/archives/656</link>
		<comments>http://devlog.agektmr.com/ja/archives/656#comments</comments>
		<pubDate>Sat, 29 Aug 2009 00:19:40 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[SocialWeb]]></category>
		<category><![CDATA[Shindig]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=656</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F656", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F656%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Shindig%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%82%BF%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F656", "style": "big", "title": "Shindigのコミッターになりました" });</script></div>
<p>「ウェブはソーシャルであるべきだ」。これは今の会社に<br />
入社した2005年くらいからずっと訴えてきたことです。ソーシャルグラフをプラットフォーム化することで実現できることがたくさんあります。まずはポータルサイト全体をソーシャル化することを目標にし、作り上げたのが<a href="http://home.goo.ne.jp/" target="_blank">gooホーム</a>でした。</p>
<p>将来の構想はその時点で既にあって、いずれはポータル外のサイトとも接続して、インターネット全体がソーシャルグラフで繋がることをイメージしていました。そんな時に登場したのが<a href="http://www.facebook.com/" target="_blank">Facebook</a>です。</p>
<p>Facebookがやろうとしていたことは、SNSの中にサービスを取り込むという、僕の考えとは真逆でしたが、結果的にやろうとしていたことは似たようなもので、先に実現されたことにくやしい思いをました。そして<a href="http://www.opensocial.org/" target="_blank">OpenSocial</a>が登場します。</p>
<p>OpenSocialは仕様を民主的に決めて行くオープンなスタイルでした。オープン性のメリットは計り知れません。2つ以上のシステムを繋ぐのに、仕様から作るよりも、既に決まり事があれば話が早いのは火を見るよりも明らかです。技術的工夫もさることながら、コミュニケーションコストは大幅に削減できます。</p>
<p>さらに、オープンな仕様であればそれを使ったプロダクトが生まれやすくもなります。OpenSocial周りでも既に、よういちろうさんの<a href="http://code.google.com/p/opensocial-development-environment/" target="_blank">OpenSocial Development Environment</a>や<a href="http://groups.google.com/group/opensocial-client-libraries" target="_blank">OpenSocial Client Library</a>、OAuth関連ライブラリ、そして僕の作った<a href="http://code.google.com/p/opensocial-signed-request-php-library/" target="_blank">OpenSocial Signed Request Library</a>など、様々なオープンソースプロダクトが生まれ、後発の生産性を上げています。</p>
<p>そんなOpenSocial関連プロダクトの中心となるのが、OpenSocialコンテナのリファレンス実装である<a href="http://incubator.apache.org/shindig/" target="_blank">Shindig</a>です。</p>
<p>僕がOpenSocialの既存仕様を学ぶ上で紐解いたのものこのShindigでした。当時はまだ日本でほとんど手をつけている人がいなかったため、API Expertとして声をかけて頂いたのも、Shindigに関する情報をこのブログで公開していたためです。</p>
<p>その後実際にgooホームでディプロイするに辺り、様々なパッチを書き、Shindigの開発チーム提供してきました。(もちろん、OpenSocialの仕様自体にも口を出してきましたが。)そうこうしているうちに、1年半ほどが経過し・・・</p>
<p><strong>このたび、Shindigの<a href="http://ja.wikipedia.org/wiki/コミッター" target="_blank">コミッター</a>になりました。</strong></p>
<p>PHP版ShindigのメインコミッターであるChris Chabot氏とは、PHP版の最初のコミット前から連絡を取り、昨年のGoogle IOでも直接お会いし、その後もメッセンジャーで話したりしてきましたが、そのChrisにShindigのコミッターに推薦して頂いたのです。</p>
<p>Apache Software Foundationでコミッターになるには、既存コミッターの投票が必要らしいのですが、これまでの貢献を認めてもらい、承認して頂きました。</p>
<p>PHP版Shindigは今や、全世界述べ5億人(!)が26以上のSNSで使っているといいます。にも関わらずフィードバックされていたパッチはそれほど多くなく、自分がやってきたことは貴重だったようです。</p>
<p>本来僕にとってOpenSocialというのは理想のSocialWebを実現するための道具に過ぎないのですが、少なくとも日本では実質的なデファクトであり、mixiやgooホームで使われているShindigというプロダクトは、その根幹を支えるものです。</p>
<p>今後はShindigのコミッターとしても、日本のSocialWebを作り上げ、支えて行ければと思います。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/656/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>(たぶん)世界初！OAuthを使ったOpenSocial向けTwitterクライアント「ガジェツイ！」を公開しました</title>
		<link>http://devlog.agektmr.com/ja/archives/624</link>
		<comments>http://devlog.agektmr.com/ja/archives/624#comments</comments>
		<pubDate>Tue, 18 Aug 2009 07:23:34 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[Gadget]]></category>
		<category><![CDATA[ガジェツイ！]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=624</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F624", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F624%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%28%E3%81%9F%E3%81%B6%E3%82%93%29%E4%B8%96%E7%95%8C%E5%88%9D%EF%BC%81OAuth%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9FOpenSocial%E5%90%91%E3%81%91Twitter%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%80%8C%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%84%E3%82%A4%EF%BC%81%E3%80%8D%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F624", "style": "big", "title": "(たぶん)世界初！OAuthを使ったOpenSocial向けTwitterクライアント「ガジェツイ！」を公開しました" });</script></div>
<p><a href="http://home.goo.ne.jp/gadget/qYpTF5ucNCt2/detail" target="_blank"><img class="size-full wp-image-643" title="GadgeTweetr_Logo" src="http://devlog.agektmr.com/wp-content/uploads/2009/08/GadgeTweetr_Logo.png" alt="GadgeTweetr_Logo" width="616" height="119" /></a></p>
<p><a href="http://home.goo.ne.jp/" target="_blank">gooホーム</a>の<a href="http://developer.home.goo.ne.jp/document/OAuthリクエスト" target="_blank">OAuth機能</a>公開に合わせ、<a href="http://twitter.com/" target="_blank">Twitter</a>のOAuthを使ったガジェット「<a href="http://home.goo.ne.jp/gadget/qYpTF5ucNCt2/detail" target="_blank">ガジェツイ！</a>」(英語名GadgeTweetr)をリリースしました。ガジェットながらに、そんじょそこらのTwitterクライアントよりもシンプルかつ高機能で使いやすいものに仕上がったと思いますのでご紹介します。</p>
<p>※ガジェツイ！のロゴフォントには「<a href="http://d.hatena.ne.jp/y05k/20070519/p1" target="_blank">ついってる</a>」を利用させて頂きました。</p>
<h2>主な機能</h2>
<ul>
<li>OAuthログイン機能</li>
<li>タブ機能</li>
<li>返信元表示機能</li>
<li>検索機能</li>
<li>マルチアカウントに対応</li>
</ul>
<h2>OAuthログイン機能</h2>
<p><a href="http://oauth.net/core/1.0" target="_blank">OAuth</a>に対応していますので、IDとパスワードを直接gooホームに入力する必要はありません。「ログイン」ボタンクリックで、twitter.comドメインの画面が開くので、ユーザーは安心してログインすることができます。</p>
<p><img style="border: 0px initial initial;" title="login_using_oauth" src="http://devlog.agektmr.com/wp-content/uploads/2009/08/decd90d6f3baa9553fd625ecb11d3b8b-300x203.png" alt="login_using_oauth" width="300" height="203" /></p>
<h2>タブ機能</h2>
<p>タブで様々な種類のステータスを並べて表示するタイプのTwitterクライアントです。Timeline、Mentions、Direct Message、Favoritesなど、一通りの表示に対応しています。</p>
<p><img class="alignnone" style="border: 0px initial initial;" title="tabs" src="http://devlog.agektmr.com/wp-content/uploads/2009/08/tabs.png" alt="tabs" width="288" height="143" /></p>
<h2>返信元表示機能</h2>
<p>ステータスが返信の場合は「返信元」をクリックすることで会話を辿って行くことができます。</p>
<p><img class="size-medium wp-image-633 alignnone" title="replies" src="http://devlog.agektmr.com/wp-content/uploads/2009/08/replies-300x157.png" alt="replies" width="300" height="157" /></p>
<h2>検索機能</h2>
<p>フリーワード検索にも対応しています。</p>
<p><img class="size-medium wp-image-634 alignnone" title="search" src="http://devlog.agektmr.com/wp-content/uploads/2009/08/search-300x203.png" alt="search" width="300" height="203" /></p>
<h2>マルチアカウントに対応</h2>
<p>ガジェットはいくつでも追加でき、それぞれに違うアカウントを指定することができます。</p>
<p><img class="size-thumbnail wp-image-631 alignnone" title="multi-account" src="http://devlog.agektmr.com/wp-content/uploads/2009/08/multi-account-150x150.png" alt="multi-account" width="150" height="150" /></p>
<h2>その他の機能</h2>
<h3>3つのビュー</h3>
<p>home、profile、canvasそれぞれのビューに対応しています。homeではTimelineとMentionsが、profileでは当該ユーザーのステータスが、canvasではTimeline、Mentions、Direct Message、Favoritesがそれぞれデフォルトで開きます。</p>
<h3>自動リンク機能</h3>
<p>外部URLはもちろん、@によるID指定、そして#によるハッシュタグの指定を検知してリンク化します。URLの場合が別ウィンドウを開きますが、@と#の場合は新しいタブを作ってステータス一覧を表示します。</p>
<h3>ReTweet機能</h3>
<p>気に入ったつぶやきはこのアイコンをクリックすることで、いわゆる「ReTweet」することができます。もちろん、コメントを追記することができます。</p>
<h3>プロフィール表示機能</h3>
<p>アイコンクリックでフォロワー数や投稿数などのプロフィール情報を表示することができます。</p>
<h3>フォロー、アンフォロー機能</h3>
<p>プロフィール表示からそのままフォローしたり、既にフォローしている場合はアンフォローすることができます。</p>
<h2>まとめ</h2>
<p>せっかくOpenSocial上に作ったTwitterクライアントということで、ならではのソーシャル機能を準備していたのですが、残念ながら今回の発表には間に合いませんでした(実装でき次第公開します)。</p>
<p>とはいえ、gooホームのOAuthを体験してもらうためだけに作り始めたにも関わらず、シンプルかつ高機能なものに仕上がりました。ぜひガジェツイ！をお試しください。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/624/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenSocial Signed Requestライブラリ(PHP)をベータ公開</title>
		<link>http://devlog.agektmr.com/ja/archives/597</link>
		<comments>http://devlog.agektmr.com/ja/archives/597#comments</comments>
		<pubDate>Thu, 13 Aug 2009 16:31:58 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[Signed Request]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=597</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F597", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F597%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OpenSocial%20Signed%20Request%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%28PHP%29%E3%82%92%E3%83%99%E3%83%BC%E3%82%BF%E5%85%AC%E9%96%8B%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F597", "style": "big", "title": "OpenSocial Signed Requestライブラリ(PHP)をベータ公開" });</script></div>
<p>OpenSocialのSigned Requestは、ガジェットからの外部通信リクエストに署名を付けることで、パラメータの内容が改ざんされていないかを検証可能にする仕組みです。一般に2-legged OAuthやSigned Request、OAuth Consumer Requestという名前はすべて同じ、これを表しています。</p>
<p><a href="http://developer.mixi.co.jp/appli/pc/lets_enjoy_making_mixiapp/require_servers" target="_blank">実装自体は全く難しくない</a>ものなのですが、お手軽なライブラリがあまり出回っていないようなので、作ってみました。<a href="http://code.google.com/p/opensocial-signed-request-php-library/" target="_blank">まずはベータとして公開します</a>。</p>
<h2>特徴</h2>
<p><a href="http://code.google.com/p/oauth/" target="_blank">Google CodeにあるOAuthのライブラリ</a>を利用しています。公開鍵はorkut、Google、Friendster、hi5、hyves、Netlog、そしてgooホームとmixiのものを同梱しています。</p>
<h2>使い方</h2>
<p>Google Codeからチェックアウトしてください。</p>
<pre>svn checkout http://opensocial-signed-request-php-library.googlecode.com/svn/trunk/ opensocial-signed-request-php-library-read-only</pre>
<p>中身はサンプルガジェット(SignedRequest.xml)とサンプルのサーバーサイド実装(example.php)、そしてライブラリです。</p>
<p>サンプルの<a href="http://code.google.com/p/opensocial-signed-request-php-library/source/browse/trunk/example.php" target="_blank">サーバーサイド実装</a>を見て頂くのが一番早いですが、使い方はシンプル。ガジェットのURLを引数にしてSignedRequestValidatorをnewし、validate_requestメソッドを呼ぶだけ。署名の検証に失敗した場合は、勝手に401を返します。署名の検証に成功した場合のコードは、その後に続けて書けばOKです。</p>
<h2>参考</h2>
<p>僕の知る限り、他の言語でSigned Requestを検証するコードやライブラリを公開されている方も何人かいらっしゃいます。</p>
<ul>
<li>Google AppEngine Python版 Django上で動作する<a href="http://code.google.com/p/gaeoauth/" target="_blank">gaeoauth</a></li>
<li>Google AppEngine Python版で動作する<a href="http://yamashita.dyndns.org/blog/verifying-opensocial-signed-request-with-google-app-engine/" target="_blank">コード</a></li>
<li>Apacheモジュールレベルで動作する<a href="http://code.google.com/p/mod-auth-opensocial/" target="_blank">mod_auth_opensocial</a></li>
</ul>
<h2>まとめ</h2>
<p>ベータ公開ではありますが、動作上の問題はないと思います。ただ、そのままのコードではGoogleからのリクエストもmixiからのリクエストもガジェットURLが合えば通してしまうため、任意に指定できるようにした方がいいかなど、フィードバックをもらって判断したいところと感じています。</p>
<p>※ちなみに、oauth_body_hashには未対応です。</p>
<p>というわけで、ぜひお試しください。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/597/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Developer Day 2009の動画が公開されました</title>
		<link>http://devlog.agektmr.com/ja/archives/568</link>
		<comments>http://devlog.agektmr.com/ja/archives/568#comments</comments>
		<pubDate>Sat, 18 Jul 2009 15:34:20 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[Google Developer Day]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=568</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F568", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F568%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Google%20Developer%20Day%202009%E3%81%AE%E5%8B%95%E7%94%BB%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F568", "style": "big", "title": "Google Developer Day 2009の動画が公開されました" });</script></div>
<p>先日行われた<a href="http://www.youtube.com/view_play_list?p=D9BEC0DBDB742F54" target="_blank">Google Developer Day 2009の動画</a>が公開されてます。基調講演に一瞬と、パネルディスカッションに登壇した動画もありますので、よろしければご覧下さい。</p>
<h2>基調講演 vol.4 OpenSocial</h2>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/aRlBkj5YZ-s&amp;hl=ja&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/aRlBkj5YZ-s&amp;hl=ja&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>OpenSocial パネルディスカッション</h2>
<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="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/0-RkHqhMsjo&amp;hl=ja&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/0-RkHqhMsjo&amp;hl=ja&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/568/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>インタビュー掲載</title>
		<link>http://devlog.agektmr.com/ja/archives/541</link>
		<comments>http://devlog.agektmr.com/ja/archives/541#comments</comments>
		<pubDate>Fri, 19 Jun 2009 23:16:49 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[掲載]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=541</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F541", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F541%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%93%E3%83%A5%E3%83%BC%E6%8E%B2%E8%BC%89%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F541", "style": "big", "title": "インタビュー掲載" });</script></div>
<p>先日Googleの及川さん、石原さんと一緒にインタビューを受けました。</p>
<p><a href="http://www.atmarkit.co.jp/fwcr/rensai2/google_int_05/01.html" target="_blank">OpenSocialアプリ、開発者にとっての魅力（1/2）－＠IT</a></p>
<p><a href="http://home.goo.ne.jp/" target="_blank">gooホーム</a>の方向性や<a href="http://developer.home.goo.ne.jp/" target="_blank">ドキュメント</a>、<a href="http://www.opensocial.org/" target="_blank">OpenSocialコミュニティ</a>や<a href="http://incubator.apache.org/shindig/" target="_blank">Shindig</a>へのコントリビュートについてなどお話しさせて頂きました :)</p>
<p>ぜひご一読ください。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/541/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mixiアプリのガジェットXMLを覗き見るブックマークレット</title>
		<link>http://devlog.agektmr.com/ja/archives/537</link>
		<comments>http://devlog.agektmr.com/ja/archives/537#comments</comments>
		<pubDate>Wed, 17 Jun 2009 05:05:34 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[mixiアプリ]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=537</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F537", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F537%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mixi%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88XML%E3%82%92%E8%A6%97%E3%81%8D%E8%A6%8B%E3%82%8B%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F537", "style": "big", "title": "mixiアプリのガジェットXMLを覗き見るブックマークレット" });</script></div>
<p>OpenSocialといえばmixiアプリ、いやむしろmixiアプリってそういえばOpenSocial？という感じの空気をひしひしと感じてますが、皆さんいかがお過ごしでしょうか。</p>
<p>今日はそんなmixiアプリの中身を覗き見るブックマークレットをご紹介します。</p>
<p><a href="javascript:var%20url%20=%20document.getElementsByTagName('iframe')%5B1%5D.src;url%20=%20decodeURIComponent(url.replace(/%5E.*?url=(.*?)&amp;.*$/i,%20'$1'));window.open(url);undefined;" target="_blank">Peep mixi Appli XML</a></p>
<p>これを読んでるであろう人に詳しい説明は不要なので、簡単に書きます。</p>
<p>上記リンクをブラウザのブックマークに保存してください。mixiアプリの画面を開いてそのブックマークをクリックすると、ガジェットXMLのソースページが開きます。SafariとFirefoxで動作確認済みです。</p>
<p>これで、ガジェットがどんな風にできているのか、気軽に覗き見ることができますね。</p>
<p>※そういえば<a href="http://home.goo.ne.jp/" target="_blank">gooホーム</a>もOpenSocialです。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/537/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ガジェットのレンダリング速度を向上するPreload</title>
		<link>http://devlog.agektmr.com/ja/archives/526</link>
		<comments>http://devlog.agektmr.com/ja/archives/526#comments</comments>
		<pubDate>Tue, 16 Jun 2009 16:06:56 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=526</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F526", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F526%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%81%AE%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E9%80%9F%E5%BA%A6%E3%82%92%E5%90%91%E4%B8%8A%E3%81%99%E3%82%8BPreload%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F526", "style": "big", "title": "ガジェットのレンダリング速度を向上するPreload" });</script></div>
<p>今回はOpenSocialでネット上にあまり情報のないPreloadについて、解説してみます。</p>
<h2>ガジェットレンダリングの流れ</h2>
<p>単純にRSSを表示するガジェットを例に説明します。あるコンテナSNS上でこのガジェットを表示する場合、下記のような手順を踏みます。</p>
<ol>
<li>コンテナSNSのレンダリング</li>
<li>ガジェットサーバーがガジェットをレンダリング</li>
<li>ブラウザ上でガジェットのJavaScriptが初期化</li>
<li>外部サイトのRSSを取得するためのAjaxリクエストをガジェットサーバーに送信</li>
<li>ガジェットサーバーが外部サーバーにリクエストを送信(キャッシュがあればスキップ)</li>
<li>ガジェットサーバーはレスポンスをブラウザに戻す</li>
<li>ブラウザ上でガジェットのJavaScriptがレスポンス内容を元に記事一覧をレンダリング</li>
</ol>
<p><img class="alignnone" title="rendering without preload" src="http://www.websequencediagrams.com/cgi-bin/cdraw?lz=cGFydGljaXBhbnQgIlJlbW90ZSBTZXJ2ZXIiCgAPDUdhZGdldAAHFUJyb3dzZXIKCgoAGA0tPgASBzogcmVuZGVyaW5nIGcAQgUKbm90ZSBvdmVyADUIOiBKUyBpbml0KCkKAEkHLT4AZw06IHJlcXVlc3QgZXh0ZXJuYWwgY29udGVudAphY3RpdmF0ZSAAgRgNAH4QAIFRDQBECgA0EQCBeQ0KAIIHDS0AgQETc3BvbnNlAIEDCWRlADIXAIICGgA7BwCBRhEAQAsAgUsOAIIrEwCCWQk&amp;s=napkin" alt="" width="529" height="407" /></p>
<p>ざっとこんな感じになります。</p>
<p>OpenSocialコンテナの動きを理解していない人には若干分かりづらいかもしれません。<a href="http://devlog.agektmr.com/archives/363" target="_blank">この辺りの記事</a>を参考にしてください。</p>
<p>さて、この一連の動きを効率化することで、全体の体感レンダリング速度を速くする方法があります。それが今回ご紹介するPreloadです。</p>
<h2>ガジェットのレンダリングを高速化するPreload</h2>
<p>Preloadは文字通り、レンダリングに先立ってロードしておいてくれる機能です。使い方は簡単で、/Module/ModulePrefs/Preload@hrefに呼び出したいURLを記述します。これで、先ほどのレンダリングの挙動が下記のように変わります。</p>
<ol>
<li>コンテナSNSのレンダリング</li>
<li>ガジェットサーバーがPreloadで指定された外部サーバーにリクエストを送信(キャッシュがあればスキップ)</li>
<li>ガジェットサーバーがガジェットをレンダリング</li>
<li>ブラウザ上でガジェットがJavaScriptを初期化</li>
<li>外部サイトのRSSを取得するためのAjaxリクエストをブラウザ上で処理</li>
<li>ブラウザ上でガジェットのJavaScriptがレスポンス内容を元に記事一覧をレンダリング</li>
</ol>
<p><img class="alignnone" title="rendering with preload" src="http://www.websequencediagrams.com/cgi-bin/cdraw?lz=cGFydGljaXBhbnQgIlJlbW90ZSBTZXJ2ZXIiCgAPDUdhZGdldAAHFUJyb3dzZXIKCgAXDS0-AEINOiByZXF1ZXN0IGNvbnRlbnQKYWN0aXZhdGUgAGoNCgB4DS0tPgBsDTogcmVzcG9uc2UAPglkZQAyFwCAfw8AgR8HOiByZW5kZXJpbmcgZwCBTwUKbm90ZSBvdmVyAIFCCDogSlMgaW5pdCgpCgCBVgcANQtwcmVsb2FkZWQAJRQAVAkK&amp;s=napkin" alt="" width="474" height="400" /></p>
<p>図にしてみると一目瞭然ですが、通信部分のオーバーヘッドを削減できています。こりゃ便利。</p>
<p>仕組みは単純で、ガジェットがプリフェッチした外部コンテンツを埋め込んだソースコードをブラウザに渡し、makeRequest時にプリフェッチした内容が存在すれば実際のAjaxリクエストを行わずに応答を返してしまう、というものです。</p>
<h2>Preload利用時の注意点</h2>
<p>Preloadはとても便利な反面、扱いにくい性質のものでもあります。以下を理解して、ポイントを絞って使う必要があります。</p>
<h3>キャッシュの有効期限をコントロールできない</h3>
<p>結構致命的なのがこれです。キャッシュの有効期限をコントロールできないと、デフォルト(24時間が多い)のキャッシュ期限が適用されます。これを回避できるケースとしては、ユーザーが任意の動作でmakeRequestを行うため、その時にキャッシュの有効期限をクリアできる場合が挙げられます。逆に言うと、RSSを表示するだけでユーザーは任意に更新できない、でも更新頻度は1時間程度、というようなガジェットには向いていません。</p>
<h3>ContentTypeを指定できない</h3>
<p>通常makeRequestを行う場合、ContentTypeをDOM, FEED, JSON, TEXTから選択することが出来ます。特にFEEDに関しては、RSS/RDF/Atomを丸めてJsonで返してくれるため、慣れた人には便利な形式です,</p>
<p>しかしこの挙動は、明示的にContentTypeとしてFEEDを指定し、ガジェットサーバーが外部コンテンツを取得した際に特別な処理を行うことで実現されているため、ContentTypeを指定できないPreloadでは、これを行うことはできません。RSS等をPreloadしたい場合は、DOMを選択してパースするしかありません。</p>
<h3>UserPrefsの内容を反映することが出来る</h3>
<p>/Module/ModulePrefs/Preload@hrefの内容に__UP_****__といった形でUserPrefsの内容を含めることができます。これは残念ながらmixiアプリでは使えない技ですね。</p>
<pre class="brush: jscript;">&lt;Preload href=&quot;http://example.com/example.php?id=__UP_userpref__&quot; /&gt;</pre>
<h3>Signed Requestが使える</h3>
<p>/Module/ModulePrefs/Preload@authzに&#8221;signed&#8221;を指定することで、署名リクエストが行えます。これの利点は、ガジェット側でビューアーのIDを指定しなくても、サーバーが署名と一緒に送ってくれるため、上記のUserPrefsのケースのように、URLを工夫する必要がない点です。</p>
<h3>コードを変える必要はない</h3>
<p>PreloadはガジェットXMLにメタデータを追加するだけですので、基本的にJavaScriptのコードをいじる必要はありません。もちろん、キャッシュを気にしたりするといじった方がよい場合もありますけどね。</p>
<h3>Preloadはいくつでも指定できる</h3>
<p>実はPreloadはいくつでも指定できます。これまでに挙げた条件をクリアしているのであれば、思い切って使ってみましょう。</p>
<h2>まとめ</h2>
<p>今回は存在が地味なのであまり注目されていないけど、うまく使えば非常に便利なPreload機能を紹介しました。うまいこと使いこなして、一流OpenSocialerを目指しましょう。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/526/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenSocialのパーミッションモデル</title>
		<link>http://devlog.agektmr.com/ja/archives/512</link>
		<comments>http://devlog.agektmr.com/ja/archives/512#comments</comments>
		<pubDate>Wed, 29 Apr 2009 01:37:08 +0000</pubDate>
		<dc:creator>Eiji</dc:creator>
				<category><![CDATA[FriendConnect]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[パーミッションモデル]]></category>

		<guid isPermaLink="false">http://devlog.agektmr.com/ja/?p=512&amp;language=ja</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F512", "style": "big", "title": [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_light-green" style="float: left;margin-right: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fdevlog.agektmr.com%252Fja%252Farchives%252F512%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22OpenSocial%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%A2%E3%83%87%E3%83%AB%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Fdevlog.agektmr.com%2Fja%2Farchives%2F512", "style": "big", "title": "OpenSocialのパーミッションモデル" });</script></div>
<p>最近「<a target="_blank" href="http://groups.google.com/group/opensocial-japan/browse_thread/thread/ffa5f8182c36252f#">OpenSocialでOwnner毎 or Owner*アプリ毎の永続化方法 オプション</a>」辺りでOpenSocialのパーミッションに関する疑問がいくつか挙っていたので、どういう場合にどのデータにアクセスできるのか、ついでに、FriendConnectにおけるパーミッションモデルについてもまとめてみます。</p>
<p>まずは最低限の知識としてビューアー(VIEWER)/オーナー(OWNER)という考え方と、基本情報/個人情報を押さえておきましょう。</p>
<h2>ビューアーとオーナー</h2>
<p>ガジェットは貼られる場所によって呼び方が異なり、これをビュー(view)と呼びます。OpenSocialでは標準的にhomeビュー、profileビュー、canvasビューが用意されています。<a href="http://developer.home.goo.ne.jp/document/サイト構成">ここ</a>を参考にしてください。</p>
<p>ご覧いただくと分かると思いますが、homeビューのガジェットは自分が見るマイページに貼られる前提で，profileビューは他人が見るプロフィールページに貼られる前提になっています。では，「自分が見る」「他人が見る」は何を意味するのでしょう？</p>
<p>OpenSocialガジェットには所有者/オーナー(OWNER)という考え方があります。オーナーとは，ガジェットをページに貼付けたページの持ち主を指しています。反対に，ガジェットを見る人を閲覧者/ビューアー(VIEWER)と呼びます。</p>
<p>つまり，homeビューで「自分が見る」が意味するのは，オーナーでありビューアー。逆に，profileビューで「他人が見る」が意味するのは，ページを見ているビューアーと，ページの持ち主のオーナーです。もちろん，プロフィールページをオーナー自身が見ているケースでは，オーナーとビューアーは同一人物になります。canvasビューでも同様。</p>
<h2>基本情報と個人情報</h2>
<p>OpenSocialではプロフィール情報は大きく2つに分けられます。<br />
goo Social Platformではこれを基本情報(id, profileUrl, thumbnailUrl, nickname)と個人情報(その他のプロフィール)と分けて呼んでいます。詳細は<a href="http://developer.home.goo.ne.jp/document/友達情報を取得する#goo_Social_Platform.E3.81.8C.E6.89.B1.E3.81.86.E5.80.8B.E4.BA.BA.E6.83.85.E5.A0.B1">こちら</a>をご覧いただいた方が早いと思います。</p>
<p>基本情報は、必要最低限の情報で、個人情報はさらに詳細で重要性の高いものと思ってください。</p>
<h2>基本ルール</h2>
<p>これらを踏まえて、各種情報をやり取りする際に必要となるのが下記の基本ルールになります。</p>
<ul>
<li>個人情報を取得する場合、対象となるユーザー(オブジェクト)が同じガジェットをインストールしていること</li>
<li>オブジェクトが友達の場合、ガジェットをインストールしていなくても基本情報のみ取得可能</li>
<li>更新・削除はビューアーが自分のデータを操作する場合のみ可能</li>
</ul>
<p>&nbsp;</p>
<p>ミソは、</p>
<ul>
<li>友達でもガジェットをインストールしていない人の個人情報は取得できない</li>
<li>友達じゃなくてもガジェットをインストールしていれば個人情報が取得できる</li>
</ul>
<p>ところ。</p>
<p>&nbsp;</p>
<p>「なぜそんなに面倒なの？」「なんでガジェットインストールしてないと個人情報取れないの？」と思われる方も多いかと思いますが、理由はずばり、「プライバシーの保護」です。</p>
<ul>
<li>個人情報はコンテナがユーザーから取得したものである</li>
<li>個人情報保護法では、収集した個人情報を事前に通告した目的外に利用してはならない</li>
<li>個人情報はコンテナが取得したものであり、第三者に譲渡や開示する(ディベロッパーがガジェット上で利用する)場合はユーザーがそれを理解している必要である</li>
<li>ユーザーは誰が自分の個人情報を取得したかを把握できる必要がある</li>
<li>ディベロッパーは受け取った個人情報を外部に流出させることも、売り渡すことも、理論的には可能である</li>
<li>ネット上にパブリックになっている情報でも、受動的に(スクレイピング等)渡す場合と、能動的に(API経由)渡す場合では、法的意味が異なる(そういう意味では、mixiのようなクローズなSNSでも、gooホームのようなオープンなSNSでも扱いは変わらない)</li>
<li>ディベロッパーが故意または事故で個人情報を漏らす等した場合、責任はもちろんディベロッパー側にあるが、情報を提供したコンテナは、ディベロッパーとの連絡を確実に取れる手段を用意しておく必要がある</li>
</ul>
<p>&nbsp;</p>
<p>若干複雑ですが、こんな理由で、本人が意図して利用していないガジェットに対しては、基本的に個人情報を渡さない方向に倒されている、という訳です。これはgooホームだけの話ではなく、まだ明示されてはいませんが、mixiも含め、今後登場するであろうOpenSocialコンテナすべてで似たような実装になると思います。</p>
<p>なお、基本ルールに対する特別ルールについては複雑になるのでここでは説明しません。興味のある方は<a href="http://developer.home.goo.ne.jp/document/パーミッションモデル#.E7.89.B9.E5.88.A5.E3.83.AB.E3.83.BC.E3.83.AB">こちら</a>をご覧下さい。</p>
<h2>FriendConnectのパーミッションモデル</h2>
<p>さて、ここまで一般的なOpenSocialについて解説してきた訳ですが、FriendConnectにおけるガジェットのパーミッションについてここで考えてみましょう。</p>
<p>通常のSNS上のOpenSocialでは、ガジェットをインストールしているかどうかで個人情報を提供するか否かを決定していましたが、FriendConnectではちょっと事情が違います。それは、ガジェットのオーナーが人間ではなく、サイトである、という考え方に基づいている、という点です。</p>
<p><a href="http://devlog.agektmr.com/ja/archives/262">こちらの記事</a>をご覧いただければ分かると思いますが、</p>
<blockquote><p> Ownerはサイト。そういえば、FriendConnectガジェットを入れた時点では、自動的に自分がメンバーになったりはしていませんでした。Ownerは貼付けたサイトという仮想人格が担うようです。 </p></blockquote>
<p>サイトという仮想人格、というところがミソです。つまり、FriendConnectでは、<strong>ユーザーがオーナーになることはあり得ない</strong>のです。そのため、先に解説した一般的OpenSocialのパーミッションモデルをそのまま適用することはできません。</p>
<p>&nbsp;</p>
<p>では、FriendConnectではどういう場合に個人情報を取得できるのでしょうか？</p>
<p>現実的には、私の把握している限り、まだFriendConnect上で基本情報以上の情報(個人情報)を取得することはできないので、必ずしも正しいとは言えないのですが、「そのサイトに参加しているか否か」がパーミッションを得るための条件のようです。</p>
<p>言い換えると FriendConnectの基本ルール：</p>
<ul>
<li>個人情報を取得する場合、対象となるユーザー(オブジェクト)がガジェットを動かそうとしているサイトに登録していること</li>
<li>オブジェクトが同じサイトに登録していれば、個人情報も含め取得可能(実際は取得できないので想像)</li>
<li>更新・削除はビューアーが自分のデータを操作する場合のみ可能</li>
</ul>
<p>となります。一般的OpenSocialの基本ルールと並べて比べてみると、違いが分かると思います。</p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>今回は、先日のHackathonでも多数の質問が出たパーミッションモデルの話を解説してみました。開発者にとっては面倒なだけですが、コンテナやユーザーにとっては、プライバシーを守るためにとても重要なことです。</p>
<p>OpenSocialガジェット開発もある程度のレベルに達してきたら、この辺りの理解をしっかりやっておくことが重要だと思います。</p>

]]></content:encoded>
			<wfw:commentRss>http://devlog.agektmr.com/ja/archives/512/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
