Archive for 5月, 2010

でいいじゃない。という話です。
モデルだけをサーバサイド(Perl、PHP、Java、などなどなんでもよし)において、JavaScriptにコントローラー的な動作をすべて行わせる。サーバーサイドとはAJAX通信でJSONをやり取りすれば、規格も合わせ易いし、通信量も抑えられるはず。分散処理もうまいことやればやりやすくなるのではないだろうか、といいことづくめじゃない?という提案ですね。
なにより構造が分かりやすい。完全分業で行えるし。というわけでこういう感じでやろう。やろうよ!(誰に言ってるんだ)

Pythonが面白い。インデントでデータ構造を表現する、一つの問題を解決するのにたくさんの筋道を用意せず、一つの筋道を通るように言語を設計する。面白いじゃないか!

サンプルコードを挙げるとこんな感じ。

class Foo():
	def bar(self):
		print "Hello World!"

foo = Foo()
foo.bar() # Hello World!

クラスFooを定義してHello World!と標準出力に表示するサンプルコード。インデントでブロック構造を表現するので、インデントのレベルを合わせることが重要になってくる。他の言語なら自由な書き方が許されるところが、Pythonだと書式を大きく変えることが許されない。誰が書いてもこのような書き方になるだろう。複数人での開発時に、コーディングスタイルが統一されやすいというのは利点になるのではないだろうか。
ま、何にせよまだ勉強中。Pythonについても気が向いたら書いていきたいと思う。

言いたいことは、まさにタイトルの通り。jQueryのプラグイン形式を利用して、再利用可能なウェブページの部品を作りましょう、という話だ。サーバとの通信側はAJAX通信で書けば、どこに置いても正しく機能する便利な部品の完成だ。

jQuery.fn.foobar = function(options) {
	//プラグインの処理内容
	return this.each(function(){
		//セレクタで指定したオブジェクトへの処理
	});
}

書き方はこんな感じ。これで$(“#test”).foobar()とかで任意の場所に部品を埋め込むことが出来る。

例えば、

jQuery.fn.foobar = function(options) {
	return this.each(function() {
		$(this).html("プラグインのテスト");
	});
}

とやれば、このプラグインを適用したDOMの中身が「プラグインのテスト」に置き換わる。色々実装例をこれから書いていきたいと思う。

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が完成。

最近気になるもの

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

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

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

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

カレンダー
2010年5月
« 4月   6月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31