竹の 02/21 2004 --------------- 奥村晴彦さんの TeX QandA の掲示板 http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/ へのアクセス性を改善するために、私が普段利用している perl script を公開します。現在の version は 0.3.2 です。 1. はじめに ----------- 奥村晴彦さんの TeX QandA の掲示板 http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/ は、利用者が多く、回答も詳しい方々が行なっておられてとても良質な QandA コーナーであると思いますが、普段 Netscape 3.04 でアクセスし ていていくつか不満を感じていました。 1) 各項目のページに、次や前の項目のページへのリンクが貼られていな いので、次の項目に行く場合に一旦ブラウザの機能で一覧のページに 戻って、そこからアクセスしないといけない (次々順番に見るときに 手間がかかる) 2) その項目のページが別の項目の返答のページである場合は、元のペー ジへのリンクが本文記事中にあることもあるが、逆にその項目からそ れへの返答のリンクがない (質問を前方向には手繰れるが、後方向に は手繰れない) 3) 検索機能がついているが、通常の検索エンジンのようなものに比べて やや貧弱 ただ、例えば 1) は、私は知らないのですが、タブブラウザというもの なら別にそう問題にはならないかもしれませんし、3) も使い方によって そう欠点とも言えないかもしれません。 2) は、そのページの検索機能によって検索した場合に特に欲しい機能で す。つまり、同じ質問をしたページが見つかっても、そのページの回答 のページがそこには出てなくて、再びその質問のタイトルで検索しない といけない (という解決策もあるにはある) からです。 このうち、例えば 1) は一覧のページから各項目のページへのリンク 24978 を、 24978 のように変えれば改善が可能であることに気がつきました。また、2) も 前に戻るデータベースを作れば、それを逆方向のものにすれば後方向の 情報が得られるので、それで改善できそうだとわかりましたが、そのた めには各項目のページを一つ一つ持って来る必要があります。ただ、考 えてみれば [a] 結局全部目を通すなら全部持って来ているようなもの [b] むしろ全部手元持ってくればアクセスは速くなる [c] 各ページに 2) の後方リンクをつけることもできるようになるし、 1) のリンクをつけることもできるようになる [d] 手元に各ページがあれば、3) も namazu 等を利用すれば改善できる などの利点もあります。 ということで、まだ完全に [a-d] を実装してはいませんが、最近はこう いったことを行なうスクリプトを利用してアクセスしています。これを 公開することにしましたのでご利用ください。 現在は、fortexqa1.pl, fortexqa3.pl, fortexqa4.pl の 3 つの perl script コマンドを含んでいて、 fortexqa1.pl: 一覧のみ持って来て target をつける fortexqa3.pl: 各項目のページも持って来て database を作り加工する fortexqa4.pl: fortexqa3.pl の作る database を元に thread を作る となっています。 2. 動作環境 ----------- Unix 上でしか試していませんので、MS-Windows 上の perl で動作する かは未確認です。必要なものは以下のものです。 1) perl (多分 4.036 以降) 2) wget または w3m (HTML ファイルを取得するのに使用) 3) cp,rm,echo (script 内部で使用) 4) 2) で w3m を使う場合は gzip に対応した zcat 通常 3) は Unix にはあるはずです。fortexqa3.pl, fortexqa4.pl を使 う場合は、perl が何らかの DBM (DataBase Management) をサポートし ている必要があります。なお、DBM はパッケージ宣言なしに dbmopen(), dbmclose() を利用していますが、(perl5 等で) もし必要ならばパッケ ージの使用宣言を書き加えてください。 4) は、w3m を使う場合に必要ですが、gzip がインストールされていれ ば多分あると思います。環境によっては gzcat という名前でインストー ルされているかも知れません。その場合は適宜 perl スクリプト内部の zcat と書かれている部分をそのように修正してください。 3. install ---------- 0) ダウンロード 下記サイトから持って来てください。 http://takeno.iee.niit.ac.jp/~shige/TeX/TeX.html (fortexqa-0.3.2.tar.gz) 1) 展開 % gunzip -c fortexqa-0.3.2.tar.gz | tar xf - % cd fortexqa-0.3.2 2) 設定 各種定義が fortexqa1.pl, fortexqa3.pl, fortexqa4.pl の先頭に書か れていますが、それらを適当に修正します。意味は下にまとめて書きま す。また、1 行目の #!/usr/local/bin/perl を、適宜適切な perl のパスに書き換えてください。 3) インストール パスの通ったところに fortexqa1.pl, fortexqa3.pl, fortexqa4.pl を 置いてください。コマンド名は適当に変更して結構です。例えば ~/bin にパスが通っているならば % cp fortexqa1.pl ~/bin/fortexqa1 % cp fortexqa3.pl ~/bin/fortexqa3 % cp fortexqa4.pl ~/bin/fortexqa4 % chmod u+x ~/bin/fortexqa1 ~/bin/fortexqa3 ~/bin/fortexqa4 のようにすればいいでしょう。 4) ディレクトリ等の作成 fortexqa3.pl は、ファイルを保管するディレクトリ等を作成する必要が あります。後で説明する $LETDIR と $TMPDIR がそれですが、例えば $LETDIR = ~/texqa、$TMPDIR = $LETDIR/tmp だとして、以下のようにす れば準備 OK です。 % mkdir ~/texqa ($LETDIR) % mkdir ~/texqa/tmp ($TMPDIR) % echo 24500 > ~/texqa/curlast 最後の "24500" は、この番号より大きい番号から持って来始めることを 意味します。"1" とすると全部持って来ることになりますが、現在 (01/30 2004)、25000 程度のファイルがあり、それら全てを持って来る のは大変ですし、データベースもかなり大きなものになって効率が悪く なるでしょうから、適当な大きな数字から始めることをお勧めします。 なお、このファイルは fortexqa3.pl を実行する度に、持って来た記事 の一番大きな番号を保存していきます。 上の 2) の設定のところであげた各種定義について説明します。 ・$tmpf : 一時ファイル名 fortexqa1.pl では /tmp に作るようになっていますが必要なら修正して ください (fortexqa3.pl では $TMPDIR 内に作る)。 ・$URL : 奥村晴彦さんの掲示板の URL (多分変更不要) ・$WGETCOM : HTML ファイルを持って来るプログラム名 現在は w3m と wget の 2 つのみサポートしています。パスが通ってい ない場合はフルパスで w3m と wget を書いてください。 ・$LINKTARGET : に追加する target frame の名前 デフォルトでは "texqa" (fortexqa1.pl), "contents" (fortexqa3.pl, fortexqa4.pl) となっています。なお、実行時にオプション (-t) で変 更することもできます。他のウィンドウフレーム名と重なって使いにく くなる場合は適宜変更してください。 ・$outfname : 最終的に作る HTML ファイル名 (fortexqa1.pl, fortexqa4.pl) デフォルトでは、 fortexqa1.pl: "./texqa.html" (カレントディレクトリ) fortexqa4.pl: "$LETDIR/texqa4.html" というファイルを生成しますが、ディレクトリを固定したい場合はフル パス名を書いてください。なお、その場合自分のホームディレクトリは $HOME で参照できます。また、実行時にオプション (-o) で変更するこ ともできます。なお、fortexqa4.pl の方は、$LETDIR/ にあるファイル へのリンクを持っていますので、ディレクトリは変更しない方がいいで しょう。 ・$LETDIR : 各項目の HTML ファイルやデータベース等を保管するディ レクトリ (fortexqa3.pl, fortexqa4.pl) fortexqa3.pl では、一時ファイル以外の全てのファイルがここに作られ ます。 ・$TMPDIR : 作業用ディレクトリ (fortexqa3.pl のみ) fortexqa3.pl の作業用ディレクトリで、各項目の HTML ファイルも、一 旦ここに置かれ、それを加工して $TMPDIR にコピーします。デフォルト では $LETDIR/tmp です (多分修正不要)。 4. 使用法 --------- 4.1. fortexqa1.pl ----------------- fortexqa1.pl が実際にやることは以下の通りです。 1) 奥村晴彦さんの TeX QandA の掲示板 http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/index.html を持って来て 2) それの先頭と最後の部分をカットして一覧だけにして 3) リンクの貼り換え、target の追加を行ない texqa.html として出力 この、3) は、例えば Re: 飛鳥の取り扱いについて という部分を Re: 飛鳥の取り扱いについて のように書き換えます。できた texqa.html は、現在のディレクトリの 絶対パスが /home/hoge であるとして、ブラウザで file://home/hoge/texqa.html のようにしてアクセスできるでしょう。上で分かるように、各項目のペ ージは奥村晴彦さんのページに見に行きますが、それらは、フレームに 対応したブラウザの場合、"texqa" という名前のウィンドウフレームに 開きますので、一覧と各項目の内容のウィンドウを独立に開いてアクセ スできます。これによって (こんな簡単なことで) 各項目の内容参照の やりやすさがかなり向上すると思います。 fortexqa1.pl のオプションは以下の通りです。 -o [output]: 出力ファイル名の指定 (default: "texqa.html") -t [target]: の target フレーム名 (default: "texqa") -h: ヘルプメッセージ -v: バージョン表示 4.2. fortexqa3.pl ----------------- fortexqa3.pl が実際にやることは以下の通りです。 1) 奥村晴彦さんの TeX QandA の掲示板 http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/index.html を持って来て、新たに追加されたファイルを各項目を調べ 2) それらを持って来て ($TMPDIR) そこからデータベースを作り直し 3) それにしたがって各項目のページも加工して $LETDIR にコピー 各項目ファイルには、元々はそれへの返事を書く form が下についてい ますが、それを削除し、以下のようなものをつけます: Original: (texfaq):25004.html

