« 6月 2006 | Main | 4月 2006 »

2006年05月31日

28

ついに28歳になっちまいました。
誰も見てないブログでこっそりアピール。
虚しさには気付かないフリをしときます。

やりたい事と今の自分のスキルと、そして時間の使い方。
いろんな要素がミスマッチしててなんだか上手く回ってない。
そんな感じの誕生日。
このまま30までいっちまいそうでヤバイなー。

Posted by Akishin at 1:41 午前
Categories: その他
|

2006年05月29日

観たい映画

今更気付いたんだけど、小説版の「恋愛寫眞」 が映画化されるらしいですね。
早く観たいなー。

映画『ただ、君を愛してる』公式サイト
http://www.aishiteru.jp/

最近やたらと体調が悪いけど、 公開まではなんとかがんばって生きてみよー。

Posted by Akishin at 1:31 午前
Categories: その他
|

2006年05月26日

AutoCompleteTextBoxのサンプル(Google Web Toolkitその6)

AutoCompleteTextBoxのサンプル。
こんな感じかなー。

package myproject.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.HTTPRequest;
import com.google.gwt.user.client.ResponseTextHandler;
import com.google.gwt.user.client.ui.RootPanel;

public class AutoCompleteSample implements EntryPoint {

    private final AutoCompleteTextBox autoBox = new AutoCompleteTextBox();

    public void onModuleLoad() {

        if (!HTTPRequest.asyncGet("sample.txt", new ResponseTextHandler() {
            public void onCompletion(String responseText) {
                autoBox.setCompletionItems(new SimpleAutoCompletionItems(responseText.split(",")));
            }
        })) {
            // asyncGet error.
        }

        RootPanel.get("slot1").add(autoBox);
    }
}

sample.txtには","区切りで選択候補の文字列が書いてあります。
実際には AutoCompleteTextBox に KeyboardListener 辺りを設定して、その中でサーバに問合せして候補を取得、ってな感じですかね。
本当楽チンだなー。

Posted by Akishin at 1:14 午前
Categories: Java
|

2006年05月24日

GWT Component Library(Google Web Toolkitその5)

Google Web Toolkit のフォーラムを読んでたら、カスタムコンポーネントを集めているサイトを発見。

GWT Component Library
http://gwt.components.googlepages.com/

  • Simple Calendar
  • RateIt Control
  • Script.aculo.us Effects Integration
  • Auto-Completion Textbox
  • Simple XML Parser
  • Hyperlink with Image
  • Tooltip Listener

今のところこれだけ登録されてました。
フォーラムには結構投稿されてる方もいるようなので、今後が楽しみな感じ。
ライセンスもGWTと同じ感じでやってくみたいです。

ここのコンポーネントを試すときにちょっとハマったのが、クラスが見つからないといった意味の実行時エラーメッセージ。
どうもパッケージ階層がメインのモジュールと異なる場合は、以下の投稿内容のように、別パッケージ用の*.gwt.xmlを用意し、メインモジュールの*gwt.xml ファイル内に、そのクラスを指定する <inherits> 要素の追加が必要になるようです。

Runtime Problems
http://groups.google.com/group/Google-Web-Toolkit/msg/2fe5e32cd1da6d4d

最初よくわかんなくて結構ハマった。
パッケージ名の移動が許されるなら、メインモジュールと同じとこに移動させちゃった方が楽かも。

Posted by Akishin at 2:04 午前
Categories: Java
|

2006年05月23日

Google Web Toolkitその4

GWTだとTimer処理はどう書くのかな?と思ったら、ちゃんとクラスが用意されてますね。

Class Timer
http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.Timer.html

サンプルだと指定時間後に処理を実行してるけど、繰り返し実行もちゃんとできます。
こんな感じ。

    private final TextBox txtTimer = new TextBox();
    private final Button btnTimer = new Button("\u30bf\u30a4\u30de\u30fc\u958b\u59cb");

    public void onModuleLoad() {

        btnTimer.addClickListener((new ClickListener() {
            // com.google.gwt.user.client.Timerクラスを生成。
            // Timerで実行したい処理をrunメソッド内に記述する。
            Timer t = new Timer() {
                int i = 0;
                public void run() {
                    txtTimer.setText(String.valueOf(i++));
                }
            };
            
            boolean isClicked = false;
            
            public void onClick(Widget sender) {
                if (!isClicked) {
                    isClicked = true;
                    btnTimer.setText("\u30bf\u30a4\u30de\u30fc\u505c\u6b62");
                    
                    // 指定した間隔でrunメソッドの処理を繰り返し実行する。
                    t.scheduleRepeating(1000);
                    
                } else {
                    isClicked = false;
                    btnTimer.setText("\u30bf\u30a4\u30de\u30fc\u958b\u59cb");
                    
                    // Timerを停止
                    t.cancel();
                }
            }
        }));

        RootPanel.get("slot1").add(txtTimer);
        RootPanel.get("slot2").add(btnTimer);
    }

