<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1509463847369212828</id><updated>2012-01-21T19:29:25.976+09:00</updated><category term='Two-Legged OAuth'/><category term='Bitbucket'/><category term='GeoRSS'/><category term='Mextractr'/><category term='Mashup Awards 6'/><category term='CARWINGS'/><category term='フォートラベル API'/><category term='OpenSocial OAuth Filter'/><category term='まんてん'/><category term='AuthSub'/><category term='最新情報'/><category term='本'/><category term='Shindig'/><category term='Flash'/><category term='Trac'/><category term='OpenSocial Pages'/><category term='Rhino'/><category term='Ael'/><category term='lifehacking'/><category term='Safari'/><category term='opensocial-jquery'/><category term='クロスブラウザ'/><category term='iPod touch'/><category term='Flickr API'/><category term='Single Sign-On'/><category term='JSDeferred'/><category term='jQuery tablesorter'/><category term='Partuza'/><category term='OpenSocial Host'/><category term='OpenSocial REST and RPC Protocol'/><category term='Google Apps MarketPlace'/><category term='サンプルのリリース状況'/><category term='jQuery blockUI'/><category term='新機能のリリース状況'/><category term='jQuery'/><category term='Google Maps API'/><category term='CSS'/><category term='Google Code'/><category term='AIR'/><category term='Mashup Awards'/><category term='Opera'/><category term='Aptana Cloud'/><category term='Provisioning API'/><category term='Perl'/><category term='Amazon Simple Storage Service'/><category term='MA6'/><category term='MySpace'/><category term='PlaceEngine API'/><category term='jQTouch'/><category term='microformats'/><category term='Twitter API'/><category term='Google AJAX Feed API'/><category term='Nexus'/><category term='Hi5'/><category term='OpenSocial Hackathon'/><category term='Picasa Web Albums Data API'/><category term='iPhone'/><category term='Firefox'/><category term='opensocial-jaxer-client'/><category term='Jaxer'/><category term='HTML'/><category term='OpenSocial Templates'/><category term='Google I/0'/><category term='gle Apps Script'/><category term='JavaScript'/><category term='データの更新状況'/><category term='OpenSocial API'/><category term='BLOGRANGER API'/><category term='WebCAM'/><category term='Atom'/><category term='Gadgets API'/><category term='Java Data Objects'/><category term='OAuth'/><category term='AppEngine'/><category term='OpenSocial'/><category term='ウェブユーザビリティ'/><category term='Open Data Protocol'/><category term='iGoogle'/><category term='Google Friend Connect'/><category term='Geolocation API'/><category term='jQuery UI'/><category term='仕様変更のお知らせ'/><category term='ブラウザの対応状況'/><category term='Google Data Protocol'/><category term='Amazon CloudFront'/><category term='Postal Search Ajax API'/><category term='Google Gadgets'/><category term='Golazo MA4'/><category term='Chrome'/><category term='DWR'/><category term='MA5'/><category term='jQuery XML to JSON'/><category term='LocoSticker'/><category term='Google Gears'/><category term='Android'/><category term='利用規約の改訂状況'/><category term='Facebook'/><category term='Dreamweaver Extension'/><category term='3arrows'/><category term='HTML5'/><category term='ドキュメントのリリース状況'/><category term='goo Social Platform'/><category term='jQuery Chili'/><category term='JSONIC'/><category term='OpenSocial jQuery'/><category term='Google Wave'/><category term='mixi Platform'/><category term='OpenSocial OAuth'/><category term='jQuery jTemplates'/><category term='Prototype'/><category term='Java'/><category term='WSH'/><category term='Google App Engine'/><category term='OSDE'/><category term='Google Analytics API'/><category term='Firebug'/><category term='Jenkins'/><category term='Google Developer Day'/><category term='Aptana Jaxer'/><category term='Apache Shindig'/><category term='IE'/><category term='DotCloud'/><category term='Orkut'/><category term='iPad'/><category term='Windows Script Host'/><category term='YouTube Data API'/><category term='ActiveJS'/><category term='Social Gadgets'/><category term='Google Apps'/><title type='text'>Nakajiman Software Blog</title><subtitle type='html'>JavaScript をこよなく愛する なかじまんソフトウェア株式会社 のスタッフによるブログです。&lt;br&gt;
OpenSocial Container や Social Gadgets の開発を技術面から支援します。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default?start-index=101&amp;max-results=100'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>378</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-5836138897227872100</id><published>2011-09-23T15:27:00.001+09:00</published><updated>2011-09-26T00:52:29.477+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='Nexus'/><category scheme='http://www.blogger.com/atom/ns#' term='DotCloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitbucket'/><title type='text'>DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ（３／３）</title><content type='html'>こんにちは！aquilegiaです。&lt;br /&gt;&lt;br /&gt;その２の続きになります。今回で最後になりますのでもう少しお付き合いください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;４、Bitbucketの準備&lt;/b&gt;&lt;br /&gt;Bitbucketのアカウントを作成して動作確認用プロジェクトのリポジトリを作成します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;４－１、Bitbucketのアカウントを作成してログイン&lt;/b&gt;&lt;br /&gt;&lt;a href="https://bitbucket.org/"&gt;Bitbucket公式サイト&lt;/a&gt;のSign up freeボタンからサインアップしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Lp5Smmu-Asw/TntZUThlRZI/AAAAAAAAAJI/SCvSL9d94RY/s1600/4-1%2Bbitbuket%25E3%2582%25B5%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597.png" imageanchor="1"&gt;&lt;img border="0" height="160" src="http://4.bp.blogspot.com/-Lp5Smmu-Asw/TntZUThlRZI/AAAAAAAAAJI/SCvSL9d94RY/s320/4-1%2Bbitbuket%25E3%2582%25B5%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;例ではアカウント名をaquilegiaで登録しています。今後、BItbucket接続URLなどにaquilegiaと出てきた場合は適宜読み替えてください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;４－２、リポジトリを作成&lt;/b&gt;&lt;br /&gt;サインアップが完了したらページ上部にあるRepositoriesからcreate repositoryを選択した後、以下の内容で入力してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;Name: helloworld&lt;br /&gt;Private: チェック有&lt;br /&gt;Language: Java&lt;br /&gt;Description: 動作確認用プロジェクト&lt;br /&gt;Website: （なし）&lt;br /&gt;Project management: （Wiki、Issue trackingはお好みで）&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;入力が終わったらCreate repositoryボタンを押下してください。これでBitbucketの準備は終わりです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;５、動作確認用プロジェクトの作成&lt;/b&gt;&lt;br /&gt;４－２で作成したリポジトリにプッシュするプロジェクトを作成します。動作確認用なので手間をかけずにMavenで作ります。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;５－１、プロジェクトを作成&lt;/b&gt;&lt;br /&gt;下記コマンドを実行すると&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd ~&lt;br /&gt;$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=sample -DartifactId=helloworld -Dversion=0.1-SNAPSHOT&lt;br /&gt;（実行を確認にYと応える）&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;次の構造のQuickStartプロジェクトが作成されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;helloworld&lt;br /&gt;├── pom.xml&lt;br /&gt;└── src&lt;br /&gt;&amp;nbsp; &amp;nbsp; ├── main&lt;br /&gt;&amp;nbsp; &amp;nbsp; │ &amp;nbsp;└── java&lt;br /&gt;&amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp;└── sample&lt;br /&gt;&amp;nbsp; &amp;nbsp; │ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└── App.java&lt;br /&gt;&amp;nbsp; &amp;nbsp; └── test&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; └── java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; └── sample&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; └── AppTest.java&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;このままでも動きますが動作確認が目的なので、このプロジェクトが依存しているJUnitを&lt;br /&gt;Nexusから取得するようにpom.xmlにリポジトリ定義を追加します。&lt;br /&gt;&amp;lt;/dependencies&amp;gt;の後にDotCloudアカウント名を書き換えたrepositoriesを追加してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ vi helloworld/pom.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;com.dotcloud.nexus&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://nexus-（DotCloudアカウント名）.dotcloud.com/content/groups/public&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;５－２、リポジトリへコミット→プッシュ&lt;/b&gt;&lt;br /&gt;作成したプロジェクトをBitbucketへプッシュするためにMercurialをインストールします。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ sudo yum -y install mercurial&lt;br /&gt;$ hg --help&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;次に作成したプロジェクトにローカルリポジトリを作成してコミットしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd ~&lt;br /&gt;$ mkdir bitbucket&lt;br /&gt;$ hg clone https://（Bitbucketアカウント名）@bitbucket.org/（Bitbucketアカウント名）/helloworld bitbucket/helloworld&lt;br /&gt;$ mv helloworld/* ./bitbucket/helloworld/&lt;br /&gt;$ rm -rf helloworld&lt;br /&gt;$ cd bitbucket/helloworld&lt;br /&gt;$ hg status&lt;br /&gt;$ hg add&lt;br /&gt;$ hg commit -u （Bitbucketアカウント名） -m '初回コミット'&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;コミット時にユーザ名を指定しておくとBitbucketにリンク付きで表示されます。Bitbucketに存在しないユーザ名を指定するとデッドリンクになるので取得したアカウント名を指定するのが無難です。&lt;br /&gt;最後にBitbucketへプッシュします。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ hg push https://（Bitbucketアカウント名）@bitbucket.org/（Bitbucketアカウント名）/helloworld&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;プッシュが成功すればBitbucketのSourceタブにソースが表示されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FtxZAU1YDfo/TntaSqXU4eI/AAAAAAAAAJQ/L5KZQRu-FNc/s1600/5-2%2B%25E3%2583%2597%25E3%2583%2583%25E3%2582%25B7%25E3%2583%25A5.png" imageanchor="1"&gt;&lt;img border="0" height="162" src="http://4.bp.blogspot.com/-FtxZAU1YDfo/TntaSqXU4eI/AAAAAAAAAJQ/L5KZQRu-FNc/s320/5-2%2B%25E3%2583%2597%25E3%2583%2583%25E3%2582%25B7%25E3%2583%25A5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;６、動作確認&lt;/b&gt;&lt;br /&gt;&lt;b&gt;６－１、Nexus接続情報を設定&lt;/b&gt;&lt;br /&gt;Nexusリポジトリは匿名ユーザではアクセスできないように設定したので、Mavenでビルド時にNexusリポジトリを参照できるよう接続情報を設定したsettings.xmlを作成してください。&lt;br /&gt;またJenkinsがNexusからDLした依存ファイルを保存するローカルリポジトリをjettyユーザが書き込める場所に変更するためlocalRepositoryを指定してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud run jenkins.www -- mkdir -p .m2/repository \&amp;amp;\&amp;amp; ls -al&lt;br /&gt;$ dotcloud run jenkins.www -- chmod 775 .m2/repository \&amp;amp;\&amp;amp; ls -l .m2/&lt;br /&gt;$ dotcloud run jenkins.www -- vi .m2/settings.xml&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;settings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;localRepository&amp;gt;/home/dotcloud/.m2/repository&amp;lt;/localRepository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;servers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;server&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;com.dotcloud.nexus&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;username&amp;gt;nexus&amp;lt;/username&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;password&amp;gt;（Nexusパスワード）&amp;lt;/password&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/server&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/servers&amp;gt;&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&lt;br /&gt;$ dotcloud run jenkins.www -- cat .m2/settings.xml&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;６－２、動作確認用プロジェクトをビルドするジョブを登録&lt;/b&gt;&lt;br /&gt;ブラウザからJenkinsにログインし、左メニューから新規ジョブ作成を選択してください。&lt;br /&gt;以下の内容を入力しOKボタンを押下する&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;ジョブ名： helloworld&lt;br /&gt;ビルド： フリースタイル・プロジェクトのビルド&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ビルドにMaven2/3プロジェクトを指定しないのはsettings.xmlを指定するためです。&lt;br /&gt;次にジョブの細かな設定をします。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;ソースコード管理システム： Mercurial&lt;br /&gt;Repository URL： https://（Bitbucketアカウント名）:（Bitbucketパスワード）@bitbucket.org/aquilegia/helloworld/&lt;br /&gt;&lt;br /&gt;ビルド手順の追加： Mavenの呼び出し&lt;br /&gt;使用するMaven： maven_2.2.1&lt;br /&gt;ゴール： package&lt;br /&gt;高度な設定&lt;br /&gt;JVMオプション： -Dorg.apache.maven.user-settings=/home/dotcloud/.m2/settings.xml&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;JVMオプションのsettings.xmlファイルの指定は忘れないようにしてください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;６－３、ジョブを実行&lt;/b&gt;&lt;br /&gt;登録したジョブの左メニューにあるビルド実行リンクを押下してジョブを実行してください。&lt;br /&gt;ビルド履歴の日付リンクを押下し、左メニューのコンソール出力リンクから詳細を見ることができます。問題がなければ下のようにBUILD SUCCESSFULと表示されるはずです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-a7Jpee9DUFg/Tnt5Z8wO9YI/AAAAAAAAAJY/rLXtk7GRK9U/s1600/6-2%2B%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%2596%25E5%25AE%259F%25E8%25A1%258C%25E7%25B5%2590%25E6%259E%259C.png" imageanchor="1" style=""&gt;&lt;img border="0" height="228" width="320" src="http://3.bp.blogspot.com/-a7Jpee9DUFg/Tnt5Z8wO9YI/AAAAAAAAAJY/rLXtk7GRK9U/s320/6-2%2B%25E3%2582%25B8%25E3%2583%25A7%25E3%2583%2596%25E5%25AE%259F%25E8%25A1%258C%25E7%25B5%2590%25E6%259E%259C.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;画像はわかりやすくするため何回か実行した後のものになりますが、初回はこれに加えてプラグインや依存のDLログが出力されます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;お疲れ様でした。これでDotCloud上にプライベートビルド環境ができました。Jenkinsのジョブ設定で「SCMをポーリング」を指定すればプッシュした後に変更を検知して自動でビルドすることもできます。また今回は手間を省くために動作確認用プロジェクトの作成にEclipseを使いませんでしたが、EclipseのMercurialEclipseプラグイン（&lt;a href="http://cbes.javaforge.com/update"&gt;updateサイト&lt;/a&gt;）を使うとBitbucketとのやり取りが簡単になります。&lt;br /&gt;&lt;br /&gt;また注意点としてJenkinsとNexusはどちらもその機能上ディスクを多く使いますがDotCloudはまだディスクの使用制限がはっきりしていません。そのため過度な利用は避けたほうがよさそうです。&lt;br /&gt;&lt;br /&gt;開発に使うツールをクラウド上に置くといつでも作業ができて便利です。他のサービスも組み合わせて快適な開発環境を構築してみてください。それではまた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-5836138897227872100?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/5836138897227872100/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=5836138897227872100' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/5836138897227872100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/5836138897227872100'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/09/dotcloudjenkinsnexusbitbucket_8300.html' title='DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ（３／３）'/><author><name>aquilegia</name><uri>http://www.blogger.com/profile/01119873761159018627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Lp5Smmu-Asw/TntZUThlRZI/AAAAAAAAAJI/SCvSL9d94RY/s72-c/4-1%2Bbitbuket%25E3%2582%25B5%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6716132782039043303</id><published>2011-09-23T15:22:00.000+09:00</published><updated>2011-09-23T15:22:08.262+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='Nexus'/><category scheme='http://www.blogger.com/atom/ns#' term='DotCloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitbucket'/><title type='text'>DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ（２／３）</title><content type='html'>こんにちは！aquilegiaです。&lt;br /&gt;&lt;br /&gt;その１の続きです。今回はDotCloudにJenkinsを構築します。&lt;br /&gt;Jenkinsは少し面倒ですがお付き合いください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３、DotCloudにJenkinsを構築&lt;/b&gt;&lt;br /&gt;&lt;b&gt;３－１、DotCloud用カスタムWARを作成&lt;/b&gt;&lt;br /&gt;JenkinsもNexus同様にjettyユーザが書き込めるJENKINS_HOMEディレクトリが必要ですが、DotCloud環境だとJenkinsが提供する外部指定（JNDIや環境変数、システムプロパティなど）が全て利用できません。その為、あまりやりたくありませんがJenkinsのソースを直接変更してJENKINS_HOMEを指定します。&lt;br /&gt;&lt;br /&gt;変更後のJENKINS_HOMEは/home/dotcloud/jenkinsとします。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－１－１、GitHubからJenkinsのソースコードをDL&lt;/b&gt;&lt;br /&gt;ローカルにgitがインストールされていない場合は事前にインストールしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ rpm -qa | grep git&lt;br /&gt;$ sudo yum -y install git&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;次にカスタムWARを作るために編集対象のソースが含まれるcoreプロジェクトをcloneします。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ mkdir -p jenkins/src&lt;br /&gt;$ cd jenkins/src&lt;br /&gt;$ git clone git://github.com/jenkinsci/jenkins.git core&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;最新ソースの状態になっているので安定してるリリースタグをチェックアウト（後でDLするWARファイルとバージョンを合わせておく）&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd core&lt;br /&gt;$ git checkout jenkins-1.430&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;３－１－２、WebAppMain.javaを編集してJENKINS_HOMEを変更&lt;/b&gt;&lt;br /&gt;WebAppMain.javaを開き&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd core/core/src/main/java/hudson/&lt;br /&gt;$ cp -p WebAppMain.java WebAppMain.java.org&lt;br /&gt;$ vi WebAppMain.java&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;getHomeDirメソッドの内容を次の２行にしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File newHome = new File("/home/dotcloud/jenkins");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new FileAndDescription(newHome,"/home/dotcloud/jenkins");&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;３－１－３、ソースをコンパイル&lt;/b&gt;&lt;br /&gt;コンパイルはMavenを利用します。JDKも必要になるので無い場合はインストールしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ wget http://download.oracle.com/otn-pub/java/jdk/6u27-b07/jdk-6u27-linux-x64-rpm.bin&lt;br /&gt;$ mv jdk-6u27-linux-x64-rpm.bin\?e\=1316438935\&amp;amp;h\=38edd1ecfcdb35d6dd0aa91215bb62fb jdk-6u27-linux-x64-rpm.bin&lt;br /&gt;$ chmod u+x jdk-6u27-linux-x64-rpm.bin&lt;br /&gt;$ sudo ./jdk-6u27-linux-x64-rpm.bin&lt;br /&gt;$ java -version&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;次にMavenをインストールします。インストールはrootで作業します。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ su -&lt;br /&gt;#&amp;nbsp;wget http://ftp.kddilabs.jp/infosystems/apache//maven/binaries/apache-maven-2.2.1-bin.tar.gz&lt;br /&gt;#&amp;nbsp;tar xzvf apache-maven-2.2.1-bin.tar.gz&lt;br /&gt;#&amp;nbsp;mv apache-maven-2.2.1-bin /opt/maven2&lt;br /&gt;# rm -f&amp;nbsp;apache-maven-2.2.1-bin.tar.gz&lt;br /&gt;#&amp;nbsp;vi /etc/profile.d/maven2.sh&lt;br /&gt;export M2_HOME=/opt/maven2&lt;br /&gt;export PATH=$PATH:$M2_HOME/bin&lt;br /&gt;# exit&lt;br /&gt;$&amp;nbsp;source&amp;nbsp;/etc/profile&lt;br /&gt;$ mvn -v&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;最後のmvnコマンドでバージョン情報が表示されればインストール成功です。&lt;br /&gt;&lt;br /&gt;coreディレクトリの直下に移動した後、下記コマンドを実行してコンパイルします。（※数分かかります）&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd ~/jenkins/src/core/core&lt;br /&gt;$ mvn compile&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;OpenJDKを使うとcom.sun.toolsが見つからないというエラーでビルドが失敗するかもしれません。その場合はOpenJDKをアンインストール後、OracleのJDKを入れて試してみてください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－１－４、JenkinsのWARファイルをDL&lt;/b&gt;&lt;br /&gt;MavenでWARまで作っても構いませんが、無難にリリースされたWARファイルを利用します。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd ~/jenkins/&lt;br /&gt;$ wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;３－１－５、WAR内のclassesに作成したWebAppMain.classを追加&lt;/b&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ mkdir -p WEB-INF/classes/hudson&lt;br /&gt;$ cp -p src/core/core/target/classes/hudson/WebAppMain.class ./WEB-INF/classes/hudson/&lt;br /&gt;$ cp -p jenkins.war jenkins.war.org&lt;br /&gt;$ zip jenkins.war WEB-INF/classes/hudson/WebAppMain.class&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;３－２、DotCloudにjenkinsアプリケーションを作成&lt;/b&gt;&lt;br /&gt;下記コマンドを実行し、jenkinsアプリケーションを作成してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud create jenkins&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;３－４、DotCloudへデプロイ&lt;/b&gt;&lt;br /&gt;デプロイはNexusと同様にビルドファイルを作成し、ビルドファイルとWARファイルのみのディレクトリを作成した後にpushコマンドを実行します。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ cat &amp;gt; dotcloud.yml &amp;lt;&amp;lt;EOF&lt;br /&gt;www:&lt;br /&gt;&amp;nbsp; type: java&lt;br /&gt;EOF&lt;br /&gt;$ mkdir deploy&lt;br /&gt;$ mv jenkins.war deploy/ROOT.war&lt;br /&gt;$ mv dotcloud.yml deploy/&lt;br /&gt;$ dotcloud push jenkins deploy/&lt;br /&gt;upload deploy/ ssh://dotcloud@uploader.dotcloud.com:443/jenkins&lt;br /&gt;rsync&lt;br /&gt;Pseudo-terminal will not be allocated because stdin is not a terminal.&lt;br /&gt;building file list ... done&lt;br /&gt;./&lt;br /&gt;ROOT.war&lt;br /&gt;dotcloud.yml&lt;br /&gt;&lt;br /&gt;sent 45.19M bytes &amp;nbsp;received 53 bytes &amp;nbsp;772.50K bytes/sec&lt;br /&gt;total size is 45.37M &amp;nbsp;speedup is 1.00&lt;br /&gt;Deployment for "jenkins" triggered. Will be available in a few seconds.&lt;br /&gt;2011-09-19 15:39:50 [api] Deploy jenkins scheduled for revision=latest&lt;br /&gt;2011-09-19 15:39:51 [api] Waiting for the build. (It may take a few minutes)&lt;br /&gt;2011-09-19 15:39:51 [www.0] Deploying...&lt;br /&gt;2011-09-19 15:40:12 [www.0] Service booted&lt;br /&gt;2011-09-19 15:40:12 [api] All the services are ready. Beginning the build.&lt;br /&gt;2011-09-19 15:40:13 [www.0] The build started&lt;br /&gt;2011-09-19 15:40:16 [www.0] Fetched code revision rsync-xxxxxxxxxx.xx&lt;br /&gt;2011-09-19 15:40:18 [www.0] &amp;nbsp;* Stopping Jetty servlet engine (was reachable on http://jenkins-default-www-0:8080/). jetty&lt;br /&gt;2011-09-19 15:40:21 [www.0] &amp;nbsp;* Jetty servlet engine stopped. jetty&lt;br /&gt;2011-09-19 15:40:21 [www.0] &amp;nbsp; &amp;nbsp;...done.&lt;br /&gt;2011-09-19 15:40:21 [www.0] &amp;nbsp;* Starting Jetty servlet engine. jetty&lt;br /&gt;2011-09-19 15:40:21 [www.0] &amp;nbsp;* Jetty servlet engine started, reachable on http://jenkins-default-www-0:8080/. jetty&lt;br /&gt;2011-09-19 15:40:26 [www.0] &amp;nbsp; &amp;nbsp;...done.&lt;br /&gt;2011-09-19 15:40:26 [www.0] The build finished successfully&lt;br /&gt;2011-09-19 15:40:26 [api] Deploy finished&lt;br /&gt;&lt;br /&gt;Deployment finished. Your application is available at the following URLs&lt;br /&gt;www: http://jenkins-aquilegia.dotcloud.com/&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;この状態ではNexusと同じ理由でまだ正常に動きませんので、ディレクトリを作成する手順を進めてください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－５、DotCloudにJENKINS_HOMEを作成&lt;/b&gt;&lt;br /&gt;下記コマンドを実行し、jenkinsディレクトリを作成してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud run jenkins.www -- mkdir jenkins \&amp;amp;\&amp;amp; ls -l&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nexusと同様にグループに書込権限を付与してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud run jenkins.www -- chmod g+w jenkins \&amp;amp;\&amp;amp; ls -l&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;３－６、Jenkinsを再起動&lt;/b&gt;&lt;br /&gt;これでJenkinsを起動するまでの準備が整いました。&lt;br /&gt;別コンソールでログをtailしつつ、Jenkinsを再起動します。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud logs jenkins.www&lt;br /&gt;&lt;/div&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud restart jenkins.www&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ログにスタックとレースが表示されず、最後に以下のログが表示されれば成功です。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;INFO: JNLP slave agent listener started on TCP port 58600&lt;br /&gt;Sep 19, 2011 3:48:56 PM hudson.WebAppMain$2 run&lt;br /&gt;INFO: Jenkins is fully up and running&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;正常に起動すればブラウザでアクセスするとTOPページが表示されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-y5Op6CZRGzo/Tns67wQyFgI/AAAAAAAAAJA/cgu59fTf294/s1600/3-6%2BJenkins%25E8%25B5%25B7%25E5%258B%2595.png" imageanchor="1"&gt;&lt;img border="0" height="244" src="http://3.bp.blogspot.com/-y5Op6CZRGzo/Tns67wQyFgI/AAAAAAAAAJA/cgu59fTf294/s320/3-6%2BJenkins%25E8%25B5%25B7%25E5%258B%2595.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;３－７、Jenkinsの初期設定&lt;/b&gt;&lt;br /&gt;初期状態は外部に公開されている状態なので自分だけが利用できるように設定します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－７－１、ログインユーザを作成&lt;/b&gt;&lt;br /&gt;Jenkinsにユーザを作成します。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示&lt;/li&gt;&lt;li&gt;６番目ぐらいにある「セキュリティを有効化」チェックボックスをON&lt;/li&gt;&lt;li&gt;アクセス制御のユーザ情報から「Jenkinsのユーザデータベース」を選択&lt;/li&gt;&lt;li&gt;保存ボタンを押下&lt;/li&gt;&lt;/ul&gt;保存した後、ページ右上にサインアップリンクが表示されるようになるので&lt;br /&gt;リンクを押下してユーザを作成してください。（例ではjenkinsとします）&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;ユーザ名： jenkins&lt;br /&gt;パスワード： （パスワードを入力）&lt;br /&gt;パスワードの確認： （パスワードを入力）&lt;br /&gt;フルネーム：&amp;nbsp;jenkins&lt;br /&gt;メールアドレス： （メールアドレスを入力）&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;サインアップが完了すると作成したユーザでログインした状態になります。&lt;br /&gt;その後はサインアップできないようにします。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示&lt;/li&gt;&lt;li&gt;アクセス制御のユーザ情報にある「ユーザにサインアップを許可」チェックボックスを外す&lt;/li&gt;&lt;li&gt;保存ボタンを押下&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;これでページ右上からサインアップリンクが消えたはずです。&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－７－２、権限を設定&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Jenkinsを利用できるユーザをログインユーザのみにします。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示&lt;/li&gt;&lt;li&gt;アクセス制御の管理権限を行列による権限設定に変更&lt;/li&gt;&lt;li&gt;匿名ユーザはそのままでauthenticatedという名前のユーザを追加&lt;/li&gt;&lt;li&gt;全権限を与える（チェックを全て入れる）&lt;/li&gt;&lt;li&gt;保存ボタンを押下&lt;/li&gt;&lt;/ul&gt;権限のチェックを終えると次のようになります。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2KVgRnh_YTY/Tns6bft8M6I/AAAAAAAAAI4/q2g8iC55flQ/s1600/3-7%2B%25E6%25A8%25A9%25E9%2599%2590%25E4%25BB%2598%25E4%25B8%258E.png" imageanchor="1"&gt;&lt;img border="0" height="160" src="http://3.bp.blogspot.com/-2KVgRnh_YTY/Tns6bft8M6I/AAAAAAAAAI4/q2g8iC55flQ/s320/3-7%2B%25E6%25A8%25A9%25E9%2599%2590%25E4%25BB%2598%25E4%25B8%258E.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これでログアウトするとホームページにログインフォームが表示されます。ログインしなければ何も利用できなくなっているはずです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－７－３、Mavenの自動インストール設定&lt;/b&gt;&lt;br /&gt;DotCloud上にMavenをインストールするのは手間なのでJenkinsにやってもらいます。&lt;br /&gt;ですがJenkinsがインストールしたMavenではMavenリポジトリに書き込めないという&lt;br /&gt;おなじみの問題が発生するので後で対処します。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示&lt;/li&gt;&lt;li&gt;ページ中央にあるMeven追加ボタンを押下&lt;/li&gt;&lt;li&gt;名前とバージョンを指定&lt;/li&gt;&lt;/ul&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;名前： maven_2.2.1&lt;br /&gt;バージョン： 2.2.1&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;自動インストールはONのままとしてください。&lt;/li&gt;&lt;li&gt;保存ボタンを押下&lt;/li&gt;&lt;/ul&gt;また少し下に「利用状況とクラッシュレポートをJenkinsプロジェクトに匿名で報告」という項目がありますが好みで変更してください。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３－７－４、Jenkins Mercurial pluginをインストール&lt;/b&gt;&lt;br /&gt;次はBitbucketからソースコードを取得するプラグインをインストールします。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;左メニューから「Jenkinsの管理→プラグインの管理」を選択し、プラグインページを表示&lt;/li&gt;&lt;li&gt;利用可能タブから「Mercurial Plugin」を探し、チェックを入れる&lt;/li&gt;&lt;li&gt;ページ下部にあるインストールボタンを押下してインストール&lt;/li&gt;&lt;/ul&gt;この時「インストール後ジョブがなければ再起動する」にチェックを入れると&lt;br /&gt;DotCloudコマンドで再起動しなくて済むので簡単です。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;お疲れ様です。以上でJenkinsの構築が終わりました。&lt;br /&gt;次回は動作確認用プロジェクトを作成して動作確認します。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6716132782039043303?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6716132782039043303/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6716132782039043303' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6716132782039043303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6716132782039043303'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/09/dotcloudjenkinsnexusbitbucket_23.html' title='DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ（２／３）'/><author><name>aquilegia</name><uri>http://www.blogger.com/profile/01119873761159018627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-y5Op6CZRGzo/Tns67wQyFgI/AAAAAAAAAJA/cgu59fTf294/s72-c/3-6%2BJenkins%25E8%25B5%25B7%25E5%258B%2595.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2180182101630637133</id><published>2011-09-23T15:13:00.000+09:00</published><updated>2011-09-23T15:13:28.976+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='Nexus'/><category scheme='http://www.blogger.com/atom/ns#' term='DotCloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitbucket'/><title type='text'>DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ（１／３）</title><content type='html'>こんにちは！極稀に記事を書くaquilegiaです。&lt;br /&gt;&lt;br /&gt;まずは手順を作るために下記ページを参考にさせて頂きました。多謝！&lt;br /&gt;&amp;nbsp;* &lt;a href="http://surgo.jp/2011/06/dotcloud-jenkins.html"&gt;dotcloud いいね！jenkins 編&lt;/a&gt;&lt;br /&gt;&amp;nbsp;* &lt;a href="http://d.hatena.ne.jp/w650/20110415/1302838728"&gt;Jenkins Mercurial Pluginでbitbucketにアクセスする&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;今回は3arrowsやソーシャルから少し離れて、開発者の間で話題？のDotCloudとBitbucketを連携したJavaのコーディング環境を構築する手順をご紹介します。&lt;br /&gt;&lt;br /&gt;サービスの詳細は割愛しますが、DotCloudは多くのプログラム言語を実行できるPaaSで無料で２アプリケーションまで作成できます。Bitbucketはプロジェクトホスティングサービスでソースコード管理にMercurialを利用しており、５人までのチームは無料でIssueとWikiがついたプライベートなプロジェクトを無制限に作ることができます。&lt;br /&gt;&lt;br /&gt;今回はこの二つを利用して個人向けプライベートビルド環境を作りましょ～というお話になります。手順のアウトラインは次の通りで、少し長いため３回に分けて紹介します。作業はLinux上で行ってだいたい１時間程度かかると思います。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; white-space: pre;"&gt;・DotCloudを利用するための準備・DotCloudアカウントを取得	・DotCloudクライアントをインストール・DotCloudにNexusを構築	・NexusのWARファイルをDL	・WARファイルから編集ファイルを抽出	・ベースディレクトリの設定を変更	・編集したファイルをWARファイルに戻す	・DotCloudにnexusアプリケーションを作成	・DotCloudへデプロイ	・DotCloudにベースディレクトリを作成	・Nexusを再起動	・Nexusの初期設定		・ログインユーザを作成		・既存ユーザを無効にする・DotCloudにJenkinsを構築	・DotCloud用カスタムWARを作成		・GitHubからJenkinsのソースコードをDL		・WebAppMain.javaを編集してJENKINS_HOMEを変更		・ソースをコンパイル		・JenkinsのWARファイルをDL		・WAR内のclassesに作成したWebAppMain.classを追加	・DotCloudにjenkinsアプリケーションを作成	・DotCloudへデプロイ	・DotCloudにJENKINS_HOMEを作成	・Jenkinsを再起動	・Jenkinsの初期設定		・ログインユーザを作成		・権限を設定		・Mavenの自動インストール設定		・Jenkins Mercurial pluginをインストール・Bitbucketの準備	・Bitbucketのアカウントを作成してログイン	・リポジトリを作成・動作確認用プロジェクトの作成	・プロジェクトを作成	・リポジトリへコミット→プッシュ・動作確認	・Nexus認証情報を設定	・動作確認用プロジェクトをビルドするジョブを登録	・ジョブを実行&lt;/div&gt;&lt;br /&gt;&lt;b&gt;１、DotCloudを利用するための準備&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.dotcloud.com/"&gt;DotCloud公式サイト&lt;/a&gt;のホームページにある緑色のSing Up Freeボタンを押下してアカウントを登録してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OJpn786LAXA/TnoQlFGPKCI/AAAAAAAAAIw/VBUfWqc_hgg/s1600/01_DotCloud.png" imageanchor="1" style=""&gt;&lt;img border="0" height="152" width="320" src="http://4.bp.blogspot.com/-OJpn786LAXA/TnoQlFGPKCI/AAAAAAAAAIw/VBUfWqc_hgg/s320/01_DotCloud.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;次に&lt;a href="http://docs.dotcloud.com/firststeps/install/"&gt;インストールマニュアル&lt;/a&gt;に従ってCLIをインストールしてください。DotCloudとやりとりする時にこのCLIを使います。&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;※CLIはWindows以外をお勧めします。というのも最初Windows版をインストールしてみたところ私のCygwin環境が悪かったのか、コマンド実行時に頻繁にエラーが発生しました。エラーを無視して根気よくコマンドを送れば使えますが、ストレスが溜まるのでLinux版へ替えました。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CLIをインストール後は任意のユーザでdotcloudコマンドを実行してください。初回実行時のみAPIキーの入力が求められます。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud&lt;br /&gt;Warning: /home/aquilegia/.dotcloud/dotcloud.conf does not exist.&lt;br /&gt;Enter your api key (You can find it at http://www.dotcloud.com/accounts/settings): （settingsページに表示されるAPIキーを入力する）&lt;br /&gt;error: usage: dotcloud [-h]&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{info,status,stats,run,logs,versions,url,setup,list,rollback,alias,ssh,push,destroy,create,restart,history}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;コンソールに表示されたURL(&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;http://www.dotcloud.com/accounts/settings&lt;/span&gt;)へアクセスすればAPIキーが表示されるはずです。引数なしで実行すると上記のようにエラーになりますが問題ありません。&lt;/div&gt;&lt;br /&gt;&lt;b&gt;２、DotCloudにNexusを構築&lt;/b&gt;&lt;br /&gt;NexusはそのままではDotCloud上で動きません。これはDotCloud上で動いているサーブレットコンテナはJettyでJettyユーザによって実行されていますが、Nexusがファイルを書き出すruntimeとnexus-workディレクトリに書込権限がなくエラーになるためです。&lt;br /&gt;&lt;br /&gt;そのため私達が自由に使えるdotcloudユーザのホームディレクトリにnexusディレクトリを作成してそこを使わせるようにします。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;２－１、NexusのWARファイルをDL&lt;/b&gt;&lt;/div&gt;&lt;div&gt;作業用のディレクトリを作成した後、&lt;a href="http://nexus.sonatype.org/download-nexus.html"&gt;ここ&lt;/a&gt;からNexusのWARファイルをDLしてください。&lt;/div&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ mkdir -p nexus&lt;br /&gt;$ cd nexus&lt;br /&gt;$ wget http://nexus.sonatype.org/downloads/nexus-webapp-1.9.2.2.war&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;２－２、WARファイルから編集ファイルを抽出&lt;/b&gt;&lt;/div&gt;&lt;div&gt;WARから編集するファイルのみ展開してください。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ unzip nexus-webapp-1.9.2.2.war WEB-INF/plexus.properties&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;２－３、ベースディレクトリの設定を変更&lt;/b&gt;&lt;br /&gt;展開したディレクトリ内のWEB-INF/plexus.propertiesをエディタで開いてruntimeとnexus-workが/home/dotcloud/nexus配下になるよう編集してください。&lt;br /&gt;（例はオリジナルからnexus-homeを追加し、runtimeとnexus-workがnexus-homeの子ディレクトリになるよう変更しました）&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd WEB-INF&lt;br /&gt;$ cp -p plexus.properties plexus.properties.org&lt;br /&gt;$ vi plexus.properties&lt;br /&gt;nexus-home=/home/dotcloud/nexus&lt;br /&gt;runtime=${nexus-home}/runtime&lt;br /&gt;apps=${runtime}/apps&lt;br /&gt;nexus-work=${nexus-home}/sonatype-work/nexus&lt;br /&gt;nexus-app=${runtime}/apps/nexus&lt;br /&gt;webapp=${runtime}/apps/nexus/webapp&lt;br /&gt;security-xml-file=${nexus-work}/conf/security.xml&lt;br /&gt;application-conf=${nexus-work}/conf&lt;br /&gt;runtime-tmp=${runtime}/tmp&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;２－４、編集したファイルをWARファイルに戻す&lt;/b&gt;&lt;br /&gt;&lt;div&gt;編集したファイルをWARファイルに戻します。&lt;/div&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ cd ../&lt;br /&gt;$ cp -p nexus-webapp-1.9.2.2.war nexus-webapp-1.9.2.2.war.org&lt;br /&gt;$ zip nexus-webapp-1.9.2.2.war WEB-INF/plexus.propertie&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;２－５、DotCloudにnexusアプリケーションを作成&lt;/b&gt;&lt;br /&gt;ここからはDotCloudへのデプロイ作業に移ります。コンソールから下記コマンドを実行し、DotCloudにnexusアプリケーションを作成してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud create nexus&lt;br /&gt;Created application "nexus"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;２－６、DotCloudへデプロイ&lt;/b&gt;&lt;br /&gt;デプロイにはWARファイルとビルドファイルが必要になります。ビルドファイルは以下の内容でdotcloud.ymlという名前で作成してください。wwwはサービス名で任意の文字でかまいません。（ここでは公式ドキュメントと同じwwwとします）&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ cat &amp;gt; dotcloud.yml &amp;lt;&amp;lt;EOF&lt;br /&gt;www:&lt;br /&gt;  type: java&lt;br /&gt;EOF&lt;/div&gt;&lt;br /&gt;次に適当な名前のディレクトリ（ここではdeployとします）を作成してWARファイルとビルドファイルと移してください。DotCloudのデプロイは内部でrsyncを使うのですが、指定したディレクトリの全ファイルを同期してしまうので無関係なファイルが送られないようにします。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ mkdir deploy&lt;br /&gt;$ mv nexus-webapp-1.9.2.2.war deploy/ROOT.war&lt;br /&gt;$ mv dotcloud.yml deploy/&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;コンテキストルートは/にしたいのでWARファイルは名前をROOT.warに変更しておきます。&lt;br /&gt;最後にコンソールから下記コマンドを実行し、DotCloudにnexusをデプロイする。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud push nexus deploy/&lt;br /&gt;upload deploy/ ssh://dotcloud@uploader.dotcloud.com:443/nexus&lt;br /&gt;rsync&lt;br /&gt;Pseudo-terminal will not be allocated because stdin is not a terminal.&lt;br /&gt;building file list ... done&lt;br /&gt;./&lt;br /&gt;ROOT.war&lt;br /&gt;dotcloud.yml&lt;br /&gt;&lt;br /&gt;sent 25.57M bytes  received 53 bytes  616.03K bytes/sec&lt;br /&gt;total size is 25.67M  speedup is 1.00&lt;br /&gt;Deployment for "nexus" triggered. Will be available in a few seconds.&lt;br /&gt;2011-09-19 10:35:32 [api] Deploy nexus scheduled for revision=latest&lt;br /&gt;2011-09-19 10:35:32 [api] Waiting for the build. (It may take a few minutes)&lt;br /&gt;2011-09-19 10:35:32 [www.0] Deploying...&lt;br /&gt;2011-09-19 10:35:57 [www.0] Service booted&lt;br /&gt;2011-09-19 10:35:57 [api] All the services are ready. Beginning the build.&lt;br /&gt;2011-09-19 10:35:57 [www.0] The build started&lt;br /&gt;2011-09-19 10:35:58 [www.0] Fetched code revision rsync-xxxxxxxxx.xx&lt;br /&gt;2011-09-19 10:36:01 [www.0]  * Stopping Jetty servlet engine (was reachable on http://nexus-default-www-0:8080/). jetty&lt;br /&gt;2011-09-19 10:36:03 [www.0]  * Jetty servlet engine stopped. jetty&lt;br /&gt;2011-09-19 10:36:03 [www.0]    ...done.&lt;br /&gt;2011-09-19 10:36:03 [www.0]  * Starting Jetty servlet engine. jetty&lt;br /&gt;2011-09-19 10:36:04 [www.0]  * Jetty servlet engine started, reachable on http://nexus-default-www-0:8080/. jetty&lt;br /&gt;2011-09-19 10:36:09 [www.0]    ...done.&lt;br /&gt;2011-09-19 10:36:09 [www.0] The build finished successfully&lt;br /&gt;2011-09-19 10:36:09 [api] Deploy finished&lt;br /&gt;&lt;br /&gt;Deployment finished. Your application is available at the following URLs&lt;br /&gt;www: http://nexus-aquilegia.dotcloud.com/&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ここでデプロイ結果を確認したくなりますがもう少し我慢してください。まだこの時点だと/home/dotcloud/nexusディレクトリが無いので正常に動いていません。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;２－７、DotCloudにベースディレクトリを作成&lt;/b&gt;&lt;br /&gt;コンソールから下記コマンドを実行し、DotCloudにNexusが使うディレクトリを作成してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ dotcloud run nexus.www -- mkdir nexus \&amp;amp;\&amp;amp; ls -l&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;次にnexusディレクトリにグループ書込権限を追加します。こうすることでjettyユーザで実行されているNexusからディレクトリへファイルを書き込めるようになります。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud run nexus.www -- chmod g+w nexus \&amp;amp;\&amp;amp; ls -l&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;２－８、Nexusを再起動&lt;/b&gt;&lt;/div&gt;&lt;div&gt;今度は正常に起動できるはずなのでログを監視しながら再起動します。別のコンソールで下記コマンドを実行してログをtailしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;$ dotcloud logs nexus.www&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;そしてnexusアプリケーションを再起動してください。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace;"&gt;$ dotcloud restart nexus.www&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;正常に起動すればログにスタックトレース等は出力されずに最終行が&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;15632 [main] INFO org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8080&lt;br /&gt;&lt;/div&gt;&lt;div&gt;となるはずです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;２－８、Nexusの初期設定&lt;/b&gt;&lt;br /&gt;初期状態は外部に公開されている状態なので自分だけが利用できるように設定を変更します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;２－８－１、ログインユーザを作成&lt;/b&gt;&lt;br /&gt;ダッシュボードでアプリ名の右側に表示されたサービス名をクリックするとデプロイしたNexusが表示されます。URLは"デプロイ名-アカウント名"を第4レベルドメインにしたものなので覚えられると思います。&lt;br /&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;http://nexus-aquilegia.dotcloud.com/&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;右上のLog Inリンクを押下し、下記ID/パスで管理者としてログインしてください。ログイン後は左のSecurityからChange Passwordを選択してパスワードを変更してください。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;admin&lt;br /&gt;admin123&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ユーザの作成はSecurity→Usersから行います。Usersを選択すると右側に一覧が表示されるので上部に表示された緑色のAddボタンを押下し、Nexusユーザを作成してください。&lt;br /&gt;&lt;div&gt;&lt;div&gt;（ここではnexusというIDで作成したとします）&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="Apple-style-span" style="background-color: #eeeeee; font-family: monospace; "&gt;ID: nexus&lt;br /&gt;EMail: （メールアドレスを入力）&lt;br /&gt;Status: Active&lt;br /&gt;New Password: （パスワードを入力）&lt;br /&gt;Confirm Password: （パスワードを入力）&lt;br /&gt;&lt;br /&gt;Role Management: Nexus Developer Role&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;※メールアドレスは必須項目のため設定していますがAdministration → ServerでSMTPサーバや通知設定をしないと実際には送信されません。必要な方は試してみてください。&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;２－８－２、既存ユーザを無効にする&lt;/b&gt;&lt;br /&gt;Usersの一覧にはもとからadmin、deployment、anonymousがありますがdeploymentは不要なので削除してください。またanonymousは非ログイン状態のユーザになり、削除不可ユーザです。今回は個人で利用するのでリポジトリを匿名ユーザに参照されないようStatusをDisabledへ変更してください。変更後のTOPページは以下のようにRespositoriesも参照できなくなります。&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-QWykuxJTakE/TnoPwE5RvmI/AAAAAAAAAIo/ztb6kANu1Ns/s1600/2-8-2%2BNexus%2B%25E5%258C%25BF%25E5%2590%258D%25E3%2583%25A6%25E3%2583%25BC%25E3%2582%25B6%25E7%2584%25A1%25E5%258A%25B9.png" imageanchor="1" style="clear:left; margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="168" width="320" src="http://2.bp.blogspot.com/-QWykuxJTakE/TnoPwE5RvmI/AAAAAAAAAIo/ztb6kANu1Ns/s320/2-8-2%2BNexus%2B%25E5%258C%25BF%25E5%2590%258D%25E3%2583%25A6%25E3%2583%25BC%25E3%2582%25B6%25E7%2584%25A1%25E5%258A%25B9.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;お疲れ様です。これでNexus環境ができました。&lt;br /&gt;今回はここまでです。続きは次回ご紹介します。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2180182101630637133?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2180182101630637133/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2180182101630637133' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2180182101630637133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2180182101630637133'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/09/dotcloudjenkinsnexusbitbucket.html' title='DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ（１／３）'/><author><name>aquilegia</name><uri>http://www.blogger.com/profile/01119873761159018627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-OJpn786LAXA/TnoQlFGPKCI/AAAAAAAAAIw/VBUfWqc_hgg/s72-c/01_DotCloud.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-334740597953170375</id><published>2011-04-04T14:45:00.001+09:00</published><updated>2011-04-04T14:48:18.349+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows の OpenSocial RPC API (2-legged OAuth) で、節電呼びかけでんこちゃん社内 bot を作ってみたよ</title><content type='html'>こんにちは。Nobuhiro Nakajima @ YOKOHAMA です。&lt;br /&gt;&lt;br /&gt;3arrows - Google Apps アカウントでも使える社内 Twitter&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;http://www.3arrows.jp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3arrows は、2-legged OAuth による OpenSocial RPC API を提供しています。2-legged OAuth は mixiアプリなどソーシャルアプリの世界では、標準化されたリクエスト署名方式で、アプリと外部システムの連携に適しています。詳しくは、次のページを参考にしてください。&lt;br /&gt;&lt;br /&gt;2-legged OAuth による API アクセス &amp;gt;&amp;gt; mixi Developer Center&lt;br /&gt;&lt;a href="http://developer.mixi.co.jp/appli/spec/pc/restful-api-for-pc/2-legged-oauth-api-access"&gt;http://developer.mixi.co.jp/appli/spec/pc/restful-api-for-pc/2-legged-oauth-api-access&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このエントリでは 2-legged OAuth による OpenSocial RPC API を使って、電力使用状況と節電を呼びかける &lt;a href="http://www.tepco.co.jp/denkochan/"&gt;でんこちゃん&lt;/a&gt; 社内 bot の作り方を紹介します。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;でんこちゃん社内 bot&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;就業時間中の1時間に1度、でんこちゃん bot がタイムラインに節電を呼びかける投稿をします。このとき、現在の電力使用状況とその日の推移グラフも合わせて投稿します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-lROnkgB3W7k/TYyWHXTkQgI/AAAAAAAACvQ/wZKdN5JcAEQ/s1600/20110325-1.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-lROnkgB3W7k/TYyWHXTkQgI/AAAAAAAACvQ/wZKdN5JcAEQ/s480/20110325-1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;①でんこちゃん bot&lt;br /&gt;②東京電力アプリのロゴ&lt;br /&gt;③東京電力アプリのリンク先 &lt;a href="http://www.tepco.co.jp/forecast/index-j.html"&gt;http://www.tepco.co.jp/forecast/index-j.html&lt;/a&gt;&lt;br /&gt;④電力使用状況&lt;br /&gt;⑤電力使用状況の推移グラフ (クリックすると、次のとおり拡大する)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-qv7mTfQic2I/TYyWHvPb0GI/AAAAAAAACvY/9Pbft0rziE8/s1600/20110325-4.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-qv7mTfQic2I/TYyWHvPb0GI/AAAAAAAACvY/9Pbft0rziE8/s480/20110325-4.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;でんこちゃんユーザの作成&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;コントロールパネルで、でんこちゃんを表すユーザを作成します。ここでは、メールアドレスを denkochan@lrlab.to とします。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;東京電力アプリの作成&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;コントロールパネルで、東京電力を表すアプリを作成します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-TtMcrO0l4ww/TYyWIBIUybI/AAAAAAAACvo/-n3MgcrIlFU/s1600/20110325-3.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-TtMcrO0l4ww/TYyWIBIUybI/AAAAAAAACvo/-n3MgcrIlFU/s480/20110325-3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;アプリのガジェットXMLは次のとおりです。アプリのタイトルは東京電力とし、アイコンは &lt;a href="http://twitter.com/OfficialTEPCO/"&gt;Twitter 公式アカウント&lt;/a&gt; から拝借します。アプリは、コンテンツを持たせず、東京電力サイトにリンクさせます。&lt;br /&gt;&lt;pre style="font-size: x-small;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="東京電力" description="東京電力から節電のお願いです"&amp;gt;&lt;br /&gt;&amp;lt;Link rel="icon" href="http://a0.twimg.com/profile_images/1276730827/tepco_normal.JPG" /&amp;gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;&amp;lt;Content type="url" href="http://www.tepco.co.jp/forecast/index-j.html"&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;コンシューマキーとシークレットの入手&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2-legged OAuth のコンシューマキーとシークレットは、コントロールパネルから入手できます。OpenSocial RPC API のエンドポイント (URL) も同様です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-1PXgJoKeHiU/TYyWH1JP_xI/AAAAAAAACvg/DBmcKxyqoxQ/s1600/20110325-2.png" imageanchor="1"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-1PXgJoKeHiU/TYyWH1JP_xI/AAAAAAAACvg/DBmcKxyqoxQ/s480/20110325-2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;バッチの作成&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tepco.co.jp/forecast/index-j.html"&gt;東京電力&lt;/a&gt; から &lt;a href="http://search.cpan.org/%7Egaas/libwww-perl-6.01/"&gt;LWP::Simple&lt;/a&gt; を使って、&lt;a href="http://www.tepco.co.jp/forecast/html/images/juyo-j.csv"&gt;電力の使用状況データ (CSV)&lt;/a&gt; をダウンロードします。そして、最新の電力使用状況を集計し、&lt;a href="http://code.google.com/apis/chart/"&gt;Google Chart API&lt;/a&gt; を使って、当日の推移グラフを作成します。&lt;br /&gt;&lt;pre style="font-size: x-small;"&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use LWP::Simple;&lt;br /&gt;use Encode 'decode_utf8';&lt;br /&gt;&lt;br /&gt;my $url = 'http://www.tepco.co.jp/forecast/html/images/juyo-j.csv';&lt;br /&gt;my @rows = split(/\r\n/, get($url));&lt;br /&gt;&lt;br /&gt;shift @rows;&lt;br /&gt;shift @rows;&lt;br /&gt;&lt;br /&gt;# ピーク時供給力(万kW)&lt;br /&gt;my ($cap) = split(/,/, shift @rows); &lt;br /&gt;&lt;br /&gt;shift @rows;&lt;br /&gt;shift @rows;&lt;br /&gt;&lt;br /&gt;# 24時間分の当日実績(万kW)&lt;br /&gt;my @hours = map {&lt;br /&gt;    my @cols = split(/,/, $_); $cols[2];&lt;br /&gt;} @rows;&lt;br /&gt;&lt;br /&gt;my $latest;&lt;br /&gt;&lt;br /&gt;# 最新の当日実績(万kW)&lt;br /&gt;for (reverse(@hours)) {&lt;br /&gt;    last if $latest = $_;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# 電力使用率&lt;br /&gt;my $per = sprintf('%.1f', $latest / $cap * 100);&lt;br /&gt;&lt;br /&gt;# 当日実績(万kW)の推移グラフ&lt;br /&gt;my $chart = 'http://chart.googleapis.com/chart' . &lt;br /&gt;    '?chs=400x240' .&lt;br /&gt;    '&amp;amp;cht=bvo' .&lt;br /&gt;    "&amp;amp;chxr=0,0,$cap|1,0,23" .&lt;br /&gt;    '&amp;amp;chxt=y,x' .&lt;br /&gt;    '&amp;amp;chbh=10' . &lt;br /&gt;    '&amp;amp;chd=t:' . join(',', map { int($_ / $cap * 100) } @hours);&lt;br /&gt;&lt;/pre&gt;続けて、&lt;a href="http://opensocial-resources.googlecode.com/svn/spec/1.0/Social-API-Server.xml#Activities-Service-Create"&gt;Activities API&lt;/a&gt; を使って、電力使用状況を 3arrows に投稿します。アクティビティの作成を JSON RPC で組み立て、&lt;a href="http://search.cpan.org/%7Elyokato/OAuth-Lite-1.30/"&gt;OAuth::Lite::Consumer&lt;/a&gt; を使って、リクエストを署名して発行します。&lt;br /&gt;&lt;br /&gt;API の Endpoint、Consumer Key、Consumer Secret には、前述のコントロールパネルから入手した値を指定します。また、xoauth_requestor_id には、でんこちゃん(投稿者) を表す denkochan@lrlab.to を指定しています。&lt;br /&gt;&lt;br /&gt;アクティビティの作成に成功すると、アクティビティID がレスポンスされます。万が一失敗したときは、JSON RPC のエラーか HTTP ステータスのエラーがレスポンスされます。&lt;br /&gt;&lt;pre style="font-size: x-small;"&gt;use Data::Dumper;&lt;br /&gt;use JSON::XS;&lt;br /&gt;use OAuth::Lite::Consumer;&lt;br /&gt;&lt;br /&gt;# アクティビティのタイトル&lt;br /&gt;my $title = &amp;lt;&amp;lt;EOB;&lt;br /&gt;じゃん! 電気を大切にね。&lt;br /&gt;&amp;gt; 電力使用状況 $cap 万kW 中 $latest 万kW ($per%)&lt;br /&gt;&amp;gt; $chart&lt;br /&gt;EOB&lt;br /&gt;&lt;br /&gt;# アクティビティの作成を表す JSON RPC&lt;br /&gt;my $content = JSON::XS::encode_json({&lt;br /&gt;    jsonrpc =&amp;gt; '2.0',&lt;br /&gt;    method =&amp;gt; 'activities.create',&lt;br /&gt;    params =&amp;gt; {&lt;br /&gt;        userId =&amp;gt; '@viewer',&lt;br /&gt;        group =&amp;gt; '@self',&lt;br /&gt;        activity =&amp;gt; { title =&amp;gt; decode_utf8($title) } # UTF-8 フラグ&lt;br /&gt;    },&lt;br /&gt;    id =&amp;gt; 1&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;# API の Endpoint, Consumer Key, Consumer Secret, Viewer&lt;br /&gt;my %options = (&lt;br /&gt;    endpoint =&amp;gt; 'http://nakajiman.3arrows.jp/api/rpc/a',&lt;br /&gt;    consumer_key =&amp;gt; '{consumer key}',&lt;br /&gt;    consumer_secret =&amp;gt; '{consumer secret}',&lt;br /&gt;    requester_id =&amp;gt; 'denkochan@lrlab.to',&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $consumer = OAuth::Lite::Consumer-&amp;gt;new(&lt;br /&gt;    consumer_key =&amp;gt; $options{consumer_key},&lt;br /&gt;    consumer_secret =&amp;gt; $options{consumer_secret}&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;# リクエストの署名と発行&lt;br /&gt;my $response = $consumer-&amp;gt;request(&lt;br /&gt;    method  =&amp;gt; 'POST',&lt;br /&gt;    url =&amp;gt; $options{endpoint},&lt;br /&gt;    headers =&amp;gt; [ 'Content-Type' =&amp;gt; 'application/json' ],&lt;br /&gt;    content =&amp;gt; $content, &lt;br /&gt;    params =&amp;gt; {&lt;br /&gt;        xoauth_requestor_id =&amp;gt; $options{requester_id},&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;# リクエストの成否&lt;br /&gt;if ($response-&amp;gt;is_success) {&lt;br /&gt;    print Dumper(JSON::XS::decode_json($response-&amp;gt;decoded_content));&lt;br /&gt;} else {&lt;br /&gt;    warn $response-&amp;gt;status_line;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;バッチの実行&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;就業時間の 9:00 から 18:00 の間で、1時間に一度、バッチを実行するように cron を登録します。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;ダウンロード&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;でんこちゃん社内 bot のソースコードは、次のページからダウンロードできます。&lt;br /&gt;&lt;br /&gt;ダウンロード - 3arrows.jp&lt;br /&gt;&lt;a href="https://sites.google.com/a/socialprise.jp/3arrows-jp/downloads"&gt;https://sites.google.com/a/socialprise.jp/3arrows-jp/downloads&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-334740597953170375?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/334740597953170375/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=334740597953170375' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/334740597953170375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/334740597953170375'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/04/3arrows-opensocial-rpc-api-2-legged.html' title='3arrows の OpenSocial RPC API (2-legged OAuth) で、節電呼びかけでんこちゃん社内 bot を作ってみたよ'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-lROnkgB3W7k/TYyWHXTkQgI/AAAAAAAACvQ/wZKdN5JcAEQ/s72-c/20110325-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6654088962835017199</id><published>2011-03-30T21:28:00.000+09:00</published><updated>2011-03-30T21:28:14.205+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート！ Google Apps アカウントでログインできるようになりました。</title><content type='html'>3月28日（月）、企業やチーム向けのプライベートマイクロブログ、&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。アップデートの主な内容は次の通りです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;Google Apps アカウントでログインできるようになりました！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;コントロールパネルの 「ユーザーの管理」 画面で、「Google Apps アカウントでログインする」 のチェックボックスにチェックを入れると、以後、3arrows に Google Apps アカウントでログインできるようになります。&lt;br /&gt;&lt;br /&gt;なお、Google Apps for Business をご利用の方は、&lt;a href="http://code.google.com/intl/ja/googleapps/domain/sso/openid_reference_implementation.html"&gt;Google Apps の OpenID&lt;/a&gt; の設定を有効にする必要があります。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-ryJtJ2FKvY4/TY_YTKgl2fI/AAAAAAAAACM/zJyeK5XzuOg/s1600/googleapps1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 147px;" src="http://3.bp.blogspot.com/-ryJtJ2FKvY4/TY_YTKgl2fI/AAAAAAAAACM/zJyeK5XzuOg/s400/googleapps1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588923486340241906" /&gt;&lt;/a&gt;&lt;br /&gt;「ログイン」 画面では Google Apps アカウントのドメインを入力してください。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-IeE2XrBM554/TY_YTVnYCwI/AAAAAAAAACU/kF34qYp6daw/s1600/googleapps2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 245px;" src="http://3.bp.blogspot.com/-IeE2XrBM554/TY_YTVnYCwI/AAAAAAAAACU/kF34qYp6daw/s400/googleapps2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588923489321487106" /&gt;&lt;/a&gt;&lt;br /&gt;今回の Google Apps アカウントへの対応で、3arrows は個人間のコラボレーション、企業内のコラボレーション、企業間のコラボレーションを支援できるようになりました。&lt;br /&gt;&lt;br /&gt;3arrows では、異なるドメインのメールアドレスのユーザー、異なるドメインの Google Apps アカウントのユーザーを、区別せずメンバーとして招待することができます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Mj9iwuix8Xo/TY_YT0ONDMI/AAAAAAAAACc/O0B6jqouEM0/s1600/collaboration.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 338px;" src="http://2.bp.blogspot.com/-Mj9iwuix8Xo/TY_YT0ONDMI/AAAAAAAAACc/O0B6jqouEM0/s400/collaboration.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5588923497537408194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000; text-decoration: underline;"&gt;&lt;b&gt;全てのアプリケーションの更新をお願いします！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブから、全てのアプリケーションを更新してください。「更新する」 リンクをクリックすると、アプリケーションを更新できます。「最新」 と表示されれば更新の完了です。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s1600/applications.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s400/applications.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574156228142663426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、引き続き α テストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を始めることができます。企業や個人等、利用条件に制限はありませんので、この機会にぜひお試しください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6654088962835017199?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6654088962835017199/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6654088962835017199' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6654088962835017199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6654088962835017199'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/3arrows-google-apps.html' title='3arrows アップデート！ Google Apps アカウントでログインできるようになりました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ryJtJ2FKvY4/TY_YTKgl2fI/AAAAAAAAACM/zJyeK5XzuOg/s72-c/googleapps1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8023682773117268139</id><published>2011-03-21T16:13:00.002+09:00</published><updated>2011-03-21T17:28:04.289+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Script Host'/><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><category scheme='http://www.blogger.com/atom/ns#' term='WSH'/><category scheme='http://www.blogger.com/atom/ns#' term='Two-Legged OAuth'/><title type='text'>Google Apps Script に続けて Windows Script Host (WSH) で 2-Legged OAuth をやってみました</title><content type='html'>こんにちは。なかじまん @ YOKOHAMA です。&lt;br /&gt;東北関東大震災で被災された皆さまには心よりお見舞い申し上げます。&lt;br /&gt;&lt;br /&gt;&lt;iframe    src="http://japan.person-finder.appspot.com/?small=yes&amp;lang=ja"    width=400 height=300 frameborder=0    style="border: dashed 2px #77c"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nakajiman.blogspot.com/2011/03/google-apps-script-urlfetch-services.html"&gt;Google Apps Script の UrlFetch Services は 2Legged OAuth に対応してないっぽいので自前でやってみた&lt;/a&gt; に続いて、Windows Script Host (WSH) を使って Windows のコマンドラインから 2-Legged OAuth をやってみました。&lt;br /&gt;&lt;br /&gt;WSH の場合、いろいろな実装方法を選択できそうなのですが、前述の Google Apps Script の JavaScript をそのまま動かす方法を選択しています。&lt;br /&gt;&lt;br /&gt;なので、ソースコードはほとんど同じで、UrlFetch Services ではなく XMLHttpRequest を同期で使っているくらいの違いです。&lt;br /&gt;&lt;pre style="font-size:x-small;"&gt;&amp;lt;job&amp;gt;&lt;br /&gt;&amp;lt;script language="JavaScript" src="sha1.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language="JavaScript" src="oauth.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language="JavaScript" src="json2.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language="JavaScript"&amp;gt;&lt;br /&gt;&lt;br /&gt;  var endpoint = 'http://nakajiman.3arrows.jp/api/rpc/a';&lt;br /&gt;  var consumerKey = '{Consumer Key}';&lt;br /&gt;  var consumerSecret = '{consumer Secret}';&lt;br /&gt;  var requestor_id = 'nakajiman(at)lrlab.to';&lt;br /&gt;&lt;br /&gt;  var message = { method: 'POST', action: endpoint, parameters: {} };&lt;br /&gt;&lt;br /&gt;  OAuth.setParameter(message, 'oauth_consumer_key', consumerKey);&lt;br /&gt;  OAuth.setParameter(message, 'oauth_version', '1.0');&lt;br /&gt;  OAuth.setParameter(message, 'oauth_timestamp', OAuth.timestamp());&lt;br /&gt;  OAuth.setParameter(message, 'oauth_nonce', OAuth.nonce(6));&lt;br /&gt;  OAuth.setParameter(message, 'xoauth_requestor_id', requestor_id);&lt;br /&gt;&lt;br /&gt;  OAuth.SignatureMethod.sign(message, { consumerSecret: consumerSecret });&lt;br /&gt;&lt;br /&gt;  var url = OAuth.addToURL(endpoint, message.parameters);&lt;br /&gt;  var data = JSON.stringify({&lt;br /&gt;      jsonrpc: '2.0',&lt;br /&gt;      method: 'activities.create',&lt;br /&gt;      params: { userId: '@viewer', group: '@self', activity: { title: 'Say hello!' } },&lt;br /&gt;      id: 1&lt;br /&gt;  });&lt;br /&gt;  &lt;br /&gt;  var xhr = WScript.CreateObject('MSXML2.XMLHTTP');&lt;br /&gt;  xhr.open(message.method, url, false);&lt;br /&gt;  xhr.setRequestHeader('Content-Type', 'application/json');&lt;br /&gt;  xhr.send(data);&lt;br /&gt;  &lt;br /&gt;  if (xhr.status != 200)&lt;br /&gt;    WScript.Echo(xhr.status + ' ' + xhr.statusText);&lt;br /&gt;  else {&lt;br /&gt;    var res = JSON.parse(xhr.responseText);&lt;br /&gt;    WScript.Echo(res.result);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/job&amp;gt;&lt;br /&gt;&lt;/pre&gt;ただいま、 &lt;a href="http://www.3arrows.jp/"&gt;企業やチーム向けのプライベートマイクロブログ 3arrows&lt;/a&gt; では、お客様のシステムやサービスとの連携を目的とした「シングルサインオン」と「2-Legged OAuth ベースの API」に取り組んでいます。&lt;br /&gt;&lt;br /&gt;2-Legged OAuth ベースの API 公開により、システムやサービスの統合に加えて、Google Apps Script や Windows Script Host から 3arrows を操作して、ユーリティティの用途としても活用できるようになります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8023682773117268139?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8023682773117268139/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8023682773117268139' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8023682773117268139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8023682773117268139'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/yokohama-google-apps-script-urlfetch.html' title='Google Apps Script に続けて Windows Script Host (WSH) で 2-Legged OAuth をやってみました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8428331295772645663</id><published>2011-03-07T21:18:00.000+09:00</published><updated>2011-03-07T21:18:51.567+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート！ 投稿内容を引用して返信できるようになりました! Gmail や Trac のような明瞭な引用です!</title><content type='html'>3月2日(水)、企業やチーム向けのプライベートマイクロブログ、&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。アップデートの主な内容は次の通りです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;ステータスの引用機能の追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログの各ステータスを引用できるようになりました。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-7GWdqhcBatQ/TXMEgY3fQgI/AAAAAAAAAB8/agOnhF-g5PU/s1600/quote1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 237px;" src="http://2.bp.blogspot.com/-7GWdqhcBatQ/TXMEgY3fQgI/AAAAAAAAAB8/agOnhF-g5PU/s400/quote1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5580809317719687682" /&gt;&lt;/a&gt;&lt;br /&gt;Twitter の以前の RT 機能と類似の機能となりますが、引用したステータスがそれと分かるようにスタイリングされ、また、3arrows は Twitter と比較して文字数の制限が緩いため、ステータスを途中で切ることなく引用することができます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;ステータス上でのアプリケーションのアイコンと名前の表示&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;日報等、各アプリケーションからマイクロブログに通知されたステータスには、それと分かるようにアプリケーションのアイコンと名前を表示するようになりました。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-81pq_c8ULmo/TXMEgUOfgTI/AAAAAAAAACE/UMWVjnvhUWg/s1600/quote2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 237px;" src="http://2.bp.blogspot.com/-81pq_c8ULmo/TXMEgUOfgTI/AAAAAAAAACE/UMWVjnvhUWg/s400/quote2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5580809316473995570" /&gt;&lt;/a&gt;&lt;br /&gt;これにより、どのアプリケーションからの通知なのかが一目で分かるようになります。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000; text-decoration: underline;"&gt;&lt;b&gt;全てのアプリケーションの更新をお願いします！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブから、全てのアプリケーションを更新してください。「更新する」 リンクをクリックすると、アプリケーションを更新できます。「最新」 と表示されれば更新の完了です。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s1600/applications.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s400/applications.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574156228142663426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、引き続き α テストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を始めることができます。企業や個人等、利用条件に制限はありませんので、この機会にぜひお試しください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8428331295772645663?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8428331295772645663/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8428331295772645663' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8428331295772645663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8428331295772645663'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/3arrows-gmail-trac.html' title='3arrows アップデート！ 投稿内容を引用して返信できるようになりました! Gmail や Trac のような明瞭な引用です!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-7GWdqhcBatQ/TXMEgY3fQgI/AAAAAAAAAB8/agOnhF-g5PU/s72-c/quote1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-4129979861078250187</id><published>2011-03-07T14:12:00.000+09:00</published><updated>2011-03-07T14:12:09.813+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='AppEngine'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='WebCAM'/><title type='text'>Facebook のプロフィール写真をウェブカメラを経由でアップロードしてみた。ウェブカメラから multipart/form-data で静止画をアップロードできるライブラリを探しています。</title><content type='html'>こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;Facebook のプロフィール写真は、ウェブカメラを経由してウェブブラウザからアップロードできるらしいので試してみました。&lt;br /&gt;&lt;br /&gt;手持ちのウェブカメラは &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002QB2LCG/learninresour-22/ref=nosim/" target="_top"&gt;マイクロソフト ウェブカメラ LifeCam VX-800 JSD-00006&lt;/a&gt; です。↓これ。今なら 1,000 円くらいで入手できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/B002QB2LCG/learninresour-22/ref=nosim/" target="_top"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/31BfquCP1pL._SL160_.jpg" alt="マイクロソフト ウェブカメラ LifeCam VX-800 JSD-00006" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;プロフィール写真の設定ページから写真を撮るボタンをクリックすると、ポップアップが開きます。許可をクリックすると、ウェブカメラの映像が移り出すので、カメラボタンをクリックして、写真を撮ります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-qZi5cwCndvU/TXRkXcVKdWI/AAAAAAAACuc/nYR1k9fgar0/s1600/facebook-webcam-1.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="232" width="400" src="http://2.bp.blogspot.com/-qZi5cwCndvU/TXRkXcVKdWI/AAAAAAAACuc/nYR1k9fgar0/s400/facebook-webcam-1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;すると、次のとおり、ウェブカメラで撮影した静止画がプロフィール写真として掲載されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-xLAuw_oXzvQ/TXRkXl360BI/AAAAAAAACuk/xhUyMHMueWo/s1600/facebook-webcam-2.png" imageanchor="1" style=""&gt;&lt;img border="0" height="278" width="278" src="http://3.bp.blogspot.com/-xLAuw_oXzvQ/TXRkXl360BI/AAAAAAAACuk/xhUyMHMueWo/s400/facebook-webcam-2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ウェブカメラからの写真の撮影は Flash で実現されています。Flash 内で、ウェブカメラのストリームを扱い撮影のタイミングで静止画にして、サーバにアップロードするという仕組みのようです。&lt;br /&gt;&lt;br /&gt;同じことをやってみたくて、ライブラリなどを探していると、いくつか発見できました。例えば、これとか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xarg.org/project/jquery-webcam-plugin/"&gt;jQuery webcam plugin - Website and Application Intelligence&lt;/a&gt;&lt;blockquote&gt;This plugin provides three different modes to access a webcam through a small API  directly with JavaScript - or more precisely jQuery.&lt;/blockquote&gt;ただ、今まで見つけたライブラリは、静止画のデータを HTTP POST の raw データとしてアップロードするものでした。これだと AppEngine の Blob Storage に直接アップロードできないのです。&lt;br /&gt;&lt;br /&gt;ということで multipart/form-data でウェブカメラから静止画をアップロードできるライブラリを探しています。もしも、ご存じでしたらぜひ教えてください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-4129979861078250187?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/4129979861078250187/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=4129979861078250187' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4129979861078250187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4129979861078250187'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/facebook-multipartform-data.html' title='Facebook のプロフィール写真をウェブカメラを経由でアップロードしてみた。ウェブカメラから multipart/form-data で静止画をアップロードできるライブラリを探しています。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-qZi5cwCndvU/TXRkXcVKdWI/AAAAAAAACuc/nYR1k9fgar0/s72-c/facebook-webcam-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1921249875433616861</id><published>2011-03-03T13:05:00.002+09:00</published><updated>2011-03-03T13:05:40.073+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート！ 無料プラン、独自ドメイン／専用環境プラン、OEM プランを追加しました。</title><content type='html'>3 月 1 日 （火）、企業やチーム向けのプライベートマイクロブログ、&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; の&lt;a href="http://www.3arrows.jp/help/pricing.html"&gt;料金表&lt;/a&gt;を改定しました。改定の主な内容は次の通りです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;無料プランの追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3arrows を無料で利用できるプランを追加しました。今後、ユーザー数が 5 人以内の場合、3arrows は無料で利用できます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;独自ドメイン／専用環境プランの追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3arrows を独自ドメイン、専用環境で利用できるプランを追加しました。セキュリティポリシー上、共用環境での利用が難しかったお客様でも、今後は独自ドメイン、専用環境で 3arrows を利用できます。（有料になります。）&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;OEM プランの追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3arrows を OEM として、お客様のブランドで提供したり、お客様のサービスに組み込んで提供できるプランを追加しました。3arrows は柔軟で堅牢なアーキテクチャーの元で実装されているため、デザイン、機能ともにフルカスタマイズした上で提供することが可能です。&lt;br /&gt;&lt;br /&gt;3arrows では、引き続き α テストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を始めることができます。企業や個人等、利用条件に制限はありませんので、この機会にぜひお試しください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1921249875433616861?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1921249875433616861/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1921249875433616861' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1921249875433616861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1921249875433616861'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/3arrows-oem.html' title='3arrows アップデート！ 無料プラン、独自ドメイン／専用環境プラン、OEM プランを追加しました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1674842528554673645</id><published>2011-03-02T15:21:00.002+09:00</published><updated>2011-03-03T08:22:19.398+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='gle Apps Script'/><title type='text'>Google Apps Script の UrlFetch Services は 2Legged OAuth に対応してないっぽいので自前でやってみた</title><content type='html'>こんにちは。なかじまんです。&lt;br /&gt;&lt;br /&gt;Google Apps Script の &lt;a href="http://code.google.com/googleapps/appsscript/service_urlfetch.html"&gt;UrlFetch Services&lt;/a&gt; は 2Legged OAuth に対応してないっぽいので自前でやってみた。ちなみに 3Legged OAuth は標準でできるみたいです。&lt;br /&gt;&lt;br /&gt;はじめに &lt;a href="http://code.google.com/p/oauth/"&gt;JavaScript の OAuth ライブラリ&lt;/a&gt; の内sha1.js と &lt;strike&gt;&lt;a href="http://oauth.jp/"&gt;oauth.jp&lt;/a&gt;&lt;/strike&gt; oauth.js を貼り付けます。そして、次のようにリクエストを署名して、UrlFetch Services でエンドポイントを叩きます。&lt;br /&gt;&lt;br /&gt;以下の例では、Google Friend Connect の People API を呼び出して、Viewer (xoauth_requestor_id) のプロフィールを取得して、ニックネームを表示しています。&lt;br /&gt;&lt;pre style="font-size:x-small;"&gt;function myFunction() {&lt;br /&gt;&lt;br /&gt;  var action = 'http://www.google.com/friendconnect/api/people/@me/@self';&lt;br /&gt;  var accessor = { consumerSecret: '{consumerSecret}' };&lt;br /&gt;  var message = { method: 'GET', action: action, parameters: {}, };&lt;br /&gt;&lt;br /&gt;  OAuth.setParameter(message, 'oauth_consumer_key', '{oauth_consumer_key}');&lt;br /&gt;  OAuth.setParameter(message, 'oauth_version', '1.0');&lt;br /&gt;  OAuth.setParameter(message, 'oauth_timestamp', OAuth.timestamp());&lt;br /&gt;  OAuth.setParameter(message, 'oauth_nonce', OAuth.nonce(6));&lt;br /&gt;  OAuth.setParameter(message, 'xoauth_requestor_id', '18200614986198926446');&lt;br /&gt;&lt;br /&gt;  OAuth.SignatureMethod.sign(message, accessor);&lt;br /&gt;&lt;br /&gt;  var url = OAuth.addToURL(action, message.parameters);&lt;br /&gt;&lt;br /&gt;  var response = UrlFetchApp.fetch(url, {method: message.method });&lt;br /&gt;  if (response.getResponseCode() == 200) {&lt;br /&gt;    var res = JSON.parse(response.getContentText());&lt;br /&gt;    Browser.msgBox(res.entry.displayName);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;今回は Query String で試しましたが Authorization Header でも大丈夫なはず。&lt;br /&gt;&lt;br /&gt;ということで Google Apps Script から 2Legged OAuth できちゃいました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1674842528554673645?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1674842528554673645/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1674842528554673645' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1674842528554673645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1674842528554673645'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/google-apps-script-urlfetch-services.html' title='Google Apps Script の UrlFetch Services は 2Legged OAuth に対応してないっぽいので自前でやってみた'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-4042362815437466911</id><published>2011-03-02T14:14:00.000+09:00</published><updated>2011-03-02T14:14:00.275+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート！ お気に入り機能とダイジェストメール機能を追加しました。</title><content type='html'>2 月 25 日 （金）、企業やチーム向けのプライベートマイクロブログ、&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。アップデートの主な内容は次の通りです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;お気に入り機能の追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログの各ステータスをお気に入りに追加できるようになりました。&lt;br /&gt;&lt;br /&gt;各ステータスの返信、削除と並ぶ 「お気に入り」 メニューをクリックすると、そのステータスをお気に入りに追加できます。また、自分以外のユーザーがステータスをお気に入りに追加した場合、ステータスの下部にお気に入りの合計人数を表示するようになりました。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-IgGBzRUMrm0/TWr9FlAThKI/AAAAAAAAABc/Nbi3LeYlwuw/s1600/favorites1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" src="http://2.bp.blogspot.com/-IgGBzRUMrm0/TWr9FlAThKI/AAAAAAAAABc/Nbi3LeYlwuw/s400/favorites1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5578549360726344866" /&gt;&lt;/a&gt;&lt;br /&gt;なお、追加したお気に入りは上部メニューの 「お気に入り」 から一覧できます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-P7Qt9CBKPC8/TWv8eT8M34I/AAAAAAAAABs/py4sWt4JJak/s1600/favorites2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 326px;" src="http://3.bp.blogspot.com/-P7Qt9CBKPC8/TWv8eT8M34I/AAAAAAAAABs/py4sWt4JJak/s400/favorites2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5578830161107541890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;ダイジェストメール機能の追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1 日 1 回、マイクロブログ上のコミュニケーションのダイジェストを、メールで配信するようになりました。今後、みなさまのご利用状況を踏まえ、オプション化等も検討していきます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-67D5RBd_I5Y/TWv8e6iH4zI/AAAAAAAAAB0/_evsB6Tuszc/s1600/digest.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 397px; height: 400px;" src="http://4.bp.blogspot.com/-67D5RBd_I5Y/TWv8e6iH4zI/AAAAAAAAAB0/_evsB6Tuszc/s400/digest.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5578830171467146034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;不具合の修正&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログの返信機能の不具合や Picasa Web Albums の https への対応等、いくつかの改修を実施しました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000; text-decoration: underline;"&gt;&lt;b&gt;全てのアプリケーションの更新をお願いします！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブから、全てのアプリケーションを更新してください。「更新する」 リンクをクリックすると、アプリケーションを更新できます。「最新」 と表示されれば更新の完了です。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s1600/applications.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s400/applications.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574156228142663426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、引き続き α テストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を始めることができます。企業や個人等、利用条件に制限はありませんので、この機会にぜひお試しください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-4042362815437466911?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/4042362815437466911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=4042362815437466911' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4042362815437466911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4042362815437466911'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/03/3arrows.html' title='3arrows アップデート！ お気に入り機能とダイジェストメール機能を追加しました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-IgGBzRUMrm0/TWr9FlAThKI/AAAAAAAAABc/Nbi3LeYlwuw/s72-c/favorites1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2341540242597435328</id><published>2011-02-27T19:02:00.001+09:00</published><updated>2011-02-27T19:05:07.574+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox の location.hash は自動デコードにも関わらず、制御コードはデコードしないとか知ってました?</title><content type='html'>こんばんは。なかじまんです。&lt;br /&gt;&lt;br /&gt;Firefox の location.hash は、他のブラウザと異なり、URI デコードした結果を表すのは、よく知られていると思いますが、なんど制御コードに限ってデコードしない例外があるようです。試しているのは Firefox 3.6 です。&lt;br /&gt;&lt;br /&gt;例えば、改行入りのテキストを location.hash で状態を保持しようとすると、改行コードは CR/LF にデコードされず、%0D%0A のままとなってしまいます。なんじゃこれ。何か勘違いしているのかなぁ。&lt;br /&gt;&lt;br /&gt;試しに ASCII コードをぜんぶ試してみたところ、&lt;br /&gt;&lt;pre&gt;for (var i = 0x0; i &lt;= 0x7f; i++) {&lt;br /&gt;  var hex = Number(i).toString(16);&lt;br /&gt;  var ch = String.fromCharCode(i);&lt;br /&gt;  location.href = '#' + encodeURIComponent(ch);&lt;br /&gt;  console.log('0x' + hex + ': ' + location.hash);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;制御コードは、デコードされないことを知りました。HTML や DOM の仕様にそぐわないからだろうか。それとも、脆弱性に関するものだろうか。&lt;pre&gt;0x0: #%0&lt;span&gt;0&lt;/span&gt;&lt;br /&gt;0x1: #%01&lt;br /&gt;0x2: #%02&lt;br /&gt;0x3: #%03&lt;br /&gt;0x4: #%04&lt;br /&gt;0x5: #%05&lt;br /&gt;0x6: #%06&lt;br /&gt;0x7: #%07&lt;br /&gt;0x8: #%08&lt;br /&gt;0x9: #%09&lt;br /&gt;0xa: #%0A&lt;br /&gt;0xb: #%0B&lt;br /&gt;0xc: #%0C&lt;br /&gt;0xd: #%0D&lt;br /&gt;0xe: #%0E&lt;br /&gt;0xf: #%0F&lt;br /&gt;0x10: #%10&lt;br /&gt;0x11: #%11&lt;br /&gt;0x12: #%12&lt;br /&gt;0x13: #%13&lt;br /&gt;0x14: #%14&lt;br /&gt;0x15: #%15&lt;br /&gt;0x16: #%16&lt;br /&gt;0x17: #%17&lt;br /&gt;0x18: #%18&lt;br /&gt;0x19: #%19&lt;br /&gt;0x1a: #%1A&lt;br /&gt;0x1b: #%1B&lt;br /&gt;0x1c: #%1C&lt;br /&gt;0x1d: #%1D&lt;br /&gt;0x1e: #%1E&lt;br /&gt;0x1f: #%1F&lt;br /&gt;0x20: #&lt;br /&gt;0x21: #!&lt;br /&gt;0x22: #"&lt;br /&gt;0x23: ##&lt;br /&gt;0x24: #$&lt;br /&gt;0x25: #%&lt;br /&gt;0x26: #&amp;&lt;br /&gt;0x27: #'&lt;br /&gt;0x28: #(&lt;br /&gt;0x29: #)&lt;br /&gt;0x2a: #*&lt;br /&gt;0x2b: #+&lt;br /&gt;0x2c: #,&lt;br /&gt;0x2d: #-&lt;br /&gt;0x2e: #.&lt;br /&gt;0x2f: #/&lt;br /&gt;0x30: #0&lt;br /&gt;0x31: #1&lt;br /&gt;0x32: #2&lt;br /&gt;0x33: #3&lt;br /&gt;0x34: #4&lt;br /&gt;0x35: #5&lt;br /&gt;0x36: #6&lt;br /&gt;0x37: #7&lt;br /&gt;0x38: #8&lt;br /&gt;0x39: #9&lt;br /&gt;0x3a: #:&lt;br /&gt;0x3b: #;&lt;br /&gt;0x3c: #&lt;&lt;br /&gt;0x3d: #=&lt;br /&gt;0x3e: #&gt;&lt;br /&gt;0x3f: #?&lt;br /&gt;0x40: #@&lt;br /&gt;0x41: #A&lt;br /&gt;0x42: #B&lt;br /&gt;0x43: #C&lt;br /&gt;0x44: #D&lt;br /&gt;0x45: #E&lt;br /&gt;0x46: #F&lt;br /&gt;0x47: #G&lt;br /&gt;0x48: #H&lt;br /&gt;0x49: #I&lt;br /&gt;0x4a: #J&lt;br /&gt;0x4b: #K&lt;br /&gt;0x4c: #L&lt;br /&gt;0x4d: #M&lt;br /&gt;0x4e: #N&lt;br /&gt;0x4f: #O&lt;br /&gt;0x50: #P&lt;br /&gt;0x51: #Q&lt;br /&gt;0x52: #R&lt;br /&gt;0x53: #S&lt;br /&gt;0x54: #T&lt;br /&gt;0x55: #U&lt;br /&gt;0x56: #V&lt;br /&gt;0x57: #W&lt;br /&gt;0x58: #X&lt;br /&gt;0x59: #Y&lt;br /&gt;0x5a: #Z&lt;br /&gt;0x5b: #[&lt;br /&gt;0x5c: #\&lt;br /&gt;0x5d: #]&lt;br /&gt;0x5e: #^&lt;br /&gt;0x5f: #_&lt;br /&gt;0x60: #`&lt;br /&gt;0x61: #a&lt;br /&gt;0x62: #b&lt;br /&gt;0x63: #c&lt;br /&gt;0x64: #d&lt;br /&gt;0x65: #e&lt;br /&gt;0x66: #f&lt;br /&gt;0x67: #g&lt;br /&gt;0x68: #h&lt;br /&gt;0x69: #i&lt;br /&gt;0x6a: #j&lt;br /&gt;0x6b: #k&lt;br /&gt;0x6c: #l&lt;br /&gt;0x6d: #m&lt;br /&gt;0x6e: #n&lt;br /&gt;0x6f: #o&lt;br /&gt;0x70: #p&lt;br /&gt;0x71: #q&lt;br /&gt;0x72: #r&lt;br /&gt;0x73: #s&lt;br /&gt;0x74: #t&lt;br /&gt;0x75: #u&lt;br /&gt;0x76: #v&lt;br /&gt;0x77: #w&lt;br /&gt;0x78: #x&lt;br /&gt;0x79: #y&lt;br /&gt;0x7a: #z&lt;br /&gt;0x7b: #{&lt;br /&gt;0x7c: #|&lt;br /&gt;0x7d: #}&lt;br /&gt;0x7e: #~&lt;br /&gt;0x7f: #%7F&lt;br /&gt;&lt;/pre&gt;ただ、今日のウェブアプリの作り方からすると、タブや改行コードも含めて状態を保持して欲しいところでもあり、次のように location.href から hash を取り出せば解決しそうな気がするのですが、このようなアプローチをとっている解説が見つからないのはなぜだろう？&lt;pre&gt;window.onhashchange = function() {&lt;br /&gt;  var hash = firefox&lt;br /&gt;    ? (location.href.split('#')[1] || '')&lt;br /&gt;    : location.hash;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;参考にした情報などどなど。ただ、Firefox の仕様はどうなっているのかは分かりませんでした。&lt;ul&gt;&lt;li&gt;&lt;a href="https://developer.mozilla.org/en/DOM/window.location"&gt;window.location - MDC Doc Center&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=483304"&gt;Bug 483304 – location.hash getter returns the hash value unescaped ("%7C" turns into "|")&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2341540242597435328?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2341540242597435328/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2341540242597435328' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2341540242597435328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2341540242597435328'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/firefox-locationhash.html' title='Firefox の location.hash は自動デコードにも関わらず、制御コードはデコードしないとか知ってました?'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-533866400799301645</id><published>2011-02-25T21:52:00.000+09:00</published><updated>2011-02-25T21:52:11.849+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! カレンダーを利用できるようになりました。</title><content type='html'>2月16日(水)、企業やチーム向けのプライベートマイクロブログ、&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。アップデートの主な内容は次の通りです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;カレンダーの追加&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;新しい標準アプリケーションとして、カレンダーを追加しました。&lt;br /&gt;&lt;br /&gt;カレンダーの表示画面では、自分のカレンダーの他、フォローしている他のユーザーのカレンダーもまとめて閲覧することができます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-PVws3mllAn0/TVta_OeDlXI/AAAAAAAAABE/Rqnlfr4GLLg/s1600/home.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 317px;" src="http://1.bp.blogspot.com/-PVws3mllAn0/TVta_OeDlXI/AAAAAAAAABE/Rqnlfr4GLLg/s400/home.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574149006063539570" /&gt;&lt;/a&gt;&lt;br /&gt;個々のスケジュールの表示画面では、スケジュールの詳細情報を閲覧することができます。スケジュールの詳細情報にはマイクロブログと連携するハッシュタグや、@ 記法によりユーザーへのリンクを含めることもできます。また、スケジュールにはコメントを付けることもできますので、この機能により会議の参加者をコメントで募ったり、会議の議事録をコメントで付けることもできます。（日報のアプリケーションでも同様にハッシュタグや @ 記法を利用することができます。）&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-IMdmJ5BdDyM/TVta-xigiYI/AAAAAAAAAA8/2QiqjS6MWoE/s1600/schedule.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 315px;" src="http://1.bp.blogspot.com/-IMdmJ5BdDyM/TVta-xigiYI/AAAAAAAAAA8/2QiqjS6MWoE/s400/schedule.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574148998297586050" /&gt;&lt;/a&gt;&lt;br /&gt;また、既に Google カレンダーを利用されている場合には、Google カレンダーをインポートすることもできます。（最大 5 つのカレンダーまで）&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-x3P4GQSrDVs/TVta-k2rmoI/AAAAAAAAAA0/kkHultwrXLU/s1600/import.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 255px;" src="http://3.bp.blogspot.com/-x3P4GQSrDVs/TVta-k2rmoI/AAAAAAAAAA0/kkHultwrXLU/s400/import.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574148994892536450" /&gt;&lt;/a&gt;&lt;br /&gt;次の画像は &lt;a href="https://www.google.com/calendar/embed?src=fvijvohm91uifvd9hratehf65k%40group.calendar.google.com"&gt;「IT 勉強会」&lt;/a&gt; の Google カレンダーをインポートした例です。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-TpUBONIKPkA/TVta-bbJEbI/AAAAAAAAAAs/SIWb2vleCug/s1600/google.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 315px;" src="http://4.bp.blogspot.com/-TpUBONIKPkA/TVta-bbJEbI/AAAAAAAAAAs/SIWb2vleCug/s400/google.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574148992361107890" /&gt;&lt;/a&gt;&lt;br /&gt;なお、日報のアプリケーションと同様に、カレンダーにおけるスケジュールの作成やスケジュールへのコメント等は、全てマイクロブログに通知されます。そのため、ユーザーはマイクロブログを通じてスケジュールを確認したり、また、マイクロブログを起点として、スケジュールについてのコミュニケーションを取ることができるようになっています。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; text-decoration: underline;"&gt;&lt;b&gt;メニューの整理&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;アプリケーションの右上のメニューを整理しました。今後もタスク管理やファイル共有等のアプリケーション、マイクロブログの検索機能等の追加を見込んでいますので、段階的にメニューの整理を続けていきます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-HXrdAZdnxC0/TVtfh5lP05I/AAAAAAAAABM/7D4Gw7rnW8M/s1600/menu.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 315px;" src="http://4.bp.blogspot.com/-HXrdAZdnxC0/TVtfh5lP05I/AAAAAAAAABM/7D4Gw7rnW8M/s400/menu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574153999798490002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000; text-decoration: underline;"&gt;&lt;b&gt;全てのアプリケーションの更新をお願いします！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブから、全てのアプリケーションを更新してください。「更新する」 リンクをクリックすると、アプリケーションを更新できます。「最新」 と表示されれば更新の完了です。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s1600/applications.png"&gt;&lt;img style="display:block; margin:0px auto; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s400/applications.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574156228142663426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、引き続き α テストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を始めることができます。企業や個人等、利用条件に制限はありませんので、この機会にぜひお試しください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-533866400799301645?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/533866400799301645/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=533866400799301645' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/533866400799301645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/533866400799301645'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/3arrows_25.html' title='3arrows アップデート! カレンダーを利用できるようになりました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-PVws3mllAn0/TVta_OeDlXI/AAAAAAAAABE/Rqnlfr4GLLg/s72-c/home.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1351172877618139478</id><published>2011-02-21T16:30:00.000+09:00</published><updated>2011-02-21T16:30:15.373+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Simple Storage Service'/><title type='text'>Amazon S3 でウェブサイトがホストできるようになったので移転してみた</title><content type='html'>こんにちは。なかじまんです。&lt;br /&gt;&lt;br /&gt;ずっととある VPS を利用していて、料金がもったいないなぁと思いつつも、過去に作ったコンテンツを破棄するのもなんだしなーと放置していたウェブサイトがあったのですが、なんと Amazon S3 でウェブサイトがホストできるようになったので、さっそく移転してみました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;移転元のサイト&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Postal Search APIs &amp;amp; Solutions&lt;br /&gt;&lt;a href="http://developmentor.lrlab.to/postal/"&gt;http://developmentor.lrlab.to/postal/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;移転で捨てたこと&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Perl5 による CGI がいくつかあったのですが、この機会に削除しました。また、Apache 固有の .ht ファイルも削除しました(もちろん不可視であるべきファイルも削除しました)。ので、正しく表示されないページやデッドリンクがありますが、そこはご愛敬で。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;バケットの作成と設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;developmentor.lrlab.to という新バケットを作りました。バケット名は CNAME と同じにしないとダメです。ここは今までと同じ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;バケットの設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;AWS Management Console からバケットのプロパティを開くと、Website タブが追加されています。ここで Enable のチェックを ON する。そんで Index Document: index.html、Error Document: 404.html とした。&lt;br /&gt;&lt;br /&gt;Index Document には / や /foo/ や /foo/bar/ のときに表示するファイルを指定する。今までは XML が表示されてしまったが、これでウェブサイトっぽくなる。ちなみに /foo/bar など末尾の / を省略したとき bar がフォルダのときは、302 でリダイレクトするあたりもウェブサイトと同じ。&lt;br /&gt;&lt;br /&gt;Error Document には、HTTP ステータスコードが 4xx のときに表示するファイルを指定する。指定したファイルはルートに置いておけばよい。Amazon S3 の仕様上は、400, 403, 404 が起こりうるが、ファイルは1つしか指定できない。ちょっと Amazon の手抜きっぽい気はするが、実質は 404 Not Found を表すファイルを追いておけば不自由ない。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;ファイルのアップロード&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;移転元のサイトのファイルをアップロードしました。ここも今までと同じ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;移転先のサイト&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amazon S3 のエンドポイントは、今までと同じ↓と思いきや、これが違うのです。このエンドポイントは、いわゆる S3 として振る舞うもので、Website とは関係ないようです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developmentor.lrlab.to.s3.amazonaws.com/postal/"&gt;http://developmentor.lrlab.to.s3.amazonaws.com/postal/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;構成上、そりゃそうかとも思えるし、いっしょにしてよとも思えるし。それで WebSite のエンドポイントは、特別に用意されたものがあり↓、今までと異なりました。しかも、選択した地域によって URL が違います。ありゃりゃ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developmentor.lrlab.to.s3-website-us-east-1.amazonaws.com/postal/"&gt;http://developmentor.lrlab.to.s3-website-us-east-1.amazonaws.com/postal/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;DNS の設定&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;CNAME developmentor.lrlab.to&lt;br /&gt;    developmentor.lrlab.to.s3-website-us-east-1.amazonaws.com&lt;br /&gt;&lt;/pre&gt;とすれば、おけ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;さようなら VPS&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;というわけで、次の更新のときには VPS を解約します。元々のアクセスはそれなりにありますが Amazon S3 の単価のほうが安いでしょう。また、気持ち的に管理主体が、自分から Amazon に移った気持ちになれるので、そこが気楽でいいかな。どうがんばったって第三者が悪さできることもないしね。&lt;br /&gt;&lt;br /&gt;ちょう適当メモですが、参考になれば幸いです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1351172877618139478?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1351172877618139478/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1351172877618139478' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1351172877618139478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1351172877618139478'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/amazon-s3.html' title='Amazon S3 でウェブサイトがホストできるようになったので移転してみた'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-3191286813089117287</id><published>2011-02-21T14:08:00.000+09:00</published><updated>2011-02-21T14:08:12.537+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! 多数のご要望を受けて、マイクロブログをキーワード検索できるようにしました! ブラウザの検索バーにも対応してます!</title><content type='html'>2月18日(金)、会社やチーム向けプライベートマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;マイクロブログのキーワード検索&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ユーザーからの多数のご要望を受けて、マイクロブログをキーワード検索できるようにしました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;アプリの検索ボックスから検索&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログと各アプリの右上メニューに、検索ボックスを配置しました。キーワードを入力して、検索ボタンをクリックすると、マイクロブログを検索できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-dPMArC5xBm4/TV39pU2jywI/AAAAAAAACqA/G-BiIMnb_DI/s1600/20110218-2.gif" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-dPMArC5xBm4/TV39pU2jywI/AAAAAAAACqA/G-BiIMnb_DI/s480/20110218-2.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;任意のキーワードのほか、ハッシュタグやユーザーID、文中の URL でも検索できます。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;キーワード&lt;/li&gt;&lt;li&gt;#ハッシュタグ&lt;/li&gt;&lt;li&gt;@ユーザーID&lt;/li&gt;&lt;li&gt;http(s):// ...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;なお、2月18日(金)からの投稿が検索対象になります。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;ブラウザの検索バーから検索&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Firefox 3、IE8、IE7 の検索バーから 3arrows のマイクロブログを直接検索できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-_mvGeeSfFu4/TV39pgyjBZI/AAAAAAAACqI/8WhMvLQ1Ud4/s1600/20110218-1.gif" imageanchor="1"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-_mvGeeSfFu4/TV39pgyjBZI/AAAAAAAACqI/8WhMvLQ1Ud4/s480/20110218-1.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;&lt;b&gt;アプリケーションのアップデートをお願いします。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブにアクセスして、各アプリケーションを更新してください。「更新する」リンクをクリックすると、アプリケーションを更新できます。「最新」と表示されれば、アップデートの完了です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s400/applications.png" imageanchor="1"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-uz07p8gRDZ0/TVthjmz5hwI/AAAAAAAAABU/AZM1hSwQmAs/s480/applications.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;3arrows では αユーザーを募集しています。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、αユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-3191286813089117287?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/3191286813089117287/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=3191286813089117287' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3191286813089117287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3191286813089117287'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/3arrows_21.html' title='3arrows アップデート! 多数のご要望を受けて、マイクロブログをキーワード検索できるようにしました! ブラウザの検索バーにも対応してます!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-dPMArC5xBm4/TV39pU2jywI/AAAAAAAACqA/G-BiIMnb_DI/s72-c/20110218-2.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8430157241151377588</id><published>2011-02-14T09:56:00.000+09:00</published><updated>2011-02-14T09:56:39.990+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! ご登録のメールアドレスからメールを送信してマイクロブログに投稿できるようになりました!</title><content type='html'>2月11日(金)、会社やチーム向けプライベートマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。アップデートの主な内容は、次のとおりです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;メールからマイクロブログへの投稿&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ご登録のメールアドレスから、メールを送信してマイクロブログに投稿できるようになりました。&lt;br /&gt;&lt;br /&gt;次の例では、Google AdWords から 10,000 円分の無料クーポンが届いたので、そのメールをマイクロブログに投稿して、何か広告を出すかメンバーに聞いています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-1yveRswgyzY/TVXopBAwfCI/AAAAAAAACnY/aHhFduk2_3Q/s1600/20110212-1.png" imageanchor="1" style=""&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-1yveRswgyzY/TVXopBAwfCI/AAAAAAAACnY/aHhFduk2_3Q/s480/20110212-1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;投稿先のメールアドレスは、マイクロブログの右上メニューのツールから入手できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-VqTzLmjvu9k/TVXopUMMSkI/AAAAAAAACng/K7RFl8VfHas/s1600/20110212-2.png" imageanchor="1" style=""&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-VqTzLmjvu9k/TVXopUMMSkI/AAAAAAAACng/K7RFl8VfHas/s480/20110212-2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;マイクロブログのリアルタイム性の向上&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ブラウザでマイクロブログを開いている間、新着の投稿があれば、順々と表示するようになりました。もう更新の操作は必要ありません。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;プラットフォームの性能向上&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;各アプリケーション (OpenSocial AppData) のデータ格納方法を見直して効率化することで、さらにパフォーマンスが向上しました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;アプリケーションの改善&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;日報アプリのいくつかの不具合を修正しました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000;"&gt;&lt;b&gt;マイクロブログ、日報アプリのアップデートをお願いします。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブにアクセスして、各アプリケーションを更新してください。「更新する」リンクをクリックすると、アプリケーションを更新できます。「最新」と表示されれば、アップデートの完了です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s1600/IMG_0025.png" imageanchor="1" style=""&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s480/IMG_0025.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、αユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8430157241151377588?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8430157241151377588/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8430157241151377588' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8430157241151377588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8430157241151377588'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/3arrows_14.html' title='3arrows アップデート! ご登録のメールアドレスからメールを送信してマイクロブログに投稿できるようになりました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1yveRswgyzY/TVXopBAwfCI/AAAAAAAACnY/aHhFduk2_3Q/s72-c/20110212-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1411363527646099205</id><published>2011-02-10T20:58:00.000+09:00</published><updated>2011-02-10T20:58:21.475+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows のマイクロブログと日報アプリを通じて、日報を中心としたコラボレーション、チームの知識や問題意識の共有を促進しよう!</title><content type='html'>プライベートマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; は、マイクロブログと連携する日報アプリも提供しています。&lt;br /&gt;&lt;br /&gt;日報は、上司への報告、チームへの共有という一方通行な関わりになりがちですが、マイクロブログと日報の組み合わせにより、マイクロブログを通じて、日報を中心とした双方向のコラボレーション、知識や問題意識の共有といった様々な効果が期待できます。&lt;br /&gt;&lt;br /&gt;マイクロブログと日報アプリの使い方(使われ方)をご紹介します。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;日報を登録する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;仕事が終わったら、日報アプリを使って、今日の業務内容や連絡事項を入力して、日報を登録します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TVI2BUDpvqI/AAAAAAAACnI/_NiDt80fWI0/s1600/20110209-4.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TVI2BUDpvqI/AAAAAAAACnI/_NiDt80fWI0/s480/20110209-4.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;日報を共有する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;日報を登録すると、日報の概要がマイクロブログに投稿されます。そして、マイクロブログを通じて、メンバーや上司は、日報の登録があったことを知ります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TVI2AwGFrqI/AAAAAAAACmw/7BTVZwHstxs/s1600/20110209-1.png" imageanchor="1"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TVI2AwGFrqI/AAAAAAAACmw/7BTVZwHstxs/s480/20110209-1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;日報にコメントする&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;メンバーや上司は、マイクロブログから日報を開き、日報の詳細を確認します。また、必要に応じて、日報にコメントをします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TVI2BepBjmI/AAAAAAAACnA/nTDYceK8uxg/s1600/20110209-3.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TVI2BepBjmI/AAAAAAAACnA/nTDYceK8uxg/s480/20110209-3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;日報のコメントを確認する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;日報にコメントすると、そのコメントもマイクロブログに投稿されます。コメントの返信先は、日報を登録したユーザになります。ですので、マイクロブログへの返信を確認すれば、日報へのコメントをまとめて把握できます。さらにコメントを返すこともできます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TVI2A7HohLI/AAAAAAAACm4/7WoM4AL4Sls/s1600/20110209-2.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TVI2A7HohLI/AAAAAAAACm4/7WoM4AL4Sls/s480/20110209-2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;メールで日報を共有する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;日報を登録すると、日報を登録したユーザをフォローしているメンバーや上司に対して、日報の内容をメールで通知します。例えば、上司は、報告を必要とするユーザさえフォローしておけば、マイクロブログを使わずとも、メールにより、日報を受け取ることができます。&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: xx-small;"&gt;3arrows - #日報 #2011/02/09 3arrows のテスト、不具合修正&lt;br /&gt;なかじまんソフトウェア の Nobuhiro Nakajima さんからメッセージが届いています。&lt;br /&gt;-- メッセージここから --&lt;br /&gt;下記の不具合を修正しました。&lt;br /&gt;(1) 日報、コメントの投稿の際にタグをエスケープするようにしました。&lt;br /&gt;(2) コメントの表示順を最新日時順にしました。&lt;br /&gt;(3) いくつかの JavaScript エラーを修正しました。&lt;br /&gt;下記の改善をしました。&lt;br /&gt;(1) 定期的にトークンをリフレッシュして、ログインの有効期限の間 API にアクセスできるようにしました。&lt;br /&gt;出社時刻 10:30、退社時刻 18:00、勤務時間 06:30&lt;br /&gt;-- メッセージここまで --&lt;br /&gt;今後とも 3arrows をどうぞよろしくお願いいたします。&lt;br /&gt;--&lt;br /&gt;3arrows&lt;br /&gt;http://www.3arrows.jp/&lt;br /&gt;メッセージを送信したアプリケーション&lt;br /&gt;http://nakajiman.3arrows.jp/a/@dailyreport&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;過去の日報を確認する&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;過去に登録した日報は、後からいつでも再確認できます。日報のコメントも確認できますので、情報がバラバラになることもありません。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TVI6NPWXBNI/AAAAAAAACnQ/1eara0c_yZU/s1600/20110209-5.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TVI6NPWXBNI/AAAAAAAACnQ/1eara0c_yZU/s480/20110209-5.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;いかがでしょうか。&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; によって、さらに日報を活用してみませんか。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、αユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1411363527646099205?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1411363527646099205/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1411363527646099205' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1411363527646099205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1411363527646099205'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/3arrows_10.html' title='3arrows のマイクロブログと日報アプリを通じて、日報を中心としたコラボレーション、チームの知識や問題意識の共有を促進しよう!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_R7O_2gBTssg/TVI2BUDpvqI/AAAAAAAACnI/_NiDt80fWI0/s72-c/20110209-4.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8026873938081510109</id><published>2011-02-08T20:08:00.000+09:00</published><updated>2011-02-08T20:08:42.501+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows のマイクロブログで、各メンバーの最新投稿を確認して、出社状況や今日の予定をまとめて把握しよう</title><content type='html'>プライベートマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; のマイクロブログは、&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #990000;"&gt;時系列のタイムライン表示に加えて、各メンバーの最新投稿を確認&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; できます。&lt;br /&gt;&lt;br /&gt;朝の 9:00 過ぎに、各メンバーの最新投稿を確認すると、各メンバーの出社状況や、今日の予定がまとめて確認できるでしょう。また、投稿がなければ寝坊や事件に巻き込まれているのかもしれません。&lt;br /&gt;&lt;br /&gt;例えば、次のように表示されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TU-K_tUIhwI/AAAAAAAACmo/9oavh8wvtS4/s1600/20110207-1.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TU-K_tUIhwI/AAAAAAAACmo/9oavh8wvtS4/s480/20110207-1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;この会社では、朝イチにラジオ体操をするようです。ミーティングで客先に直行している社員がいます。今日は、仕事が終わったら、社長がご馳走してくれるようです。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #444444;"&gt;&lt;span style="font-size: x-small;"&gt;※この会社はフィクションであり、実在の人物・団体等とは一切関係がありません。(^_^;)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;プライベートマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、αユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8026873938081510109?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8026873938081510109/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8026873938081510109' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8026873938081510109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8026873938081510109'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/3arrows_08.html' title='3arrows のマイクロブログで、各メンバーの最新投稿を確認して、出社状況や今日の予定をまとめて把握しよう'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_R7O_2gBTssg/TU-K_tUIhwI/AAAAAAAACmo/9oavh8wvtS4/s72-c/20110207-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1823628351663775929</id><published>2011-02-05T20:23:00.000+09:00</published><updated>2011-02-05T20:23:13.145+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! ユーザーからの多数のご要望を受けて、オリジナル画像をプロフィールアイコンに設定できるようにしました!</title><content type='html'>2月4日(金)、会社やチーム向けマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;オリジナル画像によるプロフィールアイコンの設定&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ユーザーからの多数のご要望を受けて、オリジナル画像をプロフィールアイコンに設定できるようにしました。マイクロブログの右メニューの設定リンクをクリックすると、プロフィール編集のページが開きます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TUIZgxzE6bI/AAAAAAAACks/AvMpsaVsm5w/s1600/20110128-3.png" imageanchor="1"&gt;&lt;img border="0" height="58" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TUIZgxzE6bI/AAAAAAAACks/AvMpsaVsm5w/s400/20110128-3.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;続けて、画像をアップロードするリンクをクリックして、オリジナル画像をアップロードしてください。オリジナル画像は自動リサイズしますが、あらかじめ 48x48 サイズのものをアップロードすることをお勧めします。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TUtcix_2hhI/AAAAAAAACmg/fqr8RqGtsd8/s1600/20110204-2.png" imageanchor="1"&gt;&lt;img border="0" height="253" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TUtcix_2hhI/AAAAAAAACmg/fqr8RqGtsd8/s320/20110204-2.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;なお、3arrows は &lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #990000;"&gt;管理者があらゆることをコントロールできること&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; を原則に掲げて取り組んでいます。この原則に変わりはなく、管理者の方は、今までどおり、コントロールパネル上で各メンバーのプロフィールアイコンを上書き変更できます。&lt;br /&gt;&lt;br /&gt;また、アップロードした画像は、同じ会社やチームのメンバーしか閲覧できないように制限しています。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;マイクロブログのサムネイル表示&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログのサムネイル表示対象を拡大しました。 &lt;b&gt;&lt;span style="color: #990000; font-size: large;"&gt;赤字&lt;/span&gt;&lt;/b&gt; が追加分です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TUtcedr47OI/AAAAAAAACmY/ZAsji84-KMA/s1600/20110204-1.png" imageanchor="1"&gt;&lt;img border="0" height="167" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TUtcedr47OI/AAAAAAAACmY/ZAsji84-KMA/s400/20110204-1.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ドキュメント：&lt;/b&gt; PDF, Word, Excel, Power Point, Cacoo, SlideShare, JPEG, GIF, PNG &lt;br /&gt;&lt;b&gt;動画：&lt;/b&gt; Ustream, YouTube, Vimeo&lt;br /&gt;&lt;b&gt;写真：&lt;/b&gt; Flickr, Picasa, 壁紙.com, フォト蔵, TwitPic, Yfrog&lt;br /&gt;&lt;b&gt;地図：&lt;/b&gt; Google Maps&lt;br /&gt;&lt;b&gt;ニュース：&lt;/b&gt; Teckwave, Web 担当者 Forum, CNET Japan, &lt;span style="font-size: large;"&gt;&lt;b style="color: #990000;"&gt;ITpro&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;レビュー：&lt;/b&gt; DIME, ブクログ, coneco.net, MonoColle&lt;br /&gt;&lt;b&gt;コラム：&lt;/b&gt; ダイヤモンド・オンライン&lt;br /&gt;&lt;b&gt;グルメ：&lt;/b&gt; ホットペッパー, ぐるなび, 食べログ&lt;br /&gt;&lt;b&gt;クーポン：&lt;/b&gt; ポンパレード, グルーポン, Piku&lt;br /&gt;&lt;b&gt;ファッション：&lt;/b&gt; ママ・マーケット, BUYMA, ホットペッパービューティー, ZOZOTOWN&lt;br /&gt;&lt;b&gt;通販：&lt;/b&gt; アイテムポスト, カラメル&lt;br /&gt;&lt;b&gt;自動車：&lt;/b&gt; グーネット, グーワールド, グーバイク&lt;br /&gt;&lt;b&gt;Q &amp;amp; A：&lt;/b&gt; 教えて! goo&lt;br /&gt;&lt;b&gt;ブログ：&lt;/b&gt; goo ブログ, Blogger&lt;br /&gt;&lt;b&gt;結婚：&lt;/b&gt; ウエディングパーク&lt;br /&gt;&lt;b&gt;コミュニティ：&lt;/b&gt; cooboo&lt;br /&gt;&lt;b&gt;エンタメ：&lt;/b&gt; 講談社コミックプラス&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; は αテストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1823628351663775929?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1823628351663775929/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1823628351663775929' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1823628351663775929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1823628351663775929'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/3arrows.html' title='3arrows アップデート! ユーザーからの多数のご要望を受けて、オリジナル画像をプロフィールアイコンに設定できるようにしました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_R7O_2gBTssg/TUIZgxzE6bI/AAAAAAAACks/AvMpsaVsm5w/s72-c/20110128-3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-7667944702676194323</id><published>2011-02-04T10:59:00.000+09:00</published><updated>2011-02-04T10:59:49.498+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>Twitter 上の情報収集、チーム内共有、発信までのワークフローを支援するツイートインアプリをアップデートしました!</title><content type='html'>2月2日、マイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; の「ツイートイン」アプリをアップデートしました。&lt;br /&gt;&lt;br /&gt;「ツイートイン」アプリは、ソーシャルメディア Twitter からの情報収集、チーム内共有、発信までのワークフローを支援することを目的としたアプリケーションです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKVgZwRvI/AAAAAAAAClM/BJeTzuIveo8/s1600/tweet-in-1.png" imageanchor="1"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKVgZwRvI/AAAAAAAAClM/BJeTzuIveo8/s400/tweet-in-1.png" width="372" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;アプリケーションの特徴や使い方、導入方法は、&lt;a href="http://nakajiman.blogspot.com/2011/01/blog-post.html"&gt;ソーシャルメディアの情報収集、チーム内共有、発信までのワークフローを支援するツイートインアプリのご紹介&lt;/a&gt; をご覧ください。&lt;br /&gt;&lt;br /&gt;アップデートの内容は、次のとおりです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ウォッチ対象の並び替え&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;マウスのドラッグ＆ドロップで、ウォッチ対象を並び替えできるようにしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TUkMlcoigiI/AAAAAAAACmM/_disirJ9zWU/s1600/20110202-1.png" imageanchor="1"&gt;&lt;img border="0" height="327" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TUkMlcoigiI/AAAAAAAACmM/_disirJ9zWU/s400/20110202-1.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;重複ハッシュタグの除去&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ハッシュタグが重複しないようになりました。ツイートをマイクロブログで共有するとき、ウォッチ条件をハッシュタグとして付与していましたが、すでにツイートにハッシュタグが含まれるときは、付与しないようにしました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;アプリ名ハッシュタグの追加&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ツイートをマイクロブログで共有するとき、「#ツイートイン」ハッシュタグを付与するようにしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; は αテストのユーザーを募集しています。サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。もちろん、α版の期間中は無料でご利用いただけます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-7667944702676194323?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/7667944702676194323/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=7667944702676194323' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7667944702676194323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7667944702676194323'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/02/twitter.html' title='Twitter 上の情報収集、チーム内共有、発信までのワークフローを支援するツイートインアプリをアップデートしました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKVgZwRvI/AAAAAAAAClM/BJeTzuIveo8/s72-c/tweet-in-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2981373130897822108</id><published>2011-01-29T08:39:00.002+09:00</published><updated>2011-01-29T08:39:58.369+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>ソーシャルメディアの情報収集、チーム内共有、発信までのワークフローを支援するツイートインアプリのご紹介</title><content type='html'>会社やチーム向けマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; の可能性を証明する活動として、3arrows チーム内では、さまざまなアプリケーションの開発を試みています。&lt;br /&gt;&lt;br /&gt;今回はその成果のひとつである「ツイートイン」アプリを紹介します。「ツイートイン」アプリは、ソーシャルメディアの情報収集、チーム内共有、発信までのワークフローを支援することを目的としたアプリケーションです。ソーシャルメディアは Twitter を題材としています。&lt;br /&gt;&lt;br /&gt;「ツイートイン」アプリは、様々な条件で Twitter 上のツイートをウォッチできます。ダッシュボードスタイルを採用して、ひとつのページ内でまとめて情報収集できます。次の画面イメージは、Twitter 上の自社ブランドに対するツイートをウォッチしている様子を表しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKVgZwRvI/AAAAAAAAClM/BJeTzuIveo8/s1600/tweet-in-1.png" imageanchor="1"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKVgZwRvI/AAAAAAAAClM/BJeTzuIveo8/s400/tweet-in-1.png" width="372" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;自社ブランドに対する質問や苦情、ファン、有益な情報を見つけたときは、そのツイートを引用する形でマイクロブログに投稿して、社内で情報共有できます。そして、続けてマイクロブログで、そのツイートへの対応をディスカッションして、その結果をマイクロブログから直接 Twitter へ発信できます。&lt;br /&gt;&lt;br /&gt;さらに、見つけたツイートのユーザやハッシュタグからマイクロブログを検索して、過去の話題を引き出すこともできます。例えば、あるユーザの自社ブランドに対する発言が、ネガティブからポジティブに変わったといった変化を追跡できる可能性が高まります。&lt;br /&gt;&lt;br /&gt;「ツイートイン」アプリは、使えば使うほど (マイクロブログに投稿が蓄積されるほど) 効果が高まる仕組みとなっていますので、ぜひ使ってみてください。ご要望がありましたらぜひフィードバックをお願いします。作者としては公式アプリに格上げしたい意気込みです。&lt;br /&gt;&lt;br /&gt;詳しく機能と使い方をご紹介します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ウォッチ対象の追加&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ツイートのウォッチ対象は、①ユーザ、②リスト、③キーワードの 3とおりで、フォームから簡単に追加できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TUJKVzI8FdI/AAAAAAAAClU/6LcoDoXE0OE/s1600/tweet-in-2.png" imageanchor="1"&gt;&lt;img border="0" height="227" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TUJKVzI8FdI/AAAAAAAAClU/6LcoDoXE0OE/s400/tweet-in-2.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ウォッチの内容とマイクロブログでの共有&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ウォッチ対象は、緑のボックスで表示し、最新 20件のツイートを表示します。また、新しいツイートが見つかると、メッセージでお知らせします。&lt;br /&gt;&lt;br /&gt;① タイトルは、ウォッチ対象を表し、クリックすると Twitter の該当ページを開きます。&lt;br /&gt;② ×アイコンをクリックすると、ウォッチ対象を削除します。&lt;br /&gt;③ (後述)&lt;br /&gt;④ 同じ対象をウォッチしているフォロワーをアイコンで表します。&lt;br /&gt;⑤ (後述)&lt;br /&gt;⑥ ユーザのアイコンをクリックすると、Twitter のプロフィールページを開きます。&lt;br /&gt;⑦ 日時をクリックすると、Twitter のツイートページを開きます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TUJKWET9djI/AAAAAAAAClc/rFYvJ9ewB6U/s1600/tweet-in-3.png" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TUJKWET9djI/AAAAAAAAClc/rFYvJ9ewB6U/s320/tweet-in-3.png" width="169" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;③ 共通リンクをクリックすると、ツイートの URL と内容をマイクロブログに投稿します。このとき、ウォッチ対象をハッシュタグとして加えます。また、ツイートの内容に URL が含まれるときは &lt;a href="http://socialprise-association.blogspot.com/2011/01/3arrows.html"&gt;サムネイル画像を表示&lt;/a&gt; します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TUJKWdGfIzI/AAAAAAAAClk/6TlMH797IZY/s1600/tweet-in-4.png" imageanchor="1"&gt;&lt;img border="0" height="132" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TUJKWdGfIzI/AAAAAAAAClk/6TlMH797IZY/s400/tweet-in-4.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;⑤ ユーザ名やハッシュタグをクリックすると、該当ユーザやハッシュタグでマイクロブログを検索します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKWs_gwUI/AAAAAAAACls/Dn-xjWqhb24/s1600/tweet-in-5.png" imageanchor="1"&gt;&lt;img border="0" height="108" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKWs_gwUI/AAAAAAAACls/Dn-xjWqhb24/s400/tweet-in-5.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ツイートボタンをクリックすると、マイクロブログの投稿内容をそのまま Twitter に投稿できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TUIZcrCL8BI/AAAAAAAACkk/5cd41MNzU8I/s1600/20110128-2.png" imageanchor="1"&gt;&lt;img border="0" height="158" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TUIZcrCL8BI/AAAAAAAACkk/5cd41MNzU8I/s400/20110128-2.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;「ツイートイン」アプリは、3arrows の管理者権限があれば、特別な条件なくいつでも導入できます。「ツイートイン」アプリの導入手順は、次のとおりです。&lt;br /&gt;&lt;br /&gt;(1) 次のページから tweet-in.xml ファイルをダウンロードしてください。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://sites.google.com/a/socialprise.jp/3arrows-jp/downloads"&gt;https://sites.google.com/a/socialprise.jp/3arrows-jp/downloads&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(2) 3arrows にログインし、コントロールパネルのアプリケーションタブを選択します。&lt;br /&gt;(3) アプリケーションを追加するボタンをクリックし、テンプレートアプリを作成します。&lt;br /&gt;(4) テンプレートアプリをクリックして、アプリケーションの情報を表示します。&lt;br /&gt;(5) 編集するボタンをクリックして、オンラインエディタを開きます。&lt;br /&gt;(6) tweet-in.xml ファイルの内容をそのまま貼り付けて、保存ボタンをクリックします。&lt;br /&gt;(7) 実行ボタンをクリックすると、「ツイートイン」アプリを実行できます! &lt;br /&gt;&lt;br /&gt;導入手順は少し敷居が高くなっています。もしも分からないことがありましたら、お気軽にお問い合わせください。導入をお手伝いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2981373130897822108?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2981373130897822108/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2981373130897822108' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2981373130897822108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2981373130897822108'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/01/blog-post.html' title='ソーシャルメディアの情報収集、チーム内共有、発信までのワークフローを支援するツイートインアプリのご紹介'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_R7O_2gBTssg/TUJKVgZwRvI/AAAAAAAAClM/BJeTzuIveo8/s72-c/tweet-in-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-3782774075242302738</id><published>2011-01-28T13:18:00.002+09:00</published><updated>2011-01-28T13:18:41.790+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>本日 (1/28) より 3arrows は、試用キーなしで、どなたでもすぐに試用できるようになりました!</title><content type='html'>会社やチーム向けマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; は、&lt;a href="http://socialprise-association.blogspot.com/2010_12_01_archive.html"&gt;α版の提供開始&lt;/a&gt; からちょうど 1ヵ月が経過しました。そして、&lt;span style="font-size: large; color: #cc0000;"&gt;&lt;b&gt;本日 (1/28) より 3arrows は、試用キーなしで、どなたでもすぐに試用できる&lt;/b&gt;&lt;/span&gt; ようになりました。&lt;br /&gt;&lt;br /&gt;サインアップの手続きはとても簡単です。数分ですぐに利用を開始できます。会社や個人など利用条件に制限はありませんので、この機会にぜひご利用ください。もちろん、α版の期間中は無料でご利用いただけます。&lt;br /&gt;&lt;br /&gt;3arrows のサインアップは、トップページ右の試用するリンクからお願いします。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;a href="http://www.3arrows.jp/"&gt;http://www.3arrows.jp/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TUI6eI_E_RI/AAAAAAAACk8/w_8bBnPMIkk/s1600/20110128-4.png" imageanchor="1" style=""&gt;&lt;img border="0" height="249" width="320" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TUI6eI_E_RI/AAAAAAAACk8/w_8bBnPMIkk/s320/20110128-4.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;任意のメールアドレスでサインアップできます。後は、ページの案内に従って、手続きをお願いします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TUI6owvZdwI/AAAAAAAAClE/zuGUoZfXx44/s1600/20110128-5.png" imageanchor="1" style=""&gt;&lt;img border="0" height="225" width="320" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TUI6owvZdwI/AAAAAAAAClE/zuGUoZfXx44/s320/20110128-5.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;この 1ヵ月の間、多くのフィードバックを頂き、いろいろ学ぶことができました。まだまだ、頂いた要望をすべて実現してお届けできていませんが、1つ1つ丁寧に対応していきますので、今後もご支援よろしくお願いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-3782774075242302738?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/3782774075242302738/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=3782774075242302738' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3782774075242302738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3782774075242302738'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/01/128-3arrows.html' title='本日 (1/28) より 3arrows は、試用キーなしで、どなたでもすぐに試用できるようになりました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R7O_2gBTssg/TUI6eI_E_RI/AAAAAAAACk8/w_8bBnPMIkk/s72-c/20110128-4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-647825510137112295</id><published>2011-01-28T12:36:00.002+09:00</published><updated>2011-01-28T12:36:43.315+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! ユーザーからのご要望を受けて、広報活動を支援するツイートボタンの設置、各ユーザによるプロフィールの編集を追加しました</title><content type='html'>本日(1/28)、会社やチーム向けマイクロブログ &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。今回のアップデートでは、ユーザーからのご要望を受けて、2つの機能を追加しました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(1) 広報活動を支援するツイートボタンの設置&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログの各投稿にツイートボタンを設置しました。ツイートボタンをクリックすると、マイクロブログの投稿内容をそのまま Twitter に投稿できます。&lt;br /&gt;&lt;br /&gt;社内メンバーとマイクロブログを使って Twitter の告知内容をディスカッションしながら下書きを作り、メンバーの承認を得て、ツイートボタンで Twitter へ投稿するといった流れの使い方ができるようになりました。&lt;br /&gt;&lt;br /&gt;社内やチームの広報活動にご活用ください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TUIZcrCL8BI/AAAAAAAACkk/5cd41MNzU8I/s1600/20110128-2.png" imageanchor="1"&gt;&lt;img border="0" height="158" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TUIZcrCL8BI/AAAAAAAACkk/5cd41MNzU8I/s400/20110128-2.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(2) 各ユーザによるプロフィールの編集&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;各ユーザが直接プロフィールを編集できるようにしました。マイクロブログの右メニューの設定リンクをクリックすると、自己プロフィールを編集できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TUIZgxzE6bI/AAAAAAAACks/AvMpsaVsm5w/s1600/20110128-3.png" imageanchor="1"&gt;&lt;img border="0" height="58" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TUIZgxzE6bI/AAAAAAAACks/AvMpsaVsm5w/s400/20110128-3.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3arrows は「管理者があらゆることをコントロールできること」を原則に掲げて取り組んでいますが、自己紹介やアイコンという項目は、ユーザの裁量によって決定したいこともあることを学びました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TUIZplhGnTI/AAAAAAAACk0/q53QYPLclIA/s1600/20110128-1.png" imageanchor="1"&gt;&lt;img border="0" height="270" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TUIZplhGnTI/AAAAAAAACk0/q53QYPLclIA/s400/20110128-1.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;もちろん、引き続き、管理者による各ユーザのプロフィール編集はサポートしますので、管理者がコントロールできる範囲に変わりはありません。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000;"&gt;&lt;b&gt;マイクロブログ、チェックイン、日報アプリのアップデートをお願いします。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;管理者の方は、コントロールパネルのアプリケーションタブにアクセスして、各アプリケーションを更新してください。「更新する」リンクをクリックすると、アプリケーションを更新できます。「最新」と表示されれば、アップデートの完了です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s1600/IMG_0025.png" imageanchor="1" style="margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s400/IMG_0025.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; は αテストのユーザーを募集しています。もちろん、テストの期間中は無料でご利用いただけます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-647825510137112295?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/647825510137112295/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=647825510137112295' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/647825510137112295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/647825510137112295'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/01/3arrows_28.html' title='3arrows アップデート! ユーザーからのご要望を受けて、広報活動を支援するツイートボタンの設置、各ユーザによるプロフィールの編集を追加しました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R7O_2gBTssg/TUIZcrCL8BI/AAAAAAAACkk/5cd41MNzU8I/s72-c/20110128-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6925756731330772085</id><published>2011-01-24T10:43:00.002+09:00</published><updated>2011-01-24T10:43:43.733+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! お客様のドメイン ID をサブドメインとして、よりセキュアな環境でご利用いただけるようになりました!</title><content type='html'>1月21日(金)、会社やチームなどプライベート向けマイクロブログ／コラボレーションサービス &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(1) 各ドメイン ID のサブドメイン化&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;今回のアップデートにより、お客様のドメイン ID がサブドメインとなり、よりセキュアな環境でご利用いただけるようになります。&lt;br /&gt;&lt;br /&gt;従来のログイン URL&lt;br /&gt;http://www.3arrows.jp/a/{お客様のドメイン ID}/&lt;br /&gt;&lt;br /&gt;新しいログイン URL&lt;br /&gt;http://{お客様のドメイン ID}.3arrows.jp/a/&lt;br /&gt;&lt;br /&gt;今回のアップデート以降、従来の URL は新しい URL にリダイレクトされます。そのため、お客様による対応は特に必要ありません。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(2) マイクロブログ、チェックイン、日報アプリの改善&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;各アプリにおいて、エラー検出とメッセージの内容を見直し、万が一エラーが発生したとき、お客様がそのエラーの内容を把握しやすくなりました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(3) マイクロブログのサムネイル表示&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログのサムネイル表示対象を拡大しました。赤字が追加分です。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ドキュメント：&lt;/b&gt; PDF, Word, Excel, Power Point, Cacoo, SlideShare, JPEG, GIF, PNG &lt;br /&gt;&lt;b&gt;動画：&lt;/b&gt; Ustream, YouTube, &lt;b style="color: #990000;"&gt;Vimeo&lt;/b&gt;&lt;br /&gt;&lt;b&gt;写真：&lt;/b&gt; Flickr, Picasa, 壁紙.com, フォト蔵, TwitPic, Yfrog&lt;br /&gt;&lt;b&gt;地図：&lt;/b&gt; Google Maps&lt;br /&gt;&lt;b&gt;ニュース：&lt;/b&gt; Teckwave, Web 担当者 Forum, CNET Japan &lt;br /&gt;&lt;b&gt;レビュー：&lt;/b&gt; DIME, ブクログ, coneco.net, MonoColle&lt;br /&gt;&lt;b&gt;コラム：&lt;/b&gt; ダイヤモンド・オンライン&lt;br /&gt;&lt;b&gt;グルメ：&lt;/b&gt; ホットペッパー, ぐるなび, 食べログ&lt;br /&gt;&lt;b&gt;クーポン：&lt;/b&gt; ポンパレード, グルーポン, Piku&lt;br /&gt;&lt;b&gt;ファッション：&lt;/b&gt; ママ・マーケット, BUYMA, ホットペッパービューティー, ZOZOTOWN&lt;br /&gt;&lt;b&gt;通販：&lt;/b&gt; アイテムポスト, カラメル&lt;br /&gt;&lt;b&gt;自動車：&lt;/b&gt; グーネット, グーワールド, グーバイク&lt;br /&gt;&lt;b&gt;Q &amp;amp; A：&lt;/b&gt; 教えて! goo&lt;br /&gt;&lt;b&gt;ブログ：&lt;/b&gt; goo ブログ, Blogger&lt;br /&gt;&lt;b&gt;結婚：&lt;/b&gt; ウエディングパーク&lt;br /&gt;&lt;b&gt;コミュニティ：&lt;/b&gt; cooboo&lt;br /&gt;&lt;b&gt;エンタメ：&lt;/b&gt; 講談社コミックプラス&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; color: #cc0000;"&gt;&lt;b&gt;マイクロブログ、チェックイン、日報アプリのアップデートとお願いします。&lt;/b&gt;&lt;/span&gt; 管理者の方は、コントロールパネルのアプリケーションタブにアクセスして、各アプリケーションを更新してください。「更新する」リンクをクリックすると、アプリケーションを更新できます。「最新」と表示されれば、アップデートの完了です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s1600/IMG_0025.png" imageanchor="1" style="margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s400/IMG_0025.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、α版の試用ユーザを幅広く募集しています。試用に特別な条件はありません。ご希望の方に試用キーを発行する形をとっています。試用をご希望の方は &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; トップの &lt;a href="https://www.heartrails.com/company/inquiry.html?service=3arrows.trial"&gt;試用を申し込む&lt;/a&gt; からお申し込みください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6925756731330772085?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6925756731330772085/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6925756731330772085' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6925756731330772085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6925756731330772085'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/01/3arrows-id.html' title='3arrows アップデート! お客様のドメイン ID をサブドメインとして、よりセキュアな環境でご利用いただけるようになりました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s72-c/IMG_0025.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-5313510262445804416</id><published>2011-01-12T13:41:00.000+09:00</published><updated>2011-01-12T13:41:49.401+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! ログイン有効期限を設定できます! Google Reader からマイクロブログへの投稿など、マイクロブログと日報アプリを改善しました!</title><content type='html'>本日(1/12)、会社やチームなどプライベート向けマイクロブログ／コラボレーションサービス &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートしました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(1) ログインの有効期限の指定&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ログインの有効期限を指定できるようにしました。1時間、3時間、6時間、12時間、1日、3日、7日から選択できます。初期値は 1日です。コントロールパネルのドメインタブから指定できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TS0FnkpoO9I/AAAAAAAACiE/-jtBQlcJDAM/s1600/20110112-1.gif" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TS0FnkpoO9I/AAAAAAAACiE/-jtBQlcJDAM/s400/20110112-1.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(2) マイクロブログへ Google Reader からの共有&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Google Reader で読んでいるブログ記事を、その場で直接マイクロブログに投稿できるようにしました。マイクロブログの右上のメニューからツールをクリックすると、Google Reader のカスタムリンクの設定が表示されますので、 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TS0FrfuSqlI/AAAAAAAACiM/bHme5DyTe6E/s1600/20110112-2.gif" imageanchor="1"&gt;&lt;img border="0" height="163" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TS0FrfuSqlI/AAAAAAAACiM/bHme5DyTe6E/s400/20110112-2.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google リーダー &lt;a href="http://www.google.co.jp/reader/settings"&gt;設定&lt;/a&gt; の送信先タブを開いて、3arrows のカスタムリンクを作成してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TS0L5d4m-nI/AAAAAAAACic/NQC9K2A_C9U/s1600/20110112-3.gif" imageanchor="1"&gt;&lt;img border="0" height="158" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TS0L5d4m-nI/AAAAAAAACic/NQC9K2A_C9U/s400/20110112-3.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;カスタムリンクを作成すると、ブログ記事のメニューの送信先に 3arrows が追加されます。この 3arrows をクリックすると、このブログ記事をマイクロブログに投稿できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TS0L_XEQgsI/AAAAAAAACik/sI4pnOOCFrk/s1600/20110112-4.gif" imageanchor="1"&gt;&lt;img border="0" height="115" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TS0L_XEQgsI/AAAAAAAACik/sI4pnOOCFrk/s400/20110112-4.gif" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(3) マイクロブログのサムネイル表示&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;マイクロブログのサムネイル表示対象を拡大しました。赤字が追加分です。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ドキュメント：&lt;/b&gt; PDF, Word, Excel, Power Point, Cacoo, SlideShare, &lt;b style="color: #990000;"&gt;JPEG&lt;/b&gt;, &lt;b style="color: #990000;"&gt;GIF&lt;/b&gt;, &lt;b style="color: #990000;"&gt;PNG&lt;/b&gt; &lt;br /&gt;&lt;b&gt;動画：&lt;/b&gt; Ustream, YouTube&lt;br /&gt;&lt;b&gt;写真：&lt;/b&gt; Flickr, Picasa, 壁紙.com, フォト蔵, TwitPic, Yfrog&lt;br /&gt;&lt;b&gt;地図：&lt;/b&gt; Google Maps&lt;br /&gt;&lt;b&gt;ニュース：&lt;/b&gt; Teckwave, Web 担当者 Forum, &lt;b style="color: #990000;"&gt;CNET Japan&lt;/b&gt; &lt;br /&gt;&lt;b&gt;レビュー：&lt;/b&gt; DIME, ブクログ, coneco.net, MonoColle&lt;br /&gt;&lt;b&gt;コラム：&lt;/b&gt; &lt;b style="color: #990000;"&gt;ダイヤモンド・オンライン&lt;/b&gt;&lt;br /&gt;&lt;b&gt;グルメ：&lt;/b&gt; ホットペッパー, ぐるなび, 食べログ&lt;br /&gt;&lt;b&gt;クーポン：&lt;/b&gt; ポンパレード, グルーポン, Piku&lt;br /&gt;&lt;b&gt;ファッション：&lt;/b&gt; ママ・マーケット, BUYMA, ホットペッパービューティー, ZOZOTOWN&lt;br /&gt;&lt;b&gt;通販：&lt;/b&gt; アイテムポスト, カラメル&lt;br /&gt;&lt;b&gt;自動車：&lt;/b&gt; グーネット, グーワールド, グーバイク&lt;br /&gt;&lt;b&gt;Q &amp;amp; A：&lt;/b&gt; 教えて! goo&lt;br /&gt;&lt;b&gt;ブログ：&lt;/b&gt; goo ブログ, &lt;b style="color: #990000;"&gt;Blogger&lt;/b&gt;&lt;br /&gt;&lt;b&gt;結婚：&lt;/b&gt; ウエディングパーク&lt;br /&gt;&lt;b&gt;コミュニティ：&lt;/b&gt; cooboo&lt;br /&gt;&lt;b&gt;エンタメ：&lt;/b&gt; 講談社コミックプラス&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(4) 日報の改善&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;日報のメールに出社時刻、退社時刻、勤務時間を含め、かつ読みやすく改善しました。また、いくつかの不具合を修正しました。&lt;br /&gt;&lt;br /&gt;(2) と (4) のアップデートを反映するには、コントロールパネルで、各アプリケーションを更新する必要があります。管理者の方は、コントロールパネルのアプリケーションタブにアクセスして、各アプリケーションを更新してください。「更新する」リンクをクリックすると、アプリケーションを更新できます。「最新」と表示されれば、アップデートの完了です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s1600/IMG_0025.png" imageanchor="1" style="margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s400/IMG_0025.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、α版の試用ユーザを幅広く募集しています。試用に特別な条件はありません。ご希望の方に試用キーを発行する形をとっています。試用をご希望の方は &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; トップの &lt;a href="https://www.heartrails.com/company/inquiry.html?service=3arrows.trial"&gt;試用を申し込む&lt;/a&gt; からお申し込みください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-5313510262445804416?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/5313510262445804416/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=5313510262445804416' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/5313510262445804416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/5313510262445804416'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/01/3arrows-google-reader.html' title='3arrows アップデート! ログイン有効期限を設定できます! Google Reader からマイクロブログへの投稿など、マイクロブログと日報アプリを改善しました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R7O_2gBTssg/TS0FnkpoO9I/AAAAAAAACiE/-jtBQlcJDAM/s72-c/20110112-1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2049874654612120770</id><published>2011-01-05T17:13:00.000+09:00</published><updated>2011-01-05T17:13:00.160+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3arrows'/><title type='text'>3arrows アップデート! 社内マイクロブログでネットの情報を素早く簡単に視覚的に共有する機能を強化しました!</title><content type='html'>本日(1/5)、企業向けマイクロブログ／コラボレーションサービス &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; をアップデートし、社内マイクロブログでネットの情報を、素早く、簡単に、視覚的に、共有する機能を強化しました。&lt;br /&gt;&lt;br /&gt;今までは、マイクロブログの投稿内容に Google Maps や YouTube の URL を含めると、そのサムネイル画像(小さな画像)を表示できました。今回のアップデートではさらに、このサムネイル画像の表示対象を大きく拡大しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TSO6eMu2Y3I/AAAAAAAACgc/3OBqookWfJs/s1600/IMG_0024.PNG" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TSO6eMu2Y3I/AAAAAAAACgc/3OBqookWfJs/s640/IMG_0024.PNG" width="480" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;サムネイル画像の表示対象は、次のとおりです。マイクロブログの投稿内容に、次のページやコンテンツの URL を含めると、サムネイル画像を表示します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ドキュメント：&lt;/b&gt; PDF, Word, Excel, Power Point, Cacoo, SlideShare&lt;br /&gt;&lt;b&gt;動画：&lt;/b&gt; Ustream, YouTube&lt;br /&gt;&lt;b&gt;写真：&lt;/b&gt; Flickr, Picasa, 壁紙.com, フォト蔵, TwitPic, Yfrog&lt;br /&gt;&lt;b&gt;地図：&lt;/b&gt; Google Maps&lt;br /&gt;&lt;b&gt;ニュース：&lt;/b&gt; Teckwave, Web 担当者 Forum &lt;br /&gt;&lt;b&gt;レビュー：&lt;/b&gt; DIME, ブクログ, coneco.net, MonoColle&lt;br /&gt;&lt;b&gt;グルメ：&lt;/b&gt; ホットペッパー, ぐるなび, 食べログ&lt;br /&gt;&lt;b&gt;クーポン：&lt;/b&gt; ポンパレード, グルーポン, Piku&lt;br /&gt;&lt;b&gt;ファッション：&lt;/b&gt; ママ・マーケット, BUYMA, ホットペッパービューティー, ZOZOTOWN&lt;br /&gt;&lt;b&gt;通販：&lt;/b&gt; アイテムポスト, カラメル&lt;br /&gt;&lt;b&gt;自動車：&lt;/b&gt; グーネット, グーワールド, グーバイク&lt;br /&gt;&lt;b&gt;Q &amp;amp; A：&lt;/b&gt; 教えて! goo&lt;br /&gt;&lt;b&gt;ブログ：&lt;/b&gt; goo ブログ&lt;br /&gt;&lt;b&gt;結婚：&lt;/b&gt; ウエディングパーク&lt;br /&gt;&lt;b&gt;コミュニティ：&lt;/b&gt; cooboo&lt;br /&gt;&lt;b&gt;エンタメ：&lt;/b&gt; 講談社コミックプラス&lt;br /&gt;&lt;br /&gt;さらに、ブックマークレットを使うと、社内やチームで、ネットの情報を、素早く、簡単に、視覚的に、共有することができます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TSPG7kZCJsI/AAAAAAAACgk/P2b3RJJPY3o/s1600/IMG_002678.png" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TSPG7kZCJsI/AAAAAAAACgk/P2b3RJJPY3o/s400/IMG_002678.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;社内やチームで共有したいページを見つけたら、ブラウザのブックマークレット (Share on 3arrows ボタン) をクリックします。すると、マイクロブログの投稿内容に、ページのタイトルと URL が入力された状態になります。続けて、投稿内容を編集して共有するボタンをクリックすると、その投稿内容に加えてサムネイル画像も合わせて共有されます。&lt;br /&gt;&lt;br /&gt;ブックマークレットは、マイクロブログのツールメニューから入手できます。ブラウザのブックマークバーやブックマークに登録してご利用ください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TSPH0WCoFEI/AAAAAAAACgs/x9tA8MXuky4/s1600/IMG_0029.png" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TSPH0WCoFEI/AAAAAAAACgs/x9tA8MXuky4/s400/IMG_0029.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以上のアップデートを反映するには、コントロールパネルで、各アプリケーションを更新する必要があります。管理者の方は、コントロールパネルのアプリケーションタブにアクセスして、各アプリケーションを更新してください。「更新する」リンクをクリックすると、アプリケーションを更新できます。「最新」と表示されれば、アップデートの完了です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s1600/IMG_0025.png" imageanchor="1" style="margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TSO5z26BtwI/AAAAAAAACgU/ghLIjFWs3OY/s400/IMG_0025.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;企業向けマイクロブログ／コラボレーションサービス &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; では、α版の試用ユーザを幅広く募集しています。試用に特別な条件はありません。ご希望の方に試用キーを発行する形をとっています。試用をご希望の方は &lt;a href="http://www.3arrows.jp/"&gt;3arrows&lt;/a&gt; トップの試用を申し込むからお気軽にお申し込みください。お待ちしています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2049874654612120770?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2049874654612120770/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2049874654612120770' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2049874654612120770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2049874654612120770'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2011/01/3arrows.html' title='3arrows アップデート! 社内マイクロブログでネットの情報を素早く簡単に視覚的に共有する機能を強化しました!'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_R7O_2gBTssg/TSO6eMu2Y3I/AAAAAAAACgc/3OBqookWfJs/s72-c/IMG_0024.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-7069850729887706121</id><published>2010-09-29T07:30:00.000+09:00</published><updated>2010-09-29T07:30:29.411+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Developer Day'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='OSDE'/><title type='text'>Tokyo GTUG Boot Camp 2010 OpenSocial Hands-on (G409) 資料</title><content type='html'>おはようございます。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/tokyogtugusersite/bootcamp-2010?pli=1"&gt;Tokyo GTUG Boot Camp 2010&lt;/a&gt; OpenSocial Hands-on (G409) の資料を公開します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OSDE と OpenSocial jQuery で作る簡単ソーシャルアプリ (1/3)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://slidesha.re/arIcA6"&gt;http://slidesha.re/arIcA6&lt;/a&gt; (スライド)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/yoichiro"&gt;@yoichiro&lt;/a&gt; さんによる OSDE プラグインのインストールから OSDE ウィザードを使った OpenSocial アプリの作成と実行の紹介スライドです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OSDE と OpenSocial jQuery で作る簡単ソーシャルアプリ (2/3)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bit.ly/bootcamp2010_os"&gt;http://bit.ly/bootcamp2010_os&lt;/a&gt; (スライド)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nakajiman.s3.amazonaws.com/bootcamp2010/favorite-books.zip"&gt;http://nakajiman.s3.amazonaws.com/bootcamp2010/favorite-books.zip&lt;/a&gt; (ソースコード)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/webos_goodies"&gt;@webos_goodies&lt;/a&gt; さんによる favorite-books アプリという実例による OpenSocial Java Script API の使い方の紹介スライドとソースコードです。 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;OSDE と OpenSocial jQuery で作る簡単ソーシャルアプリ (3/3)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://slidesha.re/bER2EM"&gt;http://slidesha.re/bER2EM&lt;/a&gt; (スライド)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nakajiman.s3.amazonaws.com/bootcamp2010/favorite-books-opensocial-jquery.zip"&gt;http://nakajiman.s3.amazonaws.com/bootcamp2010/favorite-books-opensocial-jquery.zip&lt;/a&gt; (ソースコード)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/nakajiman"&gt;@nakajiman&lt;/a&gt; による OpenSocial jQuery の紹介スライドと、上記 Favorite-books アプリを OpenSocial jQuery で書きかえたソースコードです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-7069850729887706121?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/7069850729887706121/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=7069850729887706121' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7069850729887706121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7069850729887706121'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/09/tokyo-gtug-boot-camp-2010-opensocial.html' title='Tokyo GTUG Boot Camp 2010 OpenSocial Hands-on (G409) 資料'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-3814966151536741707</id><published>2010-09-14T19:53:00.000+09:00</published><updated>2010-09-14T19:53:36.871+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MA6'/><category scheme='http://www.blogger.com/atom/ns#' term='Mashup Awards 6'/><title type='text'>#MA6 Mashup Caravan - Social Platform Talks の場で必死に作品応募のお願いすることになりました</title><content type='html'>こんばんは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashupaward.jp/"&gt;Mashup Awards 6&lt;/a&gt; の恒例イベントである Mashup Caravan でお話する機会をいただきました。&lt;br /&gt;&lt;br /&gt;2010/9/22(水) #MA6 Mashup Caravan - Social Platform Talks&lt;br /&gt;&lt;a href="http://atnd.org/events/7860/"&gt;http://atnd.org/events/7860/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;わたしの発表タイトルは 「Google Apps を Social にする &lt;a href="http://ma6api.mashupaward.jp/entry/70672/"&gt;OpenSocial Pages&lt;/a&gt; (；゜○゜) お願いですから応募してください」 です。&lt;br /&gt;&lt;br /&gt;当社は Mashup Awards 6 の協力会社 (API 提供企業) として OpenSocial Pages というオープンソース製品 （テクニカルプレビュー版) を提供しています。が、しかし、超ニッチでマイナーなだけに OpenSocial Pages を使った応募作品が 0件となることを恐れています。あー考えるだけでコワイコワイ。悪夢をみそうです。&lt;br /&gt;&lt;br /&gt;ですので、この発表の中で OpenSocial Pages を使って、どんな作品を応募して欲しいかそのお願いをさせてください。また、副賞の候補もお伝えできればと考えています。&lt;br /&gt;&lt;br /&gt;また、同じような悩みを抱えている協力会社を(勝手に)代表して、Mashup Awards 5 の結果から協力会社と賞の関係を再確認しつつ、なんらかの賞を受賞するための裏道を探ってみたいと考えています。&lt;br /&gt;&lt;br /&gt;続けて Mashup Camp というハッカソン形式のイベントにも参加します。わたしの専門分野である OpenSocial アプリケーションを開発してみたいという方は、ぜひご参加ください。わたしもチューターもしくは開発者として参加します。いっしょに何かを開発してもいいですね。&lt;br /&gt;&lt;br /&gt;2010/9/25(土) #MA6 Mashup Camp - Social Platform Day&lt;br /&gt;&lt;a href="http://atnd.org/events/7862/"&gt;http://atnd.org/events/7862/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(わたしはともかく)スピーカーたちは、それぞれの分野の第一線で活躍する方々ばかりです。ぜひ Mashup Caravan と Mashup Camp に遊びにきてくださいね。&lt;br /&gt;&lt;br /&gt;Mashup Awards 6 は、開発者がチャレンジするイベントともいえますが、裏側では協力会社もチャレンジしています。協力会社としては、作品応募があり、その応募に対して賞をあげたいと願っています。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(；゜○゜) お願いですから応募してください。切実なお願いです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-3814966151536741707?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/3814966151536741707/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=3814966151536741707' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3814966151536741707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3814966151536741707'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/09/ma6-mashup-caravan-social-platform.html' title='#MA6 Mashup Caravan - Social Platform Talks の場で必死に作品応募のお願いすることになりました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2528094949627234110</id><published>2010-08-16T11:53:00.000+09:00</published><updated>2010-08-16T11:53:30.663+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>OpenSocial Pages の最新ソースコード 0.9.3 を公開しました</title><content type='html'>こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocial-pages.appspot.com/"&gt;OpenSocial Pages&lt;/a&gt; の最新ソースコードを公開しました。&lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/downloads"&gt;Downloads&lt;/a&gt; から  opensocial-pages-0.9.3.zip をダウンロードしてください。&lt;br /&gt;&lt;br /&gt;Google Apps Marketplace で公開している OpenSocial Pages for Google Apps と同じソースコードになっています。ですので、次のとおり手を加えて、自分自身の環境で期待どおり動作するように、改造する必要があります。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;web.xml&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Google Data APIs に 2-Legged OAuth でアクセスするための Consumer Key と Secret を指定してください。Consumer Key と Secret は Google Apps Perimer の &lt;span class="gwt-InlineLabel topTab selected"&gt;Advanced tools &lt;/span&gt;か Google Apps Marketplace で手に入ります。&lt;br /&gt;&lt;br /&gt;&amp;lt;context-param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;consumerKey&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;(Your Consumer Key)&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/context-param&amp;gt;&lt;br /&gt;&amp;lt;context-param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-name&amp;gt;consumerSecret&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;(Your Consumer Secret)&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/context-param&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PermissionFilter.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;OpenID Federated Login (Google Apps) を UserService を使って実装してあります。Google Apps Perimer で Google Apps と連携するときは、AppEngine の認証を Google Acount に切り替えて、Google Apps ドメインと関連付け、UserService を使っている個所を調整すればよいでしょう。&lt;br /&gt;&lt;br /&gt;Google Apps や Google Apps Marketplace 関連の実装の参考になれば幸いです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2528094949627234110?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2528094949627234110/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2528094949627234110' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2528094949627234110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2528094949627234110'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/08/opensocial-pages-093.html' title='OpenSocial Pages の最新ソースコード 0.9.3 を公開しました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6095491236553963876</id><published>2010-08-11T11:02:00.000+09:00</published><updated>2010-08-11T11:02:14.120+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='YouTube Data API'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>OpenSocial Pages は osapi.http に対応しました。gadgets.io.makeRequest 以上の大きなメリットがあります。</title><content type='html'>こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocial-pages.appspot.com/"&gt;OpenSocial Pages for Google Apps&lt;/a&gt; で osapi.http API を使えるようにしました。&lt;br /&gt;&lt;br /&gt;osapi.http  は gadgets.io.makeRequest メソッドに相当するものです。さらに osapi.http は、バッチリクエストにも対応するため、gadgets.io.makeRequest メソッド以上のメリットがあります。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1回の API 呼び出しで、複数の外部サーバにまとめてリクエストできます&lt;/li&gt;&lt;li&gt;1回の API 呼び出しで、SNS のデータと外部サーバのデータをまとめてリクエストできます&lt;/li&gt;&lt;/ul&gt;次の例は Viewer のプロフィール情報と YouTube からマイ動画のリストを、まとめて取得するものです。 &lt;br /&gt;&lt;pre&gt;function init() {&lt;br /&gt;  var batch = new osapi.newBatch()&lt;br /&gt;    .add('viewer', osapi.people.getViewer())&lt;br /&gt;    .add('videos', osapi.http.get({&lt;br /&gt;      href: 'http://gdata.youtube.com/feeds/api/users/nakajiman1/uploads?alt=json',&lt;br /&gt;      format: 'json'&lt;br /&gt;    }));&lt;br /&gt;  batch.execute(function(r) {&lt;br /&gt;    gadgets.log(r.viewer.displayName); // Nobuhiro Nakajima&lt;br /&gt;    gadgets.log(r.videos.status); // 200&lt;br /&gt;    gadgets.log(r.videos.content); //  Object { version="1.0",  more... }&lt;br /&gt;  });&lt;br /&gt;}&lt;br /&gt;gadgets.setLogLevel(gadgets.log.INFO);&lt;br /&gt;gadgets.util.registerOnLoadHandler(init);&lt;br /&gt;&lt;/pre&gt;従来は Viewer のプロフィール情報は opensocial.newFetchPersonRequest メソッドと gadgets.io.makeRequest メソッドを別々に呼び出して、非同期のコールバックのタイミングを制御して、レスポンスをまとめる必要がありました。&lt;br /&gt;&lt;br /&gt;が、osapi.http を使えばそんな必要はなく、Gadgets(=Apps) のソースコードをシンプルにより分かりやすく記述することができます。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages がサポートする osapi.http のオプションやフィールドは、OpenSocial Pages ドキュメントの &lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/opensocial/core-gadget-spec"&gt;Core Gadgte Spec&lt;/a&gt; と &lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/opensocial/core-data-spec"&gt;Core Data Spec &lt;/a&gt;に記載しておきました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6095491236553963876?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6095491236553963876/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6095491236553963876' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6095491236553963876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6095491236553963876'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/08/opensocial-pages-osapihttp.html' title='OpenSocial Pages は osapi.http に対応しました。gadgets.io.makeRequest 以上の大きなメリットがあります。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-418142822634586061</id><published>2010-08-02T18:05:00.000+09:00</published><updated>2010-08-02T18:05:43.774+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>OpenSocial Pages のガジェットは HTML5 で動作することを Pacman で確認してみた</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TFZ9kSSbHPI/AAAAAAAACXI/O-iwJDVC7G4/s1600/opensocial-logo.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TFZ9kSSbHPI/AAAAAAAACXI/O-iwJDVC7G4/s320/opensocial-logo.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="clear: both; text-align: left;"&gt;こんばんは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocial-pages.appspot.com/"&gt;OpenSocial Pages&lt;/a&gt; のガジェット(=アプリ)は HTML5 で動作します。そのことを確認するために &lt;a href="http://arandomurl.com/2010/07/25/html5-pacman.html"&gt;HTML5 Pacman&lt;/a&gt; を OpenSocial Pages で動かしてみました。もちろん、次の動画のとおり、Audio も含めてバッチリ動きます。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/o9ztpkU-J3Q&amp;amp;hl=ja_JP&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/o9ztpkU-J3Q&amp;amp;hl=ja_JP&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;HTML5 Pacman を OpenSocial Pages のガジェットに移植するにあたり、次のことをしました。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;index.html と packman.js をガジェットXMLにまとめる&lt;/li&gt;&lt;li&gt;Audio ファイル (ogg and mp3) を Amazon S3 に置く&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.modernizr.com/"&gt;modernizr-1.5.min.js&lt;/a&gt; を OpenSocial Pages の libs を参照する&lt;/li&gt;&lt;li&gt;Audio On/Off の設定を、次のとおり、User Preference 経由にする&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;var prefs = new gadgets.Prefs();&lt;br /&gt;&lt;br /&gt;// return localStorage["soundDisabled"] === "true";&lt;br /&gt;return prefs.getBool("soundDisabled");&lt;br /&gt;&lt;br /&gt;// localStorage["soundDisabled"] = !soundDisabled();&lt;br /&gt;prefs.set("soundDisabled", !soundDisabled());&lt;/blockquote&gt;&lt;br /&gt;OpenSocial Pages は、ガジェットをフレームウィンドウ(iframe)で表示せず、ウェブページにインラインで直接表示する仕組みを採用しています。そして、そのウェブページのドキュメントタイプは HTML5 としています。&lt;br /&gt;&lt;br /&gt;そのため OpenSocial Pages では Flash に加えて、HTML5 Pacman のように HTML5 ベースのリッチなアプリを動かすことができます。また、フレームウィンドウ(iframe)の制約を受けないため、アプリは、キーボードのイベントを活用することができます。&lt;br /&gt;&lt;br /&gt;アプリの開発者を絶対的に信頼する(もしくは信頼できると検証できる)なら OpenSocial Pages をゲームやエンタメのプラットフォームとして使うことも十分考えられますね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-418142822634586061?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/418142822634586061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=418142822634586061' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/418142822634586061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/418142822634586061'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/08/opensocial-pages-html5-pacman.html' title='OpenSocial Pages のガジェットは HTML5 で動作することを Pacman で確認してみた'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R7O_2gBTssg/TFZ9kSSbHPI/AAAAAAAACXI/O-iwJDVC7G4/s72-c/opensocial-logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-895419279545529042</id><published>2010-08-02T13:42:00.000+09:00</published><updated>2010-08-02T13:42:32.150+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>OpenSocial Pages ならここまで(まだまだ)できる Status Update Gadget をアップデートしました</title><content type='html'>&lt;div class="separator" style="text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TFZJuD2xPrI/AAAAAAAACXA/qblQpbMZXVg/s1600/opensocial-logo.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TFZJuD2xPrI/AAAAAAAACXA/qblQpbMZXVg/s320/opensocial-logo.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocial-pages.appspot.com/"&gt;OpenSocial Pages&lt;/a&gt; 向けの Status Update Gadget をアップデートしました。&lt;br /&gt;&lt;br /&gt;Gadget のソースコードは、&lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/"&gt;Downloads&lt;/a&gt; から入手できます。status-update.xml をダウンロードして、OpenSocial Pages の Control Panel から追加すれば、今すぐ動作を体験できます。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages を使うと、PC に加えて、&lt;span style="font-size: small;"&gt;iOS や &lt;/span&gt;&lt;span style="font-size: small;"&gt;Android&lt;/span&gt;&lt;b&gt; &lt;/b&gt;のモバイルブラウザで動作する Twitter のような &lt;span style="color: black; font-size: small;"&gt;タイムラインベースのソーシャルアプリを&lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;自らの手で、&lt;/span&gt;&lt;span style="color: black; font-size: small;"&gt;手軽に作成&lt;/span&gt;&lt;span style="font-size: small;"&gt;でき&lt;/span&gt;ます。&lt;br /&gt;&lt;br /&gt;Status Update Gadget は OpenSocial Pages でここまでできる(まだまだできる)... そのことを証明するための実例です。&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;b&gt;Login&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;OpenSocial Pages は Google Apps の認証を求めます。OpenSocial Pages は Google Apps と連携することで、OpenSocial Gadget (=ソーシャルアプリ) が Google Apps ドメインのユーザとグループをソーシャルグラフとして扱うことができる仕組みとなっています。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TFYUxKDsdJI/AAAAAAAACVw/UddAoYlOSno/s1600/20100801-001.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TFYUxKDsdJI/AAAAAAAACVw/UddAoYlOSno/s320/20100801-001.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Home&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Home View です。Viewer と Viewer がフォローしたユーザのアクティビティをタイムラインで表示します。新着の Status があればライムラインにリアルタイム(ポーリング)で表示します。テキストを入力して Share ボタンをクリックすると、アクティビティを送信します。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;アクティビティ中のユーザを表す @ と URL を表す http(s):// は、プログラムが解釈して、リンクを自動的に生成します。View のアクティビティは Delete リンクで削除でき、それ以外のアクティビティは Reply リンクで返信できます。&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TFYUzdvQq6I/AAAAAAAACV4/XtrfnsRl6P8/s1600/20100801-002.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TFYUzdvQq6I/AAAAAAAACV4/XtrfnsRl6P8/s320/20100801-002.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Viewer の Friends を Following と位置付けます。そのため、フォローしたユーザのアクティビティは、次のように Activities API を使って取得します。&lt;/div&gt;&lt;blockquote&gt;osapi.activities.get({ userId: '@viewer', groupId: '@friends'})&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Mentions&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Mentions View です。Google Apps ドメインの全ユーザからの返信(または言及)のあったアクティビティをタイムラインで表示します。&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TFYU1ZbW36I/AAAAAAAACWA/ggbFmRCV3Js/s1600/20100801-003.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TFYU1ZbW36I/AAAAAAAACWA/ggbFmRCV3Js/s320/20100801-003.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は、返信(または言及)を表す取得範囲を定義しています。そのため、Viewer に返信(または言及)したアクティビティは、次のように Activities API を使って取得します。&lt;/div&gt;&lt;blockquote&gt;osapi.activities.get({ userId: '@viewer', groupId: '@mentions' })&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Profile&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Profile View です。指定したユーザのアクティビティをタイムラインで表示します。Follow ボタン(または Unfollow ボタン)をクリックすると、そのユーザをフォロー(または解除)できます。&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TFYU2XIwUXI/AAAAAAAACWI/de_TsfqDUxU/s1600/20100801-004.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TFYU2XIwUXI/AAAAAAAACWI/de_TsfqDUxU/s320/20100801-004.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Viewer の Friends を Following と位置付けます。そのため、ユーザをフォロー(または解除)するときは、次のように Peopel API を使います。&lt;/div&gt;&lt;blockquote&gt;osapi.people.create({ userId: '@viewer', groupId: '@friends', person: { id: user.id } }) &lt;/blockquote&gt;&lt;blockquote&gt;osapi.people.delete({ userId: '@viewer', groupId: '@friends', person: { id: user.id } }) &lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Following&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Following View です。指定したユーザがフォローしているユーザを表示します。このとき、各ユーザの最新のアクティビティも合わせて表示します。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TFYU4TAThNI/AAAAAAAACWQ/mscXEKF199c/s1600/20100801-005.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TFYU4TAThNI/AAAAAAAACWQ/mscXEKF199c/s320/20100801-005.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Viewer の Friends を Following と位置付けます。そのため、指定したユーザをフォローしているユーザは、次のように Peopel API を使って取得します。&lt;/div&gt;&lt;blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;osapi.people.get({ userId: user.id, groupId: '@friends' })&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Groups&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget は、各 View のヘッダで、Group の選択ボックスを表示し、Groups View に移動するようにしています。&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TFYU6MTSz9I/AAAAAAAACWY/lzOgLjrRNA8/s1600/20100801-006.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TFYU6MTSz9I/AAAAAAAACWY/lzOgLjrRNA8/s320/20100801-006.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps のドメインを Owner、そのグループを Owner の Group に位置付けます。そのため、Google Apps ドメインのグループは、次のように Groups API を使って取得します。&lt;/div&gt;&lt;blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;osapi.groups.get({ userId: '@owner' })&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Domain&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Groups View です。Google Apps ドメインの全ユーザのアクティビティをタイムラインで表示します。&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TFYU8Vzk6FI/AAAAAAAACWg/ceoKEY6rnOg/s1600/20100801-007.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TFYU8Vzk6FI/AAAAAAAACWg/ceoKEY6rnOg/s320/20100801-007.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps のドメインを Owner、そのユーザを Owner の Friends に位置付けます。そのため、Google Apps ドメインの全ユーザのアクティビティは、次のように Activities API を使って取得します。&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;osapi.activities.get({ userId: '@owner', groupId: '@friends'})&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Domain Members&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Members View です。Google Apps ドメインの全ユーザを表示します。このとき、このとき、各ユーザの最新のアクティビティを表示します。また、各ユーザをフォローしているかどうかも合わせて表示します。&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TFYU9Z_Vk_I/AAAAAAAACWo/5yEiJ8gfHgI/s1600/20100801-008.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TFYU9Z_Vk_I/AAAAAAAACWo/5yEiJ8gfHgI/s320/20100801-008.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps のドメインを Owner、そのユーザを Owner の Friends に位置付けます。そのため、Google Apps ドメインの全ユーザは、次のように People API を使って取得します。&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;osapi.people.get({ userId: '@owner', groupId: '@friends' })&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Group&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Groups View です。選択したグループに参加するユーザのアクティビティをタイムラインで表示します。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TFYU_G3uFLI/AAAAAAAACWw/J7Yv3PYBol0/s1600/20100801-009.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TFYU_G3uFLI/AAAAAAAACWw/J7Yv3PYBol0/s320/20100801-009.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps のドメインを Owner、そのグループを Owner の Group に位置付けます。そのため、指定したグループのアクティビティを取得するときは、Activities API に対して、次の取得範囲を指定します。&lt;/div&gt;&lt;blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;osapi.activities.get({ userId: '@owner', groupId: group.id })&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Group Members&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Status Update Gadget の Members View です。選択したグループに参加するユーザを表示します。このとき、各ユーザの最新のアクティビティを表示します。また、各ユーザをフォローしているかどうかも合わせて表示します。&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TFYVA-SpADI/AAAAAAAACW4/ZFMRE7AcKOU/s1600/20100801-010.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TFYVA-SpADI/AAAAAAAACW4/ZFMRE7AcKOU/s320/20100801-010.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps のドメインを Owner、そのユーザを Owner の Friends に位置付けます。そのため、そのため、指定したグループのユーザを取得するときは、People API に対して、次の取得範囲を指定します。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;osapi.people.get({ userId: '@owner', groupId: group.id })&lt;/div&gt;&lt;/blockquote&gt;&amp;nbsp;OpenSocial Pages は Google Apps (スタンダードも可) をお持ちであれば、何も準備することなしにすぐ使い始めることができます。この機会にぜひお試しください。また OpenSocial Pages の応用にご関心がございましたら &lt;a href="http://nakajiman.lrlab.to/"&gt;Nobuhiro Nakajima&lt;/a&gt; までお問い合わせください。熱烈サポートいたします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-895419279545529042?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/895419279545529042/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=895419279545529042' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/895419279545529042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/895419279545529042'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/08/opensocial-pages-status-update-gadget.html' title='OpenSocial Pages ならここまで(まだまだ)できる Status Update Gadget をアップデートしました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R7O_2gBTssg/TFZJuD2xPrI/AAAAAAAACXA/qblQpbMZXVg/s72-c/opensocial-logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-358369960668988246</id><published>2010-07-12T10:41:00.000+09:00</published><updated>2010-07-12T10:41:04.492+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Geolocation API'/><title type='text'>Status Update と Check-in アプリの連携で見る OpenSocial Pages の意義</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;おはようございます。Nobuhiro Nakajima です。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;前のエントリでは、今どんな仕事をしているか？ What are you working on? を Twitter のようなライムラインで共有する OpenSocial Pages 向けの &lt;a href="http://nakajiman.blogspot.com/2010/07/status-update-opensocial-pages.html"&gt;Status Update アプリ&lt;/a&gt; (サンプル) を紹介しました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;今回は、さらに一歩進めて、今どこで仕事をしているか？ を Foursquare のような位置情報で共有する OpenSocial 向けの Check-in アプリ (サンプル) を紹介します。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Check-in アプリを実行すると、今どこにいるかその位置を検出して地図を表示します。そして、コメントを入力して Check-in ボタンをクリックすると、コメントと位置情報を保存します。保存したコメントと位置情報は、Google Apps のユーザ間で共有され、今どこでどんな仕事をしているか、地図上のマーカーと吹き出しで確認できます。 &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;地図の表示は Google Maps API、位置情報の検出は HTML5 の Geolocation API を使っていますので、多くのスマートフォンで動作しますし、PC でも動作するでしょう。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TDplRhLanjI/AAAAAAAACUc/lPgMcNdLecY/s1600/check-in.infowindow.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TDplRhLanjI/AAAAAAAACUc/lPgMcNdLecY/s400/check-in.infowindow.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;また Check-in すると、次のように、Status Update アプリのタイムラインに、コメントと位置情報を表示しますので、Check-in の内容に対して、タイムライン上でコミュニケーションすることもできます。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;さらに、そのコメントには、Check-in アプリへのリンクも含みます。リンクをクリックすると、Check-in アプリを起動して、そのユーザがコメントした位置の地図を表示しますので、そのユーザに何かをお願いしたり、近くにいるユーザを探すこともできます。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TDplo4OKCeI/AAAAAAAACUk/rSbGCUUoJhA/s1600/check-in.status.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="60" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TDplo4OKCeI/AAAAAAAACUk/rSbGCUUoJhA/s400/check-in.status.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps の Gmail と連携した Messages API も備えていますので、メールによる通知を Check-in アプリに追加して、メールの中から Status Update アプリや Check-in アプリを起動するといった使い方もできるでしょう。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;このように OpenSocial Pages は、小さなアプリがお互いに連携して、それぞれの機能を補う構成をとれるのが大きな特徴です。多機能なアプリをあらかじめ作るではなく、そのときに必要となったことを、そのときに小さく作る、もう存在する機能は連携して使う、そして小さく改善し続ける... といった今までとは異なる新しいサイクルを生み出す手助けを目標としています。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TDpgLivX61I/AAAAAAAACUU/B87w67bC860/s1600/check-in.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TDpgLivX61I/AAAAAAAACUU/B87w67bC860/s320/check-in.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Check-in アプリのガジェット XML は、次のサイトから入手できます。check-in.xml をダウンロードしてください。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;OpenSocial Pages Downloads&lt;/div&gt;&lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/downloads"&gt;http://sites.google.com/a/lrlab.to/opensocial-pages/downloads&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OpenSocial Pages は Google Apps MarketPlace から Google Apps に直接インストールできます。OpenSocial Pages を Google Apps にインストールするときは、次のボタンをクリックしてください。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.google.com/enterprise/marketplace/viewListing?productListingId=5389+8112915166450201019&amp;amp;utm_medium=button&amp;amp;utm_source=button-lrlab.to" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TC63rinVH6I/AAAAAAAACRI/YVXcOX2eUDI/s320/AddtoApps-shadow.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-358369960668988246?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/358369960668988246/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=358369960668988246' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/358369960668988246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/358369960668988246'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/07/status-update-check-in-opensocial-pages.html' title='Status Update と Check-in アプリの連携で見る OpenSocial Pages の意義'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R7O_2gBTssg/TDplRhLanjI/AAAAAAAACUc/lPgMcNdLecY/s72-c/check-in.infowindow.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6027759690923204644</id><published>2010-07-07T17:42:00.000+09:00</published><updated>2010-07-07T17:42:18.440+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='iPad'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>Status Update アプリとスマートフォンから見る OpenSocial Pages の意義、欠点と課題</title><content type='html'>こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages 向けの Status Update アプリ (サンプル) をアップデートしました。このアプリは 今どんな仕事をしているか？ Twitter のようなタイムラインで共有しようというものです。&lt;br /&gt;&lt;br /&gt;先日ご紹介した &lt;a href="http://nakajiman.blogspot.com/2010/06/opensocial-pages-social-gadget.html"&gt;Tweet アプリ (サンプル)&lt;/a&gt; は jQTouch を使用した iPhone 専用のアプリでしたが、Status Update アプリは、PC も含めて iPhone、iPad、Android などのスマートフォンでも動作するようにしました。&lt;br /&gt;&lt;br /&gt;Status Update アプリ (サンプル) のガジェットXML は、次のサイトから入手できます。status-update.r146.xml をダウンロードしてください。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages Downloads&lt;br /&gt;&lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/downloads"&gt;http://sites.google.com/a/lrlab.to/opensocial-pages/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;また OpenSocial Pages for Google Apps をインストールすると、既定のガジェット (=ページ) として追加するようにしました。OpenSocial Pages を Google Apps にインストールするときは、次のボタンをクリックしてください。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.google.com/enterprise/marketplace/viewListing?productListingId=5389+8112915166450201019&amp;amp;utm_medium=button&amp;amp;utm_source=button-lrlab.to" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TC63rinVH6I/AAAAAAAACRI/YVXcOX2eUDI/s320/AddtoApps-shadow.png" /&gt;&lt;/a&gt;&lt;/div&gt;Status Update アプリが、各種スマートフォンでどう動くのかスクリーンキャプチャをとりました。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_R7O_2gBTssg/TDQroarqjRI/AAAAAAAACTI/CAenISRGFNQ/s1600/stauts-update.android.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_R7O_2gBTssg/TDQroarqjRI/AAAAAAAACTI/CAenISRGFNQ/s200/stauts-update.android.gif" width="98" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TDQru5ORsdI/AAAAAAAACTQ/0VAtPg6Rihc/s1600/status-update.iphone.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TDQru5ORsdI/AAAAAAAACTQ/0VAtPg6Rihc/s200/status-update.iphone.gif" width="108" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/TDQry3GFh0I/AAAAAAAACTY/HpI8JKXnNiA/s1600/status-update.ipad.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_R7O_2gBTssg/TDQry3GFh0I/AAAAAAAACTY/HpI8JKXnNiA/s200/status-update.ipad.gif" width="156" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;OpenSocial Pages は、他のコンシューマ向け SNS とは異なり、アプリを iframe を使わず、ウェブページとして表示して動かします。つまり、従来のウェブページを OpenSocial アプリとして作成できるということです。&lt;br /&gt;&lt;br /&gt;そのため、スクリーンキャプチャのように PC も含めて、iPhone、iPad、Android などのモバイルブラウザでも OpenSocial アプリを快適に動作させることができます。&lt;br /&gt;&lt;br /&gt;ただし、モバイルブラウザという性質上、残念ながら今のところ Flash は使えません。が、OpenSocial Pages は、HTML5 でウェブページをレンダリングするようにしていますので、HTML5 のテクノロジを使ったリッチアプリを動作させることはできます。&lt;br /&gt;&lt;br /&gt;また、Android は Flash のサポートを表明していますので、近い将来 OpenSocial Pages + Android で Flash ベースの OpenSocial アプリを動作させることもできるようになります。&lt;br /&gt;&lt;br /&gt;Status Update アプリは、今どんな仕事をしているか、Twitter でいうところの "つぶやき" を Google Apps ドメインのユーザ間で共有できる アプリです。その "つぶやき" が、他のドメインや公のユーザに公開されることはありません。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は Google Apps のユーザとグループをインポートして、必要に応じて同期できます。つまり、OpenSocial Pages を Google Apps にインストールすると、Google Apps の既存ユーザとグループをソーシャルグラフとして、Google Apps に閉じた OpenSocial アプリを動作させることができるということです。&lt;br /&gt;&lt;br /&gt;Status Update アプリは、とても小さく単純なもの(OpenSocial と JavaScript の知識があれば誰でも作れる)ですが、これら OpenSocial Pages の特徴によって、役立つものとなります。&lt;br /&gt;&lt;br /&gt;例えば、スマートフォンの特徴と HTML5 の特徴を活かして、"つぶやき" に位置情報を付与するようにして、今どこでどんな仕事をしているか、お互いに共有できるアプリに改善することもできるでしょう。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages を使うには OpenSocial と JavaScript の知識が必要で、ウェブ開発者がいないと使えないという欠点があり、大きな問題であると課題として認識しています。&lt;br /&gt;&lt;br /&gt;現状は、ウェブ開発者がいて、自らアプリを開発して、仕事の役に立ててもらうというスコープですが、将来は Google Friend Connect Social Gadgets や Facebook Widget、Twitter @anywhere くらいの感覚で利用できるようになればと考えています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6027759690923204644?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6027759690923204644/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6027759690923204644' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6027759690923204644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6027759690923204644'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/07/status-update-opensocial-pages.html' title='Status Update アプリとスマートフォンから見る OpenSocial Pages の意義、欠点と課題'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_R7O_2gBTssg/TC63rinVH6I/AAAAAAAACRI/YVXcOX2eUDI/s72-c/AddtoApps-shadow.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-4115366820484118385</id><published>2010-07-07T12:51:00.000+09:00</published><updated>2010-07-07T12:51:59.765+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Data Protocol'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Data Protocol'/><title type='text'>ODataとGDataはAtomPubに合流して、ウェブで誰でも標準手続きでデータを適切に操作できるようになるの?</title><content type='html'>&lt;span class="EyebrowElement"&gt;こんにちは。Nobuhiro Nakajima です。今回のネタは素人視点の雑感です。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;しばらくの間、&lt;/span&gt;&lt;span class="EyebrowElement"&gt;&lt;/span&gt;&lt;a href="http://www.odata.org/"&gt;Open Data Protocol (OData)&lt;/a&gt;&lt;span class="EyebrowElement"&gt; とは、どういったものか概要を調べてみたのですが、それをどうまとめて紹介すればよいか悩んでいて、書き出しに困っているところです。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;OData は、もともと &lt;/span&gt;Microsoft の ADO.NET Data Services という実装があって、Microsoft がその仕様部分を OData として提案し、オープンでスタンダードな仕様として採用を促しているものです。そして、現在 &lt;span class="EyebrowElement"&gt;Microsoft &lt;/span&gt;は ADO.NET Data Services を改めて &lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx"&gt;WCF Data Services&lt;/a&gt;&lt;span class="EyebrowElement"&gt; として OData の実装を提供しているという図式のようです。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;OData は、机上の仕様ありきなものでななく、技術情報も実装(製品も含む)も進んでいるため、ネット上でさまざまな情報を入手できます。次のサイトが、入口として使えそうです。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;&lt;/span&gt;&lt;span class="EyebrowElement"&gt;&lt;/span&gt;Open Data Protocol (OData)&lt;br /&gt;&lt;span class="EyebrowElement"&gt;&lt;a href="http://www.odata.org/"&gt;http://www.odata.org/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;WCF Data Services (formerly ADO.NET Data Services)&lt;/span&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx"&gt;http://msdn.microsoft.com/en-us/data/bb931106.aspx &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;ですので、このエントリでは、OData そのものを紹介するのではなく、OData を調べていて、私なりに気がついたことや、関心をもったことを紹介することにします。*1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OData は、WEB のデータを共有したり、操作するための &lt;a href="http://tools.ietf.org/html/rfc5023"&gt;AtomPub (RFC 5023)&lt;/a&gt; ベースのプロトコルです。そのため、&lt;a href="http://code.google.com/intl/en/apis/gdata/"&gt;Google Data Protocol (GData)&lt;/a&gt; と比較されることが多いようですが、(少し乱暴かもしれませんが) OData と GData は AtomPub 拡張方法に違いはあっても、目的や位置付けは同じものという印象を受けました。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/ee844254.aspx"&gt;&lt;span class="EyebrowElement"&gt;Open Data Protocol Q&amp;amp;A&lt;/span&gt;&lt;/a&gt;&lt;span class="EyebrowElement"&gt; にある次の質問と回答が、気になる多くのものごとを表していそうです。&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Q:&amp;nbsp; How should I think about OData vs. GData&lt;/b&gt; A: There is no OData vs. GData.&amp;nbsp; Both are based on ATOM and JSON. Both protocol support our goal of an open data protocol for the Web. We intend on working with others in the community, including Google, to move the features of OData into future version of AtomPub or other appropriate standards. We encourage Google (GData) to join us in these conversations.&lt;/blockquote&gt;OData も GData も同じ仕様をベースとしていて、目指しているところも同じでしょう。OData の仕様は、将来の AtomPub などの標準仕様に持ち込むつもりなので、Google (GData) も話し合いに参加したほうがいいよ。(超意訳) といったところでしょうか。&lt;br /&gt;&lt;br /&gt;OData のライセンスは &lt;a href="http://www.blogger.com/"&gt;Microsoft Open Specification Promise (OSP)&lt;/a&gt; に基づき、GData のラインセンスは &lt;a href="http://code.google.com/intl/en/apis/gdata/patent-license.html"&gt;Patent License&lt;/a&gt; に基づきます。両者とも条文を読む限りでは、オープンライセンスに見えるのですが、その根本的な違いがどこにあるのか、理解できませんでした。どなたか教えてほしいです。&lt;br /&gt;&lt;br /&gt;OData は Microsoft 以外のサードパーティでの採用が進んでいます。OData に基づいて、サービスやデータを提供する者を、OData Producer と呼ぶようで、その OData Producer のリストは、次のサイトで入手できます。&lt;br /&gt;&lt;br /&gt;OData producers &lt;br /&gt;&lt;a href="http://www.odata.org/producers%20"&gt;http://www.odata.org/producers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OData Producer は、SharePoint や SQL Server、Azure など Microsoft 製品群でサポートが進んでいるようです。これは Google が Google サービスを GData で提供しているのと同じ位置付けに見えます。&lt;br /&gt;&lt;br /&gt;OData は、Microsoft 以外にも、&lt;a href="http://www.ibm.com/developerworks/websphere/downloads/xs_rest_service.html"&gt;IBM WebSphere&lt;/a&gt; といったメジャー製品でも採用され、また、Microsoft .NET Framework やオープンソースの Java REST フレームワークである &lt;a href="http://wiki.restlet.org/docs_2.0/13-restlet/28-restlet/287-restlet.html"&gt;Restlet  OData Extention&lt;/a&gt; を使って、自らの製品やサービスとして OData Producer を実装できるようです。Facebook も &lt;a href="http://facebook-insights.cloudapp.net/"&gt;Facebook Insights&lt;/a&gt; という OData を使った Preview を Live しています。&lt;br /&gt;&lt;br /&gt;さらに Microsoft は、OData Producer がデータを提供できる場として、MarketPlace を立ち上げています。&lt;br /&gt;&lt;br /&gt;Microsoft Codename “Dallas”&lt;br /&gt;&lt;a href="http://pinpoint.microsoft.com/en-US/Dallas"&gt;http://pinpoint.microsoft.com/en-US/Dallas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このサイトは OData Producer のディレクトリを提供していて、OData Consumer (OData の利用者をこう呼ぶ) が OData Producer のサービスを購読するというスタイルをとります。Type Free という項目表記もあるため、将来は、自ら保有するデータで有料で提供して、収益を得るというビジネスモデルも組み込まれているようです。&lt;br /&gt;&lt;br /&gt;さらに Microsoft は、政府機関のデータを提供する Open Government Data Initiative (OGDI) というサービスを立ち上げていて、データフォーマットとして OData を採用しています。&lt;br /&gt;&lt;br /&gt;Open Government Data Initiative (OSDI)&lt;br /&gt;&lt;a href="http://ogdisdk.cloudapp.net/"&gt;http://ogdisdk.cloudapp.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OData は OData Consumer 向けの製品やクライアントライブラリも提供しています。&lt;br /&gt;&lt;br /&gt;OData Consumer&lt;br /&gt;&lt;a href="http://www.odata.org/consumers"&gt;http://www.odata.org/consumers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OData Cousumer は、Data Viewer ものや Excel でサポートされているようで、これから Microsoft のクライアント製品群でのサポートが進んできそうです。また、クライアントライブラリを使って、自らの製品やサービスとして OData Consumer を実装できるようです。これも Google  サービスと GData Client Library と同じ位置付けに見えます。&lt;br /&gt;&lt;br /&gt;OData は、まず Microsoft とサードパーティの製品で OData をサポートして、すそ野を広げて、データを保有する人を巻き込んで OData Producer を増やすというのが現状でしょうか。これをクリアすると、OData Consumer は、ひとつの方法で、あらゆるデータを利用できるようになり、さらに... というエコシステムの構築が OData の狙いということになりそうです。&lt;br /&gt;&lt;br /&gt;OData の仕様には、認証や認可の既定はなく、それぞれのケースで最適な方法があるという立場をとっているようです。&lt;br /&gt;&lt;br /&gt;GData 自体も、認証や認可の既定はありませんが、GData は、Google サービスありきのため、各サービスは Google アカウントで認証し、AuthSub や OAuth といった認可の手続きが共通の取り決めとなっています。このことが、GData が Web での利用を現実的にしていて、GData (を実装したサービス) のアドバンテージになっていると強く感じます。 &lt;br /&gt;&lt;br /&gt;OData はどういった方向性に進んでいくんでしょうか。単なるデータプロトコル仕様だけでは、Web の世界では、全体的な見通しが立たない気がしています。GData と OData の仕様が合流して、新しい AtomPub になったとして、その後、ウェブで誰でも標準手続きで、あらゆるデータを適切に操作できるようになるのでしょうか。&lt;br /&gt;&lt;br /&gt;そのあたりのビジョンをガチンコしていけば、なんかエキサイティングなウェブが開けていけそうな気がした OData の紹介でした。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/magazine/ff714561.aspx"&gt;Open Data Protocol を使用してリッチ インターネット アプリケーションを構築する&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="EyebrowElement"&gt;&lt;span style="font-size: x-small;"&gt;*1 私は WCF Data Services や OData の専門家ではありませんので、もし見識違いや誤りがありましたら、ご指摘いただけますと幸いです。&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-4115366820484118385?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/4115366820484118385/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=4115366820484118385' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4115366820484118385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4115366820484118385'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/07/odatagdataatompub.html' title='ODataとGDataはAtomPubに合流して、ウェブで誰でも標準手続きでデータを適切に操作できるようになるの?'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8639368130268814292</id><published>2010-07-03T14:37:00.000+09:00</published><updated>2010-07-03T14:37:27.430+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter API'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Data Objects'/><title type='text'>OpenSocial Pages のタイムラインは AppEngine for Java の Data Store でどのように実現しているか</title><content type='html'>こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.google.com/enterprise/marketplace/viewListing?productListingId=5389+8112915166450201019"&gt;OpenSocial Pages for Google Apps&lt;/a&gt; は OpenSocial Activities API という Twitter でいうところのタイムライン API を備えています。また Activities は Twitter でいうところの Friends (Following)、Lists、Mentions という人と人の関係(ソーシャルグラフ)で絞り込めるようになっています。 &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.google.com/enterprise/marketplace/viewListing?productListingId=5389+8112915166450201019&amp;amp;utm_medium=button&amp;amp;utm_source=button-lrlab.to" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TC63rinVH6I/AAAAAAAACRI/YVXcOX2eUDI/s320/AddtoApps-shadow.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;OpenSocial Pages は Google AppEngine for Java でホストしています。そして Activity の格納と検索は Data Store (JDO) で実現していて、エンティティの主な構造は、次のようにしています。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;エンティティの構造&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Twitter でいうところの User を表すエンティティです。この User が、誰に Follow されているか、どのグループに属するかを保持させています。&lt;br /&gt;&lt;pre&gt;public class User {&lt;br /&gt;  private String id;&lt;br /&gt;  private Set&amp;lt;String&amp;gt; followerIds; // 誰に Follow されているか&lt;br /&gt;  private Set&amp;lt;String&amp;gt; groupIds; // どのグループに属するか&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Twitter でいうところの Lists を表すエンティティです。&lt;br /&gt;&lt;pre&gt;public class Group {&lt;br /&gt;  private String id;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Twitter でいうところの Status を表すエンティティです。この Activity が誰のもので、誰が関係するのか保持させています。followerIds と groupIds は Person のコピーを保持させています。mentionIds は Twitter でいうところの、テキスト中の @username で引用された User たちを保持させています。&lt;br /&gt;&lt;pre&gt;public class Activity {&lt;br /&gt;  private Long id;&lt;br /&gt;  private String userId; // Person#id&lt;br /&gt;  private String title; // テキスト&lt;br /&gt;  private Set&amp;lt;String&amp;gt; followerIds; // Person#followerIds のコピー&lt;br /&gt;  private Set&amp;lt;String&amp;gt; groupIds; // Person#groupIds のコピー&lt;br /&gt;  private Set&amp;lt;String&amp;gt; mentionIds; // テキスト中の @username たち&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Follow と Unfollow&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;User A が User B を Follow するとき、User B の followerIds に User A の userId を追加します。また Unfollow するときは、User B の followerIds から User A を除外します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Group の参加と退会&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;User が Group に参加するときは、User の groupIds に自身の userId を追加します。また、退会するときは、User の groupIds から 自身の userId を除外します。   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Activity の送信&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;送信する User の followerIds と groupIds を Activity の followerIds と groupIds にコピーして格納します。さらに、テキスト中の @username に該当する User の userId を mentionIds に格納します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;検索クエリ&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;User の Activity を検索するときは、Activity エンティティに対して、次のフィルタを使っています。&lt;br /&gt;&lt;pre&gt;Query#setFilter("userId == :userId");&lt;/pre&gt;User が Follow している Friends の Activity を検索するときは、次のフィルタを使っています。このときの userId は、自分自身の ID を指定します。&lt;br /&gt;&lt;pre&gt;Query#setFilter("followerIds == :userId");&lt;/pre&gt;Group に所属している User たちの Activity を検索するときは、次のフィルタを使っています。&lt;br /&gt;&lt;pre&gt;Query#setFilter("groupIds == :groupId");&lt;/pre&gt;User が関係する Activity を検索するときは、次のフィルタを使っています。&lt;br /&gt;&lt;pre&gt;Query#setFilter("mentionIds == :mentionId");&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Activity の再構築&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;User A が User B を Follow したとき、User B の 全 Activity (*1) の followerIds に User A の userId を追加します。また Unfollow したときは、followerIds から除外します。&lt;br /&gt;&lt;br /&gt;User が Group に参加するときは、User A の 全 Activity (*1) の groupIds に Group の groupId を追加します。また、退会したときは、groupIds から除外します。&lt;br /&gt;&lt;br /&gt;前者と後者とも Task Queue を使って Activity を更新しています。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;利点と欠点、そして課題&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;まず、基本方針は、シンプルなデータ構造とすること、そして、参照のコストを均一化するの(と削除)を最優先にしました。&lt;br /&gt;&lt;br /&gt;この方法は、どんなに User が増えて、どんなに Follow したり、Group に参加したりしても、検索クエリのコストは一定なのが利点です。ただし、Follow/UnFollow、Groupの参加/不参加が発生したとき、過去にさかのぼって Activity を再構築する必要があるのが、大きな欠点です。&lt;br /&gt;&lt;br /&gt;Activity がいくら蓄積されようとも、Activity 自体のコピーは保持していないため、Activity の削除は用意というのも利点です。ただ、User 自体を削除したとき、その User の 全 Activity を削除する必要がありますが、現状は削除せず、残したままとしています。 &lt;br /&gt;&lt;br /&gt;*1 Activity はどんどん蓄積されるものなので、時間が経過するにしたがって、全 Activity を更新するのは、現実的に難しくなってきます。そこで OpenSocial Pages では、新しいものの内 n 件分、もしくは n 日分の Activity のみ再構築の対象にするように妥協しています。古い Activity は重要度が低いよねという考え方です。&lt;br /&gt;&lt;br /&gt;できれば、古い Activity もすべて再構築したいというのが課題です。古い Activity は即時で再構築することは絶対条件ではないため、バッチ的なものや、無駄な再構築が起こらないようにスケジューリングするとかいった方法でもよさそうです。&lt;br /&gt;&lt;br /&gt;何かよいアイディアはないものでしょうか? エンティティグループとか、エンティティのエンティティとかうまく使えば、別の方法があるのかもしれないです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8639368130268814292?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8639368130268814292/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8639368130268814292' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8639368130268814292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8639368130268814292'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/07/opensocial-pages-appengine-for-java.html' title='OpenSocial Pages のタイムラインは AppEngine for Java の Data Store でどのように実現しているか'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_R7O_2gBTssg/TC63rinVH6I/AAAAAAAACRI/YVXcOX2eUDI/s72-c/AddtoApps-shadow.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-4055457687259471798</id><published>2010-07-02T11:10:00.000+09:00</published><updated>2010-07-02T11:10:03.002+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Provisioning API'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='Single Sign-On'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Apps'/><title type='text'>Google Apps Marketplace で OpenSocial Pages をぽちっと Google Apps にダイレクトインストールできるようにしました</title><content type='html'>こんにちは。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages を Google Apps MarketPlace からぽちっと Google Apps にダイレクトインストールできるようにしてみました。&lt;br /&gt;&lt;br /&gt;このエントリでは Google Apps MarketPlace から Google Apps に OpenSocial Pages に登録する流れを紹介します。Google Apps MarketPlace の掲載手順や Google Apps との連携方法など、具体的な話題は、別途エントリで紹介します。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages がどんなものか知りたい方は、次の紹介エントリをご覧ください。 &lt;br /&gt;&lt;br /&gt;* &lt;a href="http://nakajiman.blogspot.com/2010/06/opensocial-pages.html"&gt;OpenSocial Pages という新しい取り組みの紹介です&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://nakajiman.blogspot.com/2010/06/opensocial-pages-social-gadget.html"&gt;OpenSocial Pages はソーシャルデータ駆動による Social Gadget の消費スタイルを提案するものです&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Apps MarketPlace は Google が運営するサイトで、サードパーティのベンダが、全世界の Google ユーザに、ビジネス向けの製品やサービスを紹介する場となっています。&lt;br /&gt;&lt;br /&gt;Google Apps Marketplace&lt;br /&gt;&lt;a href="https://www.google.com/enterprise/marketplace/"&gt;https://www.google.com/enterprise/marketplace/&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;The Google Apps Marketplace offers products and services designed for Google users, including installable apps that integrate directly with Google Apps. Installable apps are easy to use because they include single sign-on, Google's universal navigation, and some even include features that integrate with your domain's data.&lt;/blockquote&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/j73XDCItdIb-Rj7-Mrblxw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TC0umUK0L3I/AAAAAAAACQ4/VOpBepspmj8/s400/Google%20Apps%20Marketplace_1278029051864.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は、次のとおり Google Apps &amp;gt; Productivity カテゴリに掲載されています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/bIqwYPkfOw2rhO9taLhCOQ?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TC0unRiZXMI/AAAAAAAACQg/JcZLMX_ckYo/s400/Google%20Apps%20Marketplace%20-%20Productivity_1278029067621.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Apps MarketPlace では、ベンダのプロフィールを掲載できます。Nakajiman Software のプロフィールは、次のとおりです。ベンダの基本情報と製品リストを掲載できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.google.com/enterprise/marketplace/viewVendorListings?vendorId=5389"&gt;Vendor Profile: Nakajiman Software Inc.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/wANncBiL89TWrAq0YXOR-w?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/TC0ung8C9oI/AAAAAAAACQk/OSXn6VhuK8g/s400/Google%20Apps%20Marketplace%20-%20Vendor%20Profile-%20Nakajiman%20Software%20Inc._1278029130508.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;製品ごとのプロフィールも掲載できます。OpenSocial Pages のプロフィールは、次のとおりです。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.google.com/enterprise/marketplace/viewListing?productListingId=5389+8112915166450201019"&gt;OpenSocial Pages for Google Apps&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/ZLMgiWqz9bIK3DyM8Oe1-w?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TC0um7iHpII/AAAAAAAACQc/XP7DeJO9nPc/s400/Google%20Apps%20Marketplace%20-%20OpenSocial%20Pages%20for%20Google%20Apps_1278029082848.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Apps MarketPlace は製品の紹介にとどまらず、&lt;a href="http://developer.googleapps.com/marketplace/getting-started"&gt;Single Sign-On (SSO)&lt;/a&gt; に対応した製品であれば、Google Apps MarketPlace からその製品を Google Apps に直接インストールできる仕組みを備えています。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages も直接インストールできるようにしています。OpenSocial Pages のインストールはとても簡単です。OpenSocial Pages のプロフィールから Add it now ボタンをクリックします。そして、インストール先の Google Apps ドメインを入力して Go ボタンをクリックします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/2dAR91Ie25wg11z8EcaJqQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TCvC7ysoUDI/AAAAAAAACPU/tdDIstQZUHE/s144/Google%20Apps%20Marketplace%20-%20OpenSocial%20Pages%20for%20Google%20Apps_1277934833953.jpg" /&gt;&lt;/a&gt; &lt;a href="http://picasaweb.google.co.jp/lh/photo/hGjOgx1HKGuql9rBFvzY2w?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TCvC8CCj-0I/AAAAAAAACPY/9t-SeloGt1A/s144/Google%20Apps%20Marketplace%20-%20OpenSocial%20Pages%20for%20Google%20Apps_1277935057530.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;すると、Google Apps Dashboard に遷移し、OpenSocial Pages の利用規約への同意を求められます。このとき Terms of Service が OpenSocial Pages の利用規約にリンクされています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Q-RB64u5VjNZZjO4uQXCrg?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/TCvC8vUo5jI/AAAAAAAACPc/5IpGjfFURvk/s400/Google%20Apps_1277935076882.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;利用規約に同意すると、インストールする製品から Google Apps にアクセスする内容を表示し、認可するか求められます。OpenSocial Pages は Google Apps の Uesr と Group をインポートするため、User と Group へのアクセス (Read Only) を求めています。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/KlMY2b38aFLkCQL5fvlcrw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TCvC87FNlRI/AAAAAAAACPg/lG1J1ELD9IM/s400/Google%20Apps_1277935117594.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;アクセスを認可して Enable app now ボタンをクリックすると、Google Apps で OpenSocial Pages が使えるようになります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Vz4_lfiYWcN8yapfVEAWWg?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TCvC9SN4Z8I/AAAAAAAACPk/MF_um7wJ2Wg/s400/Google%20Apps_1277935136467.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;インストールすると、Google Apps に OpenSocial Pages のリンクが追加されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/hjp6bYcgPCyP78BJgijxyw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TCvC-00dkJI/AAAAAAAACPw/jAuWuzm1Q78/s400/Google%20Apps_1277935922742.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;インストールすると、Gmail などのナビゲーションに OpenSocial Pages のリンクが追加されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/GLX7TuWoXUtFY7E0AFki-g?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TCvC_fAf61I/AAAAAAAACP0/AOvDhYW7_QE/s400/N35.com%20%E3%83%A1%E3%83%BC%E3%83%AB%20-%20%E5%8F%97%E4%BF%A1%E3%83%88%E3%83%AC%E3%82%A4%20%282%29%20-%20manten%40n35.com_1277936011823.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は Google Apps Dashboard から、いつでもアンインストールできます。また、状況に応じて、無効にしたり、アクセスの認可を取り下げることもできます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/n5sMRH7BXmH7_0ZJiStaQg?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TCvC-SC4cVI/AAAAAAAACPo/8Z4MKD9a5Ig/s400/Google%20Apps_1277935154308.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages にアクセスすると、Google Apps アカウントによるログインを求められます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Rx1aJVPuYMjXKu2zE_zExg?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TCvC-lsmI0I/AAAAAAAACPs/iz_YEyzq8f0/s400/N35.com_1277935440159.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages にログインすると、既定のページ(=ガジェット)がされます。このページは OpenSocial の People API を使って、ログインユーザの名前を表示するようにしてあります。この名前は Google Apps アカウントからインポートしたものです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/v08KZWXLHZoQ7W_Vhf2KoA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TCvC7PGzeVI/AAAAAAAACPM/jyB3goYGwVo/s400/Hello%2C%20Viewer%20-%20OpenSocial%20Pages_1277935491104.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages のコントロールパネルにアクセスして、初期のセットアップをします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/XR3oFozqDZB4UUAhRvj-pg?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TCvC7tdTz7I/AAAAAAAACPQ/qespoyRPhuI/s400/Gadget%20Settings%20-%20OpenSocial%20Pages_1277935526383.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;あとは OpenSocial Apps や Social Gadgets を開発するノリでページを編集していきます。&lt;br /&gt;&lt;br /&gt;Google Apps MarketPlace での露出は、ユーザレビューと評価による基準しかないようです。もしも関心がありましたら OpenSocial Pages をお試しいただき、マイナス面でも構いませんので、レビューや評価を頂けますと幸いです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-4055457687259471798?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/4055457687259471798/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=4055457687259471798' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4055457687259471798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4055457687259471798'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/07/google-apps-marketplace-opensocial_02.html' title='Google Apps Marketplace で OpenSocial Pages をぽちっと Google Apps にダイレクトインストールできるようにしました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R7O_2gBTssg/TC0umUK0L3I/AAAAAAAACQ4/VOpBepspmj8/s72-c/Google%20Apps%20Marketplace_1278029051864.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-5527764719912978868</id><published>2010-06-16T10:18:00.001+09:00</published><updated>2010-06-16T10:20:08.819+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='mixi Platform'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>mixiアプリ開発 &amp; 運用コンプリートブック の見本誌が届きました</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;6月19日 発売(予定)の &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774143057/learninresour-22/ref=nosim/" target="_top"&gt;mixiアプリ開発 &amp; 運用コンプリートブック - ユーザをつかむソーシャルアプリのつくり方!育て方!&lt;/a&gt; の見本誌が届きました。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TBgcEDe6trI/AAAAAAAACOY/XhSIEp9Z0jY/s1600/F1010040.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TBgcEDe6trI/AAAAAAAACOY/XhSIEp9Z0jY/s320/F1010040.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;目次は、次のとおりです。&lt;a href="http://twitter.com/yoichiro"&gt;@yoichiro&lt;/a&gt; さんの監修で、SAP 各社さんが、実際に世の中に送り出した mixiアプリの開発や運用の事例を解説したり、紹介する構成となっています。&lt;br /&gt;&lt;br /&gt;* 序章&lt;br /&gt;* Chapter 01 mixi アプリの基礎&lt;br /&gt;* Chapter 02 『ようこそマイキッチン』の開発・運用事例&lt;br /&gt;* Chapter 03 『セルフィちゃんねる』の開発・運用事例&lt;br /&gt;* Chapter 04 ドリコムのアプリ開発・運用事例&lt;br /&gt;* Chapter 05 『記憶スケッチ』の開発・運用事例&lt;br /&gt;* Chapter 06 外部サーバ&lt;br /&gt;* Chapter 07 OpenSocial jQuery による開発&lt;br /&gt;&lt;br /&gt;当社も共著者として「Chapter 07 OpenSocial jQuery による開発」を担当しました。ミニアプリを題材として OpenSocial jQuery の使い方を説明しています。また、完動のソースコードとキャプチャを豊富に掲載して、OpenSocial jQuery を使って mixiアプリでできることを紹介しています。ので、mixiアプリの設計をしたり、コーディングをするときに、手元にあると役立つだろうと期待しています。  &lt;br /&gt;&lt;br /&gt;SAP 各社さんの Chapter は、次のような、とても興味深い内容になっています(怒られるかもしれませんが、印象を伝えたかったので、写真で紹介します)。&lt;br /&gt;&lt;br /&gt;mixiアプリのバックエンドが、どのような構成になっていて、どう運用しているかといった話題もあります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R7O_2gBTssg/TBgcIoqrVtI/AAAAAAAACOw/lZKgXHVVHRk/s1600/F1010043.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_R7O_2gBTssg/TBgcIoqrVtI/AAAAAAAACOw/lZKgXHVVHRk/s320/F1010043.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;mixiアプリのトラフィックが、どうなっていて(どういう傾向があって)、それにどう対応したかといった話題もあります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TBgcG-mnAYI/AAAAAAAACOo/ZCvGQNkQgR8/s1600/F1010042.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TBgcG-mnAYI/AAAAAAAACOo/ZCvGQNkQgR8/s320/F1010042.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;mixiアプリのプロジェクトが、どう進んで、どんなことをした(している)、どんなツールや文書を使ったといった話題もあります。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R7O_2gBTssg/TBgc8lqYrHI/AAAAAAAACO4/x7kEoPRnaXg/s1600/F1010041.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_R7O_2gBTssg/TBgc8lqYrHI/AAAAAAAACO4/x7kEoPRnaXg/s320/F1010041.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以上のとおり、SAP 各社さんしか知るはずのない、外からは見ることのできない話題が盛り込まれています。&lt;br /&gt;&lt;br /&gt;広報的な意味はあるかもしれませんが、各社さんとも、自社のノウハウを公開する直接的な理由はないと思えますが、おそらく mixiアプリを含むソーシャルアプリの市場を盛り上げていこうという意思の表れなんじゃないかと思います。素晴らしいなぁ。&lt;br /&gt;&lt;br /&gt;Amazo などのオンライン書店では予約も開始しています。ぜひお手元に。よろしくお願いいたします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-5527764719912978868?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/5527764719912978868/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=5527764719912978868' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/5527764719912978868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/5527764719912978868'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/06/mixi.html' title='mixiアプリ開発 &amp; 運用コンプリートブック の見本誌が届きました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R7O_2gBTssg/TBgcEDe6trI/AAAAAAAACOY/XhSIEp9Z0jY/s72-c/F1010040.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8524580784129579698</id><published>2010-06-09T15:44:00.001+09:00</published><updated>2010-06-09T15:48:33.831+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='jQTouch'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='iPod touch'/><title type='text'>OpenSocial Pages はソーシャルデータ駆動による Social Gadget の消費スタイルを提案するものです</title><content type='html'>こんにちは。なかじまんです。OpenSocial Pages ネタです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nakajiman.blogspot.com/2010/06/opensocial-pages.html"&gt;OpenSocial Pages&lt;/a&gt; は、その構成例として、iPhone (iPod touch も) 向けに OpenSocial な機能を持つページ(=ガジェット)を提供できるようにしています。&lt;br /&gt;&lt;br /&gt;さっそく OpenSocial Pages を使って iPhone 向けに、さささっと 2時間くらいで、タイムライン上でコミュニケーションするためのサンプルページを作ってみました。ページのソースコード (=ガジェット XML ファイル) は、次のサイトからダウンロードできます。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages Downloads&lt;br /&gt;&lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/downloads"&gt;http://sites.google.com/a/lrlab.to/opensocial-pages/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;サンプルページといっても、完動品で、実用性を感じられるほどの機能を盛り込んであります。iPod touch で動いている様子を動画にしました。動画を見るとイメージが膨らむと思います。(オーディオは Google CM っぽくしてみましたｗ 知らない曲なので、あくまでもイメージです)&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sOqru7S9jAA&amp;hl=ja_JP&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/sOqru7S9jAA&amp;hl=ja_JP&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages のページは iPhone のホーム画面に追加できるようにしてあります。ので、Safari からブックマークしておけば、すぐにページを開くことができます。あと、ホーム画面のアイコンは、ガジェットXML の &lt;a href="http://opensocial-resources.googlecode.com/svn/spec/1.0/Core-Gadget.xml#Icons"&gt;/ModulePrefs/Link/@rel="icon"&lt;/a&gt; で任意のアイコンを指定できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/kLHq7lj4LkkJx8MGPxT2VQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TA8cburh9MI/AAAAAAAACNs/2CMmcJNa9V8/s288/IMG_0003.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ホーム画面のアイコンからページを開くと、ローディング画面を挟むようにしてあります。現状は war/images/apple-touch-startup-image.png 固定ですので、必要に応じて差し替えてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/6z2JW6Mzc1hrltmzRRQm0g?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TA8cbyvi9WI/AAAAAAAACNw/WULMftZ2960/s288/IMG_0004.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;認証ドメインの全メンバーのアクティビティをリスト表示しています。緑のハイライトは、タップしたときの効果です。定期的に Activites API をポーリングして、新しいアクティビティを追加しています。OpenSocial Pages の Activites API は UpdatedSince (この日時以降に更新されたもの) パラメータを備えていますので、たんなるポーリングよりもコストは抑えめにできます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Hw8XFyiNnDGNIyGvSlAxnA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TA8ccV_G89I/AAAAAAAACN0/nhtD0eaEOvo/s288/IMG_0006.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;右上の Share ボタンをタップすると、スライドアップして投稿フォームを表示します。メッセージを入力して Send ボタンをクリックすると、そのテキストをアクティビティとして送信します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/JAIKBWRX5E_VH7M2m6FhZg?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TA8cdK11nHI/AAAAAAAACN8/KvuKJbaqTdE/s288/IMG_0008.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;タイムラインのメッセージを選択すると、スライドしてメッセージの全文を表示します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/wv7uohYQlq3f6lrvFKzGZg?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TA8ccwOeFrI/AAAAAAAACN4/9hyeXOGdGs4/s288/IMG_0007.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reply ボタンをタップすると、返信フォームを表示します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/td3hnEPNHWudGoXiSPBZyA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/TA8cdgocG1I/AAAAAAAACOA/9Z6-NTxFzB0/s288/IMG_0009.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Retweet ボタンをタップすると、RT フォームを表示します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/bPzaJSgA78Nh6kQX4mcV9Q?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TA8ceFv81zI/AAAAAAAACOE/o-wNjxiC6xY/s288/IMG_0010.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;サンプルページの機能は、以上のとおりです。ぜひ、ページのソースコードと見比べてください。OpenSocial Pages は、ソーシャルグラフとアクティビティストリームの API を持ちます。そのため、この非常に少ないコードだけでも、これだけのソーシャルな機能を持つページが作成できてしまいます。&lt;br /&gt;&lt;br /&gt;このように OpenSocial Pages の大きな特徴は、必要な機能を持つページを、その場でインスタントに作成できるということです。つまり、従来のように、多機能かつ汎用的なガジェットを使っていく方向性に加えて、そのときに必要な機能だけを持つガジェット(=ページ)を量産して消費して使い捨てにするという方向性も考慮に入れることができます。また OpenSocial Pages は、ソーシャルグラフとそこから発生したデータは、ページの存在とは無関係 *1 にデータとして保持します。ので、ページよりも、データに重きをおきます。&lt;br /&gt;&lt;br /&gt;例えば、紹介したサンプルページは、Twitter のように多機能にしていくことはできますが、特定の人とだけ、タイムラインでコミュニケーションしたいなど、ある目的を持つメンバー向けのページを提供したとして、その後、そのページは使わなくなったとしても、アクティビティはそのまま残り、また別のページから別の使われ方をすることになるでしょう。&lt;br /&gt;&lt;br /&gt;*1 ページを削除したときもデータは残りますが、AppData などページの存在が必須であるデータを、どう参照させるかは課題です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8524580784129579698?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8524580784129579698/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8524580784129579698' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8524580784129579698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8524580784129579698'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/06/opensocial-pages-social-gadget.html' title='OpenSocial Pages はソーシャルデータ駆動による Social Gadget の消費スタイルを提案するものです'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R7O_2gBTssg/TA8cburh9MI/AAAAAAAACNs/2CMmcJNa9V8/s72-c/IMG_0003.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6825998952474677350</id><published>2010-06-02T15:42:00.005+09:00</published><updated>2010-06-02T15:57:06.210+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Pages'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>OpenSocial Pages という新しい取り組みの紹介です</title><content type='html'>こんにちは。なかじまんです。新しい取り組みのお知らせです。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages 0.9.0 を公開します。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は &lt;a href="http://code.google.com/intl/ja/appengine/"&gt;Google App Engine for Java&lt;/a&gt; 上で動作する OpenSocial コンテナです。OpenSocial Pages は App Engine 上のアプリケーションに OpenSocial を組み込んだり、OpenSocial の上にアプリケーションを構築する、その元ネタとして提供するものです。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は App Engine 向けに実装した完動品です。ソースコードを提供していますので、手元の環境でソースコードをビルドして App Engine にデプロイするだけで、その動作を確認できます。OpenSocial Page のソースコードは、次のサイトからダウンロードできます。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages - Nakajiman Software&lt;br /&gt;&lt;a href="http://sites.google.com/a/lrlab.to/opensocial-pages/"&gt;http://sites.google.com/a/lrlab.to/opensocial-pages/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は、mixi や gooホームのように、アプリの開発者がいて、SNS のユーザがいて、その間をコンテナが取り持ち、ひとつのサービスを提供するという形態を目指すものではなく、&lt;a href="http://www.opensocial.org/page/enterprise-opensocial"&gt;Enterprise OpenSocial Whitepaper&lt;/a&gt; などの新しい方向性に触発されて、今ある(これから作る)システムやサービスに OpenSocial をどう取り込んでいくかを意識して取り組もうというものです。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は Google アカウント認証を前提としています。アプリケーションを Google Apps と結び付けることで Google Apps ドメインのアカウントに限定することもできます。つまり、信頼できる限られた範囲のユーザでの利用を想定しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/k-JVDjKzmJe-eu5tM0ZSJA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TAQ9b_83XwI/AAAAAAAACL8/u_4ARrT1FRo/s400/login.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は、ウェブページを 1つのガジェットとして扱います。ガジェットは iframe を使って表示するのではなく、ウェブページの HTML ドキュメントにインライン表示します。つまり、ウェブページ全体が Canvas ビューになるといえます。&lt;br /&gt;&lt;br /&gt;この特性により、例えば iPhone や iPad といった広い分野で OpenSocial アプリの仕組みを活用できます。実例も兼ねて、OpenSocial Pages のソースコードでは &lt;a href="http://www.jqtouch.com/"&gt;jQTouch&lt;/a&gt; を組み込み iPhone 仕様でページを表示するようにしてあります。このページ自体が 1つのガジェットになり、そのガジェットから OpenSocial API が使えます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/tjLcZ6djdcHmMZULtgPtNg?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TAXP6-JL8jI/AAAAAAAACNM/FrtrvFPLD8o/s288/IMG_0001.jpg" /&gt;&lt;/a&gt; &lt;a href="http://picasaweb.google.co.jp/lh/photo/zzspMkN0aJtpYG_0Bem_LQ?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/TAXP7Ax331I/AAAAAAAACNQ/V9UHLE9x3YQ/s288/IMG_0002.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は、コントロールパネルという管理機能をあらかじめ持っています。コントロールパネルは、管理者(admin) のみアクセスでき、次のリソースを管理したり、編集できたりします。&lt;br /&gt;&lt;br /&gt;* ユーザ&lt;br /&gt;* グループ&lt;br /&gt;* ページ (= ガジェット)&lt;br /&gt;* プロキシ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/6vAI8-tlmrv_RtV6VWDA3g?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TAQ9cn0NYkI/AAAAAAAACMI/wXpFpX1KqeU/s400/controlpanel-groups.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は、人の関係性を、次のとおり、ユーザとグループで表現します。また、この関係性は、OpenSocial API にも適用しています。&lt;br /&gt;&lt;br /&gt;* ユーザは Google アカウントに対応する&lt;br /&gt;* ユーザは、他のユーザを Follow できる (友達関係)&lt;br /&gt;* 管理者は、ドメインのグループを作成できる&lt;br /&gt;* ユーザは、ドメインのグループに参加できる&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は、ウェブページをガジェットに見立てていますが、ガジェットの元ネタは、従来どおり、ガジェット XML です。OpenSocial Pages は、オンラインのガジェットエディタを持っていて、編集したガジェット XML は App Engine のデータストアに保持します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/TF7ZPaTEEGBuPQ7ZBxLWxw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/TAQ9dyNLyhI/AAAAAAAACMY/JdvrFcQJcAs/s400/controlpanel-pages-edit.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;また、ガジェットエディタから iPhone/iPod や iPad を選択して、特定の画面サイズでポップアップして、ウェブページを開けるようにしています。Safari を使えば、実機とほぼ同じように表示できます。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は gadgets.io.makeRequest によるリクエスト中継をホワイトリストで制限します。許可していない URL へのリクエストは中継しません。また、次の中継方法をサポートしています。&lt;br /&gt;&lt;br /&gt;* あらかじめ定めた User/Password による基本認証&lt;br /&gt;* あらかじめ定めた User/Password による WSSE 認証&lt;br /&gt;* HMAC-SHA1 による 2-Legged OAuth&lt;br /&gt;* あらかじめ定めた User/Password による Zoho CRM API の呼び出し&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/fOIMXrbH1Q7PlQ4h2E1dCA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/TAQ9eBnD3fI/AAAAAAAACMc/epk5D24u3Ps/s400/controlpanel-proxies.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Pages は &lt;a href="http://www.opensocial.org/page/specs-1"&gt;OpenSocial v1.0&lt;/a&gt; 仕様に準じて実装を進めていて、次の OpenSocial JavaScript API をサポートしています。v0.9 や v0.8 は捨てています。&lt;br /&gt;&lt;br /&gt;* 中継先を管理できる gadgets.io.makeRequest&lt;br /&gt;* 言語選択による Message Bundle&lt;br /&gt;* URLパラメータによる User Preference の適用&lt;br /&gt;* User Perference は Web Storage (localStorage) に格納&lt;br /&gt;* iPhone 向け User Perference エディタ&lt;br /&gt;* ビューの遷移 (Canvas から Canvas のみ)&lt;br /&gt;&lt;br /&gt;* People, Groups, Activites, AppData, Messages を JSON-RPC で実装&lt;br /&gt;* People は、取得(friens, group)、更新、削除、Follow、グループ参加を実装&lt;br /&gt;* Groups は、取得、作成、更新、削除&lt;br /&gt;* Activites は、取得(friends, group, mentions)、作成、更新、削除を実装 &lt;br /&gt;* Messages は、送信(person, group)を実装&lt;br /&gt;&lt;br /&gt;パーミッションモデルは、一般性を保持しつつ、制限を緩いものとしています。&lt;br /&gt;&lt;br /&gt;* Viewer は、他人や他アプリも含めて、あらゆるデータを取得できます&lt;br /&gt;* Viewer は、自身のデータを作成、更新、削除できます&lt;br /&gt;* Viewer は、すべての他人や他グループに対して、メッセージを送信できます&lt;br /&gt;* 管理者(Admin)は、他人や他アプリも含めて、あらゆるデータを取得、作成、更新、削除できます&lt;br /&gt;&lt;br /&gt;駆け足になってしまいましたが、ざっと概略をお伝えしました。&lt;br /&gt;&lt;br /&gt;OpenSocial Pages をきっかけとして、今後、いろいろな分野で OpenSocial が適用できないか... という話題が増えることを期待しています。もし、OpenSocial の適用を検討することがありましたら、特にお役に立てると考えますので、お声掛けいただきたく存じます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6825998952474677350?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6825998952474677350/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6825998952474677350' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6825998952474677350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6825998952474677350'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/06/opensocial-pages.html' title='OpenSocial Pages という新しい取り組みの紹介です'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R7O_2gBTssg/TAQ9b_83XwI/AAAAAAAACL8/u_4ARrT1FRo/s72-c/login.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-7638852080065974316</id><published>2010-05-09T19:18:00.002+09:00</published><updated>2010-05-09T19:23:28.257+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mixi Platform'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>『mixiアプリをつくろう! OpenSocialで学ぶソーシャルアプリ』を献本いただきました</title><content type='html'>こんばんは。なかじまんです。&lt;br /&gt;&lt;br /&gt;『&lt;a href="http://www.amazon.co.jp/gp/product/4881667327?ie=UTF8&amp;tag=learninresour-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4881667327"&gt;mixiアプリをつくろう！ OpenSocialで学ぶソーシャルアプリ&lt;/a&gt;』を、著者の &lt;a href="http://twitter.com/rkanbe"&gt;@rkanbe&lt;/a&gt; さんから 献本いただきました。ありがとうございます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R7O_2gBTssg/S-ZiKwJ3r7I/AAAAAAAACLQ/0EAXqoy5mqs/s1600/F1010039.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_R7O_2gBTssg/S-ZiKwJ3r7I/AAAAAAAACLQ/0EAXqoy5mqs/s320/F1010039.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;この書籍の内容は、↓という、まとめページがありますので、購入前の情報収集に使えそうです。&lt;br /&gt;&lt;br /&gt;mixiアプリをつくろう！ OpenSocialで学ぶソーシャルアプリ 書籍情報&lt;br /&gt;&lt;a href="http://labs.spicebox.jp/mixiappbook2010/"&gt;http://labs.spicebox.jp/mixiappbook2010/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;mixiアプリで何かやろうとするとき、mixiアプリは、何ができて、何が必要で、そして、何からはじめればよいか... 入口で戸惑うことが多い印象がありますが、この本は、写真の帯にもあるとおり、mixiアプリの企画から開発、運営、PR まで、網羅的に取り上げていて、この 1冊で、mixiアプリの全体像を把握できるようになっていて、そこがもっとも価値あるところです。&lt;br /&gt;&lt;br /&gt;説明に使っているソースコードは具体的で、mixiアプリらしさを盛り込んだ実例も含まれています。そのソースコードがどういった振る舞いをするのか、スクリーンキャプチャや図を使って解説しているので、実際にソースコードを動かさなくても、読み進められるように配慮しています。&lt;br /&gt;&lt;br /&gt;ただ、技術的に突っ込んだ解説は、控え目になっています。ですが、技術的なトピックは、それぞれ詳しい立場の人たちが、ブログや勉強会などでアウトプットして充実してきていますので、この本を索引として、ネットの情報を探したり、結びつけたりするのにも、役立つことでしょう。&lt;br /&gt;&lt;br /&gt;最後に、この本は、ほぼほぼ &lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;OpenSocial jQuery&lt;/a&gt; という JavaScript ライブラリを使っての解説となっています。この本を通じて OpenSocial jQuery のよさ!? ... みたいなものが伝わって、mixiアプリをはじめとする OpenSocial アプリ開発のきっかけになってくれればと、期待しています。&lt;br /&gt;&lt;br /&gt;そうそう。この本で OpenSocial Hackathon を紹介していますが、その模様の写真に私がいた気がしました。あれは OpenSocial Japan×gooホーム共催のときのやつっぽいですね。なんか懐かしい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-7638852080065974316?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/7638852080065974316/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=7638852080065974316' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7638852080065974316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7638852080065974316'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/05/mixi-opensocial.html' title='『mixiアプリをつくろう! OpenSocialで学ぶソーシャルアプリ』を献本いただきました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_R7O_2gBTssg/S-ZiKwJ3r7I/AAAAAAAACLQ/0EAXqoy5mqs/s72-c/F1010039.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1714105511199565243</id><published>2010-04-26T10:22:00.003+09:00</published><updated>2010-04-28T20:37:47.891+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSONIC'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial OAuth Filter'/><category scheme='http://www.blogger.com/atom/ns#' term='AppEngine'/><title type='text'>AppEngine Java と JSONIC と OpenSocial OAuth Filter で作る OpenSocial アプリの外部サーバ</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;AppEngine Java と JSONIC と OpenSocial OAuth Filter を使うと、OpenSocial アプリの外部サーバをお手軽に立てることができますよ ... というおはなしです。ただ、大規模な運用実績はありませんので、その点は割り引いて読んでくださいね。&lt;br /&gt;&lt;br /&gt;はじめに、JSONIC というライブラリを使って、AppEngine Java 上に、独自の REST API を構築します。そして、OpenSocial アプリから gadgets.io.makeRequest メソッドを使って、その REST API を呼び出すことにします。JSONIC とは、↓というものです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jsonic.sourceforge.jp/"&gt;JSONIC - simple json encoder/decoder for java&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;JSONICは、Java用のシンプルかつ高機能なJSONエンコーダー/デコーダーライブラリです。Java用のJSONライブラリはすでに多数存在しますが、JSONICはRFC 4627に従った正式なJSON形式でのデコード/エンコードを行いながらも、プログラミング言語に依存する情報をJSON内に含めることなくPOJO(Plain Old Java Object)と自然な変換を行える点に特徴があります。&lt;/blockquote&gt;次のとおり、REST API のインタフェースを想定します。&lt;br /&gt;&lt;br /&gt;* GET http://example.com/api/entries.json?count={count} // エントリ取得&lt;br /&gt;* GET http://example.com/api/entries/{id}.json // エントリ取得&lt;br /&gt;* POST http://example.com/api/entries.json // エントリ投稿&lt;br /&gt;* PUT http://example.com/api/entries/{id}.json // エントリ更新&lt;br /&gt;* DELETE http://example.com/api/entries/{id}.json // エントリ削除&lt;br /&gt;&lt;br /&gt;jsonic-1.2.0.jar をビルドパスに追加して、次のとおり、web.xml に JSONIC の REST サーブレットを追記します。このとき、config パラメータの mappings を使って、REST API のインタフェースとクラスの対応を指定します。ここでは、EntryService クラスとします。&lt;br /&gt;&lt;pre&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;JSONIC&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;net.arnx.jsonic.web.RESTServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;  &amp;lt;init-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;config&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;&lt;br /&gt;    {&lt;br /&gt;      "mappings": {&lt;br /&gt;        "/api/entries.json": "com.example.EntryService",&lt;br /&gt;        "/api/entries/{id}.json": "com.example.EntryService"&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;JSONIC&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;url-pattern&amp;gt;*.json&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;/pre&gt;次のとおり、EntryService クラスを記述します。find が GET リクエスト、create が POST、update が PUT、delete が DELETE を表します。リクエストのパラメータは、各メソッドの params に格納されます。また、各メソッドの戻り値が JSON 形式のレスポンスに相当します。&lt;br /&gt;&lt;pre&gt;public class EntryService {&lt;br /&gt;  public Map&amp;lt;String,Object&amp;gt; find(Map&amp;lt;String,String&amp;gt; params) {&lt;br /&gt;    Map&amp;lt;String, Object&amp;gt; json = new HashMap&amp;lt;String, Object&amp;gt;();&lt;br /&gt;    json.put("viewer", params.get("opensocial_viewer_id"));&lt;br /&gt;    json.put("id", params.get("id"));&lt;br /&gt;    json.put("count", params.get("count"));&lt;br /&gt;    return json;&lt;br /&gt;  }&lt;br /&gt;  public Map&amp;lt;String,Object&amp;gt; create(Map&amp;lt;String,String&amp;gt; params) {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;  public Map&amp;lt;String,Object&amp;gt; update(Map&amp;lt;String,String&amp;gt; params) {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;  public Map&amp;lt;String,Object&amp;gt; delete(Map&amp;lt;String,String&amp;gt; params) {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;次のとおり、OpenSocial アプリから gadgets.io.makeRequest メソッドを使って、その REST API を呼び出します。&lt;br /&gt;&lt;pre&gt;var url = 'http://example.com/api/entries/1.json?count=10';&lt;br /&gt;var params = {};&lt;br /&gt;params[gadgets.io.RequestParameters.METHOD] =&lt;br /&gt;  gadgets.io.MethodType.GET;&lt;br /&gt;params[gadgets.io.RequestParameters.AUTHORIZATION] =&lt;br /&gt;  gadgets.io.AuthorizationType.SIGNED;&lt;br /&gt;params[gadgets.io.RequestParameters.CONTENT_TYPE] =&lt;br /&gt;  gadgets.io.ContentType.JSON;&lt;br /&gt;gadgets.io.makeRequest(url, function(res) {&lt;br /&gt;  console.log(res.data.viewer);&lt;br /&gt;  console.log(res.data.id);&lt;br /&gt;  console.log(res.data.count);&lt;br /&gt;}, params);&lt;br /&gt;&lt;/pre&gt;PUT リクエストと DELETE リクエストが使えないコンテナのときは、リクエストのパラメータに _method=put や _method=delete を指定すると、疑似的に PUT や DELETE リクエストを表現できます。 &lt;br /&gt;&lt;br /&gt;次に、OpenSocial OAuth Filter というライブラリを使って、構築した REST API に対するリクエストの署名を検証するようにします。 OpenSocial OAuth Filter とは、↓というものです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-oauth-filter/"&gt;OpenSocial OAuth Filter&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;OpenSocial OAuth Filter is a JavaEE filter to validate OpenSocial requests. This filter blocks illegal requests to prevent spoofing and tampering.&lt;/blockquote&gt;opensocial-oauth-filter-0.7.jar をビルドパスに追加して、次のとおり、web.xml に OpenSocial OAuth Filter のフィルタサーブレットを追記します。このとき、config-class パラメータを使って、公開鍵と検証条件を実装したクラスを指定します。ここでは、MixiRegistryConfigurator クラスとします。&lt;br /&gt;&lt;pre&gt;&amp;lt;filter&amp;gt;&lt;br /&gt;  &amp;lt;filter-name&amp;gt;opensocial-oauth-filter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;  &amp;lt;filter-class&amp;gt;&lt;br /&gt;    org.hidetake.opensocial.filter.RequestValidationFilter&lt;br /&gt;  &amp;lt;/filter-class&amp;gt;&lt;br /&gt;  &amp;lt;init-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;config-class&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;com.example.MixiRegistryConfigurator&amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;  &amp;lt;filter-name&amp;gt;opensocial-oauth-filter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;  &amp;lt;url-pattern&amp;gt;*.json&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;&lt;/pre&gt;次のとおり、MixiRegistryConfigurator クラスを記述します。公開鍵とコンシューマキー、アプリID、ガジェットURL を指定します。この条件を満たさないリクエストには、403 Forbidden をレスポンスします。&lt;br /&gt;&lt;pre&gt;public class MixiRegistryConfigurator&lt;br /&gt;    implements RegistryConfigurator {&lt;br /&gt;  private static final String cert =&lt;br /&gt;    "-----BEGIN CERTIFICATE-----\n"&lt;br /&gt;    + "MIICdzCCAeCgAwIBAgIJANCWpLIspxwbMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV\n"&lt;br /&gt;      ...&lt;br /&gt;    + "IpqnsHwF1pm0bTY=\n"&lt;br /&gt;    + "-----END CERTIFICATE-----";&lt;br /&gt;  @Override&lt;br /&gt;  public void configure(AppRegistry registry)&lt;br /&gt;      throws ConfigurationException {&lt;br /&gt;    registry.register(new OpenSocialApp(&lt;br /&gt;      "16271", "http://example.com/gadgets.xml",&lt;br /&gt;      OpenSocialApp.createOAuthAccessorRSASHA1("mixi.jp", cert)));&lt;br /&gt;  }&lt;br /&gt;  @Override&lt;br /&gt;  public void configure(ExtensionRegistry registry)&lt;br /&gt;      throws ConfigurationException {&lt;br /&gt;    registry.register(new ValidationLogger());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;最後に、EntryService クラスで、AppEngine のデータストレージを使って、エントリを検索したり、保存したり、削除するように実装すればよいでしょう。&lt;br /&gt;&lt;br /&gt;-- 2010-04-28 追記&lt;br /&gt;&lt;br /&gt;CREYLE 用 RegistryConfigurator クラスの雛形を置いておきますので、参考にしてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nakajiman.s3.amazonaws.com/opensocial/CrelyeRegistryConfigurator.java"&gt;CrelyeRegistryConfigurator.java&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1714105511199565243?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1714105511199565243/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1714105511199565243' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1714105511199565243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1714105511199565243'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/04/appengine-java-jsonic-opensocial-oauth.html' title='AppEngine Java と JSONIC と OpenSocial OAuth Filter で作る OpenSocial アプリの外部サーバ'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-3905159352572437871</id><published>2010-04-05T17:48:00.000+09:00</published><updated>2010-04-05T17:48:57.955+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><title type='text'>OpenSocial jQuery Network Distribution 配布URL変更のお知らせ</title><content type='html'>こんばんは。なかじまんです。&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery Network Distribution の配布先URLを変更します。&lt;br /&gt;&lt;br /&gt;4/9(金)までに scripts.lrlab.to から d2hv4ldeur9lfv.cloudfront.net へホスト名&lt;br /&gt;の変更をお願いします。&lt;br /&gt;&lt;br /&gt;変更前 -- 4/9(金) まで参照できます&lt;br /&gt;&lt;br /&gt; * http://scripts.lrlab.to/opensocial-jquery-1.3.2.5.min.js&lt;br /&gt; * http://scripts.lrlab.to/opensocial-jquery-1.2.6.5.min.js&lt;br /&gt; * http://scripts.lrlab.to/opensocial-jquery.templates-0.1.0.min.js&lt;br /&gt; * http://scripts.lrlab.to/opensocial-jquery.autoHeight-1.0.0.min.js&lt;br /&gt; * http://scripts.lrlab.to/opensocial-jquery.minimessage-1.0.0.min.js&lt;br /&gt; * http://scripts.lrlab.to/opensocial-jquery.mixi-1.0.0.min.js&lt;br /&gt;&lt;br /&gt;変更後 -- 今すぐ参照できます&lt;br /&gt;&lt;br /&gt; * http://d2hv4ldeur9lfv.cloudfront.net/opensocial-jquery-1.3.2.5.min.js&lt;br /&gt; * http://d2hv4ldeur9lfv.cloudfront.net/opensocial-jquery-1.2.6.5.min.js&lt;br /&gt; * http://d2hv4ldeur9lfv.cloudfront.net/opensocial-jquery.templates-0.1.0.min.js&lt;br /&gt; * http://d2hv4ldeur9lfv.cloudfront.net/opensocial-jquery.autoHeight-1.0.0.min.js&lt;br /&gt; * http://d2hv4ldeur9lfv.cloudfront.net/opensocial-jquery.minimessage-1.0.0.min.js&lt;br /&gt; * http://d2hv4ldeur9lfv.cloudfront.net/opensocial-jquery.mixi-1.0.0.min.js&lt;br /&gt;&lt;br /&gt;※scripts.lrlab.to は d2hv4ldeur9lfv.cloudfront.net の CNAME ですので、ファイルの実体は同じものです。&lt;br /&gt;&lt;br /&gt;背景としては、ここ半年でアクセス数が伸びてきており、独自ドメインで参照させていると、何かトラブルがあったとき、みなさんへの影響が大きいという判断からです。少なくとも、Amazon のホスト名で、名前を引いた方がより安全(調べてませんがレスポンスもよさそう)であろうということです。&lt;br /&gt;&lt;br /&gt;お手数をお掛けしますが、ご協力のほどよろしくお願いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-3905159352572437871?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/3905159352572437871/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=3905159352572437871' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3905159352572437871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3905159352572437871'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2010/04/opensocial-jquery-network-distribution.html' title='OpenSocial jQuery Network Distribution 配布URL変更のお知らせ'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-4246201572626951676</id><published>2009-12-26T10:36:00.002+09:00</published><updated>2009-12-26T10:39:25.495+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Wave'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><title type='text'>Google Wave Gadgets でできることを OpenSocial や Shindig の視点で調べてみました</title><content type='html'>おはようございます。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;OpenSocial jQuery&lt;/a&gt; は Google Wave Gadgets でも使えるようになりますか... という質問がありました。現状の OpenSocial jQuery のまま gadgets.*  API は使えます。また wave.* API はそもそも考慮していません。が答えです。&lt;br /&gt;&lt;br /&gt;実例として公開している &lt;a href="http://code.google.com/p/opensocial-jquery/source/browse/trunk/samples/youtube.xml"&gt;YouTube ガジェット&lt;/a&gt; がありますが、次のとおり Google Wave Gadgets としてそのまま動きます。このように Google Wave で OpenSocial jQuery はすぐに試せます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/18GQTqN1meO4OAdb5xIG_Q?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SzVXBHuoHhI/AAAAAAAACCc/85bm0gf6q0g/s400/Google%20Wave_1261784459465.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets も iGoogle や Google Friend Connect (GFC) と同じ Apache Shindig 上で構成していると考えられます。ですので、gadgets.* API の振る舞いも同じであり、OpenSocial jQuery がそのまま使えるということになりそうです。&lt;br /&gt;&lt;br /&gt;本当にそうなの... という疑問が残るので、Wave Gadgets を Shindig 視点でいろいろ調べてみました。調べたのは Wave Preview です。Sandbox ではありません。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ガジェットのレンダリング&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;iframe URL を抜粋します。見てのとおり Shindig の Gadgets Rendering Server です。HTTPS (Secure) プロトコルが特徴的です。ホストは googleusercontent.com で iGoogle や GFC の gmodules.com とは異なるので別系統なのでしょう。container パラメータも wave なので、同系統であったとしても、コンテナのプロファイルは別なのでしょう。&lt;br /&gt;&lt;pre&gt;https://lq3n3peeciqdlq351d7pd2pqtuvr30al-a-wave-opensocial.googleusercontent.com/gadgets/ifr&lt;br /&gt;?v=b893d00cffa7bf86acedda54be7a116&lt;br /&gt;&amp;amp;container=wave&lt;br /&gt;&amp;amp;view=canvas&amp;amp;&lt;br /&gt;&amp;amp;lang=en&amp;amp;&lt;br /&gt;&amp;amp;url=http://example.com/gadgets.xml&lt;br /&gt;&amp;amp;country=ALL&lt;br /&gt;&amp;amp;libs=core%3Adynamic-height%3Alocked-domain ...&lt;br /&gt;&amp;amp;mid=5&lt;br /&gt;&amp;amp;nocache=1&lt;br /&gt;&amp;amp;parent=https://wave.google.com ...&lt;br /&gt;#rpctoken=...&lt;br /&gt;&amp;amp;st=...&lt;br /&gt;&lt;/pre&gt;libs パラメータを観察したところ、ガジェットXML の feature を表すようですので、Google Wave 側もガジェット XML の内容を認知しているのでしょう。&lt;br /&gt;&lt;br /&gt;view パラメータは、常に canvas のようです。ガジェットXML で profile や home を指定すると、次のエラーとなりますので、canvas ビューのみサポートするのでしょう。既定のビューが canvas ということになるのかな。&lt;br /&gt;&lt;pre&gt;Unable to locate an appropriate view in this gadget. Requested: 'canvas' Available: [home]&lt;br /&gt;Unable to locate an appropriate view in this gadget. Requested: 'canvas' Available: [profile]&lt;br /&gt;&lt;/pre&gt;nocache パラメータは、常に 1 (キャッシュなし) のようです。iframe のソースコードを見ても concat されていませんので、開発中のキャッシュ制御は気にしなくてもよさそうです。&lt;br /&gt;&lt;br /&gt;rpctoken パラメータが付与されてますので、クロスホストなデータ通信は gadgets.rpc なのでしょう。iframe のソースコードを見ると gadgets.rpc と gadgets.rpctx が含まれますので、すべてのブラウザで URL flagment (rpc_relay.html) は使われないでしょう。&lt;br /&gt;&lt;br /&gt;st パラメータが付与されてますので、Phone home (gadgets.io.makeRequest)の仕組みも同じでしょう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;setprefs feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントでサポートすると記載があります。ガジェットXML の UserPref は認知しており、API でも取得できました。ただ API で設定できますが、(確認した限りは)永続化できませんでした。また、UserPref を編集するための UI も提供されていないようです。本当か。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;dynamic-height feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントでサポートすると記載があります。実際に API は存在し、期待どおり動作しました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;settitle feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントでサポートすると記載があります。実際に API は存在し、呼び出してもエラーにはなりませんが、指定したタイトルがどこで表示されるのか確認できませんでした。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tabs feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントでサポートすると記載があります。実際に API は存在し、期待どおり動作しました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;minimessage feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gagets のドキュメントでサポートすると記載があります。実際に API は存在し、期待どおり動作しました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;locked-domain feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントでサポートすると記載があります。実際に locked-domain なしでガジェットを wave に貼り付け、その後 locked-domain ありとして再表示すると、"Invalid domain" というエラーとなるため、機能しているのでしょう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;view feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントでサポートすると記載はありません。が、実際に API は存在しました。ただ、サポートするビューは profile と canvas という結果で、前述の結果とズレがあります。また、ビューの移動は API が無反応でした。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;opensocial-0.8 feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Wave Gadgets のドキュメントで OpenSocial API は未サポートと記載があります。が、実際に API は存在しました。実際に Person の取得を試みたところ、次のエラーとなりました。 &lt;br /&gt;&lt;pre&gt;Malformed security token ...&amp;amp;amp;c=wavecom.google.gadgets.auth.AuthTokenException: Failure for container wave&lt;br /&gt;&lt;/pre&gt;Wave は Contact ベースの関係のようですので、OpenSocial に対応するなら iGoogle モデルになるのかなという印象です。もうできてたりして。&lt;br /&gt;&lt;br /&gt;といったところを調べてみました。結果、現状の OpenSocial jQuery のまま gadgets.*  API なら使えることが把握できました。役に立ちそうであれば使ってみてください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-4246201572626951676?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/4246201572626951676/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=4246201572626951676' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4246201572626951676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/4246201572626951676'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/12/google-wave-gadgets-opensocial-shindig.html' title='Google Wave Gadgets でできることを OpenSocial や Shindig の視点で調べてみました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_R7O_2gBTssg/SzVXBHuoHhI/AAAAAAAACCc/85bm0gf6q0g/s72-c/Google%20Wave_1261784459465.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1856763265986001925</id><published>2009-12-21T07:21:00.000+09:00</published><updated>2009-12-21T07:21:32.709+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><title type='text'>メッセージの表示に加え、明示的もしくは自動的にメッセージを閉じる強化をした OpenSocial jQuery Mini Message プラグインを公開しました</title><content type='html'>おはようございます。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;OpenSocial jQuery&lt;/a&gt; は jQuery.fn.minimessage メソッドで Mini Message を限定的にサポートしてきましたが、このたび &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/PluginMiniMessage"&gt;OpenSocial jQuery Mini Message&lt;/a&gt; としてプラグイン化して、使える機能を強化しました。従来の機能に加えて、明示的もしくは自動的にメッセージを閉じることができるようになりました。&lt;br /&gt;&lt;br /&gt;今後、メッセージの表示は OpenSocial jQuery Mini Message プラグインを使ってください。&lt;a href="http://code.google.com/p/opensocial-jquery/wiki/MiniMessage"&gt;従来の Mini Message&lt;/a&gt; は Deprecated 非推奨となり、OpenSocial jQuery 1.3.2.5 以後のバージョンで使えなくなります。&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery Mini Message プラグインの使い方は、次のとおりです。質問や要望がありましたら &lt;a href="http://groups.google.com/group/opensocial-jquery"&gt;OpenSocial jQuery Discussion&lt;/a&gt; までお願いします。&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery 本体に続けて、OpenSocial jQuery Mini Message をロードしてください。&lt;br /&gt;&lt;pre&gt;&amp;lt;script src="opensocial-jquery.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="opensocial-jquery.minimessage.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;OpenSocial jQuery Mini Message は minimessage を必要とします。&lt;br /&gt;&lt;pre&gt;&amp;lt;Require feature="minimessage" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;閉じるボタン付きのメッセージを表示する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.fn.minimessage を使って、閉じるボタン付きのメッセージを表示できます。&lt;br /&gt;&lt;pre&gt;$('&amp;lt;span/&amp;gt;').text('Say Hello!').minimessage();&lt;br /&gt;&lt;/pre&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SbbpJlByKRI/AAAAAAAABGI/4fZp0XBktYM/s400/minimessage.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;また jQuery.fn.minimessage にコールバック関数を指定して、閉じるイベントをハンドリングできます。コールバック関数の戻り値を false とすると、イベントは無効となり、メッセージは閉じません。&lt;br /&gt;&lt;pre&gt;$('&amp;lt;span/&amp;gt;').text('Dismissible Message with Callback')&lt;br /&gt;  .minimessage(function() {&lt;br /&gt;    return confirm('Do you close a message?'); // 閉じるかどうか?&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;メッセージを閉じる&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.fn.remove を使って、メッセージを閉じることができます。&lt;br /&gt;&lt;pre&gt;var message = $('&amp;lt;a/&amp;gt;').text('Remove Message')&lt;br /&gt;  .click(function() {&lt;br /&gt;    message.remove(); return false;&lt;br /&gt;  }).minimessage();&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;自動的にメッセージを閉じる&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.fn.minimessage を使って、自動的に閉じるメッセージを表示できます。秒数か fast, normal, slow のいずれかを指定します。 &lt;br /&gt;&lt;br /&gt; * fast を指定すると、1秒後にメッセージを閉じます。 &lt;br /&gt; * normal を指定すると、3秒後にメッセージを閉じます。 &lt;br /&gt; * slow を指定すると、5秒後にメッセージを閉じます。 &lt;br /&gt;&lt;pre&gt;$('&amp;lt;span/&amp;gt;').text('Timer Message')&lt;br /&gt;  .minimessage(3); // 3秒後に閉じる&lt;br /&gt;$('&amp;lt;span/&amp;gt;').text('Timer Message with Predefined Speeds')&lt;br /&gt;  .minimessage('slow');&lt;br /&gt;&lt;/pre&gt;また jQuery.fn.minimessage にコールバック関数を指定して、閉じるイベントをハンドリングできます。 &lt;br /&gt;&lt;pre&gt;$('&amp;lt;span/&amp;gt;').text('Timer Message with Callback')&lt;br /&gt;  .minimessage('fast', function() { // 3秒後に閉じる&lt;br /&gt;    alert('The message was closed.');&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;実例&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; * &lt;a href="http://opensocial-jquery.googlecode.com/svn/trunk/tests/opensocial-jquery.minimessage.test.xml"&gt;OpenSocial jQuery Mini Message Test Suite&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1856763265986001925?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1856763265986001925/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1856763265986001925' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1856763265986001925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1856763265986001925'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/12/opensocial-jquery-mini-message.html' title='メッセージの表示に加え、明示的もしくは自動的にメッセージを閉じる強化をした OpenSocial jQuery Mini Message プラグインを公開しました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R7O_2gBTssg/SbbpJlByKRI/AAAAAAAABGI/4fZp0XBktYM/s72-c/minimessage.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1678824211440528398</id><published>2009-12-14T22:33:00.003+09:00</published><updated>2009-12-14T22:39:30.437+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='mixi Platform'/><title type='text'>mixi.util.requestExternalNavigateTo を使った外部サイトの誘導を jQuery.fn.live で自動化する方法</title><content type='html'>こんばんは。しゃっくりが止まらなくなって、丸2日になろうとしてる Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;mixi アプリは &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/PluginMixi"&gt;jQuery.view&lt;/a&gt; (= mixi.util.requestExternalNavigateTo) を使って、ユーザを外部サイトに誘導します。というネタを使って、ちょっとした Tips を紹介します。&lt;br /&gt;&lt;br /&gt;次のソースコードは、外部サイトのリンクのクリックイベントを捕捉して jQuery.view を使って外部サイトに誘導するものです。(1) はあらかじめ用意した静的なリンク、(2) は RSS フィードを取得して動的生成したリンクで、それぞれ jQuery.view を使って外部サイトに誘導しています。&lt;br /&gt;&lt;pre&gt;// (1) 静的リンク&lt;br /&gt;  $('a[target=_blank]').click(function() {&lt;br /&gt;    $.view(this.href); return false;&lt;br /&gt;  });&lt;br /&gt;  // (2) 動的リンク&lt;br /&gt;  $.getFeed('http://rss.rssad.jp/rss/gihyo/feed/atom', function(feed) {&lt;br /&gt;    $.each(feed.Entry, function(i, entry) {&lt;br /&gt;      var a = $('&amp;lt;a target="_blank"&amp;gt;')&lt;br /&gt;        .attr('href', entry.Link)&lt;br /&gt;        .text(entry.Title)&lt;br /&gt;        .click(function() {&lt;br /&gt;          $.view(this.href); return false;&lt;br /&gt;        });&lt;br /&gt;      $('&amp;lt;li/&amp;gt;').append(a).appendTo('ul');&lt;br /&gt;    });&lt;br /&gt;  });&lt;br /&gt;&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;Powered by &amp;lt;a href="http://code.google.com/p/opensocial-jquery/"&lt;br /&gt;  target="_blank"&amp;gt;OpenSocial jQuery&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;静的リンクにせよ、動的リンクにせよ、外部サイトに誘導するというコードはまったく同じです。また、動的リンクを頻繁に生成するときは、その都度、クリックイベントと jQuery.view のコードを書くことになります。その結果、コードは冗長になりますし、テストケースも増加します。つまり、不健全です。&lt;br /&gt;&lt;br /&gt;これ jQuery.fn.live を使うと、次のように自動化できるんです。ここでは target="_blank" のリンクは、外部サイトのリンクと決まりごとにしています。そして jQuery.fn.live を使って、target="_blank" のリンクにクリックイベントを登録し、外部サイトに誘導するようにしています。&lt;br /&gt;&lt;br /&gt;たったこれだけで、静的リンクと動的リンクに関わらず、HTML 中に外部サイトのリンクが生成された時点で(あらかじめ存在するのも含む)、自動的にクリックイベントが登録され、外部サイトに誘導するリンクに早変わりします。live というメソッド名からもイメージできるでしょう?&lt;br /&gt;&lt;pre&gt;$('a[target=_blank]').live('click', function() {&lt;br /&gt;    $.view(this.href); return false;&lt;br /&gt;  });&lt;br /&gt;  $.getFeed('http://rss.rssad.jp/rss/gihyo/feed/atom', function(feed) {&lt;br /&gt;    $.each(feed.Entry, function(i, entry) {&lt;br /&gt;      var a = $('&amp;lt;a target="_blank"&amp;gt;')&lt;br /&gt;        .attr('href', entry.Link)&lt;br /&gt;        .text(entry.Title); // click イベントを登録してない!?&lt;br /&gt;      $('&amp;lt;li/&amp;gt;').append(a).appendTo('ul');&lt;br /&gt;    });&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;実際に上のソースコードを動かすと分かりますが、RSS フィードのリンクにクリックイベントを登録していないにも関わらず、jQuery.view で外部サイトに誘導されます。RSS フィードを再取得して再表示しても同様です。&lt;br /&gt;&lt;br /&gt;jQuery.fn.live は、いろいろ制約があるので、使えるシーンは限られるのですが、頻繁に HTML を動的生成する中で、コールバック関数外の状態に依存しない定型的なイベントブロックを多用するとき、とても役立つと考えます。その1例が、外部サイトの誘導ということです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1678824211440528398?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1678824211440528398/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1678824211440528398' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1678824211440528398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1678824211440528398'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/12/mixiutilrequestexternalnavigateto.html' title='mixi.util.requestExternalNavigateTo を使った外部サイトの誘導を jQuery.fn.live で自動化する方法'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8600967324653792857</id><published>2009-12-09T10:42:00.002+09:00</published><updated>2009-12-10T07:36:18.674+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='mixi Platform'/><category scheme='http://www.blogger.com/atom/ns#' term='JSDeferred'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><title type='text'>OpenSocial jQuery に mixi Platform 固有の拡張機能を追加する jQuery プラグインを公開しました。</title><content type='html'>おはようございます。ちょっと体調のすぐれない Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery mixi Platform 1.0.0 をリリースしました。&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;http://code.google.com/p/opensocial-jquery/&lt;/a&gt; -- Downlaod&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/wiki/PluginMixi"&gt;http://code.google.com/p/opensocial-jquery/wiki/PluginMixi&lt;/a&gt; -- Document&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery mixi Platform は mixi 固有の拡張機能を OpenSocial jQuery に追加するための jQuery プラグインです。OpenSocial jQuery 本体に続けて、OpenSocial jQuery mixi Platform をロードして使ってください。&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript" src="opensocial-jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="opensocial-jquery.mixi.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;外部サイトに誘導する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.view を使って、外部サイトに誘導できます。このとき、外部サイトの URL を指定します。また、パラメータを指定すると QUERY_STRING に変換して URL に付与します。&lt;br /&gt;&lt;pre&gt;// http://www.google.com/&lt;br /&gt;$.view('http://www.google.com/');&lt;br /&gt;&lt;br /&gt;// http://www.google.com/search?q=corgi&lt;br /&gt;$.view('http://www.google.com/search', { q: 'corgi' }); &lt;br /&gt;&lt;/pre&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/rKaMA1hkWc4wXFvCiPsM-g?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SyAkomjDD2I/AAAAAAAAB-c/6VjxDnZANSI/s400/%5Bmixi%5D%20%E5%A4%96%E9%83%A8%E3%82%B5%E3%82%A4%E3%83%88%E3%81%B8%E3%81%AE%E9%81%B7%E7%A7%BB%E7%A2%BA%E8%AA%8D_1260396828100.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ただし mixi の URL を指定したときは、外部サイトとみなさず、即ページ遷移します。 &lt;br /&gt;&lt;pre&gt;// http://mixi.co.jp/&lt;br /&gt;$.view('http://mixi.co.jp/');&lt;br /&gt;&lt;br /&gt;// http://mixi.jp/show_profile.pl?id=0123456789&lt;br /&gt;$.view('http://mixi.jp/show_profile.pl', { id: '0123456789' });&lt;br /&gt;&lt;/pre&gt;また、従来どおり、ビューの切り替えや現在のビュー名の取得もできます。&lt;br /&gt;&lt;pre&gt;$.view('profile');&lt;br /&gt;$.view('home');&lt;br /&gt;$.view('canvas', { q: 'corgi' });&lt;br /&gt;console.info($.view()); // profile, home, canvas&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;参加コミュニティを取得する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.getData を使って、ユーザの参加コミュニティを取得できます。このとき url に /communities からはじまるパスと @viewer, @owner, ユーザID のいずれかを指定します。jQuery.ajax や jQuery.get も同様です。&lt;br /&gt;&lt;pre&gt;$.getData('/communities/@viewer/@self').next(function(communities) {&lt;br /&gt;  $.each(communities, function(i, community) {&lt;br /&gt;    console.info(community.id); // コミュニティID&lt;br /&gt;    console.info(community.userId); // ユーザID&lt;br /&gt;    console.info(community.url); // コミュニティURL&lt;br /&gt;    console.info(community.name); // コミュニティ名&lt;br /&gt;    console.info(community.thumbnailUrl); // コミュニティ画像&lt;br /&gt;  });&lt;br /&gt;  console.info(communities.totalResults); // 参加コミュニティ数&lt;br /&gt;}).error(function(e) {&lt;br /&gt;  alert(e+'');&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;学校を選択する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.getData を使って、VIEWER の母校や在学中の学校を選択できます。このとき url に /schools からはじまるパスと @selected を指定します。jQuery.ajax や jQuery.get も同様です。&lt;br /&gt;&lt;pre&gt;$.getData('/schools/@selected').next(function(schools) {&lt;br /&gt;  var school = schools[0];&lt;br /&gt;  console.info(school.token); // 学校トークン&lt;br /&gt;  console.info(school.divisionId); // 学校区分ID&lt;br /&gt;  console.info(school.division); // 学校区分名&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/JtEfFMW4ODvV7JqdMHdKuQ?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SyAkpRIH4kI/AAAAAAAAB-k/7bIutjZG-6k/s400/%5Bmixi%5D%20OpenSocial%20jQuery_1260396941291.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;学校リストを取得する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.getData を使って、VIEWER の母校や在学中の学校リストを取得できます。このとき url に /schools からはじまるパスと @viewer を指定します。jQuery.ajax や jQuery.get も同様です。&lt;br /&gt;&lt;pre&gt;$.getData('/schools/@viewer/@self').next(function(schools) {&lt;br /&gt;  $.each(schools, function(i, school) {&lt;br /&gt;    console.info(school.token); // 学校トークン&lt;br /&gt;    console.info(school.divisionId); // 学校区分ID&lt;br /&gt;    console.info(school.division); // 学校区分名&lt;br /&gt;  }&lt;br /&gt;  console.info(schools.totalResults); // 学校数 = schools.length&lt;br /&gt;}).error(function(e) {&lt;br /&gt;  alert(e+'');&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;マイミクを招待する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.invite を使って、マイミクを招待できます。このとき @friends を指定します。招待したマイミクのユーザIDリストを取得できます。&lt;br /&gt;&lt;pre&gt;$.invite('@friends', function(ids) {&lt;br /&gt;  $.each(ids, function(i, id) { console.log(id) }); // ユーザIDリスト&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/rSsPaorLjAGoRNrZpVuqrA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SyAkp_WdZrI/AAAAAAAAB-s/ZVtyk_4k7F4/s400/%5Bmixi%5D%20OpenSocial%20jQuery_1260396977058.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;また @friends を省略しても同じことができます。&lt;br /&gt;&lt;pre&gt;$.invite(function(ids) {&lt;br /&gt;  $.each(ids, function(i, id) { console.log(id) }); // ユーザIDリスト&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;さらに Deferred チェーンを使っても同じことができます。&lt;br /&gt;&lt;pre&gt;$.invite('@friends').next(function(ids) {&lt;br /&gt;  $.each(ids, function(i, id) { console.log(id) }); // ユーザIDリスト&lt;br /&gt;}).error(function(e) {&lt;br /&gt;  alert(e+'');&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;同級生を招待する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.invite を使って、同級生を招待できます。このとき @classmates を指定します。招待した同級生のユーザIDリストを取得できます。&lt;br /&gt;&lt;pre&gt;$.invite('@classmates', function(ids) {&lt;br /&gt;  $.each(ids, function(i, id) { console.log(id) }); // ユーザIDリスト&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/ig_6OKkOMJ_vO7f_sCFV6A?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SyAkqaTxI1I/AAAAAAAAB-4/j3kMo6zh5l8/s400/%5Bmixi%5D%20OpenSocial%20jQuery_1260397014294.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;さらに Deferred チェーンを使っても同じことができます。&lt;br /&gt;&lt;pre&gt;$.invite('@classmates').next(function(ids) {&lt;br /&gt;  $.each(ids, function(i, id) { console.log(id) }); // ユーザIDリスト&lt;br /&gt;}).error(function(e) {&lt;br /&gt;  alert(e+'');&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;コンテナを判別する&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery.container.mixi を使って、コンテナが mixi Platform かどうか判別できます。&lt;br /&gt;他コンテナも含めて 1つの JS ファイルにまとめるときに役立ちます。&lt;br /&gt;&lt;pre&gt;if ($.container.mixi) { ... } // mixi Platform&lt;br /&gt;&lt;/pre&gt;.mixi クラスを使って、コンテナが mixi Platform かどうか判別できます。&lt;br /&gt;他コンテナも含めて 1つの CSS ファイルにまとめるときに役立ちます。&lt;br /&gt;&lt;pre&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;.mixi p { color: red; } /* mixi Platform */&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/pre&gt;OpenSocial jQuery に対する質問や要望は Google Group で受け付けています。開発中の最新情報も入手できます。ぜひご参加ください。&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery Discussion&lt;br /&gt;&lt;a href="http://groups.google.com/group/opensocial-jquery"&gt;http://groups.google.com/group/opensocial-jquery&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-- 2009-12-10 スクリーンキャプチャの追加&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8600967324653792857?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8600967324653792857/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8600967324653792857' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8600967324653792857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8600967324653792857'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/12/opensocial-jquery-mixi-platform-jquery.html' title='OpenSocial jQuery に mixi Platform 固有の拡張機能を追加する jQuery プラグインを公開しました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_R7O_2gBTssg/SyAkomjDD2I/AAAAAAAAB-c/6VjxDnZANSI/s72-c/%5Bmixi%5D%20%E5%A4%96%E9%83%A8%E3%82%B5%E3%82%A4%E3%83%88%E3%81%B8%E3%81%AE%E9%81%B7%E7%A7%BB%E7%A2%BA%E8%AA%8D_1260396828100.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-7651314569807395552</id><published>2009-12-05T11:33:00.000+09:00</published><updated>2009-12-05T11:33:51.114+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mashup Awards'/><category scheme='http://www.blogger.com/atom/ns#' term='Golazo MA4'/><category scheme='http://www.blogger.com/atom/ns#' term='MA5'/><title type='text'>Golazo MA4 - ここで何する? を閉鎖しました。ソースコードは引き続き提供します。</title><content type='html'>おはようございます。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashupaward.jp/"&gt;Mashup Awards 5&lt;/a&gt; 応募者の参考になればと思い、Mashup Awards 4 受賞作品である &lt;a href="http://golazo.offtheball.jp/"&gt;Golazo MA4 - ここで何する?&lt;/a&gt; を公開し続けてきましたが、&lt;br /&gt;&lt;br /&gt;Golazo MA4 - ここで何する?&lt;br /&gt;&lt;a href="http://golazo.offtheball.jp/"&gt;http://golazo.offtheball.jp/&lt;/a&gt;&lt;br /&gt;Golazo MA4 は、ウェブページや入力した文章の内容から位置情報を自動抽出し、その内容と位置情報をメモとして、簡単にクリッピングできるサービスです。&lt;br /&gt;&lt;br /&gt;本日(12/5)、Mashup Awards 5 の受付終了と受賞者発表に伴い、サイトを閉鎖しました。アカウントの情報とデータもすべて破棄し、バックアップのデータも破棄しました。&lt;br /&gt;&lt;br /&gt;Golazo MA4 のソースコードは、引き続き公開していきますので、ご活用ください。&lt;br /&gt;&lt;br /&gt;golazo - Project Hosting on Google Code&lt;br /&gt;&lt;a href="http://code.google.com/p/golazo/"&gt;http://code.google.com/p/golazo/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ありがとうございました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-7651314569807395552?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/7651314569807395552/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=7651314569807395552' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7651314569807395552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/7651314569807395552'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/12/golazo-ma4.html' title='Golazo MA4 - ここで何する? を閉鎖しました。ソースコードは引き続き提供します。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2526918992128959785</id><published>2009-11-28T17:01:00.000+09:00</published><updated>2009-11-28T17:01:11.057+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><title type='text'>OpenSocial jQuery autoHeight 1.0.0 is available</title><content type='html'>OpenSocial jQuery autoHeight is plugin to adjust height of Gadgets automatically all the time. &lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/wiki/PluginAutoHeight"&gt;http://code.google.com/p/opensocial-jquery/wiki/PluginAutoHeight&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Edit the src attribute in the script tag to point to your copy of opensocial-jquery.autoHeight.js. Inside the ready event, add the autoHeight method to window object: &lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript" src="opensocial-jquery.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="opensocial-jquery.autoHeight.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;  $(window).autoHeight();&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Featured Video&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nJocs7Wltjk&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nJocs7Wltjk&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Downloads&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can download it from the featured downloads list.&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/downloads/list"&gt;http://code.google.com/p/opensocial-jquery/downloads/list&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2526918992128959785?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2526918992128959785/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2526918992128959785' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2526918992128959785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2526918992128959785'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/11/opensocial-jquery-autoheight-100-is.html' title='OpenSocial jQuery autoHeight 1.0.0 is available'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2660764805488730856</id><published>2009-11-28T15:29:00.000+09:00</published><updated>2009-11-28T15:29:34.623+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><title type='text'>gadgets.window.adjustHeight で、確実に !? ガジェットの高さを自動調整する方法</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;Gadgets API の gadgets.window.adjustHeight を使うと、ガジェットの高さを自動調整できますが、実際のところは、画像のロードタイミングや、ブラウザごとに仕組みの異なる gadgets.rpc が影響して、期待どおりの高さに自動調整されないことが多々あります。&lt;br /&gt;&lt;br /&gt;で、今までいろいろ試してきましたが、現在は、次のとおり、周期的に高さを自動調整して、期待する高さを保つという方法がもっとも確実であるという結論です。&lt;br /&gt;&lt;pre&gt;setInterval(function() { gadgets.window.adjustHeight(); }, 1000);&lt;br /&gt;&lt;/pre&gt;また &lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;OpenSocial jQuery&lt;/a&gt; だと、次のようになります。&lt;br /&gt;&lt;pre&gt;setInterval(function() { $(window).adjustHeight(); }, 1000);&lt;br /&gt;&lt;/pre&gt;1秒間隔で、ガジェットの高さの自動調整を試みています。gadgets.window.adjustHeight のソースコードを調べたところ、ガジェットの高さに変化のないときは、コンテナと RPC 通信せずに何もしないようになっていたので、1秒間隔くらいで gadgets.window.adjustHeight を呼び出しても、それほどコストはかかりません。&lt;br /&gt;&lt;br /&gt;1秒間隔なので、高さが自動調整されるのがひと呼吸遅いかなという感じがあったり、頻繁に高さが変わるようなガジェットだと、ペコペコ高さが変わって見苦しいこともありますが、高さが自動調整されないという最悪の結果は回避できます。&lt;br /&gt;&lt;br /&gt;-- 2009-11-28 追記&lt;br /&gt;&lt;br /&gt;上記のガジェットの高さを自動調整し続ける... をプラグインとして公開しました。公式サイトからダウンロードして使ってください。&lt;br /&gt;&lt;br /&gt;OpenSocial jQuery autoHeight 1.0.0 (opensocial-jquery.autoHeight.js)&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;http://code.google.com/p/opensocial-jquery/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;使い方は、次のとおり opensocial-jquery.autoHeight.js をロードして、はじめに1度だけ window オブジェクトに対して autoHeight を呼び出すだけです。&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript" src="opensocial-jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="opensocial-jquery.autoHeight.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;  $(window).autoHeight();&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;ガジェットXMLの実例を用意しました。&lt;br /&gt;&lt;a href="http://opensocial-jquery.googlecode.com/svn/trunk/tests/opensocial-jquery.autoHeight.test.xml"&gt;http://opensocial-jquery.googlecode.com/svn/trunk/tests/opensocial-jquery.autoHeight.test.xml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ガジェットXMLを gooホームにも登録しましたので、体験してみてください。&lt;br /&gt;&lt;a href="http://sandbox.home.goo.ne.jp/gadget/N43bmJWwmt18/detail"&gt;http://sandbox.home.goo.ne.jp/gadget/N43bmJWwmt18/detail&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ガジェットXMLが動作する様子を動画にしました。文章のフォントサイズを変更すると、その変化に応じて、ガジェットの高さが自動調整されることが見て分かります。&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nJocs7Wltjk&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nJocs7Wltjk&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2660764805488730856?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2660764805488730856/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2660764805488730856' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2660764805488730856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2660764805488730856'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/11/gadgetswindowadjustheight.html' title='gadgets.window.adjustHeight で、確実に !? ガジェットの高さを自動調整する方法'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2235289982730312958</id><published>2009-11-25T08:36:00.003+09:00</published><updated>2009-11-25T22:07:08.200+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Host'/><title type='text'>OpenSocial jQuery から OpenSocial Host の外部データベースを操作する基本手順を紹介します</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;OpenSocial jQuery&lt;/a&gt; から &lt;a href="http://opensocialhost.com/"&gt;OpenSocial Host&lt;/a&gt; の Core API を使って、OpenSocial Host の外部データベースを操作する手順とソースコードを紹介します。&lt;br /&gt;&lt;br /&gt;OpenSocial Host の外部データベースを使うメリットは、次のとおりです。&lt;br /&gt;&lt;br /&gt;* OpenSocial AppData とは異なり、すべてのユーザが同じデータ領域を共有できる&lt;br /&gt;* OpenSocial AppData とは異なり、個々のデータに対して、パーミッションを指定できる&lt;br /&gt;* OpenSocial AppData とは異なり、個々のデータに対して、データ容量の制約がない&lt;br /&gt;* OpenSocial AppData とは異なり、個々のデータに対して、ワード検索できる&lt;br /&gt;* 外部データベースは HeartRails によって、安全、確実にホストされ、負荷対策も期待できる(に違いない)&lt;br /&gt;&lt;br /&gt;OpenSocial Host の外部データベースにできなこともあります。&lt;br /&gt;&lt;br /&gt;* OpenSocial AppData とは異なり、友達リストのソーシャルグラフが使えない&lt;br /&gt;&lt;br /&gt;なので、OpenSocial API と OpenSocial Host の特徴をよく理解して、組み合わせて使うことになるのだろうと考えます。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ユーザの登録&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;はじめに &lt;a href="http://opensocialhost.com/"&gt;OpenSocial Host&lt;/a&gt; のユーザ登録をしてください。&lt;br /&gt;ユーザ登録は無料です。Open ID を使えば、パスワードを預ける必要はありません。&lt;br /&gt;&lt;br /&gt;&lt;img src="http://opensocialhost.com/images/logo.gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;アプリケーションの登録&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;次に OpenSocial Host にログインして、新しいアプリケーションを登録してください。&lt;br /&gt;アプリケーションの変更や削除はいつでもできますので、アプリケーション名は仮のものでも構いません。&lt;br /&gt;&lt;br /&gt;&lt;img src="http://opensocialhost.com/images/tutorial/register_app.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;アプリケーションを登録すると、アプリケーションキーが発行されますので、動作対象とするコンテナのアプリケーションキーを手元に控えてください。&lt;br /&gt;&lt;br /&gt;&lt;img src="http://opensocialhost.com/images/tutorial/application_info.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;アプリケーションの関連付け&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ガジェット XML を用意して、動作対象とするコンテナにガジェット XML を登録してください。ガジェット XML は OpenSocial Host でホストしてもよいですし、自社サーバや Google AppEngine、Amazon S3 など、どこでホストしてもかまいません。&lt;br /&gt;&lt;br /&gt;そして、次のように、ガジェット XML から &lt;a href="http://opensocialhost.com/help/core#/app/register.pc"&gt;/app/register&lt;/a&gt; を呼び出します。&lt;br /&gt;このとき、前述のアプリケーションキーをパラメータとして、リクエストを署名します。&lt;br /&gt;呼び出しが成功すると、OpenSocial Host とガジェット XML が関連付き、これ以降、ガジェット XML から OpenSocial Host の外部データベースが使えるようになります。&lt;br /&gt;なお、関連付いた後は /app/register の呼び出しは不要です。アプリケーションの開発をはじめるとき、1度だけ呼び出してください。&lt;br /&gt;&lt;pre&gt;// Register Application&lt;br /&gt;  var url = 'http://opensocialhost.com/app/register';&lt;br /&gt;  var data = { application_key: '( Your Application Key )' };&lt;br /&gt;  &lt;br /&gt;  $.ajax({&lt;br /&gt;    type: 'post', url: url, oauth: 'signed', data: data, dataType: 'json'&lt;br /&gt;  }).next(function(r) {&lt;br /&gt;    if (r.hadError)&lt;br /&gt;      throw r.errorCode; // call error&lt;br /&gt;  }).error(function(e) {&lt;br /&gt;    console.error(e+'');&lt;br /&gt;  });&lt;br /&gt;}}}&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データの追加&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocialhost.com/help/core#/data/insert.pc"&gt;/data/insert&lt;/a&gt; を呼び出して、データを追加できます。このとき、Key-Value 形式のデータとパーミッションをパラメータとして、リクエストを署名します。&lt;br /&gt;&lt;br /&gt;* 既存のデータは上書きできます。ただし、パーミッションは上書きできません。パーミッションを変更するときは、データを削除した後、データを再挿入します。&lt;br /&gt;* 読み込みと書き込みのパーミッションは別々です。書き込みは読み込みを兼ねません。&lt;br /&gt;* パーミッションは public, private, specified を指定できます。specified のときは、カンマ区切りで、複数のユーザ ID を指定できます。&lt;br /&gt;&lt;pre&gt;// Insert Data&lt;br /&gt;  var url = 'http://opensocialhost.com/data/insert';&lt;br /&gt;  var data = {&lt;br /&gt;    comment: { text: 'Say Hello!', lastModified: new Date().getTime() },&lt;br /&gt;    feeling: 'well',&lt;br /&gt;    footprint: true&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  // Object を OpenSocial Host のパラメータに変換する&lt;br /&gt;  // Key はそのまま、Value は JSON (String) に変換する&lt;br /&gt;  var _data = {}, i = 1;&lt;br /&gt;  $.each(data, function(k, v) {&lt;br /&gt;    _data['key'+i] = k;&lt;br /&gt;    _data['value'+i] = gadgets.json.stringify(v);&lt;br /&gt;    i++; &lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;  // 読み込みパーミッションを指定する&lt;br /&gt;  //_data.read_permission = 'public'; // 誰でも(初期値)&lt;br /&gt;  //_data.read_permission = 'private'; // 自分のみ&lt;br /&gt;  //_data.read_permission = 'specified'; // 特定のユーザのみ&lt;br /&gt;  //_data.read_permission_specified = '( User ID ),( User ID ), ...';  &lt;br /&gt;&lt;br /&gt;  // 書き込みパーミッションを指定する  &lt;br /&gt;  //_data.write_permission = 'public'; // 誰でも(初期値)&lt;br /&gt;  //_data.write_permission = 'private'; // 自分のみ&lt;br /&gt;  //_data.write_permission = 'specified'; // 特定のユーザのみ&lt;br /&gt;  //_data.write_permission_specified = '( User ID ),( User ID ), ...';  &lt;br /&gt;  &lt;br /&gt;  $.ajax({&lt;br /&gt;    type: 'post', url: url, oauth: 'signed', data: _data, dataType: 'json'&lt;br /&gt;  }).next(function(r) {&lt;br /&gt;    if (r.hadError)&lt;br /&gt;      throw r.errorCode;&lt;br /&gt;  }).error(function(e) {&lt;br /&gt;    console.error(e+'');&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データの更新&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocialhost.com/help/core#/data/update.pc"&gt;/data/update&lt;/a&gt; を呼び出して、データを更新できます。このとき、Key-Value 形式のデータをパラメータとして、リクエストを署名します。&lt;br /&gt;&lt;pre&gt;// Update Data  &lt;br /&gt;  var url = 'http://opensocialhost.com/data/update';&lt;br /&gt;  var data = { feeling: 'bad', footprint: false };&lt;br /&gt;&lt;br /&gt;  // Object を OpenSocial Host のパラメータに変換する&lt;br /&gt;  // Key はそのまま、Value は JSON (String) に変換する&lt;br /&gt;  var _data = {}, i = 1;&lt;br /&gt;  $.each(data, function(k, v) {&lt;br /&gt;    _data['key'+i] = k;&lt;br /&gt;    _data['value'+i] = gadgets.json.stringify(v);&lt;br /&gt;    i++; &lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;  $.ajax({&lt;br /&gt;    type: 'post', url: url, oauth: 'signed', data: _data, dataType: 'json'&lt;br /&gt;  }).next(function(r) {&lt;br /&gt;    if (r.hadError)&lt;br /&gt;      throw r.errorCode;&lt;br /&gt;  }).error(function(e) {&lt;br /&gt;    console.error(e+'');&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データの削除&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocialhost.com/help/core#/data/delete.pc"&gt;/data/delete&lt;/a&gt; を呼び出して、データを削除できます。このとき、Key をパラメータとして、リクエストを署名します。&lt;br /&gt;&lt;pre&gt;// Delete Data  &lt;br /&gt;  var url = 'http://opensocialhost.com/data/delete';&lt;br /&gt;  var data = [ 'comment', 'feeling' ];&lt;br /&gt;&lt;br /&gt;  // Array を OpenSocial Host のパラメータに変換する&lt;br /&gt;  var _data = {};&lt;br /&gt;  $.each(data, function(i, v) {&lt;br /&gt;    _data['key'+(i+1)] = v; &lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;  $.ajax({&lt;br /&gt;    type: 'post', url: url, oauth: 'signed', data: _data, dataType: 'json'&lt;br /&gt;  }).next(function(r) {&lt;br /&gt;    if (r.hadError)&lt;br /&gt;      throw r.errorCode;&lt;br /&gt;  }).error(function(e) {&lt;br /&gt;    console.error(e+'');&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データの取得&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocialhost.com/help/core#/data/select.pc"&gt;/data/select&lt;/a&gt; を呼び出して、データを取得できます。このとき、Key をパラメータとして、リクエストを署名します。&lt;br /&gt;&lt;pre&gt;// Select Data  &lt;br /&gt;  var url = 'http://opensocialhost.com/data/select';&lt;br /&gt;  var data = [ 'comment', 'feeling', 'footprint' ];&lt;br /&gt;&lt;br /&gt;  // Array を OpenSocial Host のパラメータに変換する&lt;br /&gt;  var _data = {};&lt;br /&gt;  $.each(data, function(i, v) {&lt;br /&gt;    _data['key'+(i+1)] = v; &lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;  $.ajax({&lt;br /&gt;    type: 'post', url: url, oauth: 'signed', data: _data, dataType: 'json'&lt;br /&gt;  }).next(function(r) {&lt;br /&gt;    if (r.hadError)&lt;br /&gt;      throw r.errorCode;&lt;br /&gt;    &lt;br /&gt;    // OpenSocial Host のレスポンスを Object に変換する&lt;br /&gt;    // Key はそのまま、Value は JSON (String) から Object に戻す&lt;br /&gt;    var data = {};&lt;br /&gt;    $.each(r.data, function(i, v) {&lt;br /&gt;      data[v.key] = gadgets.json.parse(v.value);&lt;br /&gt;    });   &lt;br /&gt;    return data;&lt;br /&gt;  &lt;br /&gt;  }).next(function(data) {&lt;br /&gt;    console.info(data.comment.text);&lt;br /&gt;    console.info(data.comment.lastModified);&lt;br /&gt;    console.info(data.feeling);&lt;br /&gt;    console.info(data.footprint);&lt;br /&gt;  }).error(function(e) {&lt;br /&gt;    console.error(e+'');&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データの検索&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensocialhost.com/help/core#/data/search.pc"&gt;/data/search&lt;/a&gt; を呼び出して、データを検索できます。このとき、フィルタ条件、ソート条件、ページング条件をパラメータとして、リクエストを署名します。&lt;br /&gt;&lt;br /&gt;* 指定した文字列を Key に含むデータを検索できます。部分一致のみです。&lt;br /&gt;* 指定した文字列を Value に含むデータを検索できます。部分一致のみです。&lt;br /&gt;* Key と Value の両方を指定したときは、上記の AND 条件になります。&lt;br /&gt;* page はページ番号です。インデックスではありません。&lt;br /&gt;* sort は asc, desc を指定できます。ソート順はデータの追加日時です。更新日時ではありません。&lt;br /&gt;&lt;pre&gt;// Search Data&lt;br /&gt;  var url = 'http://opensocialhost.com/data/search';&lt;br /&gt;  var data = {&lt;br /&gt;    key: 'feeling', value: 'well', page: 1, per_page: 10, sort: 'asc'&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  $.ajax({&lt;br /&gt;    type: 'post', url: url, oauth: 'signed', data: data, dataType: 'json'&lt;br /&gt;  }).next(function(r) {&lt;br /&gt;    if (r.hadError)&lt;br /&gt;      throw r.errorCode;&lt;br /&gt;&lt;br /&gt;    // OpenSocial Host のレスポンスを Object に変換する&lt;br /&gt;    // Key はそのまま、Value は JSON (String) から Object に戻す    &lt;br /&gt;    $.each(r.data, function(i, v) {&lt;br /&gt;      v.value = gadgets.json.parse(v.value);&lt;br /&gt;    });&lt;br /&gt;    return $.extend(r.data, {&lt;br /&gt;      page: r.page, per_page: r.per_page, total_counts: r.total_counts&lt;br /&gt;    });&lt;br /&gt;  &lt;br /&gt;  }).next(function(data) {&lt;br /&gt;    $.each(data, function(i, v) {&lt;br /&gt;      console.info(v.key, v.value);&lt;br /&gt;    });&lt;br /&gt;    console.info(data.page, data.per_page, data.total_counts);&lt;br /&gt;  }).error(function(e) {&lt;br /&gt;    console.error(e+'');&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データのグループ化や階層化&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial Host の外部データベースは、すべてのユーザで共有して、パーミッションでアクセス件をコントロールします。ですので、どのユーザのデータなのか、どの種類のデータなのかは、次のように Key の文字列を使って表現する必要があります。&lt;br /&gt;&lt;pre&gt;// VIEWER ID を使って、どのユーザのデータなのかを区別する&lt;br /&gt;  var key = viewer.id + '$comment';&lt;br /&gt;  var data = { text: 'Say Hello!', lastModified: new Date().getTime() };&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;データの確認&lt;/b&gt; -- 2009/11/26 追加&lt;br /&gt;&lt;br /&gt;OpenSocial Host にログインして、外部データベースの内容を確認できます。&lt;br /&gt;&lt;br /&gt;* 指定した文字列を Key または Value に含むデータを検索できます。&lt;br /&gt;* データの Key や Value、パーミッション、作成日時など、詳しく表示できます。&lt;br /&gt;* データを削除できます。&lt;br /&gt;&lt;br /&gt;&lt;img src="http://opensocialhost.com/images/tutorial/database.png?1254897132" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;関連リンク&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;* &lt;a href="http://opensocialhost.com/help/core"&gt;OpenSocial Host Core API&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://groups.google.co.jp/group/opensocialhost"&gt;OpenSocial Host ユーザフォーラム&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2235289982730312958?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2235289982730312958/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2235289982730312958' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2235289982730312958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2235289982730312958'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/11/opensocial-jquery-opensocial-host.html' title='OpenSocial jQuery から OpenSocial Host の外部データベースを操作する基本手順を紹介します'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-8619972010002744648</id><published>2009-11-19T07:55:00.000+09:00</published><updated>2009-11-19T07:55:28.146+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MA5'/><title type='text'>Gadgeta GeoNotes - Building Social Mashup Container with OpenStack</title><content type='html'>おはようございます。Nobuhiro Nakajima です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashupaward.jp/"&gt;Mashup Awards 5&lt;/a&gt; というマッシュアップをテーマとしたコンテストに、次の作品を応募しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashupaward.jp/"&gt;&lt;img 5="" alt="" awards="" mashup="" src="http://golazo.aptanacloud.com/images/MA5_Banner_200_80.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gadgeta GeoNotes - Building Social Mashup Container with OpenStack&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/"&gt;http://golazo.aptanacloud.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gadgeta GeoNotes は、位置情報付きのテキストを投稿し、タイムライン風に共有することで、場所や地域を軸とした人の繋がりを作り出すことを目的とした OpenSocial 対応の SNS サイトです。海外への紹介も考慮し、英語サイトにしています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/_rs_rYeSVOCBIrNtS06QKw?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SvCvhjEUmFI/AAAAAAAAB40/4Em_ct4Z0b0/s288/chunery.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;投稿したテキストから位置情報を自動抽出し、それぞれを関連付けて時系列に保存します。テキストは日本語と英語に対応し、英語なら日本に限らず、世界の国や地域の位置情報も抽出できます。&lt;br /&gt;&lt;br /&gt;投稿したテキストに、様々なガジェットを貼り付けできます。ガジェットは位置情報を受け取り、場所や地域に応じた情報を提示できます。ガジェットは OpenSocial に対応し、プロフィールや友達リスト、アクティビティを活用して、相互作用やバイラル効果を促進できます。&lt;br /&gt;&lt;br /&gt;Gadgeta GeoNotes は OpenStack を活用した Social Mashup Container です。オープンな仕様、オープンソース、オープンなサービスから構築しています。SNS サイトの主要な特徴を備え、ガジェットの拡張により、他サービスやコンテンツとの融合の可能性を開きます。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;デモビデオ&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/users/12976690996215323511.html"&gt;Nobuhiro Nakajima&lt;/a&gt; が仮想イベントの開催告知と参加を呼びかける例です。&lt;br /&gt;&lt;br /&gt;* イベントの開催内容のテキストを投稿し、新橋付近の位置情報を検出しています。&lt;br /&gt;* 参加者との連絡のために Comments ガジェットを追加しています。&lt;br /&gt;* 参加表明のために Attends ガジェットを追加しています。&lt;br /&gt;* 懇親会の会場を探すために、近所のバーガジェットを追加し、新橋付近のお店をリストアップしています。&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vaK7eFdkuVQ&amp;hl=ja&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vaK7eFdkuVQ&amp;hl=ja&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/users/18200614986198926446.html"&gt;まんてん&lt;/a&gt; が仮想イベントに参加を表明する例です。&lt;br /&gt;&lt;br /&gt;* Friends' Activity からイベントの開催告知を知ります。 &lt;br /&gt;* Comments ガジェットを使って、開催者と連絡をとっています。&lt;br /&gt;* Attends ガジェットを使って、参加を表明しています。また、友達の参加状況を確認しています。&lt;br /&gt;* 観光スポットを紹介するために Tokyo's Art and Design Events ガジェットを追加し、新橋付近のアートなイベントをリストアップしています。&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-Ce7j9tUejA&amp;hl=ja&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-Ce7j9tUejA&amp;hl=ja&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;デモガジェット&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/notes/44.html"&gt;&lt;b&gt;となりのチャンネー&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;この辺りで見かけたチャンネーを紹介します。気に入った髪型のチャンネーをクリックして投票してね。投票できるチャンネーは全国各地で合計10人までですよ。となりのチャンネーは &lt;a href="http://yamashita.dyndns.org/"&gt;weboo&lt;/a&gt; さんが開発した &lt;a href="http://mixi.jp/view_appli.pl?id=1357"&gt;みんなのチャンネー&lt;/a&gt; のアイディアを勝手に借りたものです。ありがとうございます。&lt;br /&gt;&lt;img src="http://gadgets.lrlab.to/friendconnect/chunery.screenshot.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/notes/46.html"&gt;&lt;b&gt;Tokyo's Art and Design Events&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;Tokyo Art Beat is Tokyo's bilingual art &amp;amp; design events guide. Offering event listings, reviews and a shop, the site is updated daily and lists more than 500 current &amp;amp; upcoming art events, at any moment.&lt;br /&gt;&lt;img src="http://gadgets.lrlab.to/friendconnect/tokyoartbeat.screenshot.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/notes/45.html"&gt;&lt;b&gt;近所のバー&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;BAR-NAVI は、サントリーが提供する日本最大級のバー検索サイトです。バーを楽しむというスタイルを提案しています。エリアやバーのタイプ、特徴、雰囲気で検索できます。自分だけの隠れ家を探したり、珍しいカクテルと出会うことができます。&lt;br /&gt;&lt;img src="http://gadgets.lrlab.to/friendconnect/suntory-barnavi.screenshot.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;OpenSocial というと、大きな受け皿としてのコンテナが存在し、その上のアプリケーションという構図で考えがちですが、Gadgeta GeoNotes によって、オリジナルのコンテンツを所有する小中規模のサイトやサービスが、自らソーシャルなマッシュアップコンテナになる(なれる)という可能性を示せたと考えています。&lt;br /&gt;&lt;br /&gt;追記です。-- 2009/11/10&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/socialweb-japan"&gt;SocialWeb Japan&lt;/a&gt; 主催 SocialWeb Conference vol.4 〜OpenSocial Night #1〜 のライトニングトークの中で Gadgeta GeoNotes を紹介しました。そのときのスライドです。&lt;br /&gt;&lt;br /&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=socialwebconferencevol-4-091109161714-phpapp02&amp;stripped_title=opensocial-live" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=socialwebconferencevol-4-091109161714-phpapp02&amp;stripped_title=opensocial-live" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;追記です。-- 2009/11/19&lt;br /&gt;&lt;br /&gt;Gadgeta GeoNotes のソースコードを公開しました。&lt;br /&gt;&lt;a href="http://golazo.googlecode.com/svn/branches/geonotes/"&gt;http://golazo.googlecode.com/svn/branches/geonotes/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-8619972010002744648?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/8619972010002744648/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=8619972010002744648' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8619972010002744648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/8619972010002744648'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/10/gadgeta-geonotes-building-social-mashup.html' title='Gadgeta GeoNotes - Building Social Mashup Container with OpenStack'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R7O_2gBTssg/SvCvhjEUmFI/AAAAAAAAB40/4Em_ct4Z0b0/s72-c/chunery.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-3537686681201636364</id><published>2009-10-12T16:01:00.000+09:00</published><updated>2009-10-12T16:01:54.970+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><title type='text'>opensocial-jquery のディスカッショングループを立ち上げました。</title><content type='html'>こんにちは。なかじまんです。&lt;br /&gt;&lt;br /&gt;Google グループを使って opensocial-jquery のディスカッショングループを立ち上げました。&lt;br /&gt;&lt;br /&gt;opensocial-jquery Discussion&lt;br /&gt;&lt;a href="http://groups.google.com/group/opensocial-jquery"&gt;http://groups.google.com/group/opensocial-jquery&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;opensocial-jquery に関係する話題であれば、なんでも OK です。opensocial-jquery を使っている方はもちろんのこと、opensocial-jquery に関心があるという方も歓迎します。&lt;br /&gt;&lt;br /&gt;疑問や質問、要望などを受け止める場となることを期待していますので、ぜひ活用してください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-3537686681201636364?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/3537686681201636364/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=3537686681201636364' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3537686681201636364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3537686681201636364'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/10/opensocial-jquery.html' title='opensocial-jquery のディスカッショングループを立ち上げました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-3920855561579244200</id><published>2009-10-12T15:38:00.000+09:00</published><updated>2009-10-12T15:38:25.558+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>opensocial-jquery based on jQuery 1.3.2 is available</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;My name is Nobuhiro Nakajima, Japanese programmer.&lt;br /&gt;&lt;br /&gt;I'm afraid my expressions may be rude or hard to read, because I'm not so good at English. But please, please be patient! I will try hard to learn English!&lt;br /&gt;&lt;br /&gt;opensocial-jquery based on jQuery 1.3.2 is available:&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;http://code.google.com/p/opensocial-jquery/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;opensocial-jquery is jQuery based concise JavaScript Library for rapid OpenSocial Applications development.&lt;br /&gt;&lt;br /&gt;opensocial-jquery is designed to change the way that you write OpenSocial Applications When you use it, you can develop OpenSocial Applications by the method of developing the website by jQuery.&lt;br /&gt;&lt;br /&gt;Therefore OpenSocial JavaScript API is good, Lightweight JavaScript API is better, and opensocial-jquery is best.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;opensocial-jquery 1.3.2.5&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; * The opensocial-jquery 1.3.2.5 is based on jQuery 1.3.2 (courtesy of @lackac @jonca.rafal)&lt;br /&gt; * The function of this release is the same as opensocial-jquery 1.0.5&lt;br /&gt;&lt;br /&gt;&lt;b&gt;opensocial-jquery 1.2.6.5&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; * The opensocial-jquery 1.2.6.5 is based on jQuery 1.2.6.&lt;br /&gt; * The function of this release is the same as opensocial-jquery 1.0.5.&lt;br /&gt; * This release is supported but is not currently the recommended release for jQuery 1.2.6.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Changelog&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; * issue #18&lt;br /&gt; * issue #20&lt;br /&gt;&lt;br /&gt;Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-3920855561579244200?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/3920855561579244200/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=3920855561579244200' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3920855561579244200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/3920855561579244200'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/10/opensocial-jquery-based-on-jquery-132.html' title='opensocial-jquery based on jQuery 1.3.2 is available'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2952385523231929267</id><published>2009-10-12T15:25:00.000+09:00</published><updated>2009-10-12T15:25:17.652+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>お待たせしました。jQuery 1.3.2 ベースの opensocial-jquery をリリースしました。</title><content type='html'>こんにちは。なかじまんです。&lt;br /&gt;&lt;br /&gt;お待たせしました。jQuery 1.3.2 版の opensocial-jquery をリリースしました。&lt;br /&gt;&lt;br /&gt;OpenSocial JavaScript API is good, Lightweight JavaScript API is better, and opensocial-jquery is best. &lt;br /&gt;&lt;a class="external" href="http://code.google.com/p/opensocial-jquery/" title="http://code.google.com/p/opensocial-jquery/"&gt;http://code.google.com/p/opensocial-jquery/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;opensocial-jquery 1.3.2.5&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery 1.3.2 ベースの opensocial-jquery です。機能は jQuery 1.2.6 ベースである opensocial-jquery 1.0.5 とまったく同じです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;opensocial-jquery 1.2.6.5&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery 1.2.6 ベースの opensocial-jquery です。機能は jQuery 1.2.6 ベースである opensocial-jquery 1.0.5 とまったく同じです。&lt;br /&gt;&lt;br /&gt;このとおり、バージョン番号の体系を見直して振り直しています。上位 3桁はベースとなる jQuery のバージョンを、末尾 1桁は opensocial-jquery のバージョンを表すようにしました。&lt;br /&gt;&lt;br /&gt;今後もしばらくは jQuery 1.3.2 ベースと jQuery 1.2.6 ベースの両方とも提供していく予定ですが、状況によっては jQuery 1.2.6 ベースをサボることも考えています。ですので、何かタイミングがありましたら jQuery 1.3.2 ベースへの移行をおすすめします。&lt;br /&gt;&lt;br /&gt;opensocial-jquery 1.3.2.5 は @lackac と @jonca.rafal からソースコードの提供を受けてリリースすることができました。ありがとうございました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2952385523231929267?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2952385523231929267/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2952385523231929267' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2952385523231929267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2952385523231929267'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/10/jquery-132-opensocial-jquery.html' title='お待たせしました。jQuery 1.3.2 ベースの opensocial-jquery をリリースしました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-6586740519250237004</id><published>2009-09-24T23:19:00.005+09:00</published><updated>2009-09-25T07:12:35.225+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>opensocial-jquery templates 0.1.0 is available. It's HTML DOM based JavaScript template library for OpenSocial Application.</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;My name is Nobuhiro Nakajima, Japanese programmer.&lt;br /&gt;&lt;br /&gt;I'm afraid my expressions may be rude or hard to read, because I'm not so good at English. But please, please be patient! I will try hard to learn English!&lt;br /&gt;&lt;br /&gt;opensocial-jquery templates 0.1.0 is available.&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;http://code.google.com/p/opensocial-jquery/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;opensocial-jquery templates is HTML DOM based JavaScript template library for OpenSocial Application. It is based on implementation of &lt;a href="http://incubator.apache.org/shindig/"&gt;Apache Shindig&lt;/a&gt; and has compatibility with subset of &lt;a href="http://wiki.opensocial.org/index.php?title=OpenSocial_Templates_Developer%27s_Guide"&gt;OpenSocial Templates&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;opensocial-jquery templates supports the following markup in OSML:&lt;br /&gt;&lt;br /&gt; * ${Expr} variables and expressions into a element text and a attribute &lt;br /&gt; * Set of special variables: Top, Cur, Context.index, Context.Count and Msg &lt;br /&gt; * Set of special attributes: if, repeat, and var&lt;br /&gt;&lt;br /&gt;This example is fetching and rendering a group of people using &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/Ajax"&gt;Ajax&lt;/a&gt; and &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/Template"&gt;Template&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SrcPKa9votI/AAAAAAAAB2I/VAINcgTmPTg/s400/templates_1253510432815.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;The HTML template is as follows:&lt;br /&gt;&lt;pre&gt;&amp;lt;div id="wrapper" style="display:none;"&amp;gt;&lt;br /&gt;&amp;lt;div repeat="${people}" class="person"&amp;gt;&lt;br /&gt;&amp;lt;img alt="${Cur.displayName}" src="${Cur.thumbnailUrl}" /&amp;gt;&lt;br /&gt;&amp;lt;a title="${Cur.displayName}" href="${Cur.profileUrl}"&amp;gt;${Cur.displayName}&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div if="${people.length &amp;gt; 0}" class="pager"&amp;gt;&lt;br /&gt;Showing friends from ${people.startIndex + 1} &lt;br /&gt;  to ${people.startIndex + people.length } &lt;br /&gt;  of ${people.totalResults}&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div if="${people.length == 0}" class="pager"&amp;gt;&lt;br /&gt;There's no friend yet.&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;The JavaScript is as follows:&lt;br /&gt;&lt;pre&gt;$.getData('/people/@owner/@friends', function(data) {&lt;br /&gt;  $('#wrapper').render({ people: data }).show();&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/wiki/ExamplePeopleTemplate"&gt;View of the finished source code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;opensocial-jquery templates is usable with the container which does&lt;br /&gt;not support OpenSocial v0.9. And different from OpenSocial Templates of the XML base, you can edit opensocial-jquery templates by an HTML authoring tool visually. It will make a programmer and a designer happy.&lt;br /&gt;&lt;br /&gt;Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-6586740519250237004?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/6586740519250237004/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=6586740519250237004' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6586740519250237004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/6586740519250237004'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/09/opensocial-jquery-templates-010-is.html' title='opensocial-jquery templates 0.1.0 is available. It&apos;s HTML DOM based JavaScript template library for OpenSocial Application.'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_R7O_2gBTssg/SrcPKa9votI/AAAAAAAAB2I/VAINcgTmPTg/s72-c/templates_1253510432815.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1631684486761984882</id><published>2009-09-22T17:05:00.001+09:00</published><updated>2009-09-22T17:06:44.453+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Shindig'/><title type='text'>OpenSocial Templates サブセットの opensocial-jquery templates 0.1.0 をリリースしました</title><content type='html'>こんにちは。なかじまんです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;opensocial-jquery&lt;/a&gt; の付加機能として opensocial-jquery templates をリリースしました。opensocial-jquery templates は &lt;a href="http://wiki.opensocial.org/index.php?title=OpenSocial_Templates_Developer%27s_Guide"&gt;OpenSocial Templates (v0.9)&lt;/a&gt; のマークアップ言語である OSML のサブセットとその互換性を提供します。&lt;br /&gt;&lt;br /&gt;テンプレートエンジンの中核は Apache Shindig のソースコードを使っています。が、OpenSocial Templates は XML ベースのテンプレートですので、これを HTML ベースになるように書き換えて(かなり苦労してます) jQuery との親和性を高めています。&lt;br /&gt;&lt;br /&gt;新しいマークアップ言語を覚える必要はありますが、OpenSocial Templates と互換性があるため、OpenSocial v0.9 時代になっても、その知識や実績が無駄になりにくいと考えていますので、ちょっとした先行投資の意味合いも兼ねて、使ってみて貰えるとうれしいです。&lt;br /&gt;&lt;br /&gt;opensocial-jquery templates は、別ファイルにしてありますので、opensocial-jquery に続けて script をロードしてください。&lt;br /&gt;&lt;pre&gt;&amp;lt;script src="opensocial-jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="opensocial-jquery.templates.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;jQuery.getData を使って友達リストを取得し、jQuery.fn.render とテンプレートを使って、その内容を表示する例を紹介します。iGoogle US で実行した結果です。&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SrcPKa9votI/AAAAAAAAB2I/VAINcgTmPTg/s400/templates_1253510432815.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;次の HTML がテンプレートです。友達リストを repeat 属性で繰り返し、サムネイルとニックネームを表示します。また、友達リストの取得位置、1ページあたりの取得件数、総件数を表示します。友達リストが 0件のときは、メッセージを表示します。&lt;br /&gt;&lt;pre&gt;&amp;lt;div id="wrapper" style="display:none;"&amp;gt;&lt;br /&gt;&amp;lt;div repeat="${people}" class="person"&amp;gt;&lt;br /&gt;&amp;lt;img alt="${Cur.displayName}" src="${Cur.thumbnailUrl}" width="30" height="30"&amp;gt;&lt;br /&gt;&amp;lt;a title="${Cur.displayName}" href="${Cur.profileUrl || '#'}" &lt;br /&gt;  target="_top"&amp;gt;${Cur.displayName}&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div if="${people.length &amp;gt; 0}" class="pager"&amp;gt;&lt;br /&gt;Showing friends from ${people.startIndex + 1} &lt;br /&gt;  to ${people.startIndex + people.length } &lt;br /&gt;  of ${people.totalResults}&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div if="${people.length == 0}" class="pager"&amp;gt;There's no friend yet.&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;次は JavaScript です。jQuery.getData を使って OWNER の友達リストを取得します。そして jQuery.fn.render を使って、その友達リストをテンプレートに適用します。&lt;br /&gt;&lt;pre&gt;  var url = '/people/@owner/@friends';&lt;br /&gt;  var data = { fields: 'profileUrl' };&lt;br /&gt;  $.getData(url, data, function(data) {&lt;br /&gt;    $('#wrapper').render({ people: data }).show();&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;詳しくは &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/Template"&gt;opensocial-jquery のドキュメント&lt;/a&gt; にまとめましたので、参照してください。OpenSocial Templates のサポート範囲や未実装の機能を確認できます。&lt;br /&gt;&lt;br /&gt;今のところ opensocial-jquery templates では OpenSocial Templates の全仕様を実装しようとは考えていません。JavaScript のヒアドキュメントの代替として、小さな HTML の組み立てをサポートできるような存在を目的としています。とはいってもまだ発展段階です。何かありましたらコメントください。要望や状況に応じて対応していきます。&lt;br /&gt;&lt;br /&gt;opensocial-jquery templates は Apache Shindig の実装を使っているため Apache License 2.0 ライセンスを採用しています。opensocial-jquery 本体とは異なりますので注意してください。今後 opensocial-jquery templates が使えると判断できて opensocial-jquery 本体に組み込むことがあれば、opensocial-jquery 本体も Apache License 2.0 にしたほうがいいのかなと考えています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1631684486761984882?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1631684486761984882/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1631684486761984882' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1631684486761984882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1631684486761984882'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/09/opensocial-templates-opensocial-jquery.html' title='OpenSocial Templates サブセットの opensocial-jquery templates 0.1.0 をリリースしました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_R7O_2gBTssg/SrcPKa9votI/AAAAAAAAB2I/VAINcgTmPTg/s72-c/templates_1253510432815.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1024670250340018467</id><published>2009-09-05T12:26:00.003+09:00</published><updated>2009-09-07T07:25:42.591+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Social Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial API'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>opensocial-jquery 1.0.5 をリリースしました。OAuth リクエストと認証、Album と MediaItem の取得、People と AppData の同時取得に対応しました。</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;opensocial-jquery 1.0.5&lt;/a&gt; をリリースしました。今回のリリースは、OAuth リクエストと認証、アルバムと写真の取得、プロフィールとアプリデータの同時取得という 3つの対応が柱です。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;OAuth リクエストと認証&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;jQuery.ajax を使って、OAuth リクエストを認証して、外部ホストからデータを取得したり送信したりできるようにしました。&lt;br /&gt;&lt;br /&gt;gooホームのガジェットから FriendFeed にメッセージを投稿する &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/ExampleFriendFeedOAuth"&gt;サンプルのソースコードと解説&lt;/a&gt; を用意していますので、ソースコードの雰囲気を体感してみてください。また、このガジェットが動作する様子をキャプチャして動画にしましたので、再生してみてください。&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/d-cXaGVrNHI&amp;hl=ja&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/d-cXaGVrNHI&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;jQuery.ajax を使って、リクエストを OAuth 認証して、外部ホストにデータを送信できます。&lt;br /&gt;&lt;pre&gt;  $.ajax({&lt;br /&gt;    type: 'post',&lt;br /&gt;    url: 'http://friendfeed-api.com/v2/entry',&lt;br /&gt;    data: { body: 'Say Hello!' },&lt;br /&gt;    dataType: 'json',&lt;br /&gt;    oauth: 'friendfeed',&lt;br /&gt;    success: function(data, status) {&lt;br /&gt;      console.info(data, status);&lt;br /&gt;    },&lt;br /&gt;    error: function(xhr, status, e) {&lt;br /&gt;      if (status == 'oauth') &lt;br /&gt;        $('&amp;lt;a href="#signin"/&amp;gt;')&lt;br /&gt;          .text('Sign in with FriendFeed')&lt;br /&gt;          .click(function() {&lt;br /&gt;            $.oauth('friendfeed', function() {});&lt;br /&gt;            return false;&lt;br /&gt;          })&lt;br /&gt;          .minimessage();      &lt;br /&gt;      console.error(xhr, status, e);&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;このとき、jQuery.ajax の oauth オプションに、ガジェットXML の OAuth/Service@name を指定します。&lt;br /&gt;&lt;pre&gt;  &amp;lt;OAuth&amp;gt;&lt;br /&gt;  &amp;lt;Service name="friendfeed"&amp;gt;&lt;br /&gt;  &amp;lt;Request url="https://friendfeed.com/account/oauth/request_token"&lt;br /&gt;    param_location="uri-query"/&amp;gt;&lt;br /&gt;  &amp;lt;Authorization url="https://friendfeed.com/account/oauth/authorize"/&amp;gt;&lt;br /&gt;  &amp;lt;Access url="https://friendfeed.com/account/oauth/access_token"&lt;br /&gt;    param_location="uri-query"/&amp;gt;&lt;br /&gt;  &amp;lt;/Service&amp;gt;&lt;br /&gt;  &amp;lt;/OAuth&amp;gt;&lt;br /&gt;&lt;/pre&gt;jQuery.ajax は OAuth リクエストの認証を必要とするとき、エラーイベントをコールバックします。このとき status は oauth を表します。続けて jQuery.oauth を使って OAuth リクエストを認証できます。このとき、指定した OAuth/Service@name の認証ページをポップアップウィンドウで開きます。OAuth 認証してポップアップウィンドウを閉じると、コールバックしますので、その中から処理を再開できます。&lt;br /&gt;&lt;br /&gt;詳しくは &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/AjaxOAuth"&gt;API リファレンス&lt;/a&gt; を見てください。なお OAuth リクエストと認証は gooホームでのみ動作確認しています。今後、他のコンテナでも動作確認をしつつ対応を進めていきます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;アルバムリストの取得&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;jQuery.ajax を使って VIEWER の アルバムリストを取得できます。&lt;br /&gt;&lt;pre&gt;  $.ajax({&lt;br /&gt;    url: '/albums/@viewer/@self',&lt;br /&gt;    data: {},&lt;br /&gt;    dataType: 'data',&lt;br /&gt;    success: function(albums) {&lt;br /&gt;      $.each(albums, function(i, album) {&lt;br /&gt;        console.info(album.id);&lt;br /&gt;        console.info(album.title);&lt;br /&gt;        console.info(album.description);&lt;br /&gt;        console.info(album.thumbnailUrl);&lt;br /&gt;        console.info(album.ownerId);&lt;br /&gt;        console.info(album.mediaItemCount);&lt;br /&gt;      });&lt;br /&gt;    },&lt;br /&gt;    error: function(xhr, status, e) {&lt;br /&gt;      console.error(xhr, status, e);&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;詳しくは &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/Album"&gt;API リファレンス&lt;/a&gt; を見てください。なお、アルバムリストの取得は orkut 仕様に準じていて orkut のみで動作確認をしています。mixi での動作確認はしていませんので、フィードバックを期待してます。 &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;アルバムの写真リストの取得&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;jQuery.ajax を使って VIEWER の アルバムの写真リストを取得できます。URL でアルバムID を指定します。 &lt;br /&gt;&lt;pre&gt;  $.ajax({&lt;br /&gt;    url: '/mediaitems/@viewer/@self/1251149609611',&lt;br /&gt;    data: {},&lt;br /&gt;    dataType: 'data',&lt;br /&gt;    success: function(mediaitems) {&lt;br /&gt;      $.each(mediaitems, function(i, mediaitem) {&lt;br /&gt;        console.info(mediaitem.id);&lt;br /&gt;        console.info(mediaitem.url);&lt;br /&gt;        console.info(mediaitem.title);&lt;br /&gt;        console.info(mediaitem.description);&lt;br /&gt;        console.info(mediaitem.thumbnailUrl);&lt;br /&gt;        console.info(mediaitem.albumId);&lt;br /&gt;      });&lt;br /&gt;    },&lt;br /&gt;    error: function(xhr, status, e) {&lt;br /&gt;      console.error(xhr, status, e);&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;詳しくは &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/MediaItem"&gt;API リファレンス&lt;/a&gt; を見てください。なお、写真リストの取得は orkut 仕様に準じていて orkut のみで動作確認をしています。mixi での動作確認はしていませんので、フィードバックを期待してます。 &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;プロフィールとアプリデータの同時取得&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;プロフィールや友達リストを取得するとき、appData パラメータを指定して、アプリケーションのデータを同時に取得できます。アプリケーションのデータ項目はカンマ区切りで指定します。&lt;br /&gt;&lt;br /&gt;今までは、プロフィールや友達リストの取得と、アプリケーションのデータの取得が別々の 2段構えでしたが、これが 1回の jQuery.ajax で取得できるようになりますので、さらにソースコードがシンプルになるのではと期待しています。&lt;br /&gt;&lt;pre&gt;  $.ajax({&lt;br /&gt;    url: '/people/@viewer/@self',&lt;br /&gt;    data: { appData: 'comment,feeling' },&lt;br /&gt;    dataType: 'data',&lt;br /&gt;    success: function(people) {&lt;br /&gt;      var person = people[0];&lt;br /&gt;      console.info(person.appData.comment);&lt;br /&gt;      console.info(person.appData.feeling);&lt;br /&gt;    },&lt;br /&gt;    error: function(xhr, status, e) {&lt;br /&gt;      console.error(xhr, status, e);&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;詳しくは &lt;a href="http://code.google.com/p/opensocial-jquery/wiki/People#%E3%83%87%E3%83%BC%E3%82%BF%E9%A0%85%E7%9B%AE%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B"&gt;API リファレンス&lt;/a&gt; を見てください。&lt;br /&gt;&lt;br /&gt;質問や不具合の報告などのフィードバックは大歓迎です。また、修正パッチや拡張コードの提供も歓迎します。&lt;br /&gt;&lt;br /&gt;海外の方から opensocial-jquery 1.0.4 や 1.0.5 を jQuery 1.3.2 に書き直したものの提供も受けています。近いうちに公開しますので、もう少しお待ちください。&lt;br /&gt;&lt;br /&gt;追記です。jQuery.param のエンコード方法を書き換えました。今までは、空白を + にエンコードしていましたが、これを %20 でエンコードするようにしました。おそらく影響はないと思いますが、お伝えしておきます。&lt;br /&gt;&lt;br /&gt;追記です。@datoka さん。フィードバックありがとうございました。&lt;blockquote&gt;&lt;a href="http://twitter.com/datoka/statuses/3797442025"&gt;@datoka&lt;/a&gt; @nakajiman opensocial jquery v1.0.5 album, mediaitemともmixiで動いております！パラメータ指定は（元々）無視されますが&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1024670250340018467?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1024670250340018467/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1024670250340018467' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1024670250340018467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1024670250340018467'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/09/opensocial-jquery-105-oauth-album.html' title='opensocial-jquery 1.0.5 をリリースしました。OAuth リクエストと認証、Album と MediaItem の取得、People と AppData の同時取得に対応しました。'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-256412839252101042</id><published>2009-08-20T07:59:00.002+09:00</published><updated>2009-08-20T08:04:55.074+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Gadgets'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='YouTube Data API'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets API'/><category scheme='http://www.blogger.com/atom/ns#' term='iGoogle'/><title type='text'>opensocial-jquery と Google Gadget Editor を使って iGoogle production でガジェットを開発しよう</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;2009年8月12日 米国の iGoogle は OpenSocial に正式対応しました。残念ながら日本はまだですが、近いうちに対応することが予想できます。なので、今後 iGoogle に向けた OpenSocial ガジェット (アプリ) の開発も広がってくるでしょう。&lt;br /&gt;&lt;br /&gt;もちろん &lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;opensocial-jquery&lt;/a&gt; も iGoogle を熱烈サポートしていきます。なんたって最終的には全世界がターゲットになるのですからね。そこで iGoogle を使った opensocial-jquery のチュートリアルを用意しました。Google アカウントさえあれば WEB ブラウザ 1つだけで体験できる構成にしています。&lt;br /&gt;&lt;br /&gt;それではチュートリアルをはじめます。&lt;br /&gt;&lt;br /&gt;はじめに &lt;span style="color:red;font-weight:bold;"&gt;iGoogle (米国)&lt;/span&gt; &lt;a href="http://www.google.com/ig?hl=en"&gt;http://www.google.com/ig?hl=en&lt;/a&gt; にログインしてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Cpa7GosTcMjLoY0pEshzJA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SonhKHmbDzI/AAAAAAAAByI/e9w5bvLMJIQ/s400/iGoogle_1250546806875.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;続けて iGoogle に &lt;a href="http://www.google.com/ig/adde?moduleurl=www.google.com/ig/modules/developer.xml"&gt;Developer Gadget&lt;/a&gt; を追加してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/yfeXdtAz5cSRKHzFH5Hf6w?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SonhKZ-Vz2I/AAAAAAAAByM/EoAPSNJgWQY/s400/iGoogle_1250547518342.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;続けて iGoogle に &lt;a href="http://www.google.com/ig/adde?moduleurl=http://www.google.com/ig/modules/gge.xml"&gt;Google Gadget Editor&lt;/a&gt; を追加してください。そして Hello, world! ガジェットのソースコードが表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/ovWksjd6RomAC9fT-GArTg?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SosemDdzfXI/AAAAAAAABzo/rO83PDll4qw/s400/iGoogle_1250631201694.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor で File メニューから Save を選択してください。続けて playground.xml と入力して OK ボタンをクリックし、Hello, world! ガジェットを保存してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/T4gqWZJkQcIXStN1kERuDQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SoS9ncfFBLI/AAAAAAAABwY/WEJSiFT0t8Y/s400/1250213107914.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;playground.xml の URL を確認します。playground.xml のリンクを開いてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/bIT9dPKUFkNQHDjXvBKJog?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SoS9nmHfyBI/AAAAAAAABw4/Tv7KAnMSW3Y/s400/1250213187287.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このときの playground.xml の URL を手元に控えてください。次のような URL になるはずです。数値の部分は各自によって異なります。&lt;br /&gt;&lt;br /&gt;http://hosting.gmodules.com/ig/gadgets/file/(数値)/playground.xml&lt;br /&gt;&lt;br /&gt;Developer Gadget で、手元に控えた playground.xml の URL を入力して Add ボタンをクリックし、iGoogle にガジェットを登録してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/ehTZvhC2XFPGbqZzJoZVxg?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SonhKTLQeUI/AAAAAAAAByQ/UPUbu4CoHM8/s800/iGoogle_1250547796446.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;iGoogle に playground.xml として保存したガジェットが表示されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/j3fL4AzPMx9fRhelF0XEKg?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SonhKtCm5rI/AAAAAAAAByU/CPQl5LBV71U/s288/iGoogle_1250547832440.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;iGoogle が playground.xml をキャッシュしないように cached チェックボックスを OFF にします。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Pc7hF4ccBOkhmHTlSpHyUA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SonhK23BrnI/AAAAAAAAByY/iZrVmUKjKZA/s800/iGoogle_1250547950545.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example" /&amp;gt;&lt;br /&gt;&amp;lt;Content type="html"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Search"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボックスが表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に HTML を記述すると、そのままガジェットで表示されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/5Hjbe171dJ9DXK15bpUvxw?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SonhIymUZ6I/AAAAAAAABx0/hx-fQ9ezWOU/s800/iGoogle_1250548095880.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example" /&amp;gt;&lt;br /&gt;&amp;lt;Content type="html"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Search"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;    alert(this.q.value + ' ' + this.c.value);&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そしてSearch ボタンをクリックし、入力内容が alert 表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ opensocial-jquery は http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js のアドレスで配信しています。詳しくは &lt;a href="http://postal-search-apis-and-solutions.blogspot.com/2009/08/opensocial-jquery-on-cloud.html"&gt;opensocial-jquery on the cloud&lt;/a&gt; を見てください。&lt;br /&gt;※ playground.xml に JavaScript を記述すると、そのままガジェットで実行されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Fi_pthdYUXfALGLYd0vQBw?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SonhJE9Dq-I/AAAAAAAABx4/VAIy_7f2OlM/s800/iGoogle_1250548095881.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example" /&amp;gt;&lt;br /&gt;&amp;lt;Content type="html"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Search"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;div id="videos"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;&lt;span style="color:red;"&gt;    var url = 'http://gdata.youtube.com/feeds/videos';&lt;br /&gt;    var data = { alt: 'json',&lt;br /&gt;      vq: this.q.value,&lt;br /&gt;      'max-results': this.c.value&lt;br /&gt;    };&lt;br /&gt;    $.getJSON(url, data, function(json) {&lt;br /&gt;      $.each(json.feed.entry, function() {&lt;br /&gt;        $('&amp;lt;img /&amp;gt;')&lt;br /&gt;          .attr('src', this.media$group.media$thumbnail[0].url)&lt;br /&gt;          .appendTo('#videos');&lt;br /&gt;      });&lt;br /&gt;    });&lt;/span&gt;&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして Search ボタンをクリックし、入力内容にしたがって YouTube から動画を検索し、サムネイルがリスト表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ opensocial-jquery は jQuery の Ajax API をクロスドメイン対応に拡張します。&lt;br /&gt;※ YouTube の動画検索は &lt;a href="http://code.google.com/intl/ja/apis/youtube/"&gt;YouTube Data API&lt;/a&gt; を使っています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/-LJrHxmeM38Excn-v4cw1w?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SonhJYMvDvI/AAAAAAAABx8/SGBPBqwbKgI/s800/iGoogle_1250548607546.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;span style="color:red;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;Require feature="dynamic-height" /&amp;gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;Content type="html"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Search"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;div id="videos"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;    var url = 'http://gdata.youtube.com/feeds/videos';&lt;br /&gt;    var data = { alt: 'json',&lt;br /&gt;      vq: this.q.value,&lt;br /&gt;      'max-results': this.c.value&lt;br /&gt;    };&lt;br /&gt;    $.getJSON(url, data, function(json) {&lt;br /&gt;      $.each(json.feed.entry, function() {&lt;br /&gt;        $('&amp;lt;img /&amp;gt;')&lt;br /&gt;          .attr('src', this.media$group.media$thumbnail[0].url)&lt;br /&gt;          .appendTo('#videos');&lt;br /&gt;      });&lt;br /&gt;    });&lt;br /&gt;    &lt;span style="color:red;"&gt;$(window).adjustHeight();&lt;/span&gt;&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして Search ボタンをクリックし、サムネイルの数に応じて、ガジェットの高さが自動調整されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に &amp;lt;Require feature="dynamic-height"&amp;gt; を記述すると、jQuery.fn.adjustHeight がロードされます。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/LWN9jGREyZu8sohJmqumJw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SonhJoEug9I/AAAAAAAAByA/pCYPzBbGdh8/s400/iGoogle_1250548732927.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&amp;gt;&lt;br /&gt;&amp;lt;Require feature="dynamic-height" /&amp;gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;&amp;lt;Content type="html"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;#videos img { margin: 2px; width: 80px; hegith: 60px; }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30 results&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Search"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;div id="videos"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;    var url = 'http://gdata.youtube.com/feeds/videos';&lt;br /&gt;    var data = { alt: 'json',&lt;br /&gt;      vq: this.q.value,&lt;br /&gt;      'max-results': this.c.value&lt;br /&gt;    };&lt;br /&gt;    $.getJSON(url, data, function(json) {&lt;br /&gt;      $.each(json.feed.entry, function() {&lt;br /&gt;        $('&amp;lt;img /&amp;gt;')&lt;br /&gt;          .attr('src', this.media$group.media$thumbnail[0].url)&lt;br /&gt;          .appendTo('#videos');&lt;br /&gt;      });&lt;br /&gt;    });&lt;br /&gt;    $(window).adjustHeight();&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして Search タンをクリックし、CSS が適用されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に CSS を記述すると、そのままガジェットで適用されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/3PVgzM5Tw5SSNMbEI6QEow?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SonhJzIzMEI/AAAAAAAAByE/P-57xqRmJdU/s800/iGoogle_1250549007085.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これでチュートリアルはおしまいです。&lt;br /&gt;&lt;br /&gt;これ以降は &lt;a href="http://code.google.com/p/opensocial-jquery/w/list"&gt;opensocial-jquery のドキュメント&lt;/a&gt; を参照してください。その中で質問や要望が出てきましたら、お気軽にコメントください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-256412839252101042?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/256412839252101042/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=256412839252101042' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/256412839252101042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/256412839252101042'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/08/opensocial-jquery-google-gadget-editor_20.html' title='opensocial-jquery と Google Gadget Editor を使って iGoogle production でガジェットを開発しよう'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_R7O_2gBTssg/SonhKHmbDzI/AAAAAAAAByI/e9w5bvLMJIQ/s72-c/iGoogle_1250546806875.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2798261907126879035</id><published>2009-08-19T07:48:00.002+09:00</published><updated>2009-08-19T07:54:32.718+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Simple Storage Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon CloudFront'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><title type='text'>opensocial-jquery on the cloud (大げさなタイトルでごめんなさい)</title><content type='html'>おはようございます。なかじまんです。&lt;br /&gt;&lt;br /&gt;OpenSocial ガジェット (アプリ) を開発するとき、jQuery や Dojo、YUI などメジャーなライブラリを &lt;a href="http://code.google.com/apis/ajaxlibs/"&gt;Google AJAX Libraries API&lt;/a&gt; からロードしてるのをよく見かけます。&lt;br /&gt;&lt;br /&gt;Google AJAX Libraries API を使うと...&lt;br /&gt;&lt;br /&gt; * ライブラリをホストする必要がない&lt;br /&gt; * ライブラリのロード効率がロケーションに左右されない&lt;br /&gt; * ライブラリのブラウザ(コンテナ?)キャッシュを共有できる&lt;br /&gt;&lt;br /&gt;といったよいことがあり、システム上の都合のみならず、ユーザ体験の向上にもつながる効果が期待できます。&lt;br /&gt;&lt;br /&gt;そこで &lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;opensocial-jquery&lt;/a&gt; でも同じ効果を期待して &lt;a href="http://mtl.recruit.co.jp/blog/2008/11/amazons3amazon_cloudfront.html"&gt;Amazon CloudFront&lt;/a&gt; という CDN サービスを使って opensocial-jquery を配信することにしました。&lt;br /&gt;&lt;br /&gt;アドレスは、次のとおりです。特に制限などはしませんので、自由に使ってください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"&gt;http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;不審な点がありましたら、レスポンスヘッダを参照してください。こんな感じです。&lt;br /&gt;&lt;pre&gt;x-amz-id-2: (省略)&lt;br /&gt;x-amz-request-id: (省略)&lt;br /&gt;Date: Fri, 14 Aug 2009 01:54:08 GMT&lt;br /&gt;Expires: Wed, 01 Jan 2020 00:00:00 GMT&lt;br /&gt;Last-Modified: Fri, 14 Aug 2009 01:23:02 GMT&lt;br /&gt;Etag: "1b7460e4035ac8cb3d0f1c4a9e2c1d59"&lt;br /&gt;Content-Type: text/javascript&lt;br /&gt;Content-Length: 73683&lt;br /&gt;Server: AmazonS3&lt;br /&gt;Age: 86386&lt;br /&gt;X-Cache: Hit from cloudfront&lt;br /&gt;Via: 1.0 d8c8b41b52e430ca9dc4842099bfe99a.cloudfront.net:11180 (CloudFront), 1.0 dfd248577076af79b5214034bb864f31.cloudfront.net:11180 (CloudFront)&lt;br /&gt;Connection: keep-alive&lt;br /&gt;&lt;/pre&gt;Amazon CloudFront は転送量で課金されますが、よっぽど膨大なアクセスがない限り、ちょっとした課金で済みますので、今のところ心配はしていません。もしも高額になったり、負担が増えることがあれば、事前に相談の周知をします。むしろそのくらい使って貰えたらうれしいです。&lt;br /&gt;&lt;br /&gt;また Expires ヘッダを使って 2020年1月1日までキャッシュを促すようにしていますので、ブラウザやコンテナがキャッシュ制御してくれれば、思ってるほどアクセスは発生しなかもしれませんね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2798261907126879035?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2798261907126879035/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2798261907126879035' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2798261907126879035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2798261907126879035'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/08/opensocial-jquery-on-cloud.html' title='opensocial-jquery on the cloud (大げさなタイトルでごめんなさい)'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-2544352670225906849</id><published>2009-08-14T19:37:00.004+09:00</published><updated>2009-08-18T07:32:55.255+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='goo Social Platform'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><title type='text'>opensocial-jquery と Google Gadget Editor を使って gooホーム sandbox でガジェットを開発しよう</title><content type='html'>こんばんは。なかじまんです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;opensocial-jquery&lt;/a&gt; のチュートリアルを用意しました。Google と goo のアカウントさえあれば、WEB ブラウザ 1つだけで体験できる構成にしています。&lt;br /&gt;&lt;br /&gt;opensocial-jquery は jQuery を使って WEB サイトを開発する手法を OpenSocial のガジェットにも持ち込もうという目的ではじめたものです。&lt;br /&gt;&lt;br /&gt;ですので、このチュートリアルは、日々 jQuery を使って WEB サイトを開発しているがOpenSocial 環境でガジェットを開発したことがないとか、開発しようとしたが新しいことを覚えるのに抵抗を感じているという方々に体験して貰いたいものです。&lt;br /&gt;&lt;br /&gt;まずは OpenSocial のガジェットは特別なもの... という感覚をリセットして、jQuery を使って WEB サイトを開発した経験を opensocial-jquery によって OpenSocial のガジェット開発にも再活用できないか...という視点で再確認してはどうかと提案します。その中で新しい発見があればうれしい限りです。&lt;br /&gt;&lt;br /&gt;それではチュートリアルをはじめます。&lt;br /&gt;&lt;br /&gt;はじめに &lt;a href="http://www.google.co.jp/"&gt;Google&lt;/a&gt; にログインしてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/BJVKnTNuVa6dsI2afRxj0g?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SoS6DXdwmsI/AAAAAAAABv4/s3XvnLFzk7I/s400/1250212006815.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;次に &lt;a href="http://www.google.co.jp/ig/ifr?url=http://www.google.com/ig/modules/gge.xml"&gt;Google Gadget Editor&lt;/a&gt; を開いてください。そして Hello, world! ガジェットが表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/jivVmcGw7b8OwV93pnmdig?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SoS6Dm2hegI/AAAAAAAABv8/ZHYhvyyzW5Y/s400/1250212217441.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hello, world! ガジェットを赤字のとおり修正してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;br /&gt;  &lt;span style="color:red;"&gt;description="hello world example"&lt;/span&gt; /&amp;gt;&lt;br /&gt;&amp;lt;Content type="html" &lt;span style="color:red;"&gt;view="profile,home,canvas"&lt;/span&gt;&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;Hello, world!&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;File メニューから Save を選択してください。続けて playground.xml と入力して OK ボタンをクリックし、Hello, world! ガジェットを保存してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/T4gqWZJkQcIXStN1kERuDQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SoS9ncfFBLI/AAAAAAAABwY/WEJSiFT0t8Y/s400/1250213107914.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;playground.xml の URL を確認します。playground.xml のリンクを開いてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/bIT9dPKUFkNQHDjXvBKJog?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SoS9nmHfyBI/AAAAAAAABw4/Tv7KAnMSW3Y/s400/1250213187287.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このときの playground.xml の URL を手元に控えてください。次のような URL になるはずです。数値の部分は各自によって異なります。&lt;br /&gt;&lt;br /&gt;http://hosting.gmodules.com/ig/gadgets/file/(数値)/playground.xml&lt;br /&gt;&lt;br /&gt;続けて &lt;a href=" http://sandbox.home.goo.ne.jp/"&gt;goo ホーム sandbox&lt;/a&gt; にログインしてください。そして、ガジェット開発管理へをクリックしてください。&lt;br /&gt;&lt;br /&gt;※ goo ホーム sandbox のアカウントを持っていないときは &lt;a href="http://developer.home.goo.ne.jp/"&gt;ディベロッパー申請&lt;/a&gt; をしてください。数営業日で受理されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/zYhydK7a1E-WkLiY6rKFrQ?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SoTAdQSrbkI/AAAAAAAABwg/Kn5PfDK9A6k/s400/1250213463614.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;手元に控えた playground.xml の URL を入力して新規作成ボタンをクリックし、ガジェットを登録してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/LIihcdzRmNpmpz5lkN-Q1g?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SoTAdrFO6II/AAAAAAAABwk/rPkPok0PhPg/s400/1250213533684.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そして、このガジェットを追加ボタンをクリックし、ガジェットをインストールしてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/7ZFaDu6xiJPt8LzgQUQ0OA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SoTAd8FAPPI/AAAAAAAABwo/5lrBE707uNs/s400/1250213797702.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ガジェットを追加ボタンをクリックしてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/tU9W430v4GeHb-kVa6L8Ng?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SoTAeJf39II/AAAAAAAABws/ci38WYj7os0/s400/1250213859436.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このガジェットを見るボタンをクリックしてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/OFhj98zYTapaDWt0bSw44Q?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SoTAeTuD87I/AAAAAAAABww/2bTLGieqxJ4/s400/1250213901668.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;playground.xml として保存したガジェットが表示されます。&lt;br /&gt;&lt;br /&gt;このときのガジェットの URL を手元に控えてください。次のような URL になるはずです。gooID や英数字の部分は各自によって異なります。&lt;br /&gt;&lt;br /&gt;http://sandbox.home.goo.ne.jp/gadget/canvas/(gooID)/(英数字)/(英数字)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/PPjC0_sOluf57v38gYpOtw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SoTAetAjjWI/AAAAAAAABw0/gyc2I4mFlZI/s400/1250213948269.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor に戻り、playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;br /&gt;  description="hello world example" /&amp;gt;&lt;br /&gt;&amp;lt;Content type="html" view="profile,home,canvas"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="検索"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;goo ホーム sandbox に戻り、ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボックスが表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に HTML を記述すると、そのままガジェットで表示されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/c_YN6aIfFZ5TDnZSnFdI_Q?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SoURpC7TGjI/AAAAAAAABxE/WKXb7C5Ta8M/s400/1250231833425.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor に戻り、playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;br /&gt;  description="hello world example"&lt;span style="color:red;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;Require feature="opensocial-jquery" /&amp;gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;Content type="html" view="profile,home,canvas"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="検索"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;    alert(this.q.value + ' ' + this.c.value);&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;goo ホーム sandbox に戻り、ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボタンをクリックし、入力内容が alert 表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に &amp;lt;Require feature="opensocial-jquery"&amp;gt; を記述すると、opensocial-jquery がロードされます。 &lt;br /&gt;※ playground.xml に JavaScript を記述すると、そのままガジェットで実行されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/l_E1_HH9zyLNQLWRpjaebA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_R7O_2gBTssg/SoURpi2ijSI/AAAAAAAABxI/GAK3lqHc3Uk/s400/1250231833426.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor に戻り、playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;br /&gt;  description="hello world example"&amp;gt;&lt;br /&gt;&amp;lt;Require feature="opensocial-jquery" /&amp;gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;&amp;lt;Content type="html" view="profile,home,canvas"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="検索"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;div id="videos"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;&lt;span style="color:red;"&gt;    var url = 'http://gdata.youtube.com/feeds/videos';&lt;br /&gt;    var data = { alt: 'json',&lt;br /&gt;      vq: this.q.value,&lt;br /&gt;      'max-results': this.c.value&lt;br /&gt;    };&lt;br /&gt;    $.getJSON(url, data, function(json) {&lt;br /&gt;      $.each(json.feed.entry, function() {&lt;br /&gt;        $('&amp;lt;img /&amp;gt;')&lt;br /&gt;          .attr('src', this.media$group.media$thumbnail[0].url)&lt;br /&gt;          .appendTo('#videos');&lt;br /&gt;      });&lt;br /&gt;    });&lt;/span&gt;&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;goo ホーム sandbox に戻り、ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボタンをクリックし、入力内容にしたがって YouTube から動画を検索し、サムネイルがリスト表示されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ opensocial-jquery は jQuery の Ajax API をクロスドメイン対応に拡張します。&lt;br /&gt;※ YouTube の動画検索は &lt;a href="http://code.google.com/intl/ja/apis/youtube/"&gt;YouTube Data API&lt;/a&gt; を使っています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/DHDN0dMUmwcfjTgbVZdgVA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SoURpwAklcI/AAAAAAAABxM/ryqxKwsMv2w/s400/1250233550809.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor に戻り、playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;br /&gt;  description="hello world example"&amp;gt;&lt;br /&gt;&amp;lt;Require feature="opensocial-jquery" /&amp;gt;&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;Require feature="dynamic-height" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;&amp;lt;Content type="html" view="profile,home,canvas"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="検索"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;div id="videos"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;    var url = 'http://gdata.youtube.com/feeds/videos';&lt;br /&gt;    var data = { alt: 'json',&lt;br /&gt;      vq: this.q.value,&lt;br /&gt;      'max-results': this.c.value&lt;br /&gt;    };&lt;br /&gt;    $.getJSON(url, data, function(json) {&lt;br /&gt;      $.each(json.feed.entry, function() {&lt;br /&gt;        $('&amp;lt;img /&amp;gt;')&lt;br /&gt;          .attr('src', this.media$group.media$thumbnail[0].url)&lt;br /&gt;          .appendTo('#videos');&lt;br /&gt;      });&lt;br /&gt;    });&lt;br /&gt;    &lt;span style="color:red;"&gt;$(window).adjustHeight();&lt;/span&gt;&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;goo ホーム sandbox に戻り、ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボタンをクリックし、サムネイルの数に応じて、ガジェットの高さが自動調整されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に &amp;lt;Require feature="dynamic-height"&amp;gt; を記述すると、jQuery.fn.adjustHeight がロードされます。 &lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/AUXECuFx0DttGGoY53X-sg?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SoURqDt6euI/AAAAAAAABxQ/fgxSbzUSmtU/s400/1250234004462.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Gadget Editor に戻り、playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Module&amp;gt;&lt;br /&gt;&amp;lt;ModulePrefs title="hello world example"&lt;br /&gt;  description="hello world example"&amp;gt;&lt;br /&gt;&amp;lt;Require feature="opensocial-jquery" /&amp;gt;&lt;br /&gt;&amp;lt;/ModulePrefs&amp;gt;&lt;br /&gt;&amp;lt;Content type="html" view="profile,home,canvas"&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&lt;span style="color:red;"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;#videos img { margin: 2px; width: 80px; hegith: 60px; }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;form name="form"&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="q" /&amp;gt;&lt;br /&gt;&amp;lt;select name="c" /&amp;gt;&lt;br /&gt;&amp;lt;option value="10"&amp;gt;10件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="20"&amp;gt;20件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="30"&amp;gt;30件&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="検索"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;div id="videos"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function($) {&lt;br /&gt;  $(document.form).submit(function() {&lt;br /&gt;    var url = 'http://gdata.youtube.com/feeds/videos';&lt;br /&gt;    var data = { alt: 'json',&lt;br /&gt;      vq: this.q.value,&lt;br /&gt;      'max-results': this.c.value&lt;br /&gt;    };&lt;br /&gt;    $.getJSON(url, data, function(json) {&lt;br /&gt;      $.each(json.feed.entry, function() {&lt;br /&gt;        $('&amp;lt;img /&amp;gt;')&lt;br /&gt;          .attr('src', this.media$group.media$thumbnail[0].url)&lt;br /&gt;          .appendTo('#videos');&lt;br /&gt;      });&lt;br /&gt;    });&lt;br /&gt;    $(window).adjustHeight();&lt;br /&gt;    return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;/pre&gt;goo ホーム sandbox に戻り、ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボタンをクリックし、CSS が適用されるのを確認してください。&lt;br /&gt;&lt;br /&gt;※ playground.xml に CSS を記述すると、そのままガジェットで適用されます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/Zsr_yYYqwRut5zExDKL9lQ?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_R7O_2gBTssg/SoURqbnmQiI/AAAAAAAABxU/eolIhjNNIzU/s400/1250234640649.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これでチュートリアルはおしまいです。&lt;br /&gt;&lt;br /&gt;これ以降は &lt;a href="http://code.google.com/p/opensocial-jquery/w/list"&gt;opensocial-jquery のドキュメント&lt;/a&gt; を参照してください。その中で質問や要望が出てきましたら、お気軽にコメントください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-2544352670225906849?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/2544352670225906849/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=2544352670225906849' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2544352670225906849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/2544352670225906849'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/08/opensocial-jquery-google-gadget-editor.html' title='opensocial-jquery と Google Gadget Editor を使って gooホーム sandbox でガジェットを開発しよう'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_R7O_2gBTssg/SoS6DXdwmsI/AAAAAAAABv4/s3XvnLFzk7I/s72-c/1250212006815.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-1133367698614615265</id><published>2009-08-13T20:24:00.007+09:00</published><updated>2009-08-13T22:31:56.402+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSocial'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Friend Connect'/><title type='text'>opensocial-jquery 1.0.4 をリリースしました</title><content type='html'>&lt;img src="http://opensocial-jquery.googlecode.com/svn/trunk/images/opensocial-logo.gif"/&gt;&lt;img src="http://opensocial-jquery.googlecode.com/svn/trunk/images/jquery-logo.png"/&gt;&lt;br /&gt;&lt;br /&gt;こんばんは。なかじまんです。opensocial-jquery 1.0.4 をリリースしました。&lt;br /&gt;&lt;br /&gt;opensocial-jquery&lt;br /&gt;&lt;a href="http://code.google.com/p/opensocial-jquery/"&gt;http://code.google.com/p/opensocial-jquery/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1.0.4 は Google Friend Connect (GFC) 対応の強化とバグ対応です。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;言語の選択&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;jQuery.container.locale を使って、サイトの言語を指定できるようにしました。あらかじめ GFC の管理画面でサイト言語を設定しておけますが、その設定よりも優先します。省略したときは、既定のサイト言語になります。&lt;br /&gt;&lt;br /&gt;&lt;code class="js"&gt;jQuery.container.locale = 'en';&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;jQuery.fn.gadget を使って、ガジェットを表示するとき、対象の要素に lang か xml:lang 属性があれば、その言語でガジェットを表示するようにしました。このときjQuery.container.locale より優先します。&lt;br /&gt;&lt;br /&gt;&lt;code class="js"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;$(&amp;#039;div.gadget&amp;#039;).gadget(&amp;#039;http://example.com/gadgets.xml&amp;#039;);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;gadget&amp;quot; lang=&amp;quot;ja&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;gadget&amp;quot; xml:lang=&amp;quot;ja&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;キャンバスビュー&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;jQuery.fn.gadget を使って、ガジェットを表示するとき、対象の要素のクラス名に canvas を含むとき、ガジェットをキャンバスビューで表示するようにしました。&lt;br /&gt;&lt;br /&gt;&lt;code class="js"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;$(&amp;#039;div.gadget&amp;#039;).gadget(&amp;#039;http://example.com/gadgets.xml&amp;#039;);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;gadget&amp;quot; class=&amp;quot;canvas&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;スキン&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;jQuery.skin を使って、スキンを参照できるようにしました。BG_COLOR といった Gadgets API 形式のほかにも bgColor といった JavaScript ライクなキー名でも参照できるようにしてあります。以下の実例は、同じ結果になります。&lt;br /&gt;&lt;br /&gt;&lt;code class="js"&gt;$.skin('BG_COLOR');&lt;br /&gt;$.skin('bgColor');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;バグ対応&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Issue 19: fields.split(',') した後、trim すべきじゃないか。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;その他&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ガジェットや Google Friend Connect でもない普通のサイトで、普通の jQuery としても使えるようにしました。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;デモ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developmentor.lrlab.to/opensocial-jquery/samples/friendconnect.html"&gt;Google Friend Connect In-page integration&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_R7O_2gBTssg/SoQB66jblUI/AAAAAAAABvU/rFpUoXaO-jw/s400/1.0.4-friendconnect.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://postal-search-apis-and-solutions.blogspot.com/2009/08/google-friend-connect.html"&gt;Golazo GeoNotes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SoJsHy6-HYI/AAAAAAAABu0/r2qCJrUQd14/s400/Golazo%20GeoNotes%20-%201250061234691.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-1133367698614615265?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/1133367698614615265/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=1133367698614615265' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1133367698614615265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/1133367698614615265'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/08/opensocial-jquery-104.html' title='opensocial-jquery 1.0.4 をリリースしました'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_R7O_2gBTssg/SoQB66jblUI/AAAAAAAABvU/rFpUoXaO-jw/s72-c/1.0.4-friendconnect.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-569149567945528529</id><published>2009-08-12T16:32:00.002+09:00</published><updated>2009-08-12T16:35:49.450+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Aptana Jaxer'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveJS'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jaxer-client'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Friend Connect'/><category scheme='http://www.blogger.com/atom/ns#' term='Aptana Cloud'/><title type='text'>Golazo GeoNotes is available. It's social web app that integrated with Google Friend Connect highly.</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;I'm afraid my expressions may be rude or hard to read, because I'm not so good at English. But please, please be patient! I will try hard to learn English!&lt;br /&gt;&lt;br /&gt;Thank you very much for the chance to introduce Golazo GeoNotes. &lt;br /&gt;&lt;br /&gt;Golazo GeoNotes&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/"&gt;http://golazo.aptanacloud.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/SoJsHy6-HYI/AAAAAAAABu0/r2qCJrUQd14/s400/Golazo%20GeoNotes%20-%201250061234691.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Golazo GeoNotes is the social web application that integrated with Google Friend Connect (GFC) highly. I developed this demo app from the following purpose.&lt;br /&gt;&lt;br /&gt;* What kind of a social web application can we build when we use GFC platform and API?&lt;br /&gt;&lt;br /&gt;* When we use GFC platform and API, how far we can develop a social Web application effectively?&lt;br /&gt;&lt;br /&gt;In this app, you post a geographic text, and can associate a geographic coordinate automatically. And you can share the text with a friend.&lt;br /&gt;&lt;br /&gt;This app depends on GFC platform and API for the following social functions.&lt;br /&gt;&lt;br /&gt;* With sign-in button of GFC and and two-legged OAuth by fcauth this app authenticate an account and link a profile.&lt;br /&gt;&lt;br /&gt;* This app displays Site View, Home View, Profile View, and Canvas View with a social graph of GFC. &lt;br /&gt;&lt;br /&gt;* This app displays members, friends, footprints, activities, chat, comment, and recommend with a Social Gadgets in each &lt;br /&gt;  view. &lt;br /&gt;&lt;br /&gt;* This app depends on Members Gadgets for the management of the profile, a search and the invitation of the friend.&lt;br /&gt;&lt;br /&gt;A development environment and the volume of this app are as follows.&lt;br /&gt;&lt;br /&gt;* Aptana Cloud (Jaxer, Apache2, MySQL5)&lt;br /&gt;* ActiveJS&lt;br /&gt;* opensocial-jaxer-client&lt;br /&gt;* opensocial-jquery&lt;br /&gt;* jQuery XML to JSON Plugin&lt;br /&gt;* CSS Browser Selector&lt;br /&gt;&lt;br /&gt;* 896 lines of JavaScript on client and server.&lt;br /&gt;* 10 pages of HTML&lt;br /&gt;* 2 tables on database&lt;br /&gt;* 9 social gadgets&lt;br /&gt;&lt;br /&gt;I want to contribute to the Jaxer, GFC, and OpenSocial with this demo app. Did you think to develop the custom social web application that used Jaxer and GFC?&lt;br /&gt;&lt;br /&gt;Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1509463847369212828-569149567945528529?l=nakajiman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nakajiman.blogspot.com/feeds/569149567945528529/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1509463847369212828&amp;postID=569149567945528529' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/569149567945528529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1509463847369212828/posts/default/569149567945528529'/><link rel='alternate' type='text/html' href='http://nakajiman.blogspot.com/2009/08/golazo-geonotes-is-available-its-social.html' title='Golazo GeoNotes is available. It&apos;s social web app that integrated with Google Friend Connect highly.'/><author><name>Nobuhiro Nakajima</name><uri>https://profiles.google.com/101827817145299921798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-bgQ9sDKbG4E/AAAAAAAAAAI/AAAAAAAAC20/Z94o-VDy-gI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_R7O_2gBTssg/SoJsHy6-HYI/AAAAAAAABu0/r2qCJrUQd14/s72-c/Golazo%20GeoNotes%20-%201250061234691.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1509463847369212828.post-4027795999726085365</id><published>2009-08-10T20:45:00.001+09:00</published><updated>2009-08-12T16:32:19.651+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Aptana Jaxer'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveJS'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='opensocial-jaxer-client'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Friend Connect'/><category scheme='http://www.blogger.com/atom/ns#' term='Aptana Cloud'/><title type='text'>Google Friend Connect をベースとしたウェブアプリのデモサイトを公開しました</title><content type='html'>こんばんは。なかじまんです。ブログの投稿は久しぶりです。&lt;br /&gt;&lt;br /&gt;Google Friend Connect をベースとしたウェブアプリのデモサイトを公開しました。Golazo GeoNotes という位置付きメモを投稿して、友達とそのメモをタイムラインで共有しようというものです。&lt;br /&gt;&lt;br /&gt;Golazo GeoNotes&lt;br /&gt;&lt;a href="http://golazo.aptanacloud.com/"&gt;http://golazo.aptanacloud.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Golazo GeoNotes を開発した目的は 2つあります。1つ目は Google Friend Connect というプラットフォームと API を使うと、どんなソーシャルなウェブアプリが構築できそうか、その可能性を確認することです。2つ目は、プラットフォームと API を活用することで、どのくらい作らずに済みそうか、その効率を確認することです。&lt;br /&gt;&lt;br /&gt;これらの考察は、いろいろな方から助言などを貰いながら、今後じっくり検討していきます。ここでは、まず Golazo GeoNotes がどんなウェブアプリなのかざっと紹介します。Google Friend Connect の使い方(使われ方)がなんとなく伝わると期待しています。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;サイトビュー&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;いわゆるトップページです。すべての位置付きメモを新着順でリスト表示します。&lt;br /&gt;&lt;br /&gt;Recent members は、最近アカウント登録したユーザのサムネイルを表示します。Recommended notes は、人気のあるメモのランキングを表示します。これらは、ガジェットを使って実現しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.co.jp/lh/photo/uLPxWOBb3BQrtZwogNHaPg?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_R7O_2gBTssg/Sn_Sxlxq66I/AAAAAAAABqY/NVj1OeIoANk/s400/Golazo%20GeoNotes%20-%201249888673137.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ホームビュー&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;サインインして使う自分専用ページです。自分と友達の新着メモをリスト表示します。また、位置表現を含むテキストを入力して投稿すると、そのテキストから緯度経度を検出して、位置付きメモとして保存します。&lt;br /&gt;&lt;br /&gt;Friends' footprints は、友達のあ
