Archive for the ‘OpenSocial’ Category

Cajaの仕様が変わっててビルドできないようです。
これどうしたらいいんだろう?Mavenは便利だけど、こういうことがあるとキツいよなあ・・・。

なんか無茶苦茶になってる。なぜかhttp://の前に//がついてたりとか、同じパラメータが2個以上あったりとか、セキュリティトークンがなぜか付属してたりとか(しかも内容はただのゴミ文字)、バグバグすぎる。一体どうしちゃったんだ?

とりあえず正規表現で置換して対応したりするけど、これどうしようもないよ。最悪だ。

ここ何日か色々試してみたのだが、どうにもうまくいかない。
OSDE上のOpenSocialガジェットからmakerequestでOAuthを使うことができない。できない・・・。
色々書き方を変えてみたりしても、Failed to retrieve OAuth URLs~ のエラーが出て一切通信できないので、対応してないのではないかという結論に勝手に至ることにした。OSDE的にはModulePrefs内にOAuthエレメントが無いらしい。あるはずなんだけどなあ。

仕方ないのでとりあえず2-legged OAuthで場当たり的に実装を進める。

OpenSocialの署名付きリクエストの検証テストをしようと思ったのだが、OSDEの公開鍵が分からない。どっかに公開されてたりするのかな?

追記:探すべきは証明書のようだ。証明書はどこだ!

更に追記:うおおお検証通った!OSDEのソースを落としてきたら秘密鍵が入っていたので、こっから証明書を生成して作ったらいけた!役に立つかもしれないので貼っておく。

OSDE用の証明書

-----BEGIN CERTIFICATE-----
MIICDDCCAXWgAwIBAgIJAI/Uh/1KPGPUMA0GCSqGSIb3DQEBBQUAMA8xDTALBgNV
BAMTBG9zZGUwHhcNMTAwNjI5MDQwMzU0WhcNMTAwNzI5MDQwMzU0WjAPMQ0wCwYD
VQQDEwRvc2RlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAv7N2y4S1TWgL
1UlaqivxGKyskl5o5TLoZdli2AMHidjVzTJsGX1ydYWJmteicnVLTo//JrmkB19C
L+IYCOnxo6H5YdNAi+t7e3NRpMJF6YBCV+MXnP2dZx02SHAhO6z4i8P/EMcnNX6l
sX7cXeMnmYS+X7AG+AS6zVVdSKQwVwIDAQABo3AwbjAdBgNVHQ4EFgQUbONO5jjA
q8gC34J+iUfAnkZVelswPwYDVR0jBDgwNoAUbONO5jjAq8gC34J+iUfAnkZVeluh
E6QRMA8xDTALBgNVBAMTBG9zZGWCCQCP1If9Sjxj1DAMBgNVHRMEBTADAQH/MA0G
CSqGSIb3DQEBBQUAA4GBAG3QjNTSvDTpAmzEH3NueftHi34xN9+6B5H/vpknsz/K
oGmLXdXjhnFlPJn+5nlOLyYG5W24yeyQ/gjwY9aYsWpJGUp59fHy8tU215P5lDc/
VTOi4LLFqbd89r0w4mNccPZ5LMuSmyBG42ypzCjfLsjzw80DW7wxegndXb6oAjNo
-----END CERTIFICATE-----

SNSからShindigに対して、OpenSocialガジェットのメタデータ(タイトルや作者情報などなど)を取得するリクエストや、実際にiframeに表示する内容を要求するリクエストを投げるときに、&st=*********(実際はもっと長い)という項目をURLに追加して投げる必要がある。

これは何かというと、どうやらSecurityTokenと呼ばれているものらしい。これを一緒に投げることによって、「どのコンテナからのリクエストなのか」「実際にガジェットを閲覧するユーザーのID」「ガジェットの所有者のID」などなどをShindigが取得できるようになっている。

現在の形式ではこんな感じに作る。

コンテナ名:o=所有者(owner)ID&v=閲覧者(viewer)ID&a=ガジェットのID&d=コンテナ名&u=ガジェットのURL&m=モジュールID&t=タイムスタンプ

例)default:o=user001&v=user002&a=gadget001&d=default&u=http://shindig/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml&m=1&t=123456789

