SSブログ
Google Web Toolkit ブログトップ
前の10件 | -

Google Web Toolkitについて [Google Web Toolkit]

Java研修の後の懇親会で、私のホームページには時計が右上隅に表示されているという話になったので、Google Web Toolについて。

ウィキペディアによれば、GWT(Google Web Toolkit)は、2006年5月にバージョン1.0がリリースされています。私が初めてGWTを知ったのは、2007年5月にサンフランシスコで開催されたJavaOneへ参加した時です。

JavaOneのセッションで知ったのではなく、GWTの開発チームが、JavaOneの会場ではなく、あるホテルで開いていたテクニカルセッションへ出席して知りました。レセプションパーティ付きに招待制のセッションでした。JavaOneの会場でJoshua Bloch氏から「はい、これ」という感じで招待状を渡されて行ったのが、そのGWTのテクニカルセッションでした。

そのテクニカルセッションでは、GWTの開発者達が技術的説明やQ&Aを行うものでした。でも、そこで初めて知る技術だったので、どこまで詳細を理解したかは、記憶にありません。そこには、『Graphic Java』の著者であるDavid Geary氏もいました。その時ではないですが、(たぶん翌日)David Geary氏にGWTについての本は書かないのかと聞いたら、執筆中という返事でした。

その執筆中の本の日本語版が、翌年に出版した次の書籍です。

Google Web Toolkit ソリューション

Google Web Toolkit ソリューション

  • 作者: デビッド・ギアリー
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/08/06
  • メディア: 単行本(ソフトカバー)

それから一年後に、自分の「ホームページの再構築」を始めました。

GWT関連の書籍のブームは、2008年から数年だけでした。それ以降は、新たな本が執筆されることもほとんどなくなったようです。しかし、開発はオープンソース・プロジェクトとして今でも続いています。結果として、最新の情報は、英語でしか入手できない状況になっています。

JavaでのGUIプログラミング(AWT、Swing、JavaFX)とJavaに慣れている人にとって、ブラウザー上で動作するリッチなUIを作成するには、GWTは面白いと思います。ほとんど、すべてのコードをJavaで書いて、Javaでデバッグして、そして、結果が、JavaScriptへコンパイルされてブラウザー上で動作するからです。さすがにJava 8の仕様はサポートしていませんが、普通にJavaの機能(パッケージ、クラス、インタフェース、enum、ジェネリックスなど)が使用できます。

私のホームページには、Java研修の課題である「デジタル時計」をGWTで書いたウィジットを表示しています。そのソースコードについては、こちらを参照してください。

ところで、2007年のGWTのテクニカルセッションの後には、レセプションがありました。

P1000239.JPG

このレセプションには、GWTの開発チームだけでなく、JavaOne会場で昼間に会った有名な人達が多数参加していました。
コメント(0) 

ホームページの更新とデジタル時計 [Google Web Toolkit]

ホームページに新たに『Android SDK 開発クックブック』を追加しました。また、「活動一覧」のタブには、今年の活動を追記してあります。今回の追加で、翻訳本がちょうど10冊目です。自著も5冊となっていますので、合計で15冊となります。

http://www001.upp.so-net.ne.jp/yshibata/

最初の雑誌の記事を書いたのが2000年3月発売の「Java PRESS, Vol.11」ですので、ほぼ11年が過ぎたことになります。40歳から始めた執筆活動ですが、1996年の夏にJavaの独学を始めてから、Java言語が成熟していく過程だったこともあって、運良く活動ができたのだと思います。

ホームページは、Google Web Toolkitを使用して作成しています。Google Web Toolkitは、オープンソースなので最新のソースコードを開発用trunkから持ってきてビルドして使用しています。最近は、あまり触れていなかったために、以前に作成したbuild.xmlファイルは、内容が古く正しくコンパイルされませんでした。それで、再度webAppCreatorコマンドで別の場所にプロジェクトを作成して、そこからbuild.xmlをコピーして、正しくコンパイルされるようにしました。

