2003-04-01 [長年日記]
@ [perl] 速習 Perl: 1行スクリプト
OneライナーTips。
@ [jface] Windowにタイトルを
設定する場合は、ApplicationWindow#configureShellメソッドをオーバーライドし、このメソッドの引数のShellに対してsetTextでタイトルを設定すればOK。以下サンプルコード。
MyWindow.java -----
package demo;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.*;
/**
* Windowクラス
*/
public class MyWindow extends ApplicationWindow {
/**
* コンストラクタ
*
* @param parent このウィンドウの親のShell。
* トップレベルのウィンドウの場合はnull。
*/
public MyWindow(Shell parent) {
super(parent);
}
/**
* このウィンドウのShellの設定を行なう。
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("へろうわーるど");
shell.setSize(500, 200);
}
}
Main.java -----
package demo;
import org.eclipse.swt.widgets.*;
public class Main {
public static void main(String[] args) {
MyWindow window = new MyWindow(null);
window.open();
Shell shell = window.getShell();
Display display = shell.getDisplay();
while (!shell.isDisposed()) {
if (!shell.getDisplay().readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
ウィンドウのサイズを調整したい場合も、同様にconfigureShellメソッド内で、Shell#setSizeメソッドを呼び出せば良い。
2003-04-03 [長年日記]
@ 花見
土曜日はやっぱり雨か...中止かな。
@ Apache-2.0.45
けっこうやばい脆弱性があったらしいので、アップデート。
@ 英語の読み方
この業界にいると、sudoとかcronとか、変な読み方(?)の単語にいっぱい出くわする。たとえば、Maildirは「メイルディル」ってずっと読んでたけど、今の職場の人は「メイルディア」って発音してた。dirはdirectoryなんだから「ディル」って発音した方がわかりやすいような気がするけど。ちなみに「クーロン」と聞くと九龍という漢字を思い浮かべてしまうのは自分だけだろうか...
2003-04-05 [長年日記]
@ [linux] kernelの更新
VineのErrataにkernelにセキュリティホールがあるよ、と書いてあったので、さっそくダウンロードして
# rpm -ivh kernel-2.4.20-0vl24.1.i686.rpm # /sbin/lilo
を行ない、rebootしたところ...全然更新されてない。
なんでだろうと考えてたら、そもそもこのマシンはWin2000とデュアルブートになっていて、Win2000のOS Loaderを使ってbootしていたことを思い出す。
ということで以下のコマンドでブートセクタをファイル化して、めでたくkernelが更新されましたとさ。
# dd if=/dev/hda5 of=/win/d/bootsect.linux bs=512 count=1
そんなわけでおやすみなさいm(__)m Zzz...
2003-04-06 [長年日記]
@ SCJP 1.4
受かった。事前にやっていた模擬試験より全然難易度が高く、「う〜ん、この問題ビミョー」っていうのが約半数を超えていたので、最後の「終了」ボタンを押すのにすごいドキドキ。はっきり言って
ナメてかかると落ちます、これ
ところで、最初にやったアンケートみたいなやつはもしかすると実際の試験の問題の難易度に関係してくるんだろうか?
ちなみに、誰か↓1500円ぐらいで買いません?
@ [eclipse] ショートカットキーの対応表
2.0でのショートカットキーの対応表。デフォルトとEmacsのキーバインディングが載ってる。
2003-04-07 [長年日記]
@ [jFFFTP] 今日のjFFFTP
なんか久々。ビルドファイルを大幅に書き換える。ソースファイルのtabをスペース4個に変換したり、リソースファイルのトークンを置換するように設定したり。おかげでだいぶAntの達人になったような気がする。
あとはJFaceDbcのソースを見て、FFFTPの接続のダイアログが出せるようにした。実際のActionはまだできてないけど。
@ [ant] Ant詳説
Antのタスクについて、めちゃめちゃ詳しく書いてある。Antの日本語のドキュメントとしては、一番情報量が多くてかなりお薦め。そういえば、前もメモしたような気がするなぁ...
@ 東京三菱ダイレクトでMozillaが使用できない
これはMozillaのバグになるのか?(w でも対応してくれると嬉しいな。
2003-04-09 [長年日記]
@ [jFFFTP] 今日のjFFFTP
クラス数が多くなってきてごちゃごちゃしてたのでちょっとパッケージなどを整理。あとはHelpでライセンス情報などを表示できるようにした。ところでSWTでショートカットキーってどうやって割り当てるんだろう...
追記: メニューのアイテムに対しては、MenuItem#setAcceleratorを使えば良さそう。
追記2: って思いっきりSWT掲示板に書いてあるね。ただいまJFaceではどうやってメニューにショートカットキーを割り当てるのか調査中(仕事しろよ)。
@ [jface] メニューの表示
ちょいと時間があるのでメモ。JFaceでウィンドウにメニューを表示したい場合は、org.eclipse.jface.action.MenuManagerを使用すればいいらしい。概念的にはSWTと同じく、MenuManagerクラスがメニューバーおよびメニューのコンポーネントとなっているようだ。
Windowクラスを継承したクラスで、そのウィンドウにメニューを表示させるには、 createMenuManager メソッドをオーバライドすればよい。
package demo;
import org.eclipse.jface.action.*;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.*;
/**
* Windowクラス
*/
public class MyWindow extends ApplicationWindow {
/**
* コンストラクタ
*
* @param parent このウィンドウの親のShell。
* トップレベルのウィンドウの場合はnull。
*/
public MyWindow(Shell parent) {
super(parent);
}
/**
* このウィンドウのShellの設定を行なう。
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("へろうわーるど");
shell.setSize(500, 200);
}
/**
* このウィンドウのコンテンツを作成する。
*/
protected Control createContents(Composite parent) {
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL | SWT.NULL);
getMenuBarManager().updateAll(true);
return parent;
}
/**
* このウィンドウを作成する。
*/
public void create() {
addMenuBar();
super.create();
}
/**
* このウィンドウのMenuManagerを作成する。
* MenuManagerに登録されているものが、メニューとして表示される。
*
* @return このウィンドウのMenuManager
*/
protected MenuManager createMenuManager() {
// メニューバーの作成
MenuManager bar = new MenuManager();
// "File"メニューの作成
MenuManager fileMenu = new MenuManager("File");
// メニューのアイテムを作成
Action openAction = new MyAction("Open");
Action saveAction = new MyAction("Save");
Action exitAction = new MyAction("Exit");
fileMenu.add(openAction);
fileMenu.add(saveAction);
fileMenu.add(new Separator());
fileMenu.add(exitAction);
bar.add(fileMenu);
return bar;
}
}
なお、このMyWindowクラスでは、createメソッドを継承して、addMenuBarメソッドを呼んでいるが、これをsuper.createの前に行なわないとNullPointerExceptionが発生するので注意*1。メニューに追加しているMyActionというのは、org.eclipse.jface.action.Actionを継承したクラスで、このクラスのrunメソッド内で、メニュー押下時のコードを記述していけばOK。
MyActionのサンプルコードはこんな感じ。
package demo;
import org.eclipse.jface.action.Action;
/**
* Action
*/
public class MyAction extends Action {
public MyAction(String text) {
super(text);
}
public void run() {
System.out.println("ほげほげ");
}
}
なお、MyWindowクラスを使用するMainのコードは前回と同じ。
上記のコードをコソパイルして実行するとこんな感じでメニューが表示される(GTK+版の場合)