※実際には、default:の後ろはURLエンコードされなければならないので、u=の後ろは適切でない。

insecureなSecurityTokenならば、こいつをそのまま送ればいいはずだが(試してはいないので、ツッコミ求む)、secureなセキュリティートークンだとそうはいかない。

まず、AES-CBCでo=***&v=***・・・と書かれた部分を暗号化する。共通鍵には、プレーンテキストをSHA-1でハッシュ化してやり、その先頭16バイトを用いる。Shindig側はテキストファイルを置いて、container.jsでそのパスを指定してやらなければならないが、詳しいやり方は割愛する。(その際のテキストファイルは元のプレーンテキストで構わない)

パディングの方式はPKCS5Paddingを用いる。ivが必要なので、AESで暗号化した後に先頭にivを付け足すのを忘れずに。

次に、HMAC-SHAで署名を行う。この際のキーも、AESで暗号化する際と同じく、プレーンテキストをSHA-1でハッシュ化したものを用いるが、先頭16バイトである必要はない。Shindig側では、AESの際もHMACの際もキーは共有で使っているようだ。署名を行う対象はもちろんAESで暗号化されたテキスト。末尾に署名を付け足すのを忘れずに。

これらにBASE64エンコードをかけ、URLエンコードも忘れずにおこなう。

最後に、先頭にコンテナ名とコロンを付けて、出来上がり。これでSecureなSecurityTokenが完成。

めちゃくちゃ苦労したので記録を残しておくことにする。

右往左往したが、ようやくEclipse上でShindigのデバッグが出来るようになった。

最終的に参考にしたサイトはこちら。→http://my6solutions.com/post/2008/10/14/Getting-debugging-to-work-on-shindig-under-Windows.aspx

JDK、Maven2は前回で導入している前提で、話を進める。

Maven for Eclipseの導入

まずは、Maven for Eclipseを導入する。

Eclipse上でヘルプ→新規ソフトウェアのインストールで、追加ボタンをクリックし、新規サイトを追加する。

名前:Maven2 – Sonatype

ロケーション:http://m2eclipse.sonatype.org/sites/m2e

Eclipse用Maven統合を上のサイトからインストールする。

※このプラグインを使う場合はEclipseをJDK上で走らせている必要があるようだ。JREになってしまっている場合は、Eclipseへのショートカットか、eclipse.iniに -vm JDKのjavaw.exeへのパス を追加しておく。

shindigのMavenプロジェクトのEclipseへのインポート

Eclipse上でファイル→インポート

Maven→Existing Maven Projectsを選択、次へ

ルートディレクトリとしてshindigのルートディレクトリを開き、

features/pom.xml

java/common/pom.xml

java/gadgets/pom.xml

java/social-api/pom.xml

java/server/pom.xml

にチェックを入れ、完了。

5つのプロジェクトがパッケージ・エクスプローラーに追加されるので、ワークスペースがビルド完了するまでしばらく待つ。

jettyをEclipseから実行できるようにし、shindigをデバッグ実行できるようにする

Eclipse上で実行→外部ツール→外部ツールの構成を選択。

プログラムの項目に新規プログラムを追加する。

名前:maven_jetty

ロケーション:mvn.bat(mavenのバッチファイルかな?)へのフルパス

作業ディレクトリ:ワークスペースの参照から、shindig-serverを選択

引数:jetty:run

環境タブを選択し、

名前:MAVEN_OPTS

値:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y

という項目を追加→適用。

Eclipse上から実行→デバッグの構成を選択。

リモートJavaアプリケーションに新規項目を追加し、

名前:shindig_debug

プロジェクト:shindig-serverをプロジェクトから選択

ホスト:localhsot

ポート:4000

を入力→適用。

Shindigをデバッグ実行する

これでShindigがデバッグ実行できるようになったので、外部ツールからmaven_jettyを実行、デバッグの構成からshindig_debugをデバッグで実行。

http://localhost:8080/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml

で動作確認できる。以上。

かなり試行錯誤したので、何か抜けてる工程があるかもしれません。うまくいかなかった場合はご一報を。