Next: 25005, 25012
Prev: 25003 つまり、 ・Original: 奥村晴彦さんの所のオリジナルの HTML へのリンク ・Next: この項目への返答のファイルへのリンク (昇順) ・Prev: この項目が引用しているファイルへのリンク (降順) が追加されます。もちろん Prev: が複数の場合もあります。返答を書く 場合は Original: のリンクをたどって下さい。 Next, Prev は、各項目のページ内に書かれている を元に作っています。よって、ある項目に対する返答であってもそれを つけていない場合は Next, Prev のリンクはつきません。Prev のリンク は、実際にはそのページ本文にリンクが貼られているので必ずしも必要 ではないのですが、とりあえず今はつけています。 また、一覧ファイルからは、fortexqa1.pl 同様、別ウィンドウフレーム (名前は"contents") への各項目のリンクがついているので、一覧ファイ ルの表示画面と各項目の表示画面は独立して見ることができます。 fortexqa1.pl とは、その各項目のページが ・奥村晴彦さんの掲示板へ見に行くようになっているのか ・加工されたものをローカルに置いてそれを見ているのか が違う、とも言えます。このページへのアクセスは、$LETDIR の絶対パ スが /home/hoge/texqa であるとして、ブラウザで file://home/hoge/texqa/index.html のようにしてアクセスできるでしょう。 fortexqa3.pl のオプションは以下の通りです。 -d [dir]: データ保存ディレクトリの指定 (default: $LETDIR) -t [target]: の target フレーム名 (default: "contents") -h: ヘルプメッセージ -v: バージョン表示 4.3. fortexqa4.pl ----------------- fortexqa4.pl が実際にやることは以下の通りです。 1) fortexqa3.pl が作った $LETDIR/org.html (奥村晴彦さんの TeX QandA の掲示板 http://www.matsusaka-u.ac.jp/~okumura/texfaq/qa/index.html の一覧) とデータベースを元に、逆順の thread を構築 2) その thread を HTML にして $LETDIR/texqa4.html として出力 よって、これは fortexqa3.pl を実行した後に実行します。 thread は、デフォルトでは以下のように HTML 化されます: ----- ここから ----- .....  00005 [名前] (日付)
・00005 の記事のタイトル
 ┏━00003 [名前] (日付)
  ┏━00004 [名前] (日付)
 ┏━00002 [名前] (日付)
 00001 [名前] (日付)