我ながら適当なサンプルですが、取りあえずこんなんでもちゃんと動いてます。

他にも com.google.gwt.user.client パッケージには DOM クラスとか Window クラスとか、JavaScriptで良く使う機能をラップしたクラスがいろいろありますねー。
いい感じ。

あ、あとEclipseの「実行」からhost modeを起動する方法ですが、よく見たら構成および実行の中にちゃんとありました。
メインクラスが「com.google.gwt.dev.GWTShell」、プログラム引数が「-out www com.hoge/hoge.html」になってればOKっぽいです。

さーて、明日も仕事だし、いい加減風呂入って寝るかなー。

Posted by Akishin at 2:08 午前
Categories: Java
|

2006年05月21日

Google Web Toolkitその3

Ajaxということで、XMLHttpRequestの辺りはどうやんのかなー、と思ったら、この辺のクラスとインターフェースを使うらしい。

com.google.gwt.user.client.HTTPRequest
com.google.gwt.user.client.ResponseTextHandler

使い方もJavaScriptでのXMLHttpRequestの使い方と似たような感じで、あんま違和感ありません。
具体的な使い方は、GWTのsampleの中にあるJSONのやつが参考になりました。

で、JSONではなくXML使う場合、parseどうやんのかな?と思ってGoogle Groupsのフォーラムを検索したら「simple XML parser for GWT」というスレッドを発見。
この投稿に載っているソースコードでイケるっぽいです。

最初Google Groupsの「メール アドレスのロックを解除」とかゆー仕組みを知らなかったので、出てきたコードをそのままコピペしてコンパイルエラー出まくってました。orz

解除するには、投稿本文中の「...」 となってるとこがリンクになっているので、そこをクリックしてロック解除の手続き(?)をすればOK。
これで完全な本文を読む事ができます。

それにしても、この投稿のソース、nativeメソッドにコメント化されたJavaScriptが記述してあってなんか変わってますね。
コンパイルエラーが出た時に、「JSNI」 という単語がコンソールに出てきたので、調べてみたらGWTでJavaソースコード内にJavaScriptのコードを記述する仕組みらしいです。
この辺にちゃんと載ってました。

JavaScript Native Interface (JSNI)
http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.html

なるほど。
これ使えばJavaScriptでやってて、GWTでどう書くのかわからないコードも取りあえず問題無しですね。

Posted by Akishin at 2:40 午後
Categories: Java
|

2006年05月20日

Google Web Toolkitその2

Google GroupsのGoogle Web Toolkitのフォーラムのこの辺を見ると、日本語だけじゃなく非ASCII文字使ってるとコンパイル通らないみたいですね。
しかもコメントで使っていてもダメらしい。

で、とりあえずの回避方法としてはUnicodeエスケープしたものを設定すればOKっぽい。

com.google.gwt.user.client.ui.TextBox txtMessage = new TextBox();
txtMessage.setText("\u3053\u3093\u306b\u3061\u306f");

こんな感じ。
「こんにちは」という文字列を設定しています。

しかし全部のメッセージこれじゃ面倒くさいなぁ。
国際化アプリ作る時みたく、全部propertiesファイルに外出しすればいい、って事かも知れん。
でもそれじゃ気軽に遊べないって。

とりあえず、Unicodeエスケープを取得するのに毎回native2asciiかけるのも面倒なんで、「プロパティエディタ」を使用して変換しました。

早く正式対応してくんないかなー。

Posted by Akishin at 11:32 午後
Categories: Java
|

2006年05月19日

Google Web Toolkit

Google Web Toolkit
http://code.google.com/webtoolkit/

GoogleがJava用Ajaxフレームワークを出した、と思ったら、Javaで書いたコードをJavaScript + HTMLに変換するツール、といったもののようです。
さすがGoogle、一味違いますね。

