BlazeDSとAMFでWebとデスクトップのアプリケーションを構築する
現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。
- Java,
作者 Werner Schuster, 翻訳者 高橋 健一 - (株)永和システムマネジメント 投稿日 2008年5月14日 午前12時34分
Rubyの新しい処理系が増え続けている。最近MacRubyがリリースされて(source)、先日にはRubyInsideがHotRubyのリリースを報告した(source)。
ただ、Yu Kobayashi氏(source)のHotRuby(source)は、他のRuby実装とは少し異なる。まず、HotRubyはRubyパーサを持っていない。その代わりに、Ruby 1.9のバイトコードを実行するのである。Ruby 1.9はRubiniusと同様、Rubyのソースコードをバイトコードにコンパイルしてからインタプリタで実行している。このバイトコードはディスクに保存することもできる。HotRubyはJavaScriptで記述されているため、実装がとてもシンプルである。事実、バイトコードのインタプリタ、ランタイム、クラスライブラリの実装を含むすべての実装は、HotRuby.js(source)という40KBのJavaScriptファイルに収められている。(HotRubyのGoogle Code リポジトリ(source)を参照)
HotRubyは、JavaScriptで実装されているのでFlash上でも動作し、これを利用したPinBallゲームのような面白いデモ(source)を見ることもできる。デモのロジックはRubyで書かれており、ここが重要なところなのだが、ユーザインタフェースにはFlashのライブラリを利用しているのだ。一方で、JavaScriptとRubyの密な連携もデモのソースコードに見ることができる。JavaScriptのクラスや関数を使うのはとても簡単である。例えば、JavaScriptのクラスをRubyから使うためには以下のように記述すればよい。(PinBallデモのソースから):
$n = $native
$n.import "Box2D.Dynamics.*"
$n.import "Box2D.Collision.*"
$n.import "Box2D.Collision.Shapes.*"
$native はNativeEnvironment型のグローバル変数だが、これ自体は何もメンバを持たないオブジェクトである。HotRubyでは、このオブジェクトを通してJavaScriptの機能を使うことができる。例えば、$n.import "Box2D.Dynamics.*" は、JavaScriptクラスのロードを行う。ロードしたクラスはNativeEnvironmentオブジェクトを通して、JavaScriptで記述するのと同じようにアクセスできるようになる。(以下は $n がNativeEnvironmentオブジェクトを参照している。このソースコードはPinBallデモのものである。):
def add_sprite
@sprite = $n.Sprite.new
$n.Main.m_sprite = @sprite
$n._root.addChild @sprite
@input = $n.Input.new @sprite
end
"Do It Yourself"(source)というWebページでも、HotRubyが動作する様子を見ることができる。ここでは、打ち込んだRubyコードをHotRubyで実行できるのだ。この仕組みは、Rubyのソースコードをバイトコードへコンパイルするサーバ側のサービスに送り、返ってきたバイトコードをブラウザ上のHotRubyで実行するというものである。
現時点でのHotRubyの1つの問題は、利用できるライブラリが少ないという点だ。これは、小さなRubyプログラムを動作させたり、実装されているクラスやメソッドのリストを見ればわかる。(実際、一握りの最重要クラスしか実装されてない) HotRuby.js(source)のソースファイルの末尾を見れば、それらのクラスの実装を見ることもできる。
しかしながら、この問題は解決するのは、機能に限って言えば、困難ではないはずだ。(パフォーマンスは別の問題であるが)Rubinius(source)プロジェクトは、多くの基本的なRubyのクラスの再実装を懸命に行っているし、C(CRuby)やJava(JRuby)、C#(IronRuby)では、Rubyの基本的なライブラリの実装は存在している。ある言語で、他の言語を実装するこのアイデアは、"Turtles All The Way Down"(source)という記事がよく参照される。(Avi Bryant氏(source)のブログの記事が有名だが、もっと古くから使われている言い回しである(source))
明白なのは、外界とのインタフェースになる部品(I/OやOSと統合するようなもの)はどのようなものであれ、基盤となるシステムに特化させた形で移植しなければならないということだ。また、もしランタイムがそれを最適化できないのならば、パフォーマンスを向上させるために、いくつかのベースクラスをプラットフォームに最適化させる必要があるだろう。
このTurtles All th Way Downアプローチは多くのシステムで長く使われ続けている。一つの例は、高い移植性を持つSmalltalkのSqueak(サイト・英語)である。Dan Ingalls氏がSqueakをJVM上で動作させたことで、この方法の有効性が再び実証されたのである(source)。
将来的には、PureRubyなRubyライブラリが、HotRuby単体で動作させることの可能性を大きく広げるだろう。HotRubyに欠けてる物の一つは、完全なRuby parserである。しかし、Ryan davis氏の'ruby_parser'プロジェクト(source)によって、Rubyで記述されたRubyパーサが開発されている。RubyAST(ruby_parserが生成するParseTree(source)記法)を生成し、Ruby 1.9のバイトコードを返すRubyベースのコンパイラを搭載することで、HotRubyは単独でRubyのソースコードを動的に実行できるようになる。(HotRubyを動作させるためには、まずパーサとコンパイラをロードしなければならないため、この2つはあらかじめバイトコードにコンパイルしておかなければならない)
WebブラウザやFlash上にあるJavaScriptランタイムのオブジェクトにしかアクセスできないHotRubyでは、まだRailsを動作させることはできないだろう。しかし、HotRubyは、Ruby1.9のバイトコードを走らせることのできるVMの内部を簡単に(たった40KBのファイルで)見ることができるのである。
原文はこちらです: http://www.infoq.com/news/2008/03/hotruby-ruby-yarv-in-javascript
現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。
ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。
Google Chartは、チャートを作成するためのWebサービスです。本稿では、Google Chartのインターフェースと、Rubyコードから簡単にチャートを生成することができるgchartrbライブラリの説明をします。
全二回からなるこの記事では、ダイナミックビジネスアプリケーション(Dynamic Business Applications:DBAs)の開発についての全体的な眺望を、アーキテクチャと方法論の観点から見ていくことになります。我々のゴールは、「ビジネスの変化や、その他に必要とされる変更に対して、いかにして容易に適応できるアプリケーションを構築していくか」を導きだすことです。
本稿では、Adrien Louis氏がESBベースのSOAに対する2つの接続形態についての賛否について説明しています。その2つとは、会社での単一のESB対「部門毎」に相互接続するESBによるシステムです。
誕生から2年を経てCometは「何が出来るのか」という議論から、「いかに実現するか」という議論に関心が移ってきたように見えます。そこで本稿では同じくJavaOneで数多く取り上げられたNetBeans 6.1とGlassFish v3を使いながら、サンプルを交えてCometを解説していく事にします。
この記事では、WSS3とMOSS 2007に難しい設定など一切せず、すぐに利用可能なWebサービスと、Javaと.NETからそのWebサービスを消費する方法に目を向けます。
この記事の始まりは、知的で思慮深い人たちの魅力的なグループが食事会を終えて話をしているところです。話はレトロスペクティブ(振り返り)プロセスの要であるプライムディレクティブ(最初の指示)に及んでいます。
No comments
返信