*1 なんでかはようわかりましぇん。きっとコンポーネントを作成する順序の問題なんでしょう。
2003-04-10 [長年日記]
@ [swt] ショートカットキー
MenuItem#setAcceleratorメソッドを使用しなくても、MenuItem#setText("Open\t(Ctrl+O)")とテキストに入れておけば、勝手にショートカットキーを設定してくれるらしい。ALTキー+キーの場合は、"File(&F)"。なんじゃこの仕様は?
それにしてもあいかわらず、JFaceでMenuManagerからショートカットキーを設定する方法がわからん。ActionならsetAcceleratorメソッドがあるんだけどなぁ...
@ リチャードストールマンのインタビュー
ハロウィーン文書の翻訳で有名な山形浩生さんがインタビュー。1997年って書いてあるからかなり前のですね。
2003-04-11 [長年日記]
@ developerWorksを見ていて
やっぱり進んだ情報は英語版の方が充実しているなぁということを最実感。
@ スコープ
自分は↓みたいなのも最近は嫌いです。
Iterator it = map.keySet().iterator(); // mapはjava.util.Map型
while (it.hasNext()) {
なんか処理;
}
理由は、この書き方だと it という変数が以降宣言できなくなってしまうから*1。なので、最近好んで使うのは以下のスタイル。
for (Iterator it = map.keySet().iterator(); it.hasNext(); ) {
なんか処理;
}
ちなみに、変数の再利用がよろしくないと思う理由は、たとえばその変数が何の型で宣言されているかを知りたいときに、ソースの上の方までたどらなければいけないから、です。
*1 「再利用すりゃーええやん」という話もあるけど、変数の再利用もよろしくないと思う
2003-04-12 [長年日記]
@ [jface] TableViewer
TabのCompositeにTableViewerを貼っ付けて、TableViewer#setInputでデータをセットしようとすると、なぜか
org.eclipse.core.internal.runtime.AssertionFailedException: assertion failed: The application has not been initialized.
と怒られる。「アプリケーションが初期化されていない」って一体何のことだろう。ウィンドウは普通に表示されてますが?
原因が不明なので、とりあえずTableViewer#getTableして、普通にデータをセットしよう。しかしこれではJFace使ってる意味が...
2003-04-13 [長年日記]
@ [java] JUnit 3.8.1でNoSuchMethodError
JUnitでテスト対象のメソッドを呼び出そうとすると、なぜかNoSuchMethodErrorになってしまう。しかもある特定のメソッドだけ*1。コンパイルは通るから、NoSuchMethodErrorなんか起こらないはずだけど...javacのバグかぁ?
*1 requireEqualというメソッド
2003-04-15 [長年日記]
@ ねむねむ
やっぱり月曜日に飲むとそれ以降の日が辛いっすね。
2003-04-16 [長年日記]
@ [memo] eXTReMe Tracking
本日のリンク元から見つけたんだけど、どうやらURLを登録しておくと、そのURLのアクセス情報を生成して閲覧できるようにしてくれるものみたい。
プロバイダのディスクスペース上にあるWebページのアクセス情報などを見たい場合とか、統計情報生成ツールをインストールするのが面倒な場合に登録して置くとよさそうですね。
@ [emacs] Meadow memo
Meadow(Emacs)のキーバインドや、関数などの情報がとても詳しく載っている。
2003-04-17 [長年日記]
@ あいたた
今週はどうも腹がブレイク気味で、朝は仕事になりませぬ。あー、こんなこと書いているそばから第2波が...逝ってきます。
@ Wikiはプログラマの道具?
Wikiを使っている人って、大多数がプログラマの人だと思ってたんですけど、FSWikiの設置サイトを見ていると、そういうわけでもなさそうですね。
もちろん、Wiki自体は使い方さえ覚えれば誰だって使えるものだっていうのはわかってるんですけど、なんとなくそんなイメージがあったので。
@ Mozilla dot Party in Japan 4.0
気が向いたら行ってみようかな。無料だし。
2003-04-18 [長年日記]
@ シクシク...
今日はちょっと(いやだいぶ)悲しい出来事がありました。仕事などもう手につきません。なるべくはやく帰って寝ることにします。
@ 検索文字列
お願いだから、「呪いのかけ方」とか「おいぬめ」などで検索しないでください(^^;
2003-04-19 [長年日記]
@ 土日のTODO
jFFFTP関連は
設定ファイルのSchema書き直しlog4jを使ってログしている部分をcommons-loggingに差し替え- Threadプールをどうするか決める
メインウィンドウの構成考え直し
などなど。
あと、ベイキット関連でConvのCVSリポジトリを入れ替えなければ。
@ この日記のURL
たぶん何人かの人は http://kazz.homeunix.org/~kazuhiro/ruby/tdiary/ のURLでアクセスしてるかと思いますが、これ次回tDiaryバージョンアップ時に(1ヶ月後ぐらい?)に使えなくしようと思っているので、 http://kazz.homeunix.org/~kazuhiro/diary/ のURLでアクセスお願いします。
2003-04-20 [長年日記]
@ kernel更新完了
実は勝手にアップグレードしてたり(汗)。以前2.4.18から2.4.19にしようとした時はRTL8139のNICをちゃんと認識してくれなかったので、ずっと2.4.18のまま放置していたのですが、今回はちゃんと調べました。んで、どうやらkernelのブートパラメータに append="noapic acpi=off" を追加すると、ちゃんとNICが使えるようになりました。これで今日から何の気兼ねもなく寝れます:-) おやすみなさい。
2003-04-23 [長年日記]
@ そうですか
次のプロジェクトはCですか...Cでまっとうなプログラム書いたことないけど、大丈夫かなぁ。
@ C
まぁVC++とかではない(Unix C)だけまだマシかな、と思い始めました。でもJavaから入っちゃうと、「いまさらC?」なんて思っちゃいます。だって、
for (int i = 0; i < 10; i++)
が出来ないんだもん。
2003-04-24 [長年日記]
@ [perl] quotemeta関数
こんな関数があったんですね。ちょうど仕事でFSWikiと同じ問題に遭遇して、「スマートな方法ないかなー」って考えてたので、FSWikiのソースが参考になりました。
2003-04-25 [長年日記]
@ オープンソースソフトウェアに対するユーザの要望について思うこと
基本的に、「こういう機能が欲しい」と思うのなら、自分の手でやるというのが大原則だと思います。ソースはそのために公開されているのではなかったでしたっけ? もちろん、大多数の人が望むような機能ならば、作者はそれを実装するものだと思いますが...
2003-04-30 [長年日記]
@ [ant] ant-contribを使ってみた
以前foreachタスク使えそうと書いたant-contribを使ってみました。foreachタスクだけなぜかExampleがなかったので、ここにメモっておきます。
このforeachというタスクはいわゆるループ(イテレーション)を行なうためのもので、targetパラメータで指定したターゲットを複数回実行するものです。 たとえば、Shell(Bash)でdocディレクトリ以下の.sdocファイルに対してsdocを実行するには
for file in doc/*.sdoc; do sdoc $file done
と書きます。これと同様のことをforeachタスクでやるには以下のように書きます。
<!-- ant-contrib関連のタスクの宣言 -->
<target name="init">
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
</target>
<!--
docディレクトリ下の.sdocファイルに対して、
ターゲットsdocを実行する
-->
<target name="foreach" depends="init">
<foreach param="file"
target="sdoc">
<path>
<fileset dir="doc" includes="*.sdoc"/>
</path>
</foreach>
</target>
<!--
sdocコマンドを呼び出す。fileプロパティはforeachタスクの
paramパラメータで設定される
-->
<target name="sdoc">
<exec dir="."
executable="sdoc"
vmlauncher="false">
<arg line="${file}"/>
</exec>
</target>
なぜにループの対象がtargetなのか*1はげしく謎ですが、これでShellっぽいこともAntで実現できるようになりました。
*1 タスクをイテレートできれば、もっとShellっぽく書けるのに
@ [life] GWのTODO(優先度高い順)
- Baykitのプロジェクトのビルド環境整備
- 会社のメール鯖にMLサーバをいれる(ezmlm? fml?)
- jFFFTPでブックマーク編集機能を実装する
家サーバにqmailをいれる- Cの勉強
と目標を立ててみても、まともに作業できる日が今日と2日しかないので、どれも微妙な感じですが...
@ [life] 今日一日
銀行で口座切替え -> 女優霊観賞 -> 昼寝 -> BSBのbuild.xmlに手をつける
昼寝なんてしたのは何ヶ月ぶりだろうか。これやっちゃうと昼夜逆転の生活を送る羽目になるので、しばらく控えてたのに。関係ないけど、夜中の1:50ぐらいから池袋ウェストゲートパークの再放送がやってる。ビデオレンタルする手間が省けて良い。
あと、現実逃避でmonoをインストールしてみた。monoとlibgcのSRPMをrebuildして rpm -Uvhですんなり入る。お決まりのHello Worldプログラム書いてみたけど、なんつーかものすごい既視感に襲われるのは自分だけだろうか? そもそもJavaに対するC#の強みって何だろう? この言語、使えたらいいんだろうけど、あくまでM$主導のテクノロジーだから将来性に激しく不安を覚える。
# まことす [sudo(エスユードゥー)、cron(クロン)、Maildir(メイルディア)、Cactus(カクタス)、ORO(オ..]
# おいぬめ [sudoは「スゥードゥー」って発音してます。これ以上言うと無意味な宗教戦争になりそうなので、やめておきます(w pa..]