« July 2005 | Main | September 2005 »

August 2005

2005.08.30

Excelにテストデータを記述してJUnit

 JavaWorld 10月号にExcelを用いたJUnitのテストケース作成という内容の記事があったので、Excelの1行を1つのパターンのテストケースとみなしてJUnitを支援するプログラムを書いてみました(JExcelApiを利用)。なお、コメントの一部を省略しています。

import java.io.FileInputStream;
import java.io.InputStream;
import junit.framework.Assert;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
/**
* Excelファイルの内容を元にアサーション処理を実行します。
* なお、Excelファイルの1行目はコメント行としてスキップされます。
*/
public abstract class ExcelLoader {
private InputStream inputStream;
private String[] cellValue;
public ExcelLoader(InputStream inputStream) {
this.inputStream = inputStream;
}
/**
* 指定されたシート名のデータを用いてアサーションを実行します。
* なお、1行目のデータはコメントとしてスキップされます。
* @param sheetName
* @throws Exception
*/
public void executeAssertion(String sheetName) throws Exception {
try {
Workbook workbook = null;
workbook = Workbook.getWorkbook(inputStream);
Sheet sheet = workbook.getSheet(sheetName);
int rowCount = sheet.getRows();
for (int i=1; i<rowCount; i++) {
Cell[] cells = sheet.getRow(i);
cellValue = new String[cells.length];
for (int j=0; j<cellValue.length; j++) {
cellValue[j] = cells[j].getContents();
}
assertEachLine(i);
}
} finally {
if (inputStream != null) {
try { inputStream.close(); } catch (Exception e) { e.printStackTrace(); }
}
}
}
/**
* Excelデータ1行につき1回呼び出されます。
* このメソッドをオーバーライドしてアサーション処理の実体を記述してください。
* @param rowNo
* @throws Exception
*/
abstract protected void assertEachLine(int rowNo) throws Exception;
}

 実際に使う際は、このクラスを継承したクラスを(インナークラスとして)作成して、assertEachLineメソッド内で、A列の値とB列の値を元にテストを行うとC列の値となるかどうかをチェックする、というような感じの使い方をイメージしています。

| | Comments (0) | TrackBack (0)

2005.08.29

途中で名前が変わるメール(笑)

 途中で名前の変わるスパムメール・・・。

 ◆◇さんからご指名がありました。▲△さんへ連絡をとりたい場合はこちら。

のような感じ。

 なんなんでしょうね(笑)。

| | Comments (0) | TrackBack (0)

2005.08.23

Moog

 「シンセサイザーの父」ボブ・モーグ博士が死去
 シンセサイザであれこれやったことがある人なら、一度は耳にしたことがあると思われるMoog(ムーグ)、実は発音を間違えられたんだとか(日経新聞・8/23夕刊より)。
 中学生〜高校生の頃が一番はまっていた時代かなぁ。EL&Pやヤン・ハマーの曲は、ミュージックネットワーク社のPC-8801mkIISR用シーケンスソフト「PersonalMusician PC88」(って名前だったと思う)用のデータディスク(別売)に収録されていたのを聴いた記憶があります(EL&PがNUT ROCKER、ヤン・ハマーがStar Childって曲だったかと)。って、これはSoundBoardII用のデータでしたが。
 シンセサイザといえば、ENSONIQとかKURZWEILとかに憧れていたこともあったなぁ・・・(10年以上前の話ですが)。中高生に買えるようなものではなく、長い間Roland D-5を使用していましたが(その後中古でYAMAHA TX-81ZやSY22なども入手しましたが)。

| | Comments (0) | TrackBack (0)

2005.08.22

一家に1枚周期表

 こんなのあるんですね。→一家に1枚周期表
 中学生の頃に頑張って覚えたような記憶が。39Y(イットリウム)あたりまで覚えたんだったかなぁ・・・(今はいつ頃習うものなんでしょうか)。

 とりあえず、光沢紙+「きれい」モードで1枚印刷してみました。とはいっても、A4用紙への印刷なので、縮小されてしまいますが(^^;; ん〜結構ざらつきが見えるなぁ。まぁ、5年以上前のプリンタだから、仕方がないところか(CANON BJ-F300)。

| | Comments (0) | TrackBack (0)

2005.08.20

SWTのText widgetでの入力文字制限

 SwingのJTextFieldの場合は、javax.swing.text.Documentなどを使えば簡単に「数字のみ入力可能」「英小文字のみ入力可能」といった入力域を作成することができるのですが、それをSWTのTextで行おうとすると・・・試しに「数字のみ入力可能」なのを作成してみました。


text.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent e) {
char c = e.character;
if (c < 0x0020) {
} else if (c >= 0x0030 && c <= 0x0039) {
} else {
// 上記以外の文字の場合は入力拒否
e.doit = false;
}
}
});

 VerifyListenerっていうのを使用すると、とりあえず目的とする動きができました。1文字目への"0"の入力は不可、とするような動きをさせるならば、別途処理が必要となりますが。

