プログラム メモ



2001年9月19日 23:58:45

[Linux]Postgresqlのアップグレード

どうやらpg_dumpでとかやるのではなく、

pg_dumpall > backup

で、バックアップ

psql < backup※これじゃ、出来ないことが判明。正解はここ

で戻すということが出来るみたい。
どうせDBは一つだけなんでいいんだけどね。

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/migration.html

[Linux]ディスクの空き容量確認

現在、本をめくりながらメンテ中。ディスク容量確認のコマンドがあったので、実行

df

メガ単位で容量を出したい場合は-mオプションを付ける。
俺のサーバーって6GBも積んでたんだ。知らなかった(笑)

[Linux]時間のかかる処理はバックグラウンドで

何かの作業中にctrl + Zでプロセスを一時停止できる。そのあとbgとするとバックグラウンドで処理が走る。
コマンドの後ろに&を付けて実行すると最初からバックグラウンドで処理させる。

ちなみに、戻す時はfgとするとフォアグラウンドに戻ってくる

[Linux]プロセスの強制終了

ctrl + c もしくは kill プロセス番号
プロセス番号はpsで調べる

[Linux]Postgresql1.1.3インストール終了

設定はまだ、postgres.jarをコンパイルするためにantを導入する必要有り。
とりあえず、今日は元のバージョンを戻して稼働させておく。


2001年9月16日 23:59:45

ひさびさに変更作業

明日から気合い入れて、Postgresqlの入れ替えとそれに関連して、エンコード関連のロジックを変更する。
その後、掲示板の作り替えをおこなってしまう予定。


2001年9月5日 23:11:38

[Linux]namazurcの設定など

インデックスを作る時は

LANG=ja_JP.eucJP mknmz /home/httpd/html/ --html-split \
-f /usr/local/etc/mknmz/mknmzrc -O /usr/local/var/namazu/index/

mknmzrcに設定を書いておく。インデックスに入れないパスなどは正規表現で書く必要がある。

[Linux]namazuのログファイル

インデックスファイルがあるところのNMZ.slogがその様子。


2001年9月4日 23:03:17

[Linux]namazu.cgiがパーミッションエラー

とあるサイトには/usr/local/libexec/namazu.cgiへのln(?)コマンドでハードリンク(シンボリック?)を/home/httpd/cgi-binに作るみたいなことが書いてあったが、パーミッションエラーが出てcgiが動かない。

実ファイルをcgi-binに入れたらすんなり動作。なんだろ。

インストールにはここがいいかも。

http://www.itboost.co.jp/inst/inst_18.php


2001年9月2日 2:00:47

[アプレット]プロパティーの設定

これもVBを使っていると忘れてしまうのでメモ。

テキストボックスなどのコンポーネントに値をセットしたり、取得する時はsetXXXXXやgetXXXXを使う。
VBのように
value = this.txtValue.textでは駄目(VBはthisではなくてMeだね)
value = this.txtValue.getTextなどとする。
(VBは式の右辺に出るか、左辺に出てるかで勝手にgetとsetを使い分けてくれているんだろう)

[Java]newは使わなくてもメソッドは呼び出せる?

他のクラスのメソッドは必ず
DbAccess db = new DbAccess();
db.connect("userdb");
という感じにしないといけないと思っていたがそうではないらしい。

これなんかは、newでインスタンスを作らなくても、
DbAccess.connect("userdb");
なんて書き方でメソッドが呼び出せる。

ただし、これには条件があって、呼び出すメソッドは以下のように定義しておかないといけない。
public static connect() {
  .......
}

staticの意味は忘れてしまったし、文献も手元に無いので、後で調べるとして、サーブレットでは以下のような使い方がある様子。

データベースのへのコネクションは一つだけにしたい、という場合

