トップスポーツチームの監督に教わる秘訣
この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。
作者 Werner Schuster, 翻訳者 佐野 徹郎 投稿日 2007年9月9日 午後11時38分
1998年にSwingがJREのバージョン1.2に追加されると、その前身であるAWTは重要なアプリケーションにとって不十分なものとなった。Swingの(パフォーマンスとルックアンドフィールに次ぐ)問題の1つは、小さなアプリケーションを構築するのにも必要なコードの量(が多いこと)だ。この問題によってXMLベースのGUI定義言語(source)が作られることになった。
JRubyの有効性は今、(J)Rubyの言語機能を利用してSwingアプリケーション開発の単調さを軽減するライブラリという、別の動きを始めている。ブロックはイベントリスナーの定型文を避けるのに利用され、ビルダーのコンセプトはRubyコードの中の複雑にネストしたGUIを作成するために利用される。
最新のAPIは(Zed Shaw氏によるProfligacy(サイト・英語)だ。その焦点は、AWTとSwingのイベントリスナーのために必要なすべての定型文を避けて、イベントの取り扱いをより簡単にすることにある。コンポーネントの作成とセットアップは、その一方で、単純なJRubyコードと全く同じように見える。例えば、newで新しいSwingのウィジェットを作成するように。以下にProfligacyコードのサンプルを記す。(原文・英語)
@ui = Swing::Build.new JFrame, :texts, :label do |c,i|
c.texts = [JTextField.new(10), JTextField.new(10)]
c.texts.each_with_index {|t,n|
t.action_command = "text#{n}"
}
c.label = JLabel.new "Something will show up here."
i.texts = {:action => method(:text_action) }
end
@ui.layout = FlowLayout.new
@ui.build("Two Text Fields Demo").default_close_operation = JFrame::EXIT_ON_CLOSE
def text_action(type, event)
puts "EVENT: #{type} #{event.action_command}"
end
より多くのサンプルコードはリンクを参照。
Bill Dortch氏によるCheri::Swing(サイト・英語)は、ビルダーアプリケーションを作成するためのフレームワークであるCheri projectの一部だ。ビルダーは非常に少ないRubyコードで、階層的な構造の作成を可能にする。
menu_bar {
menu('File') {
mnemonic :VK_F
menu_item('Exit') {
mnemonic :VK_X
on_click { @frame.dispose }
}
}
}
これはRubyのmethod_missing(メソッドが定義されていないときに呼び出される)とブロックが、いくらかの非常にコンパクトなコードで1つのメニュー項目を含むメニューを持つメニューバーから構成されるコンポーネントツリーの作成を可能にするために、どのように利用されるかを示している。メソッドの呼び出しはすべて、実行されるブロック(中括弧の中のコード)を取る。メタプログラミングとmethod_missingの組み合わせは、新しいオブジェクトを作成するかどうかや、作成されたばかりのオブジェクトのニーモニックのようなメソッドを実行するかどうかの決定に利用される。on_clickの呼び出しに見られるように、Cheri::Swingは簡単なイベントの取り扱いもまた可能にする。on_clickはこのメニュー項目がクリックされたときに実行されるブロックを取り、すべての単調なイベントリスナーやアクションのセットアップを隠蔽する。
Jean Lazarou氏による実験的なSwiby(サイト・英語)は、JRubyのDSLとして(以前はF3として知られていた)JavaFXスクリプトを複製する。それはビルダーのコンセプトを利用してGUIを作成し、さらにJavaFXスクリプトのようにbind演算子を取る。これは変数の1つの参照が再代入されるたびに評価される式の定義を可能にする。これはコンパクトな方法でイベントの取り扱いを処理する。サンプルを以下に記す。
require 'swiby'
class HelloWorldModel
attr_accessor :saying
end
model = HelloWorldModel.new
model.saying = "Hello World"
Frame {
title "Hello World F3"
width 200
content {
Label {
text bind(model,:saying)
}
}
visible true
}
これらのAPIのどれか1つが何らかの意味を持つようになるかはまだ分からない。XMLでSwingのGUIを定義するライブラリはありふれたもの(source)で、新たに作成されるものは終わりが見えない。それらとの違いはJRubyライブラリが一般にとても小さいことで、Profligacyの場合はサードパーティに依存せず、現在のところコードは200行だ。これは、それらの理解とメンテナンスを容易にする。なので、それらすべてがRubyでGUIの定義を書くことを可能にし、それらはまたとても拡張しやすい。もしいくつかの機能やコンポーネントの組み合わせがサポートされないなら、機能の追加をライブラリのメンテナに働きかけなければならない代わりに、Swingオブジェクトの正しい取り扱いにフォールバックが可能だ。
あなたはどのアプローチでRubyのGUIコードを書くことを好むか?
原文はこちらです:http://www.infoq.com/news/2007/07/jruby-gui-apis
(原文は2007年7月6日にリリースされました)ITマネージャ必聴!IT活用セミナー 勝ち残りの法則~管理・統合化スペシャル~
12/16 ~野村総合研究所が提案~ 「不況を乗り切る!効果的なIT投資を考えるセミナー」
InfoQ Japanはコンポーネントスクエアが運営しています
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。
この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。
No comments
返信