・00001 の記事のタイトル
----- ここまで ----- このように、thread は下から上に伸びるようにしてあります。ちょっと 奇妙ですが、通常の一覧が最新のものが上に伸びているのに合わせまし た。記事のタイトルも下の方にあることになりますが、ちょっと見にく いかも知れません。thread を上から下に伸びるようにするには、オプシ ョン -nr を使ってください (version 0.3.1 より)。デフォルトでは -r (下から上) と同等です。 見て分かるようにあまり綺麗なものではありません。出力形式を改良し たければ、putout() の定義部分を適当に修正してください。 fortexqa3.pl で持って来ていないような古い記事が参照元である場合の ように参照元を持たないものがある場合がありますが、その場合は、ト ップレヴェルに相当する行に [00001] (nolink)
のように書き出すようにしています (putoutnolink())。 なお、参照元は一般には一意ではありませんが、その記事中で参照され ている最も大きい番号 (最新の番号) を参照元としています。よって、 必ずしも正しい thread にはならない可能性もあります。 fortexqa4.pl のオプションは以下の通りです。 -d [dir]: データ保存ディレクトリの指定 (default: $LETDIR) -t [target]: の target フレーム名 (default: "contents") -o [outfname]: 出力ファイル名 -r/-nr: 新しいものを上に/下に (default: 上に) -h: ヘルプメッセージ -v: バージョン表示 5. その他 --------- (02/16 2004; fortexqa Ver.0.3) 割と忙しいのですが、暇にならざるをえない時間があったので、少し fortexqa4 について考えてみたら、fortexqa3 のデータベースを使えば 割と楽に作れることに気がつきました。ということでやっつけ仕事でた めしに作ってみました。bug 等はまだありそうな気がしますし、 fortexqa3.pl を動かした後に動かす、というちょっとやな使い方ですが それなりの thread には見えるようです。 (02/16 2004; fortexqa Ver.0.2) fortexqa1 の方は、ほとんど実際に使っていなかったのですが、動かし てみたら bug だらけでした。それを直したものを Ver.0.2 とし、今後 archive ファイルは日付でなく、バージョン番号でまとめていくことに しました。 (01/30 2004: fortexqa Ver.0.1) fortexqa を公開することにしました。実は元々は csh script + AWK script の形態だったのですが、公開に際して perl で書くことにしまし た。私はこの形でプログラミングすることがほとんどで、公開時に perl にする、というのは yomi と全く同じパターンです。perl 版はまだ使い 込んでいないので bug が色々あるような気がします。 また、fortexqa1.pl と fortexqa3.pl になっているが、"fortexqa2.pl" はどうした、と言われそうなので先に言っておきますが、実はちゃんと あります。しかし、使ってみてあまり意味がなさそうなので使うのをや めてしまったのです。どういうものかというと、fortexqa1.pl, fortexqa3.pl の丁度中間のようなもので、 ・後方へのリンクを、一覧画面の方につけたもの といったようなものです。つまり、fortexqa3.pl で各項目のページにつ く Next: の部分が、一覧のページの各項目の右に並んでいる、と考えれ ばいいです。各項目のファイルは一応 database を作るために新規のフ ァイルを一旦取得して中を参照しますが、保存はしません。しかし、これ は使ってみると分かるのですが、fortexqa1.pl や fortexqa3.pl に比べ てやや存在価値が薄く、fortexqa3.pl (に相当する csh と AWK の script) ができた段階で使っていません。 実は、案としては fortexqa4.pl まで考えていて、fortexqa4.pl は一覧 の thread 表示を作る、というものです。データベースを使えばできな くはなさそうなんですが、前後の接続関係が一対多や多対一ではなく多 対多であること、しかもそれは完全なものではない、など接続関係の処 理に問題があるようなので、まだ csh + AWK script 版すらコードを書 いていません。 6. バグリポート、ライセンス --------------------------- この perl script は無保証です。しかし色々な不具合は、対応できるも のは行う予定ですので、不具合の報告、意見などは歓迎します。報告等 は下記メールアドレスへお願い致します。また、バグリポート等、各種 情報は、順次下記の WWW page に掲載する予定です。 e-mail: shige@iee.niit.ac.jp WWW page: http://takeno.iee.niit.ac.jp/~shige/TeX/TeX.html また、このソフトはフリーソフトとして公開します。再配布、改良は可 能ですが、その際、このライセンス部分は改変せずに付属させてくださ い。改良は変更箇所を別途明記してください。ソースコードも自由に使 用して頂いて構いません。 6. 変更履歴 ----------- 02/16 2004 以降の変更に関しては、ChangeLog ファイルをご覧ください。 01/30 2004 Ver.0.1 02/01 2004 02/03 2004 02/16 2004 Ver.0.2 01/30 2004 1) 公開開始。 02/01 2004 2) ドキュメントの表現等を少し修正。 02/03 2004 3) 奥村晴彦さんの所属名を書き間違えていたところを修正 (Thanks 奥村さん)。 02/16 2004 4) fortexqa1.pl の種々の bug fix. 7. 目次 ------- 1. はじめに 2. 動作環境 3. install 4. 使用法 4.1. fortexqa1.pl 4.2. fortexqa3.pl 4.3. fortexqa4.pl 5. その他 6. 変更履歴 7. 目次 +=================================================+ 竹野茂治 〒945-1195 新潟工科大学 情報電子工学科 shige@iee.niit.ac.jp TEL(&FAX): 0257-22-8161 +=================================================+