public class DbAccess {
private static DbAccess connection = null;

private DbAccess(String url, String user, String password) {
..DbAccessクラスのコンストラクタ..
..ここにデータベースと接続のコードを書く..
}

public static getInstance() {
if (connection == null) {
connection = new DbAccess(url, user, password);
}
return connection;
}

まず、DbAccessクラスのgetInstanceメソッドを実行する(この時newを使わない)ことで、connection変数に何も入ってなければ、DbAccessクラス(自分自身)のインスタンスを作って返す。
既に接続されていればnullを返す。

こうしてみるとstaticの意味もだいたい分かってくるが、明日、本を揃えて調べてみる。
オブジェクト指向は奥が深いというか、よくこんなの考えつく人がいるもんだ・・・・


2001年9月1日 12:14:15

[Java/html]改行タグへの変換(文字列変換)

そういえば、参考になるURL公開したり、いろいろ語ったりしておきながら、ソース公開してなかったなー(笑)
HTMLに出力する際に改行を<BR>に変換したりするクラス。

stringreplaceクラス

htmloutcnvクラス

StringReplaceが変換部分のメソッドのみ持ってます。Javaに文字列を置換するメソッドがどこかにあると思って探したのですが、見つからなかったのです(一文字単位の置き換えはあったけど)。
HtmlOutCnvはStringReplaceを継承して、メソッドを一個追加しています。
ここでは、DBに入ってる<や>の文字をタグとして認識しないようにしたり、改行コード(\n)を<BR>タグに変えています。


2001年8月29日 21:10:45

[Linux]cronの設定

回線が勝手に切れることがあるので、切れてもすぐ接続しにいくように、定期的にpingを打つようにした

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/066cronset.html

ここを参考に設定した。
crontab -eで設定ファイルを書けば良い。
分 時 日 月 曜日 コマンド
といように書く。曜日は0が日曜日だとのこと。

一時間ごとにpingを打つには、

00 * * * * /bin/ping www.yahoo.co.jp

とする、と思う・・・・

だが、これより/etc/cron.*にそれぞれのbashスクリプトを入れた方が良いと思える。

どうやら、crondを四月からずっと止めていたらしく、ログファイルもうんメガという巨大サイズになっていた。

[DB/Servlet/JSP]根本的に怪しい

DBとのコネクション、レコードセット、JSPにクラスを渡している部分。
特に、レコードセットがクラス間でやりとりされているのが、結構怪しい感じ。
DBのアクセスを司るクラス。こいつにまず接続まで保持させているのがまずい。
そして、レコードセットはBbsViewBeanとDbAccessクラスでやりとりしている。
これもなんか、危ない感じがする。

まず、クラス分けせずに一つのクラスとして制作して原因を探ることも考えたが、あきらかに根本的な問題を抱えているので、作り直すことにする。


2001年8月28日 21:48:15

[DB/Servlet]DBカーソルがリセットされている理由

よーく考えれば、アホみたいなことだった。
今のロジックでは、一回表を出す度に(SELECT一回投げるたびに)、DBに接続して、画面に表示してしまったら、切断という、サーブレットのメリットが生かされていないロジックになっているのだが、一回切断すればそりゃあカーソルもリセットされてるのはあたりまえ。

やはり、initでDB接続、destroyで切断という普通(らしい)やり方に変更する。
やっぱり、今のスキルで最初から手本無しに作るのには無理があったか。いい勉強になった(笑)

[DB/Servlet]接続の一本化、カーソル位置も一本化?!

initで接続して、destroyで切断となると、複数からアクセスがあっても接続は一つ。
同時に複数からアクセスがあると、DBのカーソル位置まで共有しちゃうのか?!
と、考えたがよくよく考えれば、カーソルの現在位置なんかはRecordSet型のオブジェクトが管理している。
接続一つに付きカーソルの位置が一つでは無い。
RecordSetはリクエストごとにオブジェクトを作っているはずだから、問題は無いはずだ。

と思ったら、ページ表示するたびにSELECT投げてる。ここでリセットされるじゃん。

※A-takは、DBを扱うプログラムを作ったことがありません(^ ^)

ちょっと他も見てみた

DBと連動した掲示板でソースまで公開している所は見つからなかった。
でも、構成の考え的には間違ってないんだなーと確信。
今、BBSはサーブレットのアドレスになってます。本来ならここにCGIのように?index=10とか引数を与えると、そのNoの記事が出てくる予定だが・・・・今は出てきません(T.T)

[JSP/Servlet]更新後はTomcatの再起動のみでOK

設定がおかしいのかもしれないが、何かサーブレットに変更を加えると、システムを再起動しないと、エラーが出てしまう。
今まではTomcat + Apacheの再起動を行っていたが、Tomcatだけ再起動すれば問題ないようだ。


2001年8月26日 21:34:31

[Java]サーバーサイドプログラミングの本を読み直し

DB接続あたりのロジックが結構、無駄が多い。
とりあえず、勢いで作って、「うまく動いたからいいや」という感じなので仕方がない。
流れも汚いので書き直そうかと思う。
その前に、最初に買った本を読み直してみようかと思う。
今ならば、だいぶ書いてあることが分かるはずだ。

[Web]HTTPプロトコルのRFC文書日本語訳

大学のようなので、この方が卒業したらなくなってしまうかもしれないけど・・・

http://www.st.csce.kyushu-u.ac.jp/~oka/http11/

いくつかの日本語訳があり。
上から二番目の真ん中あたりから、実際のHTTPプロトコルのきまりが書いてある。

[Linux]snort導入

以下は、Version 1.8.1-RELEASE (Build 74)での設定。
http://www.hawkeye.ac/micky/も参照しました。サンクス。

とりあえず、ソースをダウンロードしてtarで解凍、コンパイルして、make install
解凍したフォルダにあるsnort.confと*.rulesを/etc/snortフォルダにコピー
snort.confの書き換え

var HOME_NET anyを
var HOME_NET xxx.xxx.xxx.xxx/32

と書き換え。xxxはホスト名となっているので、サーバーのアドレスでしょう。32はサブネットマスクで255.255.255.255(32bit)の意。

var DNS_SERVERS $HOME_NET(だったかな?)を
var DNS_SERVERS [xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx]

と書き換え。
xxxは使っているDNSサーバー。自分はプロバイダのものを使っているので、プロバイダのプライマリDNSとセカンダリDNSを入れた。二つのDSN名の間にはスペースを入れては駄目だと、コメントにも書いてあるので注意。
snort起動用のユーザーも作る。

起動スクリプトはこのような感じで作る。
俺も、どこかから拾ってきたのを少しいじっただけなので、中身はよく分からんし、完璧かどうかも不明。

daemon $SNORT -Ddes -c /etc/snort/snort.conf -i eth0 -u snort -g snort

と言う行があるが、ここがsnortを起動している部分。
snort.confを違う場所に置いてるならば、ここを書き換えないといけないし、監視するデバイスがLANカードではなくて、モデムやらTAならばeth0のところをtap0とかに書き換えないといけない。-uや-gは起動するユーザーとグループ。

これを/etc/rc.d/init.d/snortにでも入れて、実行権を与えておくと、

/etc/rc.d/init.d/snort start

で起動できるようになる。他にもrestartもstopも可。

さきほどのスクリプトで実行すると、/var/log/messageにログが残る。

[セキュリティー]怪しいポートへのアクセス(バックドア ポート一覧)

ここにバックドアPGが開くポートの一覧がある。
netstatコマンドを実行して、このポートを使っている形跡があれば、問題だ。

http://www.simovits.com/nyheter9902.html

snortの最新ルールを使えば、ここのポートに対して接続しようとするクライアントがあると、ログに記録を残すはず。
というか、さっそく一件ログが出ていた。
誰かがバックドアが無いか確認しに来た時の記録だと思われる。
OSは開いていないポートに来る情報は破棄しているのか(?)記録に残らないので、こういうツールを使ってパケットの監視をしないと攻撃予兆には気づかない。

いやはや、やっぱいろいろ来ますな~。


2001年8月24日 0:32:58

[Postgresql]接続ホストの制限

自分のサイトにnmap(いわゆるポートスキャンのツール)かけてみたら、postgresが思いっきり見えている。
なんかセキュリティーかけないと駄目なんでは?と思っていたら、ちゃんとやってたみたい。

/usr/local/pgsql/data/pg_hba.confに設定がある

#host all 0.0.0.0 0.0.0.0 trust

の頭の#を外すと、すべてのホストからアクセスできるようになると書いてある解説もあるけど、それはまずいんでは無かろうか?

host all 192.168.0.0 255.255.0.0 trust

としておけば、IPが192.168から始まるホストから接続できる。

ただ、IPアドレスを偽装されれば、もちろんこんなの意味無しなので、インターネット側から来る192.168から始まるIPをフィルタリングしておく必要がある。

[セキュリティー]IP偽装

ローカルIP(192.168.*や10.*など)に偽装したパケットを中に入れると大変。
試したわけではないので、そうはいかないかもしれないが、たとえば、外から見えるsmtpサーバーにローカルIPからの要求にしか応えませんと設定していても、ローカルネットワーク上のマシンのIP192.168.2.1に偽装してMAILと送れば、smtpサーバーは要求を受けた時に、192.168.2.1に返答を返す。しかし、192.168.2.1のマシンは関係ないパケットは無視(かどうかわからんけど)。侵入者はサーバーからの返答を受け取ったフリをして次のステップに進めば、なりすましてメールが送れる・・・いうことになるかも。

[ネットワーク]通信状況の確認

netstatコマンドを使うと、現在、サービス(デーモン)が何番のポートを使って、どういう状態かが分かる。
ESTANBLISHED ---- 接続確立
TIME_WAIT --- 切断してソケット破棄されるまでの待ち(だったかな?)
など状態はいろいろ
このコマンドはNTにもある

[ネットワーク]現在の自分のIPなど確認

ifconfigでデバイスに割り当てられているIPが分かるeth0はイーサネット、そのほかにもいろいろある。

[Linux]tarの解凍

これも良く忘れるので・・・

tar zxf ファイル名

[Linux]snortで監視

ここを元にインストールする
libpcapはVine2.1には最初から入っている様子。

http://linux.nikkeibp.co.jp/faq/200109-1.html


2001年8月20日 22:59:55

[アプレット]コンポーネントを自由に配置したい

layoutプロパティーにnullを指定しておくと、自由にコンポーネントが配置できるようになる。
これでVB気分(笑)


2001年8月17日 0:49:50

[servlet]サーブレット→JSP 受け取るビーンはインポートしない

サーブレットでsetAttributeしたものをJSPで受け取る時には、JSPにimportでそのクラスを指定してはいけない。
importで指定すると、新たにビーンを生成してしまってそれを参照してしまうような・・・(勘違いかな?)


2001年8月14日 17:46:57

[servlet]BBSへ直接飛んだ場合の問題に対処?

今、BBSへ直接飛んじゃうと、ログインしていないゲスト状態で入ってるのと同じになってしまって、今後、機能を追加する時にも問題が出てしまう。
とりあえず、直接飛べないように、JSPの最初のところでセッションに何も入ってなかったら、再ログインをお願いするページを表示させるようにしたけど、使う側としては迷惑だよな~。今のところ登録ユーザーでもゲストでも違い無いし(T_T)

[JSP]JSPからサーブレットをインクルードするという方法

クッキーを見て、DBと照合してOKならば、自動ログインするという手法がBBSを直接開いた時にも、出来れば良い。トップページのチェック機能を少し書き換えれば、いいけどどうせなら他の所でも使いそうなので、汎用的にしたい。
インクルードという方法があるらしいので、ちょっとやってみる。

[JSP]インクルードは使えないかな・・・

どうも、名前から想像するものとちょっと違う様子。というか、使い道がいまいちわからん。
サーブレット間のデータ受け渡しに使えると書いてあったので、ちょっと用途が違うのかも。
かわりに<%@ include file="????" %>というのが使えるかも。
これは他のJSPファイルをそのままカット&ペーストの要領で付けてくれる物らしい。
クッキーのチェックやらセッション生成などをこれでやらせればいいのでは?
こういう処理はサーブレットでやらせたいんだけどなー・・・。
後回しにして掲示板の機能アップに進もう。

[Postgresql]バージョンアップ

ドライバが勝手に変換かけてくれる件で、ピュアなドライバがどっかいっちゃったので、それをゲットするためと同時に最新版に入れ替えてみる予定。パフォーマンスも少し良くなるらしい。
最新のPostgresqlは設定で、文字コード勝手に変換機能も装備出来るらしい。俺は外すけど。付けたら一緒じゃん。

[Web]特定のページをブラウザにキャッシュさせない

たとえば、サーブレットのRequestDispatcher.forwardでページをリダイレクトした場合、ブラウザ側ではURLは変わらない。
ブラウザは次にそのURLを指定されると、キャッシュからデータを持ってきてリダイレクトした先のページをいきなり表示してしまう。
これは、条件によってリダイレクト先を変える仕組みだと非常に問題。その時は、ブラウザにキャッシュさせないようにHTMLに記述しておく。

<META http-equiv="Pragma" content="no-cache">

と書いておくと、そのページはキャッシュされない

[JSP/servelr]BBS仕様変更

BBSはJSPといくつかのBeanで構成していたが、掲示板で良くある「次の10件を表示」みたいなのをやるとなると、これだといまいちすっきりした構成にならない(セッション使えば出来なくもないけど)。
ここは、手抜きせずにMVC(?)の形で組み直してみる。

[BbsCtrlServlet]
受け取った引数を元にデータベースの何番目の行から表示させるかなどをBBS.jspに指示する
引数はJSP上の「次へ」にリンクを貼り、フォームと同じような形でGETして渡す。
引数が無い場合は最初から(最初にBBS.jspを表示した時)

[BbsViewBean]
データベースを操作してJSPに表示させる内容(タイトル、名前、メッセージ)を用意する。
「次へ」のリンク(と入れる引数)を用意する

[Bbs.jsp]

表示担当。
BbsViewの各Getメソッドを使って、掲示板の内容を表示する。

[Java]文字列から数値へ、数値から文字列へ

すぐ忘れてしまうのでメモ。

String.ValueOf(i) //iは数値型のデータ

逆に文字から数値へ

Integer.valueOf(s).intValue() //sはString型のデータ

これ↑は、
まず、IntegerクラスのvalueOfメソッドを使って、文字列からInteger型に変換。
さらにIntergerクラスのintValueメソッドを使って、Integer型からint型に変換して返している。
valueOf()だけで、良さそうだが、Integer型はオブジェクトでint(プリミティブ型)で定義した変数には入らない。
オブジェクトからプリミティブへの変換が必要なので、intValue()が必要になるのである。

[servlet/JSP]セッション使わずにオブジェクトをJSPに渡す

これもよく忘れてしまうので、メモ。

request.setAttribute("searchTelBean", searchTelBean);


2001年8月12日 22:56:20

[servlet/JSP]文字化け一応、解決だけど・・・

逃げの手を使ってしまいました。むむ・・・
出力のページをEUCにしてしまいました。そうすると問題は起きない。理由はよくわからん(T.T)
データベースから受け取るのがPostgresだからEUCで、出力する時にそのまま出力してるから、ちゃんと出てるのか?
でも、それなら手前でSJISに変換しておけば、問題無いようだが、全然変わらない。
というより、その前に今まで
ただ、これでも、「\」(バックスラッシュ)は「¥」になってしまう・・・

[servlet/JSP]エンコードの謎

さっきからソースを見ているのだが、どうも変だ。
自分のソースでは、HTMLフォームからEUCの文字コードのデータが送信されたものを、Unicordeに変換してJavaの変数に入れている。その後、何の変換も無しにPostgresへ書き込みに行っている。
読み出す時も、ただDBから呼び出して、そのままHTML表示している。
これって、暗黙的な変換がかかってるの?

試しに他のサーブレットの本を見てみると、JavaからDBへの書き込みの時は、Unicorde→EUCという変換をし、DBから読み込んだデータはEUC→Unicordeという変換をしている。これが普通のはずだ。

[servlet/JSP]エンコードの謎2

考えられるのは、俺が使っているJDBCのドライバが、勝手に変換してるんじゃないのか、ということ。
日本語対応してないとかなんとかいう話で、あちこち探して適当に見つけてたはず。

http://www.siisise.net/pgsql/jdbc.html

これだ。
あー、やっぱりドライバ側で変換してるよ。そういや、元々掲示板の原型作る時もわけがわからなかったもんな。思ったように日本語エンコード出来なかったんで、いろいろ片っ端から試した記憶がある。
ドライバ側でやってるから、ソフト側で変換してしまうと、ぐちゃぐちゃになっちゃうわけね。変だと思った。

[servlet/JSP]で、どうする

ドライバをピュアなものに変えてから、試すしかないだろうね。
ドライバで変換されてたら、こっちはどうもならん。それか、ドライバのソースをいじるかだ。ドライバもJavaみたいだし。

[Web]ほそーいテーブルがネスケでもちゃんと見れるように

ネスケの仕様なのか、テーブルの中身に何も入ってないと何も表示してくれないようで、文字でスペースを入れると、広がりすぎる。そういや、PhotoshopでWeb出力したら、space.gifとかいう1×1のgifが出力されてたのを思い出し、それをセルに一つ入れるとネスケでも見れるようになった。このためのものだったのね、space.gif(笑)。


2001年8月5日 9:58:03

[JSP/servlet]ハイフンの文字化けテスト

ちょっと実験してみたが、JSPをEUCで表示するようにすると、?は正しく表示されるようになった。
おそらく、Postgresqlの文字コードがEUCだからだろう。
今まで、EUCで作っていたので問題はなかったけど、Shift_jisで出すようにしたから、変換しないといけない。

ついでに、入力もやってみたところ、わけのわからん半角カナが表示された。入力した文字が短すぎたので、ここに書いてあるJISAutoDetectの誤認識に引っかかったのだろう。

最初になんとか日本語が出るようになった時も思ったけど、このエンコードの問題は面倒だ。

[servlet]文字化けさらに実験

試しに、EUCからユニコードになるように変換かけたら?の嵐。よく考えてみれば、これは意味がない。
EUCにしたら直るから、DBからゲットした文字がEUC→表示はS_JISで特に変換してないから問題かなとおもったけど、

[servlet]うーん(クラスの分け方考察?)

しかし、BBSはBbsWriteとBbsWriteActionというように、フォームからデータ受け取りの部分とデータを書き込む部分で分けてるんだけど、汎用性が無いから(こういう作り方が問題?)一緒のクラスにしてもいいのでは?
サーブレット部分にはあまり処理を書き込まないということで、こんな風に分けたんだったけな?

[servlet]入力チェックとtrim

今まで、手を抜いてやってなかったtrimとサーバー側での入力チェックを入れました。
必須入力項目に関してはクライアントのJava Scriptsまかせだったが、それもあんまりなので、サーバーでチェックかけるようにしました。今までだったら、Java Scriptsを動かないようにしていると、たぶんそのまま何も入れなくても登録できたはず。
trimは文字の前後のスペースを取り除く関数。
ユーザー登録部分だと必須入力項目のユーザーIDなんかにスペースだけ入れた場合も通ってしまったり、うっかり後ろにいらないスペースを入れた場合は違う名前と認識される。
これを使うことにより、空白は取り除かれるので、チェックにかけることが出来る。


2001年8月4日 11:59:42

[servlet/JSP]文字化け

結構、よく分からずに適当にやっていたけど、まだ問題があったのだな。
「-」(ハイフン)が化ける。他にも化けるものはいろいろあるそうだ。

↓ここが一番あたってる感じ

http://www.catnet.ne.jp/terada/Java1.html

http://www.java-conf.gr.jp/archives/servlet-ml/msg03053.html

http://www.ingrid.org/java/jserv/i18n/corruptedchar.html

↓ここが勉強になるらしいが、よく分からん(笑)

http://www.ingrid.org/java/i18n/encoding/


2001年8月2日 1:23:25

[servlet/JSP]掲示板一応完成

機能的にも見栄え的にも、まだまだだけど掲示板完成。
あとは、削除の機能や書き込みが増えた場合のページ切り替えの機能が必要かも。
最近、よく寝れてないので、もう寝るっす。

[Web]自動ジャンプのページは中止

トップページは自動的にジャンプするようにしていたけど、やめた。
他のサイトから来た人が戻るボタンで後戻りできなくなるため。