珍しく充実した週末

朝起きて、Javaのプログラムをいじったあと、自転車でポスト探しに行く。そのまま、事務所に行き、Movie Flash ConverterのVer1.08をリリース。テニススクールに行き、シングルス6-2で勝利。帰宅後、ビールを飲んで寝る。珍しく充実した週末だ。ポイントは早起きか?

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でのプログラムスタイルを模索中。

無名インナークラス 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(インターフェース)型のオブジェクトが作れたりそれにメソッドを定義できるのも変な話だな。なんか知らない話があるなぁ。

Java1.5 可変引数ばんざい

Java1.5の可変引数機能を初めて使う。printfとかは使っていたけど、自分でメソッド書いたのは初めて。極めて自然に使えて便利。長たらしく書いていた処理をコンパクトに書けるようになった。快感。

Java 1.5に移行

printfが使いたくてJava1.4から1.5に移行。やっぱりprintfは便利よね。で、ひさしぶりのJavaにも慣れてきたころ作っていたプログラムもなんとか完成。Javaもそれなりに面白いが、何に使うのか悩む。ある程度の規模がないとメリットが出ないような気がするし、処理速度ネックになる可能性があることはできない。ServletとかStrutsとか、一時期おもしろがってやったけど、結局 PerlとかRailsの方がいいような気がしている。つまり、ある程度複雑だけど、処理速度の要求はそれほどきつくないところであればJavaでもいいのかもしれない。今回のプログラムはちょうど良かったのだけど、正規表現(Pattern/Matcher)を多用しているのでPerlっぽくもある。

そのプログラムはプリント基板製造に使うガーバーファイルの面付けプログラムの改良版だったわけだけど、完成しそうだというタイミングにメールでp-banから面付けサービス開始を知らされる。もっと早く知っていれば、作らなくても良かったのに….私の基板って大抵シルク層が基板からはみ出しているのだけれど、p-banの面付けサービスってこういうのもきっちり面付けしてくれるのかな?今度 聞いてみよう。

PC-Watchより:アイ・オー、PoEに対応した8ポートスイッチングハブ「ETX-SHPE8N」。ついにPoE対応ハブが買えそうと思ったけど、既にプラネックス、PoE給電可能なポートを搭載した8ポートスイッチングハブとかコレガ、PoE給電機能搭載の8ポートスイッチングハブ「CG-SW08TX-PS」もあったのね。

kick4の定例会向けに、自宅でENC28J60をいじり中。出鱈目なパケットを送信しEtherReal(改めWireshark?)でパケットを確認できた。パケットを見れると楽だなぁ。

面白そうな本

ロボットの目をつくる、随分おもしろそうな本だな。こちらはエラく煽った広告文、Java Swing Hacks/ 今日から使える驚きのGUIプログラミング集本当だろうか。 楽しみにしていよう。

kinnekoさんとこで、ベアHDD用ケース裸族の服を知る。 よさそう。でもくさい そうだ。

subversion導入

subversion導入。Fedora3にはrpmもあるし、cygwinもnet-installできるので簡単。使い勝手はよさそう。svn mkdirが便利。svn importでまちがえてファイルを上の階層にぶちまけてしまう。

Eclipseからsvnを使おうとしてハマル。Subclipse(svnのプラグイン)はAll-In-One Eclipseに入っていて、設定だけでsvn+ssh経由でレポジトリを開けたが、操作するたびに窓がパカパカ開く。plink.exeを導入し、環境変数SVN_SSHを設定すると今度はplinkの窓が開く。SVNインターフェースを JavaSVN(Pure Java)に変更したら収まった。なんなのだろう。

Eclipse上でsvnからチェックアウトしたJSPのプロジェクトをWTPで表示(サーバー上で実行)させようとするが、表示してくれない。よく調べるとIE(Internet Explorer)でTOMCATサーバと接続できない。なぜかFireFoxや別のPC上のIEからは見ることができる。ふと問題のIEを見ると、Google Toolbarがポップアップをブロックしてますと表示が出ている。ブロックを解除するとTOMCATのページが表示され、WTP上でも表示されるようになった。うーむ。

今週はTOMCAT/Eclipse/JSP周辺でハマリまくり。久しぶりにやるから仕方ないのか?

All-In-One Eclipse

ひさびさにServletのプログラムを書く必要があり、Eclipseをインストール。All-In-One Eclipseを使うと日本語化+便利なpluginを一度にインストールできて便利。Servletの開発にはsysdeo TOMCATプラグインだろうと思っていたが、今はWTPというのがあって All-In-One Eclipseにも入っている。とりあえずこの記事をみながら試してみる。便利な気がする。