どうやら現状 GWT が対応しているのは java.langjava.util の一部のクラスのみのようですが、今後もっと増えていけば JavaScript をほとんど知らなくてもAjaxアプリ書けちゃいそうですね。
Javaプログラマとしては期待大。

GWTにはEclipseのプロジェクトを作成するコマンドラインツールも付属しているので、Eclipseのデバッガやリファクタリングが使える、とのこと。

Eclipseプロジェクトを作るには、コマンドプロンプトで


  projectCreator -eclipse MyProject
  applicationCreator -eclipse MyProject com.mycompany.client.MyApplication
  

でOK。
.projectや.classpathなどが生成されるので、あとはそれらをEclipseでインポートするだけ。

公式サイトによればこの後、

Just click the green "Run" button at the top of the window to start your project in hosted mode.

って事らしいんだけど、なんか設定を間違ったのか、俺の環境では実行からhost modeの起動ができませんでした。
まぁ MyApplication-shell.cmd を直接実行すればいいだけなんですが、これだとデバッガは使えなさそう。

あと、com.google.gwt.user.client.ui.Label や com.google.gwt.user.client.ui.TextBox の setText() メソッドで日本語の文字列を設定すると、Eclipse上ではコンパイル通るんだけど、その後GWTコンパイラでコンパイルエラーが出てしまいました(HTMLの方には普通に日本語使えました)。

プロジェクトのデフォルトファイル・エンコードをUTF-8に変えてみてもだめっぽいし、よくわからん。
これもなんか設定次第で回避できるのかなぁ?

なにはともあれ、かなり面白いものが出てきたって感じ。
今度の週末辺り、暇だったらもうちょっと触ってみよー。

Posted by Akishin at 1:44 午前
Categories: Java
|

2006年05月10日

あんみつ、しらたま、もなかとおしるこ

GWに撮ってきた猫写真第2弾。
あんみつ、しらたま、もなかとおしるこです。

   
 

俺がいなくなった部屋で一人暮らしをしている寂しさのせいか、あんみつの凶暴さが帰る度に増してるような・・・。
こっち連れてきたいけど、それも可哀想だしなぁ・・・。
連れてこれる環境を作れるだけの甲斐性もないんですけど。

しらたまの人見知りはだいぶ良くなったような気がします。
まぁ、写真撮ろうと近づいたら逃げられましたけど。
相変わらず親父にはべったり。

もなかの足はもうすっかりいいみたいです。
一時はどうなることかと思いましたが、良かった良かった。

おしるこは相変わらず無口というか、ほとんどなきません。
そしてお袋にべったり。

我が家の猫たちの近況報告はこんなところですかね~。

Posted by Akishin at 11:01 午後
Categories: その他
|

きんつばとようかん

GWに撮ってきた写真より、とりあえずきんつばとようかんです。

   

若い頃に比べると2匹とも大人しくなりましたね~。
相手をするのは若干楽になったものの、なんか寂しいものがあります。

それにしても、久しぶりに見るとウチの猫達はみんな随分肥満体でした。
健康状態は問題ないのだろうか。

Posted by Akishin at 12:58 午前
Categories: その他
|

2006年05月08日

帰省

久々の連休ということで、実家に帰り旧友&猫達に再会してきました。
結構写真撮ったんだけど、戻ってからNHibernateと遊んでてPCに取り込むの忘れて今に至ります。
もったいないんでそのうち載せよう。

このGW中に読み終えた本は以下2冊。

ウェブ進化論 本当の大変化はこれから始まる
相手の潜在意識から説き伏せる! ビジネス・コールドリーディング

もうちょっと読む予定だったんだけどなぁ・・・。
まぁでも少しでも消化できたので良しとしよう。

どちらもかなり面白くて一気に読みきっちゃいました。
電車の中で寝ないで読めた数少ない本です。
ってただ単にGWでたっぷり寝てたから眠くならなかっただけな気もしますが。

Posted by Akishin at 2:24 午前
Categories: その他, 読書
|

2006年05月04日

NHibernateでMyGenerationその2

MyGenerationでNHibernateのテンプレートを使うと、OracleのDate型がDateTime構造体になってしまいます。
構造体であるDateTimeにnullは代入できないので、そのままだとDate型のカラムにNullを入れる事ができません。
まぁNullを表す値を入れて論理的なNull状態を作ればいいんでしょうが、Java版Hibernateに慣れてる身からするとちょっと気持ち悪いですよね。

