JDK1.5 の javadoc で package.html を指定すると複数のパッケージコメントのソースと言われて警告になる

– 正しく出力されるので害はないものの、毎回警告がでていたので調べてみた。警告内容は次の通り。

javadoc: 警告 – パッケージ “x.y.z” に複数のパッケージコメントのソースが検出されました。

英語だと以下。

Multiple sources of package comments found for package “x.y.z”

Java Forums <http://forum.java.sun.com/thread.jspa?threadID=599721&tstart=0> にずばり回答が。

Yep. The Doclet interface of the Doclet API specifies a method
 
void setRawCommentText(String text)
 
prior to 1.5 this method did exactly what its name implies. With 1.5 the implementation was changed to generate a warning and do nothing if it was attempted to set the comment text multiple times.
What happens is this:
Javadoc sees the package.html files in the sources, creates an appropriate Doc (PackageDoc) instance and sets the comment text. Then for some reason Javadoc encounters package.html files for already existing Doc instances and tries to set the comment text a second (third, fourth, …) time.
So, all you need to do is to ensure that Javadoc parses the package.html file for a given package only once, i.e. ensure that only sourcepath points to the package.html files but not classpath.

1.5 から package.html が複数見付かった時に上書きしつつ、警告を出すようになったとのこと。
ここで例にあるとおり、 javadoc のオプションで、 sourcepath でパッケージのある場所を示しつつ、なおかつ classpath でも示していたのが原因だった。Eclipse ではリリースディレクトリにも package.html をコピーしてくれていて、結局それが source のものと重複してしまった。
 
そもそも不要な、classpath からリリースディレクトリ(bin)の指定を外して解決。

javadoc でパッケージの説明をつける

– package.html というファイルを、指定したいパッケージのソースディレクトリに入れれば自動で読みとってくれる。<body> ~ </body> の最初の文を、概要のほうのパッケージの一行説明に使い、それ以外はパッケージの説明ページに使われる。
<http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/javadoc.html#packagecomment>
– javadoc – Java AAPI ドキュメントジェネレータ: パッケージコメントファイル
JDK1.2 から利用可能。

emacs で diff

<http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs20/ediff.html>
– Emacs 活用法: Ediff の使い方
M-x ediff-merge として、二つのファイルを選択する事で可能。そのままマージができるので便利そう。
M-x ediff-files で主に片方のファイルにするとか。
終わったら q で閉じて ediff-merge バッファをファイルとして保存すればいい。やめたくなったら C-] 。
 
Info -> Emacs -> Emerge の項目にその他コマンド等の説明があるらしい。

FreeBSD で java/linux-sun-jdk14 を使っていると "Can’t detect initial thread stack location" が出る原因

– make で表示されるインフォメーション通りにやっていないと jar で出たりする。

FreeBSD JDK, in ports/java/jdk14.
 
This Java VM will attempt to obtain some system information by
accessing files in linux’s procfs. You must install the Linux
emulation procfs filesystem for this to work correctly. The JVM
will exhibit various problems otherwise. This can be accomplished
by adding the following line to your /etc/fstab file:
 
linprocfs /compat/linux/proc linprocfs rw 0 0
 
and then, as root, executing the commands:
 
kldload linprocfs
mount /compat/linux/proc

説明通り、 /etc/fstab に

linprocfs /compat/linux/proc linprocfs rw 0 0

を追加して
$ mount /compat/linux/proc
を実行すればよい。

失敗

cat foo | sed -e ‘s/any/proc/’ > foo

ファイルの破壊、うっかりしてるとちょくちょくやる。 foo は 0 byte になってさようなら。これを回避するには、

sed -e ‘s/any/proc’ foo

でよい。

tmpfs

メモリ上に置ける FileSystem.
次のようにして使う.

mkdir /var/lib/mysql/shm
mount -t tmpfs -o size=1024m tmpfs /dev/shm
mount -t tmpfs -o size=1024m /dev/shm /var/lib/mysql/shm

Apache を簡単に chroot する

ports:www/mod_chroot
(http://core.segfault.pl/~hobbit/mod_chroot/)
Apache13 でも問題なく動くようにテストされてるけど 20 以降だとさらに手軽にできるとか書いてる.
mod_security の chroot 特化バージョンという位置付け.
ただし Directory, Location, VirtualHost の中には入れられない.
 
追記(2008-03-21):
FreeBSD の ports を使って Apache22 で試したところ、問題なくビルド、インストールできました。
VirtualHost を使っている場合は、VirtualHost ごとに chroot にするのではなく共通の chroot を使い, Apache を root 権限実行して VirtualHost ごとに所有者を分け, DocumentRoot を 0700 にして suexec で所有者権限でしか実行できなくするのが望ましいかもしれません。

SSH を SOCKS Proxy として使う

ssh -D port remort オプションで ssh クライアントが SOCKS サーバになる. PuTTY でもトンネルという機能でできますな.
あるいは Port Forwarding + tinyproxy で ssh -L 8888:localhost:8888 remotehost みたいな.
AAAA を持った web サーバにアクセスすると空白ページになる.. IPv6 が甘い? FireFox で試しても空白ばっかでよくわからず..
追記: 以下のようにすることで IE で成功.
1. PuTTY の設定でトンネル追加に Dynamic, IPv4 チェック, Listen するポートを任意のポート(8888)に設定. 宛先は空にする.
2. IE の proxy 設定で SOCKS を localhost:8888 にし, それ以外のプロトコルを空白にする.
3. ブラウザでローカルネットワークを叩く.
<http://google.co.jp> とかやったら PuTTY が強制終了した…
追記 : 結構頻繁に切れる. Firefox/Thunderbird では proxy をドメインやホスト名でなく IP アドレスにしないとつながらないとかいう現象もあり(Thunderbird 1.0).

PukiWiki で DATA_HOME を変更する

ドメイン固有のデータをまとめるのにDATA_HOME を data/ などにするとよい. 以下その手順.
– index.php,pukiwiki.php の define DATA_HOME を ‘data/’ に変更.
– データ関係を data/ に移動.
  $ mv {wiki,diff,backup,cache,attach,counter,trackback,plugin,skin} data/
  $ chmod o+w data/{wiki,diff,backup,cache,attach,counter,trackback,plugin}
  $ mv {ja.lng,pukiwiki.ini.php,default.ini.php,rules.ini.php} data/
– 望むなら lib/init.php の error_reporting を書き換えてエラーを冗長にできる(デフォルトは E_NOTICE | E_WARNING).