Shindigをデバッグ実行したくなったが、PHP版のままではデバッグが面倒、ということでやむなくJava版のShindigを使うことに。

詳しくはここ→http://www.hakkaku.net/articles/20080624-222

を見ると早い。4/27現在ではこのやり方で問題なくビルドできる。一応手順を。

あらかじめJDKはインストールしておく、ここでは手順は割愛する。

Apache Mavenのインストール

http://maven.apache.org/download.htmlから最新版(2.2.1)のアーカイブを落としてきて、適当なフォルダに展開。

環境変数に

JAVA_HOME JDKのインストールフォルダ(例:C:\Program Files\Java\jdk1.6.0_18)

M2_HOME Mavenのインストールフォルダ(例:C:\Program Files\Apache Software Foundation\apache-maven-2.2.1)

を追加、

Pathの末尾に ;%M2_HOME%\bin;%JAVA_HOME%\bin

を追加。クオーテーションマークとかをつけないように注意。追加したらいったんログオフするか再起動しておく。

Subversionのインストール、Shindigのダウンロード

ここ→http://subversion.apache.org/からSubversionを落として、インストール。

適当なフォルダを作り、コマンドラインでフォルダに移動した後、

svn co http://svn.apache.org/repos/asf/shindig/trunk/

でShindigの最新trunkを落としてくる。

ビルド、実行

このままだとビルド時にエラーが出るので、

pom.xmlを開き、<compilerArgument>-Xlint:unchecked,deprecation,fallthrough,finally</compilerArgument>の部分をコメントアウト(<!– –>)する。

Shindigを落としてきたフォルダにコマンドラインで移動し、

mvn -Dmaven.test.skip=true
を実行。初回実行は時間がかかるが、2回目からはそれほどかからない。
これでビルドが成功するはずなので、
mvn -Prun
を実行。動作確認は
http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html
で行える。リンク先に感謝。

ざっくりと。まだまだ理解も中途半端なので、逐次修正します。

Shindigとは、OpenSocialのアプリケーションを動かすためのアプリケーションサーバーのようなもの。MixiやiGoogleなどは、Shindigを通してOpenSocialのアプリケーションを走らせるプラットフォームを提供している。

OpenSocialとは?

XML、JavaScript、HTML等の既存技術を活用して作ったWebアプリケーションを、さまざまなSNSに埋め込むことができるようにするための共通規格。Googleが主導して策定されたもの。

Shindigは何をしてくれる?

ShindigはOpenSocialの規格に沿って作られたXMLを読み込み、ユーザーのWebブラウザ上で実行可能な形式(HTML)にして出力する。

MixiやiGoogleはShindigから出力されたHTMLをiFrame内に表示してOpenSocial環境を実現している。さまざまな場所にあるOpenSocialアプリケーションを一まとめにするのがクラウド(かな?)。

SNS側からは、単純にShindigサーバに対してHTTPのリクエストを投げてあげればOpenSocialアプリケーションが実行できる。ただしそれだけでは不完全。OpenSocialアプリケーションが真価を発揮するには、ユーザーのソーシャルデータ(年齢、性別、趣味、などなど)を知る必要がある。そのためには、ShindigサーバがSNSのデータベースにアクセスできる必要がある。データベースに接続するインターフェースを用意して、初めてShindigとSNSが密接に連携しているといえる。

最近気になるもの

・Sinatra Rubyの超軽量Webフレームワーク。なんかのプロトタイプを作るのにはぴったりかも。

・Scala Twitterで本格的に導入されたので有名。オブジェクト指向言語と関数型言語のいいとこどり、らしい。JavaScriptにはまってる俺からしたらちょい気になるもの。

・SproutCore JavaScriptのみでMVCフレームワークやリッチなUIを実現するものらしい。Railsのような生産性?まだよく分からない。開発にはRubyを使うらしい。近いうちに試してみたい。

・VoltDB 分散型オンメモリデータベース、超高速らしい。RDBMSを使うまでもないWebアプリ上での使用とかに適切なのかな。ただしストアドプロシージャしか使えないので、使いどころは限られてくるかも。一応SQLの構文に対応しているらしい?

カレンダー
2018年4月
« 9月    
 1
2345678
9101112131415
16171819202122
23242526272829
30