Eclipseは、Javaベースの拡張可能なオープン・ソース開発プラットフォームです。単体では、プラグイン・コンポーネントから開発環境を構築するために使用できるフレームワークとサービスのセットにすぎません。さいわい、Eclipseには、Java Development Tools (JDT) を含むプラグインの標準セットが付属しています。
ほとんどのユーザーはEclipseをJava IDEとして使うことで満足しますが、Eclipseの野心はそれにとどまりません。これに含まれているPlug-in Development Environment (PDE) は、主にEclipseを拡張したいと思っているソフトウェア・デベロッパの関心を引くものとなるでしょう。これを使えば、Eclipse環境とシームレスに統合されるツールを構築できます。Eclipseに含まれるすべてのものはプラグインなので、ツール・デベロッパは、Eclipseの拡張機能を提供したり一貫性のある統一された統合開発環境をユーザーに提供したりするための平等な土俵を得ることができます。
この同等性と整合性は、Java開発ツールに限定されません。EclipseはJava言語で作成されていますが、その用途はJava言語に限定されていません。たとえば、C/C++、COBOL、Eiffelなどのプログラム言語のサポートを組み込むプラグインが使用可能になっているか予定されています。Eclipseフレームワークは、ソフトウェア開発に無関係な他のタイプのアプリケーション (たとえば、コンテンツ管理システム) の基礎としても使用できます。
Eclipseベースのアプリケーションの顕著な実例は、IBMのJava開発ツール・ファミリーの基礎を成しているWebSphere Studio Workbenchです。たとえば、WebSphere Studio Application Developerには、JSP、サーブレット、EJB、XML、Webサービス、およびデータベース・アクセスのサポートが追加されています。
オープン・ソース・ソフトウェアとは、特定の権利をユーザーに付与することを保証するライセンスとともにリリースされるソフトウェアです。中でも最も明らかな権利は、ソース・コードが使用可能であり、ユーザーが自由にソフトウェアを変更して再配布できるという権利です。このユーザー権利の保護は、コピーレフト (copyleft) という方式によって実現されます。このソフトウェア・ライセンスでは、著作権 (copyright) 保護が宣言され、ユーザーにこれらの権利が付与されない限りソフトウェアの配布が禁止されます。コピーレフトはまた、再配布されたソフトウェアに同じライセンスが適用されることを要求します。結果として、ここでは著作権の目的が逆立ちしていることになる (権利をソフトウェアの開発者のために確保する代わりに、ユーザーに付与するために著作権が使用される) ので、コピーレフトはしばしば「all rights reversed」と描写されます。
オープン・ソース・ソフトウェアに関して広まっている恐れ、不確実さ、疑いの多くには、コピーレフト・ライセンスのいわゆるウィルス性が関係しています。オープン・ソース・ソフトウェアを開発するプログラムの一部として使用すると、開発した独自の部分にもコピーレフト・ライセンスが「感染」し、知的所有権を失ってしまうのではないか、という考えです。言い換えると、コピーレフト・ライセンスでは、オープン・ソース・ソフトウェアが組み込まれたすべてのソフトウェア (新しく開発されたものを含む) を同じライセンスの下でリリースすることを要求できます。たしかに、最もよく知られたコピーレフト・ライセンスであるGNU General Public License (たとえばLinuxはこの下でリリースされた) にはこれが当てはまりますが、商用部分と共用部分の間でより良くバランスを取っている別のライセンスもあります。
Open Software Initiativeは、オープン・ソースの意味を明確に定義し、その基準を満たすライセンスを認定している非営利団体です。Eclipseは、OSIで承認されたCommon Public License (CPL) Version 1.0の下でライセンス交付を受けています。CPL v1.0は「プログラムの商業使用を可能にすることを意図しています」(Common Public License v1.0の完全なテキストへのリンクは、この記事の参考文献にあります)。
Eclipse用のプラグインを作成するデベロッパや、Eclipseをソフトウェア開発アプリケーションの基礎として使用するデベロッパは、使用または変更するEclipseコードをCPLの下でリリースする必要がありますが、追加部分については好きなように自由にライセンス交付を行えます。Eclipseのソフトウェアが組み込まれた独自コードをオープン・ソースとしてライセンス交付する必要はなく、ソース・コードを使用可能にする必要もありません。
ほとんどのデベロッパはEclipseを使ってプラグインを開発したりEclipseに基づいて新しい製品を作成したりしませんが、Eclipseのオープン・ソース性の重要性は、Eclipseが無料で使用可能になっているという事実 (また、商用に有利なライセンスがプラグインを高価にする可能性があるという問題点) を越えたところにあります 。オープン・ソースは技術革新を促し、デベロッパ (商業デベロッパーを含む) がオープン・ソースのコード・ベースにコードを戻す誘因となっています。これには多くの理由がありますが、最も基本的な理由は、プロジェクトに寄与するデベロッパが多くなるほど、すべての人にとってプロジェクトの価値が高まるということです。プロジェクトがより有用になるとともに、それを使用したりそれに関するコミュニティー (ApacheやLinuxに関するコミュニティーのような) を作ったりするデベロッパは多くなります。
Eclipse.org ConsortiumはEclipseの継続的な開発を管理および指示しています。IBMが4000万ドルとも言われる費用をかけてEclipseを開発してオープン・ソース・プロジェクトとしてリリースした後に作成されたEclipse.org Consortiumは、Borland、Merant、Rational、RedHat、SuSE、TogetherSoft、QNXを含む複数のソフトウェア・ツール・ベンダーをリクルートしました。その後、Hewlett Packard、富士通、Sybaseを含む他の企業が加わりました。これらの企業はそれぞれ、Eclipseプロジェクトの方向と有効範囲を決定するBoard of Stewardsに代表者を割り当てています。
最上位レベルでは、Project Management Committee (PMC) がEclipseプロジェクトを管理しています。このプロジェクトは複数のサブプロジェクトに分けられており、それぞれにリーダーがいます。大規模なサブプロジェクトは複数のコンポーネントに分けられており、ここでもそれぞれにリーダーがいます。現時点で、これらの管理役割のほとんどを占めているのは、もともとEclipseを開発したIBMの子会社であるObject Technology International (OTI) の人々ですが、オープン・ソース・プロジェクトとして、誰の参加も歓迎されています。どこか特定部分に関する責任は、プロジェクトへの貢献によって獲得されます。
Eclipseの背後にある理論、歴史、駆け引きをいくらか見ることができたので、製品そのものを見てみましょう。
初めてEclipseを開くと、次のような初期画面が表示されます。
図1. Eclipse Workbench
Eclipse Workbenchは、ビュー と呼ばれる複数のパネルで構成されています。たとえば、左上には「Navigator」ビューがあります。複数のパネルのコレクションはパースペクティブ と呼ばれています。デフォルトのパースペクティブはResource Perspectiveです。これは、プロジェクトの管理、プロジェクト内のファイルの表示と編集を行うためのビューの基本汎用セットです。
「Navigator」ビューでは、プロジェクトの作成、選択、削除を行えます。「Navigator」の右にあるパネルはエディタ領域です。「Navigator」で選択した文書のタイプに応じて、適切なエディタ・ウィンドウがここに開きます。特定の文書タイプ (たとえば、Windowsシステムの.docファイル) に適したエディタが登録されていなければ、Eclipseは外部エディタを使ってその文書を開こうとします。
「Navigator」の下にある「Outline」ビューには、エディタ内の文書の概要が表示されます。この概要の細かい性質は、エディタおよび文書のタイプに応じて異なります。Javaソース・ファイルの場合は、宣言済みのクラス、属性、およびメソッドが表示されます。
「Tasks」ビューには、作業中のプロジェクトに関する情報が収集されます。これは、Eclipseによって生成された情報 (たとえば、コンパイル・エラー) か、手動で追加したタスクです。
Workbenchの他のほとんどの機能 (メニューやツールバーなど) は、一般的なアプリケーションのものと同様です。便利な機能としては、画面の左側に表示される、さまざまなパースペクティブへのショートカットのツールバーがあります。これらのショートカットはコンテキストや履歴に応じて動的に変化します。Eclipseにはまた、Eclipse WorkbenchおよびJava Development Toolsなどの組み込み済みプラグインのユーザー・ガイドを含む、堅固なヘルプ・システムが付属しています。使用可能なオプションの範囲を確認したりEclipseのフローを理解したりするため、一度はヘルプ・ファイルを一覧することをお勧めします。
Eclipseのこの短いツアーを続けるため、Navigatorでプロジェクトを作成します。「Navigator」ビューを右クリックし、「New」=>「Project」を選択してください。「New Project」ダイアログ・ボックスが表示されたら、左側にある「Java」を選択します。Standard Eclipseには、「Java Project」という1つのタイプのJavaプロジェクトだけがあります。JSPとサーブレットのサポートを提供するプラグインがインストールされていれば、Webアプリケーション用の追加オプションがここに表示されます。今回は、「Java Project」を選択し、プロジェクト名を求められたら「Hello」と入力し、「Finish」を押します。
次に、Javaパースペクティブに注目します。画面の管理方法に応じて、現行ウィンドウ内のパースペクティブを変更する (「Window」=>「Open Perspective」=>「Java」を選択する) か、新しいウィンドウを開く (「Window」=>「New Window」を選択して新しいパースペクティブを選択する)ことができます。
予想されるように、Javaパースペクティブには、Java開発に適したビューのセットがあります。これらのビューの1つでは、左上のビューとして、さまざまなJavaパッケージ、クラス、jar、およびその他のファイルを含む階層があります。このビューはPackage Explorerと呼ばれています。また、メイン・メニューが拡張され、「Source」および「Refactor」という2つのメニュー項目が表示されています。
Java Development Environment (JDE)
Java開発環境を試してみるため、「Hello, world」アプリケーションを作成して実行します。図2で示されているように、Javaパースペクティブで「Hello」プロジェクトを右クリックし、「New」=>「Class」を選択します。表示されるダイアログ・ボックスで、クラス名として「Hello」と入力します。「Which method stubs would you like to create?」では、「public static void main(String[] args)」をチェックし、「Finish」を押します。
図2. Javaパースペクティブでの新しいクラスの作成
.javaファイルが作成され、図3のようにHelloクラスと空のmain()メソッドがエディタ領域に表示されます。次のコードをこのメソッドに追加してください (iの宣言が故意に省略されていることに注意してください)。
図3. Javaエディタ内のHelloクラス
入力時に、構文検査やコード完了などのEclipseエディタの機能に気が付くでしょう。バージョン2.1 (筆者はビルドM2をダウンロードしてプレビューしました) では、左括弧や二重引用符を入力すると、自動的にそのパートナーが表示され、カーソルがその内側に置かれます。
また、Ctrl-Spaceを押すとコード完了を呼び出せます。コード完了では、コンテキストに依存した提案項目のリストが表示され、キーボードやマウスで選択できます。提案項目には、特定のオブジェクトに関係するメソッドのリストや、forやwhileなどのさまざまなキーワードに基づいて拡張されるコード断片があります。
構文検査は増分コンパイルに応じて行われます。保管されたコードはバックグラウンドでコンパイルされ、構文エラーがないか検査されます。デフォルトでは、構文エラーには赤い下線が付き、左マージンに赤いドットと白い"X"が表示されます。他のエラーでは、エディタの左マージンに電球が表示されます。これらの問題は、Quick Fixという機能により、エディタが自動的に修正できます。
上のコード例では、forステートメントの横に電球が表示されています。これは、iの宣言が省略されているからです。電球をダブルクリックすると、提案されている修正内容のリストが表示されます。この例では、クラス・フィールドi、ローカル変数i、またはメソッド・パラメーターiを作成するように提案されます。これらの提案項目のいずれかをクリックすると、生成されるコードが表示されます。図4は、提案項目のリストと、ローカル変数について提案されるコードを示しています。
図4. Quick Fixでの提案項目
提案項目をダブルクリックすると、コード内の適切な位置にそのコードが挿入されます。
コードがエラーなしでコンパイルされれば、Eclipseメニューから「Run」を選択してプログラムを実行できます。(コンパイルはコードの保管時に行われるので、独立したコンパイル・ステップは存在しません。構文エラーがなければ、そのコードは実行できる状態になっています。)「Launch Configurations」ダイアログ・ボックスが適切なデフォルトとともに表示されます。右下にある「Run」ボタンを押してください。下のパネル (「Console」) に新しいタブ付きパネルが表示され、図5のようにプログラムの出力を示します。
図5. プログラムからの出力
プログラムをJavaデバッガで実行することもできます。まず、エディタ・ビューの左側にあるグレーのマージンで、System.out.println() の呼び出しの横をダブルクリックして、main() System.out.println() 内にブレークポイントを設定します。青のドットが表示されます。「Run」メニューから「Debug」を選択します。上述のように、「Launch Configurations」ダイアログが表示されます。「Run」を選択します。パースペクティブが自動的に「Debug」パースペクティブに変わり、図6のような興味深いいくつかのビューが新しく表示されます。
図6. 「Debug」パースペクティブ
まず、パースペクティブの左上にある「Debug」ビューに注目してください。このビューには呼び出しスタックが表示され、タイトル・バーにあるツールバーを使って、プログラムの実行を制御できます。このツールバーには、プログラムの再開、中断、終了を行うためのボタン、次のステートメントにステップを進めるためのボタン、次のステートメントをステップオーバーするためのボタン、メソッドから戻るためのボタンが含まれています。
右上のパネルには、「Variables」、「Breakpoints」、「Expressions」、「Display」を含むいくつかのタブ付きビューがあります。ここでは、「Variables」をクリックしたので、iの現行値を見ることができます。
各ビューについての追加情報は、コンテキストに依存したヘルプによって入手できます。ビューのタイトルをクリックしてF1を押してください。
アプリケーションの編集、コンパイル、およびデバッグを行うためのJDTなどのプラグインに加え、モデル化からビルドの自動化、単体テスト、パフォーマンス・テスト、バージョン制御、および構成管理に至る完全な開発プロセスをサポートするプラグインも使用可能です。
Eclipseには標準で、CVS (ソース制御のためのオープン・ソースのConcurrent Versions System) を処理するプラグインが付属しています。このTeamプラグインはCVSサーバーに接続し、開発チームのメンバーがお互いの変更内容を踏み荒らさずにソース・コード・ファイルのセットを処理できるようにします。CVSサーバーのセットアップが必要なので、Eclipse内からのソース制御についてここでは詳しく調べません。しかし、スタンドアロン開発だけでなく開発チームをサポートする機能は、Eclipseの不可欠な機能です。
以下に示すのは、使用可能またはアナウンス済みであるサード・パーティー・プラグインのほんの一部です。
バージョン制御および構成管理
- CVS
- Merant PVCS
- Rational ClearCase
UMLモデル化
- OMONDO EclipseUML
- Rational XDE (Roseを置き換える)
- Together WebSphere Studio Edition
グラフィックス
- Batik SVG
- Macromedia Flash
Web開発、HTML、XML
- Macromedia Dreamweaver
- XMLBuddy
アプリケーション・サーバー統合
- Sysdeo Tomcatランチャー
使用可能なプラグインのより完全なリストについては、参考文献にリンクがあります。
プラグインの例を表示し、Eclipseへの統合を確認するには、人気のあるOMONDO EclipseUML (参考文献にリンクがあります) をダウンロードしてください。登録が必要ですが、このプラグインは無料です。このプラグインは、Eclipse用の別のプラグインであるGEF (Graphical Editor Framework) に依存しています。GEFはToolsサブプロジェクトの一部です。GEFをダウンロードするには、Eclipse Webサイト (参考文献を参照) に移動し、「downloads」を選択してから、「Tools PMC downloads page」へのリンクをクリックします。OMONDOで推奨されているGEFビルド (OMONDOバージョン1.0.2の場合はGEFバージョン2.0) をダウンロードする必要があります。
ダウンロードしたプラグインをインストールするには、通常、ダウンロード・ファイルをunzipし、その内容をEclipseプラグイン・ディレクトリにコピーします。この例では、GEFはEclipseディレクトリにunzipし (ここから自動的にplug-insディレクトリに移動します)、EclipseUMLはEclipseディレクトリのplug-insサブディレクトリに直接unzipする必要があります。安全のため、それぞれを一時ディレクトリにunzipし、そのディレクトリを適切にコピーすることもできます。Eclipseが実行中であれば、プラグインが認識されるように停止して再始動する必要があります。
いったんEclipseUML (およびGEF) がインストールされると、Javaクラス・ファイルを作成するのと同じようにクラス・ダイアグラムを作成できます。JavaパースペクティブのPackage Explorerで「Hello」プロジェクトを右クリックし、ポップアップ・メニューから「New」=>「Other」を選択します。「New」ダイアログの左パネルに、UML用の新しいオプションがあります。EclipseUMLのフリー・バージョンではクラス・ダイアグラムしかサポートされていないので、右には「UML Class Diagram」のオプションしかありません。「UML Class Diagram」を選択し、クラス・ダイアグラムの名前 (「Hello」など) を入力します。
図7. クラス・ダイアグラム・エディタ
エディタ領域では、グラフィカル・エディタにクラス・ダイアグラム用のブランクのキャンバスが表示されます。クラス・ダイアグラムは2通りの方法で作成できます。Package Explorerからクラス・ダイアグラムにJavaファイルをドラッグ・アンド・ドロップして既存のコードのリバース・エンジニアリングを行う方法と、ブランクのダイアグラムの上部にあるツールバーから使用可能な描画ツールを使用する方法です。最初の方式を試すため、Personという名前の新しいクラスを作成 (「File」=>「New」=>「Class」) し、次のリストのように2つのプライベート属性を与えます。
/** Person.java
* @author david
*/
public class Person {
private String name;
private Address address;
/**
* Returns the address.
* @return Address
*/
public Address getAddress() {
return address;
}
/**
* Returns the name.
* @return String
*/
public String getName() {
return name;
}
/**
* Sets the address.
* @param address The address to set
*/
public void setAddress(Address address) {
this.address = address;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(String name) {
this.name = name;
}
}
|
(実は、name属性とaddress属性の行しか入力しませんでした。getterおよびsetterメソッドは、ソース・コードを右クリックしてポップアップ・メニューから「Source」=>「Generate Getter and Setter」を選択したとき、Eclipseによって自動生成されました。)
Person.java Hello.ucdを保管してクローズします。
図8. Personクラス・ダイアグラム
UMLからJavaクラスを作成するには、クラス・ダイアグラム・ウィンドウの上部にあるツールバーの「New class」ボタン (左から3番目のボタン) をクリックし、クラス・ダイアグラムをクリックします。「New class」ウィザードが開いたら、クラス名として「Address」と入力し、「Finish」を押します。
クラスに属性を追加するには、クラス名を右クリックして「New」=>「Attribute」を選択します。「New attribute」ダイアログ・ボックスで、属性名、タイプ、および可視性を入力します。メソッドを追加するには、クラス名を右クリックして「New」=>「Method」を選択します。
ダイアグラムを変更すると、ダイアグラムの下にある「Source Editor」ウィンドウに変更内容が反映されます。最後に、クラス間の関係をダイアグラム化するには、「Association」ボタン (左から5番目) をクリックし、「Person」クラスから「Address」クラスまで線を描画します。表示される別のダイアログ・ボックスに、関連のプロパティを入力できます (必要な情報について詳しくは、EclipseUMLヘルプを参照してください)。ダイアグラムは次のようになります。
図9. 関連
このUMLプラグインは、Eclipseプラグインの典型的な特性をいくつか示しています。まず、ツール間の緊密な統合を示しています。複数のコンポーネントが機能していることはまったく分かりません。Eclipse PlatformおよびJDTとの統合はシームレスです。たとえば、Personクラスが作成されたとき、属性の1つであるAddressが定義されていなかったため、構文エラーが表示されました。UMLダイアグラムでAddressクラスが作成されると、このエラーは消え去りました。
他の特性は、EclipseUMLの、他のプラグインから提供される機能を用いて構築をする能力です。この場合では、GEFがビジュアル・エディタを開発するためのツールを提供しています。
さらに別の特性として、EclipseUMLプラグインの、複数の機能層による配布方法が含まれます。クラス・ダイアグラムをサポートする基本的なプラグインは無料ですが、より洗練されたバージョンは有料です。
Eclipse Platformは、JDTやPlug-in Development Environmentなどのプラグインをサポートする強力なサービスのセットです。これは、Platform runtime、Workspace、Workbench、Team Support、およびHelpといった複数の主要コンポーネントで構成されています。
図10. Eclipse Platformのアーキテクチャー
Platform
Platform runtimeは、開始時にインストールされているプラグインを発見し、それに関する情報のレジストリーを作成するカーネルです。開始時間とリソース使用を削減するため、実際に必要になるまでプラグインをロードしません。カーネルを除くすべてのものはプラグインとしてインプリメントされます。
Workspace
Workspaceは、ユーザーのリソースを管理するプラグインです。これには、ユーザーが作成するプロジェクト、プロジェクト内のファイル、ファイルや他のリソースへの変更内容が含まれます。Workspaceはまた、関係する他のプラグインに、リソースの変更 (ファイルの作成、削除、変更など) について通知します。
Workbench
WorkbenchはEclipseにユーザー・インターフェースを提供します。これは、Standard Widget Toolkit (SWT。JavaのSwing/AWT GUI APIの非標準的な代替物) と高レベルAPIであるJFace (SWTの上に構築されていてユーザー・インターフェース・コンポーネントを提供する) を使って構築されています。
SWTはEclipseで最も議論を呼ぶ部分であることが証明されてきました。SwingやAWTと比べ、SWTは基礎となるオペレーティング・システムのネイティブ・グラフィックス機能により密接にマップされています。これは、SWTをより高速にするだけでなく、Javaプログラムがネイティブ・アプリケーションのようなルック・アンド・フィールを持つことを可能にします。この新しいGUI APIの使用はEclipse Workbenchのポータビリティを制限する可能性がありますが、ほとんどの一般的なオペレーティング・システム用のSWTポートがすでに使用可能になっています。
EclipseによるSWTの使用は、Eclipseそのもののポータビリティにのみ影響し、Eclipseを使って構築されたJavaアプリケーションには、Swing/AWTの代わりにSWEが使用されていない限り、影響しません。
Team Support
Team Supportコンポーネントは、バージョン制御と構成管理のサポートを提供します。必要に応じてビューを追加し、ユーザーが使用されているバージョン制御システムと対話できるようにします。ほとんどのプラグインは、バージョン制御サービスを提供していない限り、チーム・サポート・コンポーネントと対話する必要がありません。
Help
Helpコンポーネントは、Eclipse Platformそのものの拡張性と並行しています。プラグインがEclipseに機能を追加するのと同様に、ヘルプはHTMLファイルの形式でツールがドキュメンテーションを追加することを可能にするアドオン・ナビゲーション構造を提供します。
非常に多くのものが、Eclipse関連で開発されているところです。主要なソフトウェア・ツール・ベンダーが参画し、オープン・ソースのEclipseプラグイン・プロジェクトの数は日々増えています。
ポータブルで拡張可能なオープン・ソース・フレームワークは新しい考えではありません (Emacsが思い浮かびます) が、その成熟した堅固で優雅な設計により、Eclipseは全く新しい動力をもたらします。4000万ドル相当の世界クラスのソフトウェアをIBMがオープン・ソースの舞台に解き放った結果、非常に長い期間見られなかったような衝撃が起こっています。
- Eclipseの資料、記事、およびダウンロードは、Eclipse Project Webサイトから入手できます。
-
Common Public License v1.0の内容をご覧ください。
-
Eclipse用のプラグインの完全なリストを見てください。
- オープン・ソース・ソフトウェアについての情報 (Public Common Licenceのような認定されたオープン・ソース・ライセンスを含む) は、Open Source Initiative Webサイトから入手できます。
- 以下のdeveloperWorks記事で、Eclipseについてさらに学んでください。
- Eclipseコードの供与に関するMarc Eriksonとのインタビュー (developerWorks、2001年11月)。
- Eclipse Platformの利用 (developerWorks、2001年11月)。
- Getting to know WebSphere Studio Application Developer (developerWorks、2001年11月)。
- Eclipseプラグインの国際化対応 (developerWorks、2002年6月)。
- 国際化対応Eclipseプラグインをテストする (developerWorks、2002年6月)。
- Swingベース開発ツールのEclipseへの組み込み (developerWorks、2002年10月)。
- 実用的なXML: Eclipseを使用してXMのユーザー・インターフェースを構築する (developerWorks、2002年10月)。
- 最近、コンピュータ・プレスでEclipseに関する多くの記事が出ています。Carleton Universityの一教授が2つの野心的なプロジェクトをEclipseに基づいて行った理由については、Promoting shared software through Eclipse (ADTmag.com、2002年11月) をお読みください。
David Gallardoはソフトウェアの国際化対応、Java Webアプリケーション、データベース開発を専門とする独立系のソフトウェア・コンサルタントおよび著述家です。15年以上の間、彼はプロのソフトウェア・エンジニアであり、多くのオペレーティング・システム、プログラム言語、およびネットワーク・プロトコルについての経験があります。彼の最近の経験には、企業間 (B2B) e-commerce企業TradeAccess, Inc.における先進的なデータベースおよび国際化対応の開発が含まれています。その前まで、彼はLotus Development CorporationのProduct Developmentグループにおけるシニア・エンジニアであり、Dominoを含むLotus製品にUnicodeおよび国際言語サポートを提供するクロス・プラットフォーム・ライブラリーの開発に貢献しました。