ホームページの右隅には、デジタル時計が表示されています。表示されている時刻をクリックするとプロパティが表示されます。そして、「Advanced Settings」の「Clock Mode」の「detached」にチェックを入れると、右隅から消えて、マウスでドラッグして移動可能な表示に切り替わります。マウスでドラッグするとブラウザー内で好きな位置に移動可能です。再度、「detached」のチェックを外すと、ホームページの右隅に戻ります。

どのようにして実装しているのか興味がある人のために、このデジタル時計部分だけのウィジェットのソースコードをホームページからダウンロードできるようにしました。

http://www001.upp.so-net.ne.jp/yshibata/digitalclock.zip

jp.ne.sonet.ca2.yshibata.client.digitalclock.DigitalClockがウィジェットになっているデジタル時計です。

KeyPressEventのgetCharCodeメソッド [Google Web Toolkit]

かなり前から気付いていたのですが、私のホームページ(http://www001.upp.so-net.ne.jp/yshibata/)の右上隅に表示されているデジタル時計のプロパティ(時計をクリックすると表示されます)で、「Font Size」が正しく変更できないブラウザーがありました。たとえば、Firefoxでは数字を入力後にDeleteキーを押しても削除されないという不具合です。

調査した結果、GWTのKeyPressEventgetCharCodetメソッドを呼び出した時に、正しいKeyCodeが返されないことが原因でした。以前は、正しく返されていたのですが、最新のGWTでリコンパイルした結果、動作が変わっていたようです。

GWTのIssuesを調べてみたら、登録されていました。
Issue 3753: KeyPressEvent contains improper UTF codes

とりあえず、KeyPressEventgetCharCode()メソッドとgetNativeEvent().getKeyCode()により、charCodeとkeyCodeを別々に取り出して処理するように変更することで、ホームページの不具合を修正しました。

Google Web Toolkit 2.0 [Google Web Toolkit]

Google Web Toolkitが大幅に機能アップして、2.0としてリリースされました。

http://googlewebtoolkit.blogspot.com/2009/12/introducing-google-web-toolkit-20-now.html

最近は、あまりフォローしきれていないのですが、様々な機能が追加されています。2007年のJavaOneへ参加した時に、JavaOneとは関係なくGWTのチームが開催していた招待客向けのセッションでに私はGWTを知りました。

ソフトウェアの世界は止まることがなく、ソフトウェア開発を仕事にしていると、興味の種は尽きることがなく、時間がいくらあっても足りないです。

Mac OS X Snow Leopardをインストール(2) [Google Web Toolkit]

Google Web Toolkitのソースコードを自分で修正して、32bit版ならば動作するようにして、ビルドしなおしてみました。しかし、32bit版Javaを選んで動作させようとしても、32bit版にはならず、64bit版と認識されてしまいます。

そこで、Snow Leopard用のJavaコマンドには-d32オプションがあり、それを指定すると上手くHostedモードで起動できるようになりました。

それにしても、Google Web Toolkitも徐々に大きくなってきており、Google Web Toolitそのものをサンプルコードも含めてすべてをビルドすると、私のMacBook(2.2GHz Core 2 Duo)で39分を要するようになっています。

Mac OS X Snow Leopardをインストール [Google Web Toolkit]

Mac OS X 10.6 Snow Leopard

Mac OS X 10.6 Snow Leopard

  • 出版社/メーカー: アップルコンピュータ
  • メディア: DVD-ROM

MacBookにSnow Leopardをインストールしました。普段は、VMWare Fusion(バージョン2.0.5)上でWindows XPを動かしており、動作しなくなると困るなと思いながらMac OSをSnow Leopardへアップグレードしたのですが、問題なく動作しました。

ちなみに、インストールされるJavaのバージョンは、Java 6だけになっていました。しかし、32bit版と64bit版がインストールされています。

残念ながら、Google Web Toolkit 1.7では、Java 6ではHostedモードが動作しません。もともと、Leopardまでは、Java 6は64bit版しかなかったので、Java 5を選択しないとHostedモードは動作しないようになっていました。その理由は、64bit版にはGWTが対応していなかったためです。

Snow Leopardでは、32bit版Java 6が提供されているから、それを優先的に選択するようにMac OSの設定をすれば良いかというと、設定してもHostedモードは動作しません。その理由は、32bit版であるかどうかの判定コードが、実際にはJava 5か否かを判定しているコードになっているからです。

32bit版か否かを判定するようにコードを修正したものがいつリリースされるかは、今のところ不明ですが、近々にはリリースされるのではないかと期待しています。

私自身は、いつもtrunkから最新のソースコードを取り出して、GWTそのものを自分でビルドして使用しているので、自分でパッチを当てて使用する予定です。

GWT 1.7.0リリース [Google Web Toolkit]

Internet Explorer 8、Firefox 3.5、Safari 4に対応したGoogle Web Toolkitの1.7.0がリリースされました。

Google Web Toolkit 1.7.0

残念ながらIssue 3822の修正は含まれていません。

Issue 3822 [Google Web Toolkit]

Issue 3822: TextBox.getselectedText() : bug on IEを、日曜日の朝起きてから一時間半ぐらいで調べて、修正するパッチをコメント欄に記入したました。しかし、ちょっとしっくりはしていなかったのですが、やっぱり私の修正はハズレでした。

担当者が正しい修正を行ってくれたのですが、それを見ると、もともとのIEでの問題の対処方法が間違っているということで、全く異なった修正がされていました。

自分が考えた修正が正しくても、あるいは、間違っていても、オープンソースの不具合を調査するというのは、勉強になります。

Issue 3310 & 3778 [Google Web Toolkit]

Issue3310: Overloaded method causing runtime exception in web mode onlyを調査していたら、本来文法エラーのはずなのに、Eclipseではエラーにならないという現象を発見しました。まだ、EclipseのバグとしてEclipse開発側で管理されているかどうかは調べていません。簡単に言えば、Javaのソースコードレベルでは文法エラーとなるべき、メソッドのオーバーロードが、文法エラーにならずにコンパイルされてしまうという不具合です。

Issue3778: HashMap returns 'undefined' instead of nullは、HashMapgetメソッドで存在しないキーを指定すると、nullが返されるべきなのですが、それを文字列に変換させて表示すると、ブラウザー上では"undefined"となってしまう現象です。

JavaScriptへ変換されたgetメソッドは、キーが存在しないと、JavaScriptのundefinedを返しnullは返しません。したがって、そのまま文字列に変換すると"undefined"となってしまう訳です。

一応、私なりにパッチを作成してみたのですが、"null"や"undefined"をブラウザー上で表示したいようなケースは稀であり、もともとの設計通りの振る舞いということになって、現状のままとなっています。


Issue 3710 [Google Web Toolkit]

現在リリースされているGoogle Web Toolkit 1.6.4で、次のようなメソッドを作成すると、正しくJavaScriptへ変換されません。
private int value;

public long getAsLong() {
    return value;
}
これは、int型の値をlong型としてreturn文で返すようなコードが、正しいJavaScriptへ変換されないからです(Issue 3710)。

JavaScriptでは、Java言語のlong型に相等する型がないため、double型の配列を使用して注意深く実装されているのですが、return文において適切な変換を行うコードが生成されいませんでした。正しく変換されていないという事実までは調べて報告したのですが、残念ながらコンパイラーをどのように修正するかまでは分かりませんでした。

すでにコンパイラーの修正は行われていますが、リリースはされていません。したがって、その修正を利用するには、Google Web Toolkitのリポジトリーからソースコードを持ってきて、自分でビルドしなければなりません。
前の10件 | - Google Web Toolkit ブログトップ