| | Comments (0) | TrackBack (0)

2005.08.16

大雨と車

 先日、車を運転中に豪雨に遭遇しました。ワイパーの速度をHにしても、充分な視界の確保が難しいほど(^^;;
 とりあえずライトをつけて走っていたのですが・・・思いの外、車幅灯orライトをつけて走っている車が多かったですね。
 大雨や濃霧の時(特に白系の車)、トンネルの中(特に黒系の車)は、「自分の存在」を回りに知ってもらうためにも、せめて車幅灯はつけて欲しいところです。

も非常に怖いけど。

| | Comments (0) | TrackBack (0)

2005.08.11

コマンドプロンプト非表示(2)

 コマンドプロンプトからの引数との連結はstrcat()で行えたのですが、引数を渡そうと思ったら別途ショートカットを作成してプロパティを作成する必要があったりと、ソース中に埋め込んでいる部分は変更できなかったりと不便なので、基本となるコマンド部分を外部ファイルで定義できるようにしてみました。


#include <windows.h>
#include <stdio.h>

int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){
PROCESS_INFORMATION pi;
STARTUPINFO si;
char buffer[512];
FILE *fp;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
fp = fopen("exec.txt", "r");
fgets(buffer, 512, fp);
fclose(fp);
CreateProcess(NULL,strcat(buffer,szCmdLine),NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,
NULL,NULL,&si,&pi);
return 0;
}


 これをコンパイルしてできたexeファイルと同じフォルダにexec.txtを作成して、その内容を
javaw -jar hoge.jar
などのように記述してexeを実行すると、コマンドプロンプトを開くことなくhoge.jarを実行することができます。
 ただし、ファイル入出力部分が手抜き(正確には、詳しい処理の仕方をよく知らない、のですが)などの理由で、末尾に改行コードが入っていたらNGだったりします(苦笑)。

#ファイルのオープン・クローズのタイミングが正しいのかどうかも不明。

| | Comments (0) | TrackBack (0)

2005.08.07

コマンドプロンプト非表示

 Javaアプリケーションを実行する際、バッチファイル+javawコマンドを使用したとしても、一瞬コマンドプロンプトが表示されてしまうわけですが、CreateProcessというAPIを使うことにより、それを回避できるっぽいですね(正確に言うと、javawを起動するためのExeをCなどで作成する、という感じになりますが)。
 Cは全然わからないのですが、とりあえずLCC-Win32をインストールして、ここを参照して、以下のようなソースを書いてコンパイルしてExeを作成。


#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
PROCESS_INFORMATION pi;
STARTUPINFO si;

ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);

CreateProcess(NULL, "javaw -jar hoge.jar", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

return 0;
}


 一応これでコマンドプロンプトを表示させることなく、Javaアプリケーションを起動させることに成功(詳しいことは全然わからないのですが(苦笑))。SWTで画面を作れば、ぱっと見た目「Javaアプリケーション」ってわからないようなものになるかもしれませんね。

#実際のところは、引数などを処理できるようにしないと使いにくいと思いますが・・・。

| | Comments (0) | TrackBack (0)

2005.08.04

Apache Derby

 Apache Derbyが、つい最近(7月)Incubatorを卒業して、Apache DB projectに移ったんですね。
 過去に10.0.2.1は使用したことがあるのですが、10.1.1.0もリリースされたようで。他にも、Eclipse用のPlug-inもあるみたいですね。
 Derbyはいわゆるインストール作業は不要で、結構手軽に使えるDBなので個人的には結構気に入ってます。また時間が取れたら、Eclipse用のPlug-inともども試してみるとしますか。

| | Comments (0) | TrackBack (0)

« July 2005 | Main | September 2005 »