☆ Linux(11)☆ Linux(9)前へ
☆ Linux奮闘記 (10) Linuxの本格的なビジネスへの浸透 '2000/1-3/31 ☆
新年、あけましておめでとうございます。Y2K対応も無事に終了して、これから又新しいことを見つけて挑戦したいと思います。技術評論社より「本」がでます。是非ご興味が有りましたら、ご覧入ください。
正直なところ最初は、ここまでやれるとは思っても見ませんでした。陰で支えてくれた妻と子供達にに感謝したいと思います。今、君たちに感謝の言葉を贈ります。「ありがとう」と。
さて、今年の最初の話題はなんと言ってもWindows2000でしょう(2/18出荷)。発表から約3年、出来はいかかがでしょうか、せっかく出たのにタイミングが悪かったと私は思っています。寿命は短いのではないでしょうか。
なぜなら、Intel(Itanium IA-64)が64ビツトCPUを出荷し、Linuxではすでに搭載が始まりり、一部では稼働し始めています。Win2000は残念ながら、32ビツトですから。この流れが、今年のWin2000対Linuxのある一面での勝負になるでしょうね。Linuxも98年秋のブレイク以来
、本格的に今年からは業務システムで多用されていくのではないかと、注目しています。
併せて、今年のキ−ワ−ドはXML,Javaになりそうです。Web一色も予想通り。私も、お正月ずつとXMLの勉強をしていました。オ−プンデザイン 35、36号あたりは大変参考になります。
2000年を迎えて
- 00/1/4 テストが完璧で、当社のY2K対応ユ−ザではほとんど大きな障害は起こりませんでした。Docomの携帯のメ−ルが
99と00とが反対になるのは、以外でした。これも完全な某社のテスト不足そのものですね。それはさておき、世界的にも大きな混乱が起こらなかったので本当に良かったです。
XML 勉強しています
- 99/12/31 最近色々と新しい事を勉強して行くのですが、やはり根底にあるのはデ−タベ−スの技術ではないでしょうか。システムが3階層になり、最近デ−タベ−スの重要性を
皆さんが再認識し始めています。こんな経緯をふまえて、今回デ−タベ−ス本出版に協力させていただきました。それはさておき、XMLの作成です。
簡単なサンプルを作ってみる。xxxx.xml(デ−タの作成)、xxxx.dtd(デ−タの定義)、xxxx.xsl(表示部分)基本的には、これらを準備すれば動作の確認は出来そうです。自由に意味を持ったタグが作れるので最高です。
NN4.5で実行してみるが、ソ−ス内容が表示されるだけで、動作しません。やはり、IE5.0でないと動作しないのか。
00/1/5 IE5.0で、XMLを動かしてみる、タイトルまでは出るのですが、デ−タの表示が出ません。もう少し、勉強しなくては。
00/1/6 XMLとXSLだけで作った簡単なサンプルをテストしてみました。このケ−スは、うまく表示されます。もう少し、勉強しないといけませんね。
今後のビジネス面での本格的な使い方として、デ−タをうまくXMLに変換出来れば、応用範囲がかなり広がりそうです。このあたりの、応用例がOpen Design 36号に出ています。時間が有れば、挑戦してみたいですね。
本が出ます
- 00/1/8 例の本ですが、最終構成段階で出版社の方針が変更になり、内容の大幅変更を行うとの
連絡が突如入り、週末から又、原稿の見直し作業に入っています。悲しい。私の担当分が当初の20ペ−ジから30ペ−ジに変更になり、追加要望が出てしまいました。
やはり、思っているほど簡単に本は、出せないのですね。
00/1/11 この2日間で、かなり、追加、変更を行いました。
00/1/14 出版社から最後の13冊を送ったとの連絡が入る、併せて別件の依頼があり、今月末までは、書き物で大変。
00/1/17 依頼分の総合評価、感想を3枚書き上げる、併せて現在までの原稿の修正。
00/1/21 本日最後の9冊を送ったとの事。別件で依頼されていた2つの資料の提出が終了、後泣いても笑っても1週間になりました。
00/1/24 最後の原稿、修正分の原稿を書き上げ、出版社へ送る。とにかく長い3ヶ月でした、ゴ−ルは間近。
00/3/09 最終校正の依頼、32ペ−ジの原稿が届く。
00/3/15 最終校正の原稿を送る。
00/3/31 本の出版はもう少し先になるとのこと。
電子決済システムのインスト−ル
- 00/1/18 最近、カ−ド決済のお話を頂くようになり、テストを初めています。サイトはサイバキャツシュが提供するモジュ−ルです。(詳しくは、下記のサイト参照)
NT版とLinux版があり、今回はLinux版のテストをしています。
[root@pokemon /tmp]# tar xvf xxxxxx.tar
CRlinux_2_1_7_jp/raima/clr_tcp
CRlinux_2_1_7_jp/raima/clr_ip
CRlinux_2_1_7_jp/raima/lm_sem
CRlinux_2_1_7_jp/raima/lm_tcp
CRlinux_2_1_7_jp/raima/lm_ip
CRlinux_2_1_7_jp/raima/dbrev
[root@pokemon /tmp]# cd ak20_linux
[root@pokemon ak20_linux]#
[root@pokemon ak20_linux]# cp invoice.cgi /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp payment.cgi /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp form.pl /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp custom.pl /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp gifout.cgi /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp template /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp -r template /usr/local/etc/httpd/htdocs
[root@pokemon ak20_linux]# cp -r images /usr/local/etc/httpd/htdocs
root@pokemon /tmp]# cd CRlinux_2_1_7_jp
[root@pokemon CRlinux_2_1_7_jp]#
[root@pokemon CRlinux_2_1_7_jp]# ./install
Installing the CyberCash CashRegister
Version CRlinux_2_1_7_jp
expr: warning: unportable BRE: `^\([^\.]*\).*': using `^' as the first character
of the basic regular expression is not portable; it is being ignored
Please wait , Install script will now invoke netstat command to check the a
vailability of the port ...
You need to specify where the CashRegister will store all Merchant
Data export files. Export files are used to backup your data,
when you upgrade to a new version of CashRegister, or to put your
data into a format that can be imported into other software for
bookkeeping or analysis.
It is highly recommended that you specify a directory that is *not*
under the CashRegister distribution tree, preferably on a separate
filesystem.
Please enter path to export directory:
[/tmp/smps-export]
path>
Export directory /tmp/smps-export
does not exist. Create it? (y/n) [y]: y
Creating export directory...
Configuring utilities and servers for your system...
The 'CCLib.pm' file is a Perl Module that handles communications
between the CashRegister and any Perl CGI scripts.
It is recommended that this file is moved into the Perl library
directory so that merchants may access its functions easily.
We strongly recommend installing this file.
Install this file in '/usr/lib/perl5/site_perl'? (y/n) [n]:
********************** WARNING *************************
The original version of CCLib.pm was not replaced.
However, if things start to go wrong later in the
install process, you might want to reconsider.
The distribution version of 'CCLib.pm' is located at:
/tmp/CRlinux_2_1_7_jp/lib/perl-api/CCLib.pm
and must be copied to:
/usr/lib/perl5/site_perl/CCLib.pm
********************************************************
Initializing `credit' database.
Database initialization successful.
Choose a user name for the mall administrator: [root]:
Adding password for root.
New password:
Re-type new password:
*******************************************************************
* *
* Installation is now complete. *
* *
*******************************************************************
The /tmp/CRlinux_2_1_7_jp/install.warnings
file exists and is not empty. This file may contain problems
encountered during the installation that should be resolved
manually. Please review this file and correct any issues that
may be applicable to your configuration.
Please review '/tmp/CRlinux_2_1_7_jp/install.log'
to ensure no serious error messages or warnings were issued.
とりあえず導入までは出来たようですね。
00/02/23 それでは動かして見ましょう。
[root@pokemon CRlinux_2_1_7_jp]# bin/start-smps
*** Starting the SMPS system ***
*** Starting the Credit Server Subsystem ***
>>> Starting the Raima Lock Manager
Raima Database Lock Manager for UNIX BSD (LMC_IP)
Lockmgr Named: CR8000LM
>>> Start the Credit Server itself
MERCHANT missing in Payment Daemon configuration!
*** Starting the Admin Server ***
Spawning Admin Server daemon
All errors past this point will be written to the Error Log only
[root@pokemon CRlinux_2_1_7_jp]# ps -ax
23187 p1 S 0:00 ../raima/lm_ip -a CR8000LM -P lmcr
23200 ? S 0:00 bin/admin_server -c /tmp/CRlinux_2_1_7_jp/merchants/admin.co
どうも、思ったような動きをしません。
00/3/14 再度仕切なおして、挑戦。
[root@pokemon CRlinux_2_1_7_jp]# bin/stop-smps
### Killing the SMPS system ###
### Stopping the Credit Server subsystem, option: ###
>>> Killing the main Credit Server process
>>> Killing the Credit Server children, if any
>>> Killing the Raima Lock Manager
== Killing process 11550 ==
== Just kill it, do not wait for happy end ==
++ Died (regular)
### Stopping the Admin Server subsystem ###
== Killing process 11563 ==
== Just kill it, do not wait for happy end ==
++ Died (regular)
99/03/15 次にマ−チャントの作成を行います。
[root@pokemon bin]# ./build-merchant -type credit -merchant xx_xxxxx -processor
CAFIS-1 -authtype authcapture
Building Credit merchant `xx_xxxxx'
Invalid processor type `CAFIS-1'
Usage: ./build-merchant options
なんか、エラ−みたいですね。
[root@pokemon bin]# ./build-merchant -type credit -merchant xx_xxxxx -processor
cafis-1 -authtype authcapture
Building Credit merchant `xx_xxxxxxx'
Please enter Credit merchant `secret': xxxxx
The admin server will use the supplied user name
for authentication.
Choose a user name for this merchant [xx_xxxxx]:
Adding password for xx_xxxxx.
New password:xxxxx
Re-type new password:xxxxx
A new password for `xx_xxxxx' has been set.
The merchant `xx_xxxxx' was created successfully
and will be active the next time the server is started
or restarted.
[root@pokemon bin]# ./makekeys
This program enables you to securely create a public and private
key pair for use with the CyberCash(tm) system.
The output of this program will be a file called: MERCHANT.KEYS
I will be needing several lines of input to seed the random
number generator. It is best for you to type nonsense words
rather than just clattering on the keyboard.
Need 200 chars more: xx_xxxxx
Need 192 chars more:
Need 191 chars more: 11111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
Thanks that is enough, let me work for a moment...
カギを登録、併せてサイバキャツシュへ公開カギを送り、ゲ−トウエイサ−バへカギを登録していただく。(このあたりは、有償です)
xx_xxxxxは、自社のマ−チャントに置き換えて見て下さい。
Done.
00/3/16 やっと、テストが完了。長い道のりでした。
RED HAT6.1(J)のインスト−ル
- 00/1/6 最近、6.1(J)がリリ−スされたので、こちらも試してみたくなり古い機械を組み立てています。
00/2/2 2GBのデイスクを取り付け、RedHat6.1(JP)のGNOMEインスト−ルに挑戦。以前とは、比べ物にならないくらい簡単、インスト−ル画面も洗練されたGUI画面で
とても綺麗で、これなら初心者の人でも、大丈夫でしょう。 少し古い機械なら、Xも自動認識で、設定も難しくないでしょう。(pen90 MM96でGnomeインスト−ルに1時間)
00/2/3 Linuxconfにて、DNSの設定を行う、NSP4.7からすべてが見れるようになりました。次に、オ−プンソ−スで作るグル−プウエアをインスト−ルしています。(Skybord)
PostgreSQL6.5.2の解凍、インスト−ル、問題無し。
Apache1.3.9の解凍、インスト−ル、問題無し。
PHP3.0.12jpの解凍、インスト−ル、問題無し。
httpd.confの修正、Postmaster,apacheのスタ−ト、Sky-bordの動作も問題無し、当分この環境で、デスクトップとサ−バ機能と色々勉強できそうです。
00/2/4 FTPが出来なかったので、RedHat6.0のCDからRpm形式のwu-ftpdのインスト−ルを行う、これでネットワ−ク越しに色々出来そうである。
4号機サイトのその後
- 00/1/17 4号機で納品した、Linux+NTでのオンラインショツプのサイトですが、約2万件の商品検索(60sec)に時間がかかるとの話が、ユ−ザサイドから出始め
少し、クレ−ムになり始めています。時間短縮の為に、商品検索の複合キ−を、1つにしました。又、数の入力についても、セレクトをやめて、直接入力に変更しました。
又、精算、変更時は検索時の商品を別ファイルに保存しておき、そちらから最終表示をするように変更しました。結果として、検索が今までの、約半分(30sec)、精算、変更に
ついては、約1/8の時間に短縮することが出来ました。もう少し、チュ−ニングする事が出来るのではないかと、調査中です。
00/1/24 とりあえず、修正分の差し替えを行う。当面はこの状態で、様子を見る予定。Webサイトは納品後も色々、C/S系に無い問題が出てきます。
00/1/26 ずっと前からやりたかったIIS4.0+ASP(2.0)+Oracle7.34+oo4o(2.2)での接続テストに成功しました。ポイントは Set Orasess = Server.createObject("OracleInProcServer.XOrasession")
Set Oradatabase = Orasess.OpenDatabase("SQL*net名","scott/tiger",0)
IIS4.0の場合は、Server.CreateObject -->CreateObjectに変更するだけでうまく動作しました。
00/02/16 メ−カより、Expressの新型を借りてADOのテストを行っています。現行機より、約10秒程度レスポンスが改善されました。
00/02/20 SQL Server6.5の環境にデ−タベ−スを変更して、テストをしています。今度は、5秒程度で検索結果が帰ってきます。劇的な変化です。
今回は、こちらのパタ−ンで最終提案しています。
WindowsNTがアタックされました
- 00/2/13 社内で、各種検証テストに立ち上げているWindowsNT4.0(IIS4.0)が深夜攻撃されました。トップ画面が各官庁が被害にあったと同様に変更されていました。
ログを調査すると、10日ごろからすでにアタックの兆候がありました。初期のセキュリテイについては
1.FTPの禁止
2.監査の設定、ログのアクセス権
3.Guestアカウントの無効
4.IISホルダ(サンプル)、マッピング削除、IISADMPWD仮想デイレクトリ削除、その他
NTはほとんど無防備であったため、格好の餌食になってしまいました。反省。
2/14 アタツク後のセキュリテイ
1.ログイン回数の制限
2.ログイン時間帯の制限
3.HTTPポ−トのサ−ビスのみ、当然といえば当然なのですが
4.パスワ−ドの変更
5.adminをダミ−に
6.リモ−トからの管理者権限のアクセス不可
7.IIS側の不正アクセスIPアドレスの禁止
00/2/15深夜、またもアタック。幸い当夜は被害は無し。足跡だけは、かなり残していた。
00/2/16 昨夜も4回アタック。不正サイトからのアクセスを禁止するために、接続拒否IPアドレスをサ−バに設定しました。
Webブラウザでメ−ルの送受信を
- 00/2/16 飯塚慎司さんが開発された、Web Based SMTP Serviceをテストしています。
[root@pokemon web_smtp]# tar zxvf pwbsmtp_1_12_tar.gz
pwbsmtp_1.12/
pwbsmtp_1.12/readme
pwbsmtp_1.12/doc.jis/
pwbsmtp_1.12/doc.jis/readme.jis
pwbsmtp_1.12/doc.jis/man-pwbsmtp-jis.html
pwbsmtp_1.12/doc.euc/
pwbsmtp_1.12/doc.euc/readme.euc
pwbsmtp_1.12/doc.euc/man-pwbsmtp-euc.html
pwbsmtp_1.12/doc/
pwbsmtp_1.12/doc/man-pwbsmtp.html
pwbsmtp_1.12/source/
pwbsmtp_1.12/source/pwbsmtp.cgi
pwbsmtp_1.12/source/jcode.pl
pwbsmtp_1.12/doc.sjis/
pwbsmtp_1.12/doc.sjis/readme.sjis
pwbsmtp_1.12/doc.sjis/man-pwbsmtp-sjis.html
[root@pokemon web_smtp]#
PostgreSQL+sendmail+smtpfeedでメ−ルの自動配信
00/2/21 PostgreSQL+Sendmail+Perlで、デ−タを収集して、メ−ルを自動で配信するシステムが出来ました。
細かい修正がありますが、基本的な動作は問題無し。(form_auto.html+mail_auto.cgi)
00/02/22 メ−ルが沢山あるとSendmailも大変なので、Smtpfeedを利用することにします。
[root@pokemon /tmp]# tar zxvf smtpfeed-1.02.tar.gz
smtpfeed-1.02/ML-ADMIN.j
smtpfeed-1.02/FYI
smtpfeed-1.02/util.c
smtpfeed-1.02/mxrand.c
smtpfeed-1.02/smtpfeed.html
smtpfeed-1.02/proctitle.c
smtpfeed-1.02/FEATURES
smtpfeed-1.02/acconfig.h
smtpfeed-1.02/compat.h.in
[root@pokemon /tmp]# cd smtpfeed-1.02
[root@pokemon smtpfeed-1.02]# ./configure
checking whether time.h and sys/time.h may both be included... yes
checking whether gcc needs -traditional... no
checking return type of signal handlers... void
checking for strerror... yes
checking for snprintf... yes
checking for setproctitle... no
checking for pstat... no
checking for sys/sysnews.h... no
updating cache ./config.cache
creating ./config.status
creating Makefile
creating compat.h
[root@pokemon smtpfeed-1.02]# make
gcc -g -O2 -c address.c -o address.o
gcc -g -O2 -c dns.c -o dns.o
gcc -g -O2 -c lmtp.c -o lmtp.o
gcc -g -O2 -c log.c -o log.o
gcc -g -O2 -c main.c -o main.o
gcc -g -O2 -c mxrand.c -o mxrand.o
gcc -g -O2 -c proctitle.c -o proctitle.o
gcc -g -O2 -c smtp.c -o smtp.o
gcc -g -O2 -c util.c -o util.o
gcc -g -O2 -c version.c -o version.o
gcc -o smtpfeed address.o dns.o lmtp.o log.o main.o mxrand.o proctitle.o smtp.o util.o version.o -lresolv -lnsl
[root@pokemon smtpfeed-1.02]# make install
mv -f /usr/libexec/smtpfeed /usr/libexec/smtpfeed.old
mv: /usr/libexec/smtpfeed: No such file or directory
make: [install] Error 1 (ignored)
/usr/bin/install -c smtpfeed /usr/libexec
install 終了、Syslog.confの変更と、リスタ−ト
[root@pokemon smtpfeed-1.02]# /etc/rc.d/init.d/syslog restart
Shutting down system loggers: syslogd klogd
Starting system loggers: syslogd klogd
この後の作業は、Sendmailにsmtpfeed用のパッチをあてる。Sendmailのコンパイル、Sendmailの再起動
[root@soho /tmp]# cd sendmail-8.9.3/src
[root@soho src]# gzip -dc /tmp/sendmail893+3_2W_patch.gz | patch -p1
patching file `00READ_ME.WIDE'
patching file `00READ_ME.WIDE.j'
patching file `00READ_ME.v6'
patching file `srvrsmtp.c'
patching file `udb.c'
patching file `usersmtp.c'
patching file `util.c'
patching file `version.c'
[root@soho src]# sh Build
Configuration: os=Linux, rel=2.0.36, rbase=2, rroot=2.0, arch=i686, sfx=
Using M4=/usr/bin/m4
Creating obj.Linux.2.0.36.i686 using ../BuildTools/OS/Linux
Making dependencies in obj.Linux.2.0.36.i686
cc -M -I. -DNEWDB *.c >> Makefile
cp /dev/null sendmail.st
groff -Tascii -mandoc aliases.5 > aliases.0
groff -Tascii -mandoc mailq.1 > mailq.0
groff -Tascii -mandoc newaliases.1 > newaliases.0
groff -Tascii -mandoc sendmail.8 > sendmail.0
[root@soho src]# sh Build install
Configuration: os=Linux, rel=2.0.36, rbase=2, rroot=2.0, arch=i686, sfx=
Making in obj.Linux.2.0.36.i686
install -c -o root -g kmem -m 4555 sendmail /usr/sbin
for i in /usr/bin/newaliases /usr/bin/mailq /usr/bin/hoststat /usr/bin/purgestat
; do rm -f $i; ln -s /usr/sbin/sendmail $i; done
install -c -o root -g kmem -m 444 sendmail.hf \
/usr/lib/sendmail.hf
install -c -o root -g kmem -m 644 sendmail.st \
/etc/sendmail.st
install -c -o bin -g bin -m 444 sendmail.0 /usr/man/man8/sendmail.8
install -c -o bin -g bin -m 444 aliases.0 /usr/man/man5/aliases.5
install -c -o bin -g bin -m 444 mailq.0 /usr/man/man1/mailq.1
install -c -o bin -g bin -m 444 newaliases.0 /usr/man/man1/newaliases.1
[root@soho src]# tar zxvf CF-3_wp12.gz
CF-3.7Wpl2/support/mailfeed-alpha/mailfeed-rmail/
CF-3.7Wpl2/support/mailfeed-alpha/mailfeed-rmail/mailfeed-rmail.c
CF-3.7Wpl2/support/mailfeed-alpha/mailfeed-rmail/mailfeed.h
CF-3.7Wpl2/support/mailfeed-alpha/mailfeed-rmail/Makefile
CF-3.7Wpl2/support/README
CF-3.7Wpl2/README
[root@soho /tmp]#
------------------sendmail.def add -----------------------
## Local Hack for smtpfeed
LOCALHACKMAILER='# smtp feed mailer\
Msmtpf, P=/usr/libexec/smtpfeed, F=mDFMuXz!-, S=11, R=21,\
T=DNS/RFC822/SMTP, E=\n, L=990, M=50000, *=5,\
A=smtpfeed -c $j'
DIRECT_DELIVER_MAILER=smtpf
DIRECT_DELIVER_DOMAINS=all
#DEFAULT_RELAY=
DSPTLOCALHACK='R.$* $#smtpf$@LMTP$:$2$#smtp$@$1$X$:$2'
-----------------------------------------------------
上記が、sendmail+smtpfeed用の追加
[root@soho CF-3.7Wpl2]# make Standards/sendmail.cf
MASTERDIR=./Master TOOLDIR=./Tools \
./Tools/Configure Standards/sendmail.def > Standards/sendmail.cf.tmp
mv -f Standards/sendmail.cf.tmp Standards/sendmail.cf
[root@soho Standards]# mv /etc/sendmail.cf /etc/sendmail.cf.bak
[root@soho Standards]# cp sendmail.cf /etc
[root@soho Standards]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail: sendmail
Starting sendmail: sendmail
それでは、メ−ルを送ってみましょう。うまく届いてOK
- Linux+ASP関連のリンク集
- 技術評論社のペ−ジ・・・技術書、各種書籍関係。
- isize社のペ−ジ・・・isize社のペ−ジ。
- goo Bookのペ−ジ・・・goo Bookのペ−ジ。
- 紀伊國屋書店・・・紀伊國屋書店。
- ASP ML・・・ASP VB ML。
- 統計Web・・・SSRI 統計Web。
- Java・・・Java カンファレンス Javaで困ったらなんでも解決。
- Oracle Application Server・・・OASで困ったらなんでも解決。
- Inside Web page・・・CGI Java関連。
- 0から始めるホ−ムペ−ジ・・・Oracle Java関連。
- EC サイト構築なら・・・cyberCash。
- PostgrSQL 構築なら・・・Lisonal Internet tools。
- Pgaccess構築なら・・・PostgreSQL GUI Tools。
- Web Mail構築なら・・・飯塚慎司さん web Based POP SMTP Service。
- 電脳火消隊・・・セキュリティ 情報の宝庫です。
- ROOT日記・・・インスト−ルのことなら何でも、 情報の宝庫です。
- Book Search・・・Book Search。
このホ−ムペ−ジの画像の無断転載はかたくお断りします。Linuxメーリングリストの皆さん、Oracle,PostgreSQLメーリングリストの皆さん、ならびに私を支援していただいた多くの方々に、
この場をお借りして、厚くお礼申し上げます。
ritsuo@mxy.mesh.ne.jp
Copyright(C) 2000 by Ritsuo Fujii