These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

おはようございます♪ 現在は4月28日(日)7時3分。 朝御飯のお時間です。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2003年01月 来月
01 02 03 04
05 06 07 08 09 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2003年01月01日(水)(自宅) BGM:レスピーギ- ローマ三部作

(自宅) BGM:レスピーギ- ローマ三部作

謹賀新年

あけおめことよろ…

。。。:

と、試しに書いてみましたが、
新年になったからといって何か嬉しい事がある訳でもなく、 単に昨年守れなかった色んな〆切を、 泣きながら棚卸し & 再計画の作業をしている自分がここにいます。

今年の目標:

今年の目標は一日一技術ネタです。
昨年を振替ってみて思うのですが、 自分は少し調べれば分かるような事を、 調べても時間がかかったり分からなかったりするのではないかという不安で、 作業そのものを先延ばしにしてしまい、 その為に周りに迷惑をかける事が多くあった気がします。
気になる事があったら、(緊急の仕事が他にない限り) 納得できるまでとことん調べる姿勢が大切なのだと痛感しています。
あ。おそらく関係者からは、
それって、前から何度も言ってるじゃないか。
いまさら何いってるんだ。こいつは。
という感想を持たれそうですが、頭では分かっていたつもりでしたが。 残念ながら。実践は出来ていませんでした。
今年なら実践できるのかというと、正直分かりませんけど…

[JXTA][Java][research] MyJXTA2 と JXTA Config

通常、「PeerGroupFactory.newNetPeerGroup();」の呼び出し等で、 JXTA エンジンを始動 JXTA core のインスタンスを取得 しますと、 JXTA Config Windowが開いて GUI 上で設定を行うか、 GUI が開けない環境では、コンソール上のプロンプトでパラメータを入力させられますが、 MyJXTA2 ではある程度の設定を自動生成し、最低限必要なパラメータも MyJXTA2 自身の GUI で処理しています。
確かに、アプリケーションによっては 決め打ちにして構わない設定もありそうですし、 MyJXTA2 のように一般ユーザをターゲットとするアプリケーションは、 画一的に JXTA Config Windows を開くより、 MyJXTA2 のようなアプローチは好ましいと自分は思います。
# JXTA の一番始めのハードルは Jxta Config だと自分は感じますし…
そこでどのように実現しているかを調べてみました。

ソースコードのディレクトリ構成:


MyJXTA2 のソースコードは から取得できます。自分は cvs の factor ブランチ を利用しています。
yoya@awm.jp% cd myjxta2/binding/java/src/net/jxta/myjxta2/
yoya@awm.jp% ls
CVS/         chat/    content/  net/     search/  util/
MyJXTA.java  config/  core/     plugin/  ui/
ソースコードの置き場所は、このようなディレクトリ構成になっています。
今回、参照すべき場所は、 config ディレクトリです。

AutoCofig:

MyJXTA.java からは AutoCofig オブジェクトを生成して doAutoConfig メソッドを呼び出しますので、 config/AutoCofig.java から追って行けばよさそうです。
まず、AutoCofig の constructor では guessConfigUrl メソッドを呼び出します。
guessConfigUrl のコメントには、
// [gonzo] don't display config dialog if a rules file is
//         specified
と記されています。コードを眺めますと
String urlString =
	System.getProperty("net.jxta.myjxta2.config.url");
if (urlString != null) {
                try {
                    configUrl = new URL(urlString);

                    break;
                } catch (MalformedURLException mue) {
                }
            } else {
                urlString = "file:conf/PublicAdminRules.xml";
            }
	<略>
	URL tryUrl = new URL( urlString );
のように、コンフィグを生成する 雛型としてのルールファイルの取得元を決定するルーチンだと分かります。
プロパティの net.jxta.myjxta2.config.urlが指定されていない場合は、 ローカルの conf/PublicAdminRules.xmlが取得元になります。
そして、doAutoConfig -> buildRules の順で呼び出し。
buildRules の中で、AdminRules オブジェクトを生成して、 先程取得した雛型のルールを load します。
private AdminRules buildRules() {
	AdminRules rules = new AdminRules();

	rules.load(configUrl);
	rules.preprocess();

	return rules;
}

AdminRules:

次は、config/AdminRules.java を参照します。 constructor では何もしていませんので、load から見始めます。
  public void load(java.net.URL location) {
	...
      FileReader fr = new FileReader(cacheFile);
      cachedRules = read( fr );
	...
      InputStreamReader isr = new InputStreamReader( location.openStream() );
      adminRules = read( isr );
	...
}
実際の読み込み処理は、read のようです。 (例外処理をごっそり省いてます…)
import net.n3.nanoxml.IXMLParser;
import net.n3.nanoxml.IXMLElement;
import net.n3.nanoxml.IXMLReader;
import net.n3.nanoxml.StdXMLBuilder;

