Input Method Framework

趣味でJavaのInput Method Framework IME制御まわりを勉強中。「ルートウィンドウ」方式は何もしなくても動く。「ビロウザスポット」方式も簡単にできそうな気がするのだがよくわからない。Javaのドキュメントがよく揃っていることには感心する。この辺の話はX11R5のころにも一度やったんだよなぁ。

Vista体験

Virtual-PC 2007をインストールし、バーチャルマシン上にWindows Vista Enterprise editionをインストール。思ったより順調に作業が進み、無事起動することができた。バーチャルマシン上なので、反応は遅いが画面はなかなかきれいだ。

Unix/Linux/X-windowの感覚で考えれば、OSとウィンドウマネージャは独立しているので、OSを買い換えなければウィンドウマネージャが新しくならないのはおかしいと思うが、そうしないと新しいOSをアピールできないという事情は理解できる。

バーチャルマシン上のVistaで、Movie Flash Converterの動作チェックを行う。意外なことに、OSのチェックを外しただけで動作、VistaはWindows-NT6.0だった。細かい問題がいくつか見つかったので、それらを修正し、近日中にVista対応版をリリースする予定。

問題解決

DirectShowを使っているプログラムがMediaPlayer11をインストールすると動かないという問題があって(って、こいつのことですが)デバッグしようとするとシステム全体が固まったかのように遅くなるので、なかなか解決できなかったが、Virtual PCでテスト環境を作りつつ、いろいろ実験を重ねるうちに、割と簡単にいろいろ試せる方法がみつかり、試しているうちにMediaPlayer11環境下でも動くようになった。ああ嬉しい。近日中に 対応版をリリースできる予定。

で、プログラム中にいろいろ調べることがあって、従来はMSDN Libraryなどを調べていたのだが、GoogleやGoogle code searchで検索した方が早いと気づく今日この頃。

Javaの本を読む

趣味でJavaのプログラム作成中。好きなだけクラス構成等をこねくりまわしているので、それなりに面白い。Swingの知識が不足気味なのでJFCプログラミングを読み直す。Actionを使ってみよう。

Java遊び

遊びでJavaのプログラムを作る。

仕事と同じことをする

このところ、Eclipse上でJavaのコーディングという仕事が続いている。なかなか快適な環境なので家でもやりたくなり、Eclipse3.2とSubclipseをインストール、Javaのコーディングを始める。作っているのは仕事とは関係ないプログラム。

会社やっている仕事と、家でやっている趣味の作業が同じで気分転換にならんと昔からよく思っていたが、仕事でやっていると趣味でもやりたくなっていたのかも…

クラス名completion機能が欲しい

仕事でJavaのコーディングをしていると、変なヘッダなどがついた妙に長いクラス名が多かったりする。EclipseのCtrl+1やAlt+/で楽に入力できる場合も多いが、未インポートのクラス名は入力できない。これの入力補助機能があれば便利だと思うが….自分で作ればいいのかもしれないが….誰か作ってないかな?

インナークラスからアウタークラスのメソッドを明示的に呼び出す

Javaで調子に乗ってインナークラスを使っていたら、インナークラスの親とアウタークラスでメソッド名がバッティング、アウタークラスのメソッドを呼び出すつもりが親のメソッドが呼び出されてしまった。アウタークラスのメソッドを呼び出す方法があるはずだと、ネットで調べるがわからない。プログラミング言語 Javaで調べるとちゃんと書いてあった。OuterClass名.this.method名で呼び出せばいいそうだ。

Javaのコーディングの日々

今日もJavaのコーディング。Eclipseの機能を覚えてさらに便利になってきた。Ctrl+1やShift+Ctrl+Oは前から使っていたが、宣言部の表示や参照部分の検索をよく使うようになった。ソース内を自由に移動できて、source navigatorでプログラムを書いている感覚だ。

リファクタリングの名前の変更以外の機能も、徐々に試しながら使い始めている。

Javaでプログラムの日々

仕事でJavaのコーディング中。最近、Javaのnull値ってどうよ、と思い始めている。nullがからむとコードが汚くなりがちな気がする。nullはポインタ(オブジェクト)のspecial valueであって、special valueを使って変数に複数の意味を持たせるのは、計算機のメモリーが少なかったころの名残りなのではないか。

でもねぇ、空のリストとか表現するのにnullは便利なのよね。代わりに new LinkedList()とか渡すの嫌だしねぇ。

あと、Javaだと複数の値を返すのが面倒。Cだと引数でポインタ、ポインタのポインタを渡せるので、値をいくつでも返すことができる。Javaだと引数でポインタ(オブジェクト)は渡せるが、ポインタのポインタは渡せないので、複数の値を返すには、オブジェクトや配列を使って値をまとめてやる必要がある。そのため、Cでよくやる 関数がうまくいったかどうかを値で返し、具体的な値は引数のポインタ経由で返すということが、Javaではきれいにかけない。

とかなんとか、Javaでのプログラムスタイルを模索中。

まじめに仕事…

真面目に仕事をする。Eclipseのコーディング補助機能(エラー自動修正?)は楽だね。

Google Maps API

Google MapでGPS

朝からGoogle Maps APIと戯れる。CGIのdirectoryのurlを登録したらkeyと一緒にサンプルのコードが表示されてそのまま組み込んでみたら地図が表示された。

その後API Documentationの例を見ながらコードを追加していくとすぐにGPSの受信データを地図上に表示できてしまった。なんて良くできたドキュメントなんだ。

Visual Studio 2005でemacs key-bind!!

オプション設定

Microsoft Visual Studio 2005を使っていて、つい emacsのつもりでCtrl+Nとか押す。最近はEclipseとかでemacs風のキー入力ができるから同じIDEで勘違いしてしまう。でも、待てよ。EclipseにあるからVisual Studioにもあるかも。オプション設定のキーボードのところを見ると追加キーボードマップスキームにemacsの文字がある。設定すると普通に使える。C-x C-sも使えた。C-x bは無いが、C-x C-bはある。ああ嬉しい。

無名インナークラス in Java

昨日Javaでわけがわからんと言っていたのは無名インナークラスのオブジェクトだそうだ。staticでないインナークラスは、生成時の親(外側のクラス)のオブジェクトのポインタを持っていて、親のメンバーにアクセスできるらしい。さらに、問題の new MouseListener() { .. }というような式で生成されるのは、無名(クラス名を持たない)の無名インナークラスのオブジェクトで、newの次にくるのはクラス名かインターフェース名、クラス名の場合はそのクラスを継承した無名クラス、インターフェースの場合はObjectを継承し、そのインターフェースを実装した無名クラスのオブジェクトが生成される。普通のクラス宣言を使っても実現できる機能を、コンパクトかつわかりやすく記述できるまさに シンタックス・シュガーというわけだ。

わかって、すっきり。安心して 無名インナークラスを使おう。

なんだなんだ、Javaのプログラムで…

JavaのGUIのイベント処理でよく見るプログラム

...addMouseListener(new MouseListener() 
{
  public void mouseClicked(MouseEvent e) {
    p = e.getPoint();
    repaint();
  }
}...

で、newされたMouseListerのメソッドで 外部のインスタンス変数をアクセスできるということを今日初めて知った。便利ではあるが一体どういう理屈だ?MouseLister(インターフェース)型のオブジェクトが作れたりそれにメソッドを定義できるのも変な話だな。なんか知らない話があるなぁ。