で、この問題を解決するためにはNHibernateのドキュメントの「Chapter 11. Nullables」に載っている NullableDateTime クラスを使用するようです。

せっかくMyGenerationを使っているのに、毎回生成されたクラスやマッピングファイルを修正するのはメンドいので、テンプレートファイルの方を修正してしまいます。
が、修正したテンプレートファイルで実行すると、NullableDateTime 型が解決できないとかで例外発生。

確かに言われてみればVisualStudio.NETでやってるみたいな、参照設定の追加とかやってなかったですね。
MyGenerationの設定にはアセンブリの参照設定を追加するところとかは無いみたいだし、どうしよう・・・。

と思ってたら、単にGAC(Global Assembly Cache)に登録してやればいいという事に気付きました。
エクスプローラのアドレスバーに「%systemroot%\assembly」を入力して開いて、そこに「Nullables.dll」をドロップ。

たったこれだけで先程修正したテンプレートファイルが動作するようになりました。
めでたしめでたし。


テンプレートファイルのカスタマイズってやってみると意外と簡単でいいですね。
これなら大した手間かからずに自分の環境に適切なファイル吐くようにできそう。
ほんと、これっていいツールですねー。

Posted by Akishin at 1:11 午前
Categories: .NET, ソフトウェア
|

2006年05月03日

NHibernateでMyGeneration

Nhibernateでマッピングファイルと永続化クラスを自動生成したくて、『MyGeneration』を試してみました。
MyGenerationは.NET用のソースコード自動生成ツールです。
テンプレートを指定することにより、NHibernateだけでなくかなりいろいろなソースコードを生成可能というすぐれもの。

今回使用したテンプレートは、 公式のTemplateLibraryにあった「NHibernate Object Mapping 1.1 By Romulo」というテンプレートです。

MyGenerationの使い方は以下のサイトを参考にさせて頂きました。
GUIだし使うだけなら難しいことは何も無いんですが、英語が苦手なダメグラマとしては、日本語の解説がありがたいところ。

Spring.NET JP - MyGenerationを利用してクラス、マップファイルを生成
http://spring-net.jp/modules/bwiki/index.php?MyGeneration%A4%F2%CD%F8%CD%D1%A4%B7%A4%C6%A5%AF%A5%E9%A5%B9%A1%A2%A5%DE%A5%C3%A5%D7%A5%D5%A5%A1%A5%A4%A5%EB%A4%F2%C0%B8%C0%AE#content_1_1

よしぶろっ-NHibernateのマッピングファイルとクラスファイルをもっと簡単に生成できるツールを発見
http://blog.livedoor.jp/aeropuertu/../archives/24865537.html

対象DBは Oracle9i Release 9.0.1.1.1 。
普段はODP.NETから接続しているのですが、どうやらMyGenerationではODP.NETの接続文字列が指定できないようだったので、仕方なくOraOLEDB(MyGenerationの「Connection String」でOracleを選択した際のデフォルト)を使用しました。

と、ここで、生成されるソースコードやマッピングファイルのメンバがほぼ全て「Unknown」になってしまうという問題が発生。
う~ん・・・なんでだろう?
検索してもほとんどなんにも出てこないし、どうしたものか・・・と思ってたら、どうやら設定を間違えていた模様。

このテンプレートファイルでは、Database Target MappingのDbTargetのところを、「DbType」にしておかないとうまくいかないようです。
「Oracleなんだから当然OracleClientでしょ!」と自信満々でOracleClientを選択していたのがそもそも間違っていたみたいですね。orz

というわけで、「DbType」を選択したらあっさり解決しました。
テンプレートを修正すれば「OracleClient」でもイケるのかもしれませんが。

自動生成されたファイルを見てみると、主キーの生成戦略が 「assigned」だったり、Date型カラムのマッピングがDateTime構造体だったり(構造体なのでnullが入れられない)と、自分好みにするには若干修正が必要だったりしますが、こういった細かいところもテンプレートファイルを1回修正してしまえば、後は毎回同じルールで生成できるようになるので楽チンです。
まぁそれには自分でテンプレート直さなきゃいけないんですけど。

MyGenerationを使えば、JavaでMiddlegen使うのと同じような開発スタイルが取れそうで嬉しいですね。
これでNHibernate導入の敷居もかなり下がったかも。

Posted by Akishin at 1:51 午前
Categories: .NET, ソフトウェア
|