public IXMLElement read( Reader reader ) {
	IXMLParser parser = null;
	IXMLElement parsed = null;
	...
	parser = XMLParserFactory.createDefaultXMLParser();
	...
	IXMLReader xmlReader = new StdXMLReader( reader )
	parser.setBuilder( new StdXMLBuilder( new ConfigElement() ) );
	parser.setReader( xmlReader);
	parsed = (IXMLElement) parser.parse();
	...
	return parsed;
}
また、JxtaBuilder 内での各設定項の生成処理を合わせて読みますと、 JXTA の設定ファイルが XML の形式であるという事から、 XML パーサ&ビルダを用いて、 力ずくで設定ファイルを作成しているように見えます。(汗…
てっきり、
  • Config Window を立ち上げない為にモード切替え
  • 設定ファイル生成インターフェースのようなものが隠されている
  • Config 関係のクラスをオーバーライドしたクラスのインスタンスを どこかに登録する
あたりではないかと予想していたのですが、外れていたようです。
よくよく考えますと、 JXTA エンジンが動き出した時に、 JXTA core のインスタンスを取得する際に、 設定ファイルが無かったり、reconf ファイルが存在する時に、 (GUI 付きの) JXTA Config が動き出す訳で、 予め自分で config file を所定の位置に作ってやれば、 Config Window が|開かないのは当然でした。
かなり悔しいです…

TLS princical:

普通に起動すると、Config とは別にダイアログウィンドウが開いて、 ユーザ名(principal)とパスワードの入力を求められますが、 これも MyJXTA2 では MyJXTA2 自身の GUI に統合されています。
こちらについては、 JxtaBuilder.java が参考になります。
// have to dig into implementation code to see if password has been configured.
import net.jxta.impl.endpoint.tls.JTlsUtil;
import net.jxta.impl.endpoint.tls.TlsConfig;
	...
void configure() {
	...
	if (! reConfigure) {
		TlsConfig.init(rules.fetch("peer-config>peer-user-name"),
		rules.fetch("peer-config>peer-user-password"));
	}
	...
TlsConfig を使えば解決できそうです。
ただし、JXTA では net.jxta.tls.principal と net.jxta.tls.password の プロパティで指示する事もできますので、
private void checkPassword() {
	//    If the passwd exists, then validate it.
	//
	//    We are called for three cases:
	//    1) Initial configuration of everything
	//	   passwd file does not exist
	//    2) Reconfiguration:  passwd file exists
	//    3) Restarting the platfrom: passwd file exists

	String password = System.getProperty("net.jxta.tls.password");
	String principal = System.getProperty("net.jxta.tls.principal");

	if (password != null && principal != null) {
		return;
	}
	...
このように、Property の値を読み込んでチェックする必要があります。

JXTA AutoConfig:

長々と説明してしまいましたが、 言いたいことを整理しますと、
MyJXTA2 と同じように JXTA の Config を自動化したい場合は、 MyJXTA2 をインストールして、その jar ファイルを CLASSPATH に通し、 「file:conf/PublicAdminRules.xml」を用意するか、 別サーバにある場合は、net.jxta.myjxta2.config.url で指定する。 そして、AutoConfig オブジェクトを生成して、doAutoConfig を呼べば、 機能を流用できるのではないかという事です。
MyJXTA2 の GUI に統合されている部分は切り離す必要があるかもしれませんが、 そこは、gonzo さんに相談して再利用しやすい構造に変えれば済む事ですし。

[XML][Java] NanoXML

先ほど、MyJXTA2 が XML パーサとして net.n3.nanoxml を利用しているのを 確認しました。
import net.n3.nanoxml.IXMLReader;
	...
MyJXTA2 プロジェクトは、NanoXML のクラス郡を 「myjxta2/binding/java/lib/nanoxml-2.2.jar」に格納しています。
同ディレクトリのnanoxml.LICENSE を読むと、 NanoXML のページとして、 を紹介されていましたが、 に移動していました。
この NanoXML のページを読みますと、 といった事が書かれています。
SAX の実装系の一つという捉え方も出来ますので、 今後、お世話になりそうな予感がします。

[keyword] 本日の検索ワード

シグナル CHLD:

以前、CHLD シグナルとゾンビ・プロセスの関係について長々と説明しましたので、 識者からの指摘や苦情を待つ事にします。

vaio srx7 melco無線LAN:

上記の体験談は SRX3 の例ですが、SRX7 でも同じだと思いますので紹介します。
自分は WLAR-L11 という初期の頃に出た、古い機種を利用しています。
A.P. 付属の LAN カード + Compaq プレサリオノート PC では 接続できていたのですが、 VAIO SR の内蔵無線 LAN では、WLAR-L11 のファームを v1.05 以上にしないと 継りませんでした。
尚、少し前まで SRX7 から上記の Melco の A.P. 経由で 家庭内 LAN に繋げていました。一階とニ階で離れて使うf少しつらいですが、 telnet 等でない限り、特に不満もなく使えていました。

[bookmark] ぶっくま〜く

モジュールをインストールしよう:

Perl モジュールのインストール方法を質問された時には、 このページを紹介すると良いかもしれません。

JavaScript Tip 集:

JavaScript の食えない事情 が特に読み応えがありました。

[note] メモ

プラネックス FXG-08TX:

ファンレスの GbE ハブです。

2003年01月02日(木)(自宅)

(自宅)

はいぱ〜日記システムのカスタマイズ

カテゴリ分類:

近頃、全文検索の限界を感じる事がありまして、 を参考に、カテゴリの分類を始めました。
まずは、
  • awm 環境構築
  • bookmark ぶっくま〜く
  • research 調査
  • memo メモ書き
の4つで分類を始めて、必要に応じて少しずつ増やしていこうと思います。

テーマ:

はいぱ〜日記システムは見映え・概観を「テーマ」としてまとめる事が出来まして、 public_html/diary/ 内に適当なディレクトリ名を掘り、 その中に、theme.ph を作成して、 public_html/diary/config.pm の $Theme でそのディレクトリ名を指定する事で、 テーマを指定する事ができます。
自分は stripe を利用させて頂いているのですが、 README に、カスタマイズの仕方が説明されていましたので、 その記述に従って、ファイルをいくつか書き換えました。
背景の変更
css -> BODY -> background-image: url の定義を(stripe/stripe.gif) から (stripe/stripe-grape.gif) に変更
リンクの表示
P.I.M テーブルを2分割から3分割に増やして、 <td>%link </td> を追加する。col の width も微調整
時間対応メッセージの変更
第3者から見ると馴れ馴れしい文面だと思いますので、 少しかしこまった言い方に変更しました。
CSS の border 定義の調整
border の幅や色をこまごまと変更して、少し立体的な雰囲気を作っています。

[memo] ImageMagick convert

使いかたのメモです。

サイズの変更:

倍の大きさにする
convert -geometry 200% src.jpg dest.jpg
ImageMagick 5.5.5 のドキュメント には、-resize オプションが載っていますが、 自分が使っている、covert (ImageMagick 5.2.9)は、古い為か
yoya@awm.jp% convert -resize 128x128 src.jpg dest.jpg
convert: Unrecognized option (-resize).
のようにオプションとして認識できませんでした。

明度、彩度、色相:

明度を 20% 上げて、彩度を 30% 下げて、色相は変更しない場合。
convert -modulate 120,70 src.jpg dest.jpg

ガンマ補正:

明るく調節する場合。
convert -gamma 2.3 src.jpg dest.jpg
暗く調整する場合。
convert -gamma 0.8 src.jpg dest.jpg
R/B/G について各々、1.7/1.0/0.8 の補正をかけたい場合、
convert -gamma 1.7/1.0/0.8 src.jpg test.jpg

平均化:

ならす範囲を 2 ピクセル周辺にする場合は、
convert -median 2 src.jpg test.jpg
輪郭の明確な人物画などを 2ピクセル前後で平均化すると、 輪郭の線が不明確になり、壁紙等にしても邪魔にならなくなります。

[Java][Database][research] GOODS Generic Object Oriented Database System

JXTA search を動作させる前準備として、JXTA search が peer で利用している GOODS データベースを導入します。
その名の通り、Object Oriented なデータベースですので、 C++ や Java 等、オブジェクト指向といわれるコンピュータ言語との 親和性が高いそうです。
Perl インターフェース ( 配布場所 | 作者のページ ) を作成されている方もいます。:-)

Linux2.4 に GOODS をインストール:

まず、取得して展開します。
yoya@awm.jp% wget http://www.ispras.ru/~knizhnik/goods-2.52.tar.gz
	     <略>
yoya@awm.jp% tar xvfz goods-2.52.tar.gz
yoya@awm.jp% mv goods goods-2.52
yoya@awm.jp% cd goods-2.52
readme.htm に従い、 ./configを実行します。
yoya@awm.jp% ./config
Makefile is now prepared for generic Unix with gcc version 2.95.3 20010315 \
(release) compiler
次に make & make install です
yoya@awm.jp% make
cd src; make
make[1]: 入ります ディレクトリ `/home/yoya/src/java/goods-2.52/src'
g++ -fno-exceptions -I../inc -I. -Wall -c -O5 -g -DDEBUG_LEVEL=DEBUG_TRACE \
 console.cxx
	<略>
g++ -fno-exceptions -g -o ../bin/puturl puturl.o ../lib/libclient.a
make[1]: 出ます ディレクトリ `/home/yoya/src/java/goods-2.52/src'
# make install
cd src; make install
make[1]: 入ります ディレクトリ `/home/yoya/src/java/goods-2.52/src'
mkdir -p /usr/local/goods/lib
cp ../lib/* /usr/local/goods/lib
mkdir -p /usr/local/goods/bin
cp ../bin/* /usr/local/goods/bin
mkdir -p /usr/local/goods/inc
cp ../inc/* /usr/local/goods/inc
make[1]: 出ます ディレクトリ `/home/yoya/src/java/goods-2.52/src'
そして、実行パスに /usr/local/goods/bin/を含めます。
export GOODS_HOME=/usr/local/goods
export PATH=${PATH}:${GOODS_HOME}/bin
インストールの作業はこれだけです。
それでは、実際に動作するか試してみます。

Linux で GOODS の動作テスト:

readme.htm の 「Application interface to the database -> Running GOODS applications -> Running GOODS examples」 に従って作業をします。
サンプルが沢山付いて来ますので、まとめてコンパイルします。
yoya@awm.jp% cd examples
yoya@awm.jp% make
g++ -fno-exceptions -I../inc -I. -Wall -c -O5 -g -DDEBUG_LEVEL=DEBUG_TRACE \
cnxnPool.cxx
cnxnPool.cxx: In method `nat4 Tree::pickBuggyLeaf()':
cnxnPool.cxx:160: warning: control reaches end of non-void function \
`Tree::pickBuggyLeaf()'
	<略>
g++ -fno-exceptions -I../inc -I. -Wall -c -O5 -g -DDEBUG_LEVEL=DEBUG_TRACE \
testtrans.cxx
g++ -fno-exceptions -g -o testtrans testtrans.o ../lib/libclient.a
以下の実行ファイルが生成されます。
bugdb      guess2     spawn      testdb     testtrans  unidb
cnxnPool   largedb    testblob   testsock   tstbtree
guess      runtests   testclu    testtask   tstrtree
このうちの、guess を試します。 guess はニ択クイズのサンプルです。 覚えさせる動物を決めておいて、その動物の特徴を入力して覚えさせます。
まずは、database server を起動します。
yoya@awm.jp% goodsrv guess
Initial map size of 4096 Kb allows an initial data file of 1048576 Kb, \
which exceeds the maximal limit of 262144 Kb; using 1048576 Kb as the \
maximum instead.
05:42.00 04-JAN-2003: Checkpoint 5 finished
GOODS server started...
server is up...
>
そして、同じ PC 上の別のコンソールから繋ぎます。 まずは人間の特徴を覚えさせます。
yoya@awm.jp% ./guess
Think of an animal.
Ready (y/n) ? y
What is it ?
human
What is difference from other ?
use advanced tools
Think of an animal.
Ready (y/n) ? y
May be, use advanced tools (y/n) ? y
May be, human (y/n) ? y
It was very simple question for me...
Think of an animal.
Ready (y/n) ? n
End of the game
これで、人間が高度な道具を使う事を記憶させました。
再び繋ぎます。すると前の質問はデータベースに保存されていて、 それを元に質問をしてきます。今度は鳥と昆虫を登録します。 どちらも飛ぶという特徴 *1 では区別できませんので、 更に甲殻を持つか持たないかで区別する事にします。
yoya@awm.jp% ./guess
Think of an animal.
Ready (y/n) ? y
May be, use advanced tools (y/n) ? n
What is it ?
bird
What is difference from other ?
fly
Think of an animal.
Ready (y/n) ? y
May be, use advanced tools (y/n) ? n
May be, fly (y/n) ? y
May be, bird (y/n) ? n
What is it ?
insect
What is difference from other ?
crusty
Think of an animal.
Ready (y/n) ? n
End of the game
そして鳥をイメージしてニ択を進めます。
yoya@awm.jp% ./guess
Think of an animal.
Ready (y/n) ? y
May be, use advanced tools (y/n) ? n
May be, fly (y/n) ? y
May be, crusty (y/n) ? n
May be, bird (y/n) ? y
It was very simple question for me...
Think of an animal.
Ready (y/n) ? n
End of the game
辿り着きました。(^-^

NetBSD1.6J に GOODS をインストール:

そもそもの目的は、JXTA search で P2P 環境での実験ですので、 もう一台、peer が欲しいところです。
ちょうど、NetBSD のサーバが動いていますので、 こちらにも GOODS を導入します。 取得して展開するのは、Linux と同じですが、 そのままでは、make が通りません。
エラーを解決する為の修正箇所を以下に列挙します。
エラー その1 (stropts.h)
unisock.cxx:18: stropts.h: No such file or directory
stropts.h は SVRx系のヘッダファイルのようで、 NetBSD には存在しません。(emu の処理系は別です…)
修正箇所 (unixsock.cxx)
#if defined(__FreeBSD__) || defined(__linux__)
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__linux__)
#include <sys/ioctl.h>
#else
#include <stropts.h>
#endif
エラー その2 (get_peer_name())
unisock.cxx: In method `char * unix_socket::get_peer_name()':
unisock.cxx:155: passing `int *' as argument 3 of \
`getpeername(int, sockaddr *,__socklen_t *)' changes signedness
NetBSD の getpeername の第3引数の型である socklen_t は <sys/ansi.h> で unsigned int と定義されているのに、 int のポインタを引数で渡そうとしています。
修正箇所 (unixsock.cxx)
unisock.cxx の 155 行前後と
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD__ > 3)
#if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD__ > 3) || \
defined(__NetBSD__)
    socklen_t len = sizeof(insock);
#elif defined(_AIX)
    size_t len = sizeof(insock);
#else
 int len = sizeof(insock);
#else
if (getpeername(fd, (struct sockaddr*)&insock, &len) != 0) {
        errcode = errno;
        return NULL;
    }
エラーその3 (wcscoll(...))
g++ -fno-exceptions -I../inc -I. -Wall -c -O5 -g -DDEBUG_LEVEL=DEBUG_TRACE \
class.cxx
In file included from ../inc/class.h:14,
                 from ../inc/goods.h:35,
                 from class.cxx:11:
../inc/wstring.h: In method `int wstring_t::compareTo(const wstring_t &) \
const':
../inc/wstring.h:276: implicit declaration of function `int wcscoll(...)'
NetBSD の <wchar.h> に wcscoll の定義はありません。 FreeBSD に合わせて NO_OS_UNICODE_SUPPORT を on にしてみます。
修正箇所 (inc/wstring.h)
#if defined(__FreeBSD__)
#if defined(__NetBSD__) || defined(__FreeBSD__)
#define NO_OS_UNICODE_SUPPORT 1
#endif
以下は、エラーにはなりませんが、 念のため、FreeBSD 側に処理を合わせるように修正しました。
inc/async.h
#if defined(__FreeBSD__)
#if defined(__FreeBSD__) || defined(__NetBSD__)
#include <sys/types.h>
#endif
inc/convert.h
#if defined(__FreeBSD__)
#if defined(__FreeBSD__) || defined(__NetBSD__)
#include <sys/param.h>
#define USE_HTON_NTOH
#elif defined(__linux__)
//
// At Linux inline assembly declarations of ntohl, htonl... are available
//
inc/ptask.h
#if defined(__FreeBSD__)
#if defined(__FreeBSD__) || defined(__NetBSD__)
#include <sched.h>
#endif
src/ctask.cxx:
#if defined(__osf__) || defined(__FreeBSD__)
#if defined(__osf__) || defined(__FreeBSD__) || defined(__NetBSD__)
#define longjmp(b,s) _longjmp(b,s) // do not restore signal context
#define setjmp(b)  _setjmp(b)
#endif
src/ptask.cxx:
#if !defined(__FreeBSD__)
#if !defined(__FreeBSD__) || defined(__NetBSD__)
    struct sched_param sp;
    sp.sched_priority = PRI_OTHER_MIN +
        (PRI_OTHER_MAX - PRI_OTHER_MIN) * (pri - pri_background)
        / (pri_realtime - pri_background);
    SYSCHECK(pthread_attr_setschedparam(&t->thread_attr, &sp));
#endif
make install は Linux と同じです。
# make install
cd src; make install
mkdir -p /usr/local/goods/lib
cp ../lib/* /usr/local/goods/lib
mkdir -p /usr/local/goods/bin
cp ../bin/* /usr/local/goods/bin
mkdir -p /usr/local/goods/inc
cp ../inc/* /usr/local/goods/inc
examples はそのままコンパイルが通りますし、動作確認も Linux と同様ですので、 ここでは省略します。
*1: 飛ばない虫もいますよね。失敗失敗… (^^;

[awm] IPv6 トンネル

今さらですが、tunnel の手前側の IPv4 アドレスが変わったので、 変更をお願いするメールを書いて送りました。
# 今さらな事を泣きながら片付け中

返事:

30分後には、もう返事が来てました。
ですが… ごめんなさい。時間が なくてすぐ試せません…
以下のサイトを参考にしてセットアップをしようと思います。

[memo] メモ

侍魂フィルター(Samurizer):

元の体裁より、こちらの方が読みやすいかもしれません。
読みやすい気がしているだけかもしれませんが…
はいぱ〜日記システムのテーマで、侍魂テーマって 誰か作りませんか? (^^;;

インターネット20周年 /.j:

糖尿病ソリューション - 健康エコナ:

さらには『健康エコナ』の製造工程で高温にさらすのでしょうか、
悪玉のトランス型不飽和脂肪酸が3.5%もあります
(ヨーロッパでの分析によるもので、メーカー発表ではありません)。
これはバージンオリーブオイルの品質基準の、
たとえばオレイン酸のトランス型(エライジン酸)は0.05%以下に限る
というレベルからすれば、とてもとても満足できるものではありません。
エキストラ・バージン・オリーブオイルにたくさんある抗酸化物質
(ファイトケミカルズ)も含まれておらず、生体膜を安定させるスクワレンもなく、
無味無臭の加工油がなぜ"健康"を名乗り、"特定保健用食品"に選ばれたのか
理解に苦しむところです。
これで筑波大学、鈴木正成教授や香川大学の松尾達博助教授らの実験結果のように
『血中中性脂肪が上昇しにくい』『脂肪がつきにくい』効果が確認できないとすれば、
何をか言わんやです
つい最近、雪印の健康エコナのマーガリンを購入してしましました…

ビバ!カレー 〜 ピリピリ chop:

大晦日に買い溜めを忘れた自分は、正月はレトルト食品と冷凍食品が頼りですし、 体を壊す等して気軽に買い物に出かけられない状況というのもありますので、 この手の(B級,C級グルメ的な)情報も馬鹿には出来ません。

2003年01月03日(金)(自宅)

(自宅)

[Database][Java][research] GOODS DB example - unidb

昨日の続きです。
readme には example のところで、guess の次にunidb の例が示されています。
先の guess の例では生き物という単一クラスのオブジェクト群が 二分木でぶら下がる格好でした。 一方 unidb では、教授 - professor がいて その下に任意の数の生徒 - student がぶら下がるという、任意の数の student が各々、一人の担当教授を持つという、 *1 少しだけ複雑な構造になっています。 それでは、readme の記述に従い動作をさせてみます。
まず、professor の DB を起動します。
yoya@awm.jp% goodsrv unidb 0
Initial map size of 4096 Kb allows an initial data file of 1048576 Kb, which exc
eeds the maximal limit of 262144 Kb; using 1048576 Kb as the maximum instead.
07:37.04 06-JAN-2003: Checkpoint 5 finished
GOODS server started...
server is up...
>
上記のターミナルを termina-1 と呼ぶ事にします。
次に student DB のサーバを起動しますが、 別のターミナルで実行します。これを terminal-2 と呼ぶ事にします。
yoya@awm.jp% goodsrv unidb 1
Initial map size of 4096 Kb allows an initial data file of 1048576 Kb, which exc
eeds the maximal limit of 262144 Kb; using 1048576 Kb as the maximum instead.
07:38.00 06-JAN-2003: Checkpoint 1 finished
GOODS server started...
server is up...
>
この瞬間、terminal-1 に
>07:38.00 06-JAN-2003: Establish connection with server 1: "localhost:6101"
の文字が出力されます。 これで、student DB から professor DB にリンクが張られました。
蛇足ですが、ここの部分 example では
terminal-1> goodsrv unidb 0
terminal-2> goodsrv unidb 1
と書かれていまして、 つい自分は別サーバで分散できるのではと勘違いして、つまずきました…
… <閑話休題> …
ここで更に別のターミナルで unidb を引数無しで実行します。 先に立ち上げた2つのサーバに繋ぐクライアントとなります。 これを、termina-3 と呼ぶ事にします。実行した瞬間に、 terminal-1 と 2 では、
07:46.20 06-JAN-2003: Open session for client 'awm.jp:13933:0x808ae00'
といった文字が出力されます。
尚、引数無しで任意の数のクライアントを起動出来ますが、 とりあえず一つだけ動かします。
# トランザクションとかどうなってるんでしょうね。(^^;
terminal-3 には以下のテキストが表示されているはずです。
yoya@awm.jp% unidb

University database
Total 0 student, 0 professors
Menu:
        a) Add new student
        b) Add new professor
        c) Print information about student
        d) Print information about professor
        e) Print list of all students
        f) Print list of all professors
        g) Remove student
        i) Remove professor
        j) Transfer student
        k) Print advisor of student
        l) Print students of professor
        q) Quit
>>
まずは、生徒を追加してみます。
>> a        ※ Add new student
New student name: yoya
Advisor name: D
Diplom work: social
No such professor: D
<<< Press ENTER to  continue >>>
やはり、 存在しない教授を選んではいけないようです。
今度はきちんと 教授を登録する事にします。
>> b        ※ Add new professor
New professor name: D
Department: social
<<< Press ENTER to  continue >>>

>> b
New professor name: K
Department: engineer
<<< Press ENTER to  continue >>>

>> f        ※ Print list of all professors
Pr. D, number of students 0
Pr. K, number of students 0
<<< Press ENTER to  continue >>>
次に 生徒を登録します。
>> a
New student name: yoya
Advisor name: D
Diplom work: engineer
<<< Press ENTER to  continue >>>

>> e        ※ Print list of all students
yoya: engineer
<<< Press ENTER to  continue >>>

>> k        ※ Print advisor of student
Student name: yoya
Pr. D
Department: social
Number of students: 1
<<< Press ENTER to  continue >>>

>> l        ※ Print students of professor
Advisor name: D
yoya: engineer
<<< Press ENTER to  continue >>>
ついでに教授を変更をしてみます。
>> j        ※ Transfer student
Student name to transfer: yoya
New advisor name: K
<<< Press ENTER to  continue >>>

>> k        ※ Print advisor of student
Student name: yoya
Pr. K
Department: engineer
Number of students: 1
<<< Press ENTER to  continue >>>
以上、unidb の簡単な動作確認でした。
*1: ソースを確認したところ、professor から student を指し示してはいなくて、 student が professor へのリンクを(一方行的に)持っています。

[JXTA][Java][research] JXTA search

jxta search は peer で動くデータベースとして、 GOODS を利用していると jxtasearch の README に記されていましたので、 先日2台の PC にインストールしました。その続きの作業ですが…
先に言い訳をしますと、これは 失敗談です。 じきに解決したいので、とりあえずの作業メモとして記録します。

jxtasearch パッケージ:

jxtasearch は以下の4つのパッケージで構成されています。
  • jxtasearch core (code)
  • websearch (web ui)
  • jxtasearcg-shell (command ui)
  • stockprovider-0.94-bin.tar.gz (providor example)
尚、jxtasearch 自体が JXTA パッケージに統合されています。
jxtasearch 単体のみを search.jxta.org から取得できますが、 バージョンによる不整合の問題もありますので、 JXTA に付属している jxtasearch を利用するのが楽だと思います。
# 成功していないので断言は出来ませんが。(^^;

jxtasearch package と documents:

まず、jxta daily build の all.zip から jxtasearch.zip を取り出して、 その、jxtasearch.zip を伸長します。
yoya@awm.jp% unzip all.zip # ← jxta の daily buld
	  <略>
yoya@awm.jp% unzip jxtasearch.zip
	  <略>
yoya@awm.jp% cd search
yoya@awm.jp% ls
jxtasearch-59e-bin/        log/                    websearch-59e-bin/
jxtasearch-shell-59e-bin/  stockprovider-59e-bin/
api documents は
yoya@awm% unzip all_doc.zip
yoya@awm% unzip jxtasearch_doc.zip
	  <略>
yoya@awm.jp% cd search
yoya@awm.jp% ls
examples/                  log/                    websearch/
jxtasearch/                shell/                  websearch-59e-bin/
jxtasearch-59e-bin/        stockprovider-59e-bin/
jxtasearch-shell-59e-bin/  util/
これで一通りのファイルを取得できました。
ドキュメントによりますと、war ファイルを $TOMCAT/webapps に入れて lib を $TOMCAT の lib とありますので、恐らく $TOMCAT/common/lib に入れる と思い、実際に作業をしてみました。
yoya@awm.jp$ cd websearch-59e-bin
yoya@awm.jp$ ls war/
webprovider.war  websearch.war
yoya@awm.jp$ cp war/* $TOMCAT_HOME/webapps/
yoya@awm.jp$ ls lib/
goodsjpi.jar  goodslib.jar  jxta.jar  jxtastarter.jar  xerces.jar
yoya@awm.jp$ cp lib/* $TOMCAT_HOME/common/lib/
yoya@awm.jp$ jxta.jar  jxtastarter.jar  xerces.jar
yoya@awm.jp$ shutdown.sh  ; startup.sh
Using CATALINA_BASE:   /usr/local/java/jakarta/tomcat-4
Using CATALINA_HOME:   /usr/local/java/jakarta/tomcat-4
Using CATALINA_TMPDIR: /usr/local/java/jakarta/tomcat-4/temp
Using JAVA_HOME:       /usr/java/j2sdk1.4.1_01
Using CATALINA_BASE:   /usr/local/java/jakarta/tomcat-4
Using CATALINA_HOME:   /usr/local/java/jakarta/tomcat-4
Using CATALINA_TMPDIR: /usr/local/java/jakarta/tomcat-4/temp
Using JAVA_HOME:       /usr/java/j2sdk1.4.1_01
war をコピーしていますので、とりあえず画面は表示されます。
これで動くのではと期待したのですが、 サーチを実行すると、
HTTP Status 500 -

type Exception report

message 

description The server encountered an internal error () that\
 prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Unable to find goods cfg file.
	at net.jxta.search.websearch.PreferencesService.\
getPreferencesService(PreferencesService.java:125)
	at net.jxta.search.websearch.OpensearchServlet.\
init(OpensearchServlet.java:136)
	at javax.servlet.GenericServlet.\
init(GenericServlet.java:256)
	at org.apache.catalina.core.StandardWrapper.\
loadServlet(StandardWrapper.java:924)
動きませんでした。(ρ_;
また、プロバイダの方も。
Create a new account でユーザ登録をしようとすると、 タイムアウトになります。

少しだけ調査:

 URL res = c.getResource ("gonesilent.cfg");

if (res != null && res.getProtocol ().equals ("file")) {
	String cfgfile = res.getFile ();
	 preferences = new PreferencesService (cfgfile);
} else {
	throw new ServletException ("Unable to find goods cfg file.");
}
ここで、失敗していまして、 gonesilent.cfg をリソースで指定しないといけないようなのですが、 なにしろ、ドキュメントが見付からなくて…
と思いつつ、jxtasearch-0.92-src の README.txt を見直すと、
 - All the sources from the subprojects will be built.
 - The resulting .war files will be deploying to your servlet container's
webapps directory
 - Dependent libraries (such as xerces.jar) will be deployed to your
servlet container's lib directory.
 - A default JXTA configuration will be deployed to your servlet container's
working directory.
 - The GOODS database configuration (goodsrv.cfg) is copied to your
goods_db_home directory.
あ…
yoya@awm.jp% cd /usr/local/goods/
yoya@awm.jp% ls
bin/  inc/  lib/
これかもしれません…
今日は時間が無いので、また明日に作業をします…

[memo] メモ

「削除」「フォーマット」では消えないデータを消す方法:

(1)"00"、もしくは"FF"をHDDの全領域に上書きする。 
(2)指定したデータ(512バイト分)をHDDの全領域に上書きする。 
(3)ランダムなデータ1→ランダムなデータ2→"00"の順に、HDD全領域に3回上書きする。
(4)"00"→"FF"→"00"→"FF"の順に、HDD全領域に4回上書きする。 
(5)"00"→"FF"→"指定データ(512バイト)の順に、HDD全領域に3回上書きする。 
(6)"00"→"FF"→"00"→"FF"→"00"→"FF"→指定データ(512バイト)の順に、HDD全領域に7回上書きする。 

(3)、(4)はアメリカ国家安全保障局、(5)は米国国防総省、(6)はNATOの規格だ。
こう書いてしまうとものものしいが、
国家機密レベルでデータ消去が保証されていると思えば、心強い。

自分の死を友人にメールで通知してくれるサービス「Messages from the Grave」:

円周率3騒動:

いまだに、マスコミが流したデマが一般に流布されているようですので、 再チェックです。
むしろ、マスコミは文部省に問い質して、 その正確な意図を報道するべきだったと思います。

IBM がラショナル買収、IBM ソフトウェアブランドの仲間入り:

先月の話ですが、いまごろ気付きました。f(^^;

[bookmark] ぶっくま〜く

がしそふと製品フリーダウンロード:

ここの SCC 風音源 MIDI プレイヤーで、グラディウスの曲を聞くと、 なぜか涙が出てきます。 昔を懐かしむのは歳をとった証拠なのでしょうけど。
同じページで紹介されている Beep 音で音楽を鳴らすツールですけど…
たしか、AT 互換機(具体的には PIIXx 系)で beep 音の制御をするレジスタは、 NMI (Non Maskable Interrupt) *1 関連のレジスタとぶつかっていて、 ビットで区別しなければいけなかったような記憶があるせいか、 おそるおそる鳴らしてます。
# 等といいつつ、鳴らしているのはドラクエ3の戦闘シーンの BGM だったりしますが… 杞憂だと分かっているのですが、その辺を触った人間としては… (弱…
NMI でトリッキーな事してる某システムで、 ビット書き換えのルーチンを保護しないで Beep 音で音楽鳴らすの 勝手にいれこんで、試験中に音が鳴りっ放しに鳴っちゃったの秘密です。
# むしろ、それで済んで運が良かったと思いますが… いえ、すみません。ほんっと〜に反省してます。(ρ_;

*1: 割り込みが上がるのを抑止できない、システム的にクリティカルな割り込みの事。
ディスクやネットワーク等のハードウェア割り込みのような、 場合によって有効/無効を切替えられる割り込みと区別する言い方。


2003年01月04日(土)(自宅)

(自宅)

腰痛回復気味

ようやくお風呂に入っても腰が痛まなくなりました。 ギリギリ会社への復帰が間に合うかもしれません。 いまだ座り続ける事は出来ませんが…

三日坊主

早速、一日一技術ネタ挫折してます…
JXTA search が動かす為に、あがいています。

2003年01月05日(日)(自宅)

(自宅)

仕事以外は一旦捨て

IRC で仕事上関係のないチャンネルから抜けました。
ここのところ忙しくて、ROM の状態になっていたからです。
たまに、名差しで呼ばれて受け答えをすると、相手によっては 有意義な情報交換が出来たと思う事もあれば、 相手によっては時間を無駄にしたという気持ちと、 そんな事してる暇ないのにという罪悪感でさいなまれる事も多々あります。 かといって、名差しで呼ばれて無視できる程、割り切れる人間ではありません。
そのような理由で、仕事が落ち付くまでという 期限 (期限という言葉は間違いですので修正)条件付きで、 IRC から離れる事にしました。 もう遅いという話もありますし、 永遠に戻さない可能性もありますが、体を壊してしまって、 満足に働けない非常事態という事もありますし、 人間らしい生活を取り戻すまでは、仕事に集中しようと思います。

[JXTA][Java][research] JXTA search - 続き

とりあえず、概要をお勉強してます。

jxtasearch の仕組み:

よくある分散サーチ同様、抽象ネットワーク上で共有するメタデータを用いて、 要求された情報の探すのが基本のようですが、 QRP (Query Routing Protocol) という問い合わせ用のプロトコルを用意する事で、 情報提供者側として、単純に生の HTML や XML を検索エンジンに取得させるだけでなく、情報の属性のようなものをメタデータとして渡す事も出来るようです。
今時、Web ページを作成する人は、 のように検索エンジンの性質に合わせて、 提供者側がサーチしやすく工夫をする人もいると思います。
JXTA Search ではプロトコルレベルで情報検索者と提供者のやり取りをサポートし、 かつ、問い合わせを情報提供者まで運ぶ際の経路まで最適化する事のできる メタデータを Search ハブ間で共有する仮想的なネットワークを構築し、 どのような情報を持つプロバイダを扱いたいかといった特徴を付ける事で、 効率的なルーティングを実現しています。
分散環境を構築するには、まずハブを常時動く状態にして、 プロバイダを、そのハブに登録していくという手順になります。
そして、ハブ同士で連結しあい、プロバイダが登録してくると、 他に継っているハブにもプロバイダの登録情報を送ります。
QRP (Query Routing Protocol) の説明を読むと、 JXTA Search ネットワークの participants として、
  • 問い合わせに応じるプロバイダ
  • 情報を問い合わせるコンシューマ。ユーザから見れば検索窓口にあたる。
  • それらの要求やメタデータを繋ぐハブ。
の3者が並んでいますが、
JXTA Search ネットワークアーキテクチャの構成要素としては、
  • コンテンツを保持するレジストラ
  • 問い合わせに応じるプロバイダ
  • 情報を問い合わせるコンシューマ。ユーザから見れば検索窓口にあたる。
  • それらの要求やメタデータを繋ぐハブ。
の4者が存在します。なぜか一つ増えている所がよく分かっていません。(^^
レジストラが、ネットワークアーキテクチャの構成要素ではあっても、 JXTA Search ネットワークの participants ではないというのですが、 自分が理解できないのは、participants のニュアンスを分かってないからでしょうか。

と、ここまで読み進んでいたら、 日本語訳を見付けました。(ρ_; # 見付けるの遅い… google でトップ に来る文書なのですね…
このままでは中途半端にも程がありますので、調査を続行するつもりです。
とにかく、 QRP (Query Routing Protocol) の仕様書が欲しいです…← と書いてたら、http://search.jxta.org/protocol.html に発見しました…

引用元不明 (x_x:

コンテンツ・プロバイダーがわれわれの用語で“アダプタ”と呼ばれるものを開発し、
 JXTA Searchで検索できるようにするという課題が残っています。
 JXTA Searchは、従来の検索機能を逆転させたようなものです。
これまでの検索エンジンは、インターネット上を探し回って、
すべての情報のインデックスを作成します。
JXTA Searchでは、クエリと検索を行なうメタデータを提供し、
検索サイトでヒットするものがあれば、より正確な応答を求めるようになっています。

JXTA.orgとP2Pの将来像:

ついでに…

毒入スープ♪

近くのスーパーで素敵な感じの曲がかかっていたので、 聞こえて来たキーワードで検索してみました、 平松愛理さんの「部屋とワイシャツと私」ですか。
あなた浮気したら、うちでの食事に気をつけて
私は知恵をしぼって、毒入りスープで一緒に逝こう
ビビっと来ました。:)
正確には学生の頃に、とある先輩の車に乗ったときに BGM でかかっていて、 それ以来探しても見付からなかった曲なんで…
ただ問題は、amazon で検索しますと、 平松愛理さんの出してる CD で「部屋とワイシャツと私」が 入っているのが沢山あって、どれを買うのが良いのかで悩みます…

2003年01月06日(月)(自宅)

(自宅)

水道

今日トイレの上水から茶色い水が出てきました。
おそらく赤錆だと思われますが、我が家は家の構造上 水道工事が出来なくなっているようで…
水道管が家の真中の真下を通っていて、かつ、 赤錆の原因がどこかを特定する機械があっても、 それも同じく家の真中の真下に埋まっているせいで、 家の基礎のところを壊さないといじれないそうで、 実質、家の建て直しになるとか…
つーか、家建てた奴出てこーいっっ# 古い家なので、建てた人はとっくに亡くなってると思うけど…

久々の出社

やはりまだ通勤自体が一苦労です。
電車の揺れがこれ程までに腰に負担をかけるものだとは思いませんでした。(ρ_;

[research] Referer 隠し - ime.nu , nun.nu

過去の話:

当日記は以前、ime.nu や nun.nu 経由でのアクセスが 急に増加した事がありました。
これらは、某掲示板で利用されているホストで、
http://ime.nu/diary.awm.jp/~yoya/
http://nun.nu/?http://diary.awm.jp/~yoya/
のようにアクセスする *1
http://diary.awm.jp/~yoya/
へのリンクを含むページが自動生成され、ime.nu では、 JavaScript が on になっていれば、自動で、該当のページに飛ばされます。
そうすると、 diary.awm.jpのサーバに残る Referer ログが ime.nu や nun.nu になる為、 本当のリンク元が隠蔽されます。そういう仕組みです。
当方としては気持ちが悪いので、即座に .htaccess の設定で nun.nu 経由や ime.nu 経由を拒否しています。
SetEnvIf REFERER "http://nun.nu" NUN
SetEnvIf REFERER "http://ime.nu" IME
Deny from env=NUN
Deny from env=IME

そして、自分は拒否しておきながらも、 逆に自分が日記でどこかにリンクを張る時に、 自分の日記を辿られたくない相手がいる事もありますので、 同様の仕掛けを作ってみました。
# 自分勝手ですね…

location ヘッダ:

まずは失敗談です。
当初、location ヘッダで飛ばす事を考えました。
以下は、location.cgi の中身です
#! /usr/bin/perl

print 'location: ' . $ENV{'QUERY_STRING'} . "\r\n";
print "Content-type: text/html\r\n\r\n";

この CGI を設置する事で確かに location.cgi 経由でリンク先に飛びます。 試しに、location.html で、
<a href="http://<略>/location.cgi?http://www.awm.jp/~yoya/">
    http://<略>/location.cgi?http://www.awm.jp/~yoya/ </a>
このようにリンクを張り実際に WinXP + IE6 でブラウズしてみました。 apache のログを確認しますと…
<IP> - - [<time>] "GET /~yoya/ HTTP/1.1" 200 1544 \
"http://<略>/location.html" \
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
リンク元を隠せていません。f(^^;
HTTP の location ヘッダを用いて転送しても、 (少なくとも WinXP pro + IE6 では) リンク元を隠す事は出来ないようです。
# もしかして、location で飛ばす場合、3xx の http レスポンスを受けるのが関係するのでしょうか?

ime.nu の仕組み:

ime.nu は http://www.2ch.net/ で利用されているホストです。
ある日、突然、ime.nu の Referer を持つアクセスが増大した場合は、 2ch に張られている可能性があります。
# nun.nu 自体は 2ch 以外からでも利用できますので、別の場所から リンクされている可能性もありますが…
ime.nu は CGI の内部のスクリプトで処理をしているようですので、 詳細は伺えませんが、基本的には ? の後ろの文字列を見て、
<html><head><title>jump</title></head>
<b>
<a href=飛び先の URL>
<飛び先の URL>
</a></b>
<br>別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください<br>
<br><br>
<hr>
<ここから広告>
というページを生成する機能を持ちます。
ただ、これでは、ユーザがワンクリックする手間を強要されます。
一方、nun.nu は JavaScript を使い、 自動でページを飛ばす事をしています。

nun.nu の仕組み:

nun.nu は http://thebbs.jp/で利用されているホストです。
JavaScript で幾つかの処理をしていますが、 基本の処理だけ取り出してみます。
<script>
ur=location.search+location.hash;
URL=ur.substring(1,ur.length);
document.write('<u>ページを開いています・・・</u>');
location.href=URL;
</script>
このスクリプトを location-href.html のようなファイルで保存して、 http で閲覧できる所に設置し、
http://<略>/location-href.html?http://www.awm.jp/~yoya/
でアクセスすると、
にアクセスできます。
ページ転送は以上の仕組みですが、 いくつか仕掛けが入っています。
if(top.document.referrer.search(/ax/i)==-1){
	nonax=1;
これは、ax が何か分かりませんので、 情報を入手し次第、考える事にします。m(__)m
okck=NGcheck(ur);
if (okck) {
	<ページ転送処理>
} else {
	document.bgColor='black';
	document.fgColor='white';
	document.write('<br>ブラックリストURLです。');
	<略>
}
function NGcheck(URL){
	blacks=new Array(<悪名高いサイトのリスト>);
	var i;
	if(URL=='')return 0;
	if(nonax && URL.search(/theb/i)>-1){return(1);}
	for(i=0;i<blacks.length;i++){
		if(URL.indexOf(blacks[i])!=-1){
			return(0);
		}
	}
	return(1);
}
評判の悪いサイトへのリンクには注意を促す仕掛けです。
if(URL.search(/http(s)?:\/\//)!=0)URL='http://'+URL;
これってもしや、https でリンクしようとしても http に… 何の為なのかは分かりません。
# 単に (s) にマッチした文字列を拾うのが面倒なだけかもしれませんけど。

META equiv の方法:

#------------------
#  ジャンプ用CGI
#------------------
# 正規の参照元 ( 掲示板のアドレス )
$ref_right   = 'http://xxx.xxx.jp/cgi-bin/bbs.cgi';

$referer = $ENV{'HTTP_REFERER'}; $query = $ENV{'QUERY_STRING'};

if (($referer =~ /$ref_right/i) && ($query =~ /http:\/\//i)) {
        print "Content-type: text/html\n\n";
        print "<HTML><HEAD><TITLE>Hyper Link</TITLE>\n";
        print "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1\;url=$query\">\n";
        print "</HEAD><BODY></BODY></HTML>\n";
}
else {
        print "Location: $referer\n\n";
}
exit;
リンク元が自分のサイトでない場合は、Location でリンク元のページに押し戻す仕掛けです。
Referer を偽装するブラウザは面倒を見なくて良いと思いますが、 あえて、ポリシーがあって Referer を出さないブラウザや、 RFC2616 辺りに啓蒙されたプロキシ等が、ヘッダを削る可能性もありそうですので、 万能な方法では無いと思います。
# Referer を信用する時点で out だとすれば、これでベストなのかもしれませんが…
実は、
        print "Location: $query\n\n";
等として、自分の定義したホスト名以外で使う場合は、 そのまま流す事で、知らないホストでアクセスした場合は、 リンク元をばらすぞという脅しをかける事も考えましたが、
こうしますと、自分が定義したホスト名以外で利用すると、 晒す事が出来ますが、IP アドレスや別ホスト名(CNAME 等)で アクセスされた場合にリンク元が伝わってしまいますので、 もっと駄目です。自爆しています。

基本的には先のスクリプトの手法を用いて、更に、 Referer が空の時はガードせずに転送して差し上げる位の サービスをするのが良いかもしれません。

そもそも根本的な問題が…:

を読みますと、JavaScript を利用して真の Referer *2 を取得する事が出来そうという事ですので、 JavaScript が on になっている時は弾くという意味合いで、
Referer が自分の定義したサイト or 空の時に no script で meta equiv
のようにして、あえて飛ばさない方が安全かもしれませんが、 ここまですると、おそらく使い物にならないのでしょうね。
自分は、故意に危なさそうなサイトを閲覧する時しか、 JavaScript を off にしませんし…
そもそも、google で検索される可能性もありますし、 リンク洩れは決定的な解決法の無い問題なのかもしれません。
そういう訳で、世の中が don 様に追い付くまでの間は、 JavaScript で Referer 元を辿ろうというハカーさん達には 全面降伏する形であきらめようと思います。:)

*1: ime は ime の使用を許可された掲示板以外で利用しようとすると、 拒否される仕組みがあるようです。nun.nu はそれがありません。 もっとも、自分の日記ではどちらの Referer が付いていても拒否していますが…
*2: 真の Referer 等と曖昧な言葉を使っている内は、 永遠に、この御方の足元にも及ばないでしょう…

アーロンチェア

腰が悪いのは一生治らないそうですので、 金に糸目を付けずに、良い椅子を購入する事にしました。
アーロンチェア
http://ueyabu.gr.jp/aeronchair/aeronchair1.htm
コクヨのオフィスチェア
http://ueyabu.gr.jp/agata/1.htm
コクヨのイスがデザイン的に好きです。

私信

いえ、日記で情報交換も出来ますので、問題はないかと。 ただ、inn は動いて嬉しいのか微妙なところですので、 優先度は低くしてます。m(__)m
あ。アカウントを差し上げますので、 某サーバ上に環境構築するのは止めませんよ。:)
ディスクの増設位はやらせて頂きます。

[memo] メモ

佐川急便の登記簿を偽造 京都府議「全役員を解任」:

こんな事がありうるのですね…
テレビのニュース番組では自民党府議として紹介していましたが、 上記のサイトに書かれていないのは大人の事情でしょうか…

[keyword] 検索ワード

Perl 子プロセス ゾンビ:

学生の頃、人にゾンビと wait の関係を説明するのに作った サンプルプログラムがありますので、後で載せてみます。

ゾンビプロセス 詳細:

今後の課題にします…

2003年01月07日(火)(自宅)

(自宅)

物品購入

KATZDEN・カツデン速暖ハロゲンヒーターSun Rise HH-A01:

腰を温めれば何とかデスクトップで作業できるのではないかと考え、 思い切って購入。
うつ伏せでノート PC を使うと、頭を上げれば腰に悪いし、 そうしないとタイプミスばかりでストレス溜るしで、 なんとかして座って作業をしたいという事です。

ダブルパッド:

マウスパッド:

[JXTA][Java][research] JXTA search 続き

QRP (query routing protocol) は、 JXTA search の protocol 仕様書に書かれているようですので、 excite の訳を(自分にとって)読みやすく書き換えて、お茶を濁します。(x_x

[JXTA][Java][research] JXTA Search Protocol 和訳に挑戦

1. イントロダクション- 導入部:

JXTA Search は Query Routing Protorol(QRP) を定義します。
このプロトコル仕様は、 JXTA Search によってサポートされる必要のある QRP のメッセージタイプ、メッセージフォーマット、 メッセージルーティングルールを完全に規定します。
加えて、この仕様は JXTA と HTTP のトランスポート binding(結合) を定義します。
最後に、queryspace(問い合わせ空間)仕様の必要条件を定義し、 総括的な queryspace を定義します。

2. メッセージ仕様:

全ての JXTA Search ノードは、 以下の XML ベースのメッセージタイプをサポートします。
  1. Query Request (<request>): 問い合わせを含むメッセージ
  2. Query Response (<responses>) : 問い合わせへの返答を含むメッセージ
  3. Registration (<register>): 登録情報を含むメッセージ
これら 3つのメッセージ・タイプのメッセージ・フォーマットは トランスポートから独立したやり方で規定されます。
JXTA と HTTP のトランスポートに絡めた仕様は、 このドキュメントの後の方で取り上げます。

[bookmark] ぶっくま〜く

Tiny Vector Matrix library using Expression Templates:

Lesser GPL で配布されている、 テンプレートを使った Vector や Matrix のライブラリだそうです。
自分で車輪の再発明をするより、こういう沢山の人が使っていそうな ライブラリを利用した方がいいですね。
使用方法は、 ここ に説明があります。
using namespace tvmet;

Vector<std::complex<double>,3> v1, v2;
Matrix<std::complex<double>,3,3> m1;
v1 = 1,2,3;
m1 = 1,4,7,
     2,5,8,
     3,6,9;
v2 = m1 * v1;

[keyword] 検索キーワード

sigchld ゾンビ linux:

輻輳 tcp Linux2.4:

結婚年齢適齢期チェック

こさな様のところで紹介されていましたので、実施してみました。
無名さんの結婚適齢期は・・・24歳です
あと僅か4年後ですね。 
う〜ん。20代前半で結婚しろという事ですか。 難しい要求ですね。

2003年01月08日(水)(自宅)

(自宅)

会社復帰

労働基準法で8割は出勤の義務があり、 それを切るとペナルティーがあります。
2ヶ月近く休んでいますので、ギリギリ足が出るところで、 危ないところでした。

針のむしろ

何も言い訳はありません。

[JXTA][Java][research] JXTA Search Protocol 和訳に挑戦 (続き)

2.1. Query Request - 問い合わせ要求:

XML の例題
<request xmlns="http://search.jxta.org"
         query-space=[(required)unique URL id for query space]
         query-uuid=[globally unique id of this query]
         query-lifetime=[number of miliseconds this query is valid]
         max-fanout=[maximum number of providers to forward the query to]
         max-hits-per-provider=[return only n results from each provider]
         flush-after-providers=[flush the output stream to the client after receiving responses from n providers]
          flush-after-ms=[flush the output stream to the client after this time]'>
   [arbitrary valid XML]
</request>
<request> 要素の値はいまの所、完全に任意な XML です。 query(問い合わせ)
query は問い合わせを受けた queryspace によって意味付けされます。 それについては後に議論されるでしょう。
実例
これは、http://search.jxta.org/text queryspace の簡単な実例です。
<?xml version="1.0">
<request xmlns="http://search.jxta.org"
         query-space="http://search.jxta.org/text"
         query-uuid="1C8DAC3036A811D584AEC2C3B11E5B9A"
         query-lifetime='30000' max-fanout='214783647'
         max-hits-per-provider='5'
         flush-after-providers='3'
         flush-after-ms='2000'
>
  <query> 
    <text>foo bar</text>
  </query>
</request>
これは、http://bigcameraseller.com/cameraschema queryspace に問い合わせる、 より複雑な実例です:
<?xml version='1.0'?>
<request xmlns="http://search.jxta.org"
         xmlns:cam="http://bigcameraseller.com/cameraschema"
         query-space="http://bigcameraseller.com/cameraschema"
         query-uuid="1C8DAC3036A811D584AEC2C3B11E5B9A"
query-lifetime="10"> # (yoya:注) おそらく > は typo だと思います
         query-lifetime="10"
         flush-after="5"
         max-hits-per-provider="2"
>
<query>
   <and>
      <cam:model>canon G1</cam:model>
      <and>
        <cam:maxprice>$900</cam:maxprice>
        <cam:shipping>overnight</cam:shipping>
      </and>
    </and>
  </query>
</request>

ディスクフォーマット

yoya@alt# disklabel /dev/sd1a
 113073824, 113404512, 113735200, 114065888, 114396576, 114727264,
 115057952, 115388640, 115719328, 116050016, 116379680, 116710368,
 117041056,
wtfs: write error for sector 16: Read-only file system

[bookmark] ぶっくま〜く

LimeWire:

Gnutella の Query プロトコルを調べていたところ、 偶然、検索にひっかかったページです。

[memo] メモ

e-Day:JavaOne流行語大賞は「Webサービス」か「Jxta」か……:

古い記事ですが。
Jxta では,デバイスは自分のCPUやメモリ,ディスプレイなどに関することを XML で
記述し,ソフトウェアは動作に必要な要件をやはりXMLで記述しておくことで,
「PDA → PC → インテリジェントFAX」といった一連の処理のパイプをつくりあげて
くれる。
PDAは,PCにWebの検索を依頼し,その結果を基にインテリジェントFAXが分類や集計を
行ってレポートまで作成してくれるという具合だ。
今の今まで気付きませんでした… かなりショックです。

[keyword] 検索ワード

ピリピリchop:

"fulfilling this request.":

ソケット 開けない TCP:

ネットワーク ”connect関数” ”間隔”:

C++ 関数 WAIT pl:

StandardWrapper loadServlet エラー:


2003年01月09日(木)(自宅) BGM:般若心経 観音経

(自宅) BGM:般若心経 観音経

風邪 & 腰痛

昨晩から背中が重たい感覚があり、お風呂に入ってもまるで体が暖まる感じが しませんでしたので、風邪ではないかと思っていたのですが、 今朝になって風邪だと確信しました。
朝起きた時、体の節々が痛みます。痛むというより体がバラバラになりそうな程の 痛みです。セキをする度に、激しい頭痛に襲われます。
昨晩、早く寝た為に、今朝は 7時前に目が覚めていたのですが、 病院のリハビリをさぼり、11時過ぎまでふとんで暖まって、 ギリギリになって出社しました。
リハビリをしていないのと、風邪のせいで()全身に力が入らず、 その結果、腰に激痛が走ります。
そもそも病院に行かなかったのが判断ミスで、 よく考えると、午前中に病院にいって風邪薬を貰って来て、 ついでにリハビリもしておけば…
後悔先にたたず

FreeBSD nobody ntop

しばらく触っていない FreeBSD マシンにログインしてみると、 妙に重く感じましたので、プロセスを確認したところ、
  PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
67658 yoya      29   0  1904K   920K RUN      0:01  5.47%  1.81% top
  191 nobody   -22   0   113M 37180K swread 977:26  0.15%  0.15% ntop
いつのまにか nobody で ntop が走行していました。 suid bit は立っていないので、nobody で何をしようとしていたのか謎です。

[JXTA][Java][research] JXTA Search Protocol 和訳に挑戦

2.2. Query Response - 問い合わせ応答:

<responses query-uuid=[uuid]>
  (<response>
   <data>
	<response-format>
	</response-format>
  </data>
  </response>)*
</responses>

JXTA Search は http://search.jxta.org/text の queryspace で クエリを送信し、応答結果を http://search.jxta.org/webui のフォーマットで表示を行う Web フロントエンドを提供します。
<responses query-uuid=1e4b56738920dmke0>
  <response>
    <data>
     <provider>
            <name></name>
	    <link></link>
            <description></description>
            <image>
                  <url></url>
              <width></width>
              <height></height>
            </image>
      </provider>
      <response-format>
       http://search.jxta.org/webui
      </response-format>
      <hit>
         <detail> </detail>
         <link> </link>
         <title> </title>
         <image>
          <url> </url>
          <width> </width>
          <height> </height>
         </image>
      </hit>
      <hit>
         <detail> </detail>
         <link> </link>
         <title> </title>
      </hit>
    </data>
  </response>
</responses>
注意書き クエリレスポンスの uuid 属性は、対応するリクエストの uuid と一致する事が要求されます。

[bookmark] ぶっくま〜く

BIND で Dynamic DNS 環境構築:

サーバで、
one "1.168.192.in-addr.arpa" {
	type master;
	file "named.rev";
	allow-update {
		192.168.1.0/24;
	};
}; 
のように、書き換えを許すクライアントの IP を設定しておくと、 クライアント側で
$ nsupdate
> update add moon.atmarkit.co.jp. 1200 in a 192.168.1.20
>
$
のように書き換えのコマンドを実行する事で、 DNS の設定が出来るようです。

Perl モジュールのドキュメントの日本語訳:

perldoc.jp:

cpan.jp:

[memo] メモ

迷惑メール業者に措置命令 法施行後初の行政処分:

今後、措置命令にも従わない場合は、
50万円以下の罰金が科される可能性もある
とありますが、経済損失は 50万どころでは無いと思いますので、 懲罰的な金額を期待したいところです。
本当に腹が立ってます…

時間当たり賃金の減少:

[keyword] キーワード

IXMLParser:

FreeBSD 監視カメラ:

sched_priority:


これで、9 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project