OpenSocial を構成するもの
http://www.opensocial.org/page/specs-1 (のリンク先) 超要約。多少意訳(誤解?)しています。間違いがあったら教えてください。
- OpenSocial はソーシャルアプリケーションのAPI の共通化が最終目標。
OpenSocial の実装サイトはOpenSocial Containerと呼ばれ、OpenSocial APIを使用して実装されたアプリケーションを動作させることが可能である。
- Container 環境というコンテキスト内で、OpenSocialで定義されたJavaScript APIを呼び出すことができる (Container = HTML ページ + 広告を非表示にする
Mac OS X で Apache Shindig を動かす。
Mac OS Xでも環境によって違うと思いますが、以下参考までに*1。
php5 用の設定を書く。
mac:php yssk22$ cat /etc/apache2/extra/httpd-php5.conf LoadModule php5_module libexec/apache2/libphp5.so <IfModule php5_module> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> </IfModule>
httpd-vhosts.conf はこんな感じで、自分一人しか使わないMacなので/Users/yssk22/Sites がなぜかDocumentRootになっていたりしますww ちなみに、passenger(a.k.a mod_rails)の設定も入っています。ポイントとしては、Shindigの方に、.htaccess で RewriteEngine の設定が書いてあるので、AllowOverride を All または FileInfo にする必要があるかと。
mac:php yssk22$ cat /etc/apache2/extra/httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> ServerName mac DocumentRoot /Users/yssk22/Sites RailsBaseURI /webjourney RailsEnv development <Directory "/Users/yssk22/Sites/"> Options Indexes MultiViews FollowSymlinks AllowOverride All # <-- ここ Order allow,deny Allow from all </Directory> </VirtualHost>
httpd.conf で上記設定を読み込む
Include /private/etc/apache2/extra/httpd-php5.conf Include /private/etc/apache2/extra/httpd-vhosts.conf
$HOME/Sites (DocumentRoot) に Shinding(PHP)のソースをチェックアウト
mac:~ yssk22$ cd Sites mac:Sites yssk22$ mkdir shindig mac:Sites yssk22$ cd shindig mac:shindig yssk22$ svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/ . mac:shindig yssk22$ cd php
mac:php yssk22$ cat .htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # NOTE: If you added a web_prefix to config, add it here too, e.g.: RewriteRule (.*) /shindig/php/index.php [L] # <-- ここ重要 # RewriteRule (.*) /index.php [L] # <-- / においていないので、これは意味ない。 # for OAuth signatures to work for POSTed data, always_populate_raw_data needs to be turned on php_flag always_populate_raw_post_data On
さらに shinding/php/config/contaier.php で web_prefix を /shindig/php に設定。(index.php のWeb上の相対パスがweb_prefix。自分のリクエストURIから推察できるだろうに、というのはおいといて*2。
mac:php yssk22$ cat config/container.php | grep web // The URL Prefix under which shindig lives ie if you have http://myhost.com/shindig/php set web_prefix to /shindig/php // 'web_prefix' => '', 'web_prefix' => '/shindig/php',
これで動くはずなので、http://localhost/shindig/php/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml にアクセスすると、labpixies.com のtodoガジェットが表示されます。
さらに、http://localhost/shindig/php/gadgets/files/samplecontainer/samplecontainer.html にアクセスすると、サンプルのGadget Container としてページが見られるはず、なんですが、うまくいきません。Firefox でRequestのダンプをみたら、
POST http://localhost/gadgets/metadata 404 Not Found
いやだから、web_prefix ぐらい、DRYでなんとかしろよ、という感じでやる気がなくなりました。。ちゃんとVirtualHostきって、/ に配置するのがよさそうですね。
ちなみに、Shinding のコードを見ましたが「なにこのPHPいいたかっただけちゃうんか、的な.phpのJavaコードは」という印象。昨今、PHPのJava化が急速に進行中なんですかね。
MapReduce で、instanceof つかわんといてください??
instanceof Array の挙動がおかしいのでMLになげてみた*1。要するに
[1,2,3] instanceof Array
がどういうわけか falseをかえすんだけど、というものなんだが。。JavaScript の SPEC の問題なのか CouchDB特有の現象なのかよくわからん*2ぐらいにJavaScriptについて知らないのが問題なんだけれど。
- 追記
有識者?曰く、Viewを実行するために、View Server のJavaScript内のsandboxモデルがなんか悪さしてそうだよね、という話で、sandbox では、JS_InitStandardClassed のコストをはしょってそう、だとか、そんな感じなんだそうだ*3。うう、つまりだ、普通のランタイムと違う、という認識は必要だよなぁ。
Perhaps with some refactoring of couchjs to make sure that its called optionally, and only once per view update wouldn't be out of the question. Patches welcome.
あー、言い出しっぺの法則か、やるしかないのか。JavaScriptのランタイムの挙動なんて、全然知らないから、つい最近オライリー本買ったぐらいの人間なんだが。