トップ 一覧 検索 ヘルプ RSS ログイン

日記/2010-2

2010-2-21

<< 前の日記  次の日記 >>

[日記]fswikiで日記のテスト

引っ越しにともなって、サイトを移転する(=自宅サーバをやめる)ことになれば、サイトをWikiに一本化するのも手かな、ということで、fswikiで日記的に書いてみるテスト。

[日記,Wiki]diaryプラグインの改造

fswikiのdiaryプラグインを使って日記を書いてみている。が、プラグインのデフォルトのままではカレンダーにいちいち記事タイトルが表示されて、長くて見辛いので、単にその日記事があることを示す“*”だけを表示するようにした。また、カレンダーの中の日付と“*”が中揃えになるようにした。


日記一覧へ

2010-2-25

<< 前の日記  次の日記 >>

[Wiki]自動スパムコメントを抑止するcomment_keyプラグイン

日記をWikiに一本化するとすると、Wikiにログインしていないユーザにもコメントできるようにしないといけない。[1]そうなると、キカイによる自動大量スパム投稿の問題が発生する。いちばん簡単なのは .htaccess による制限だろうけど、自分がログインしようとする時などにもダイアログが開くのは面倒だ。

なので、fswikiのプラグインでなにかちょうどいいものがないかと調べたら、CAPTCHAによるスパム対策プラグイン (bbs/comment 対応版)があった。が、今後レンタルサーバに移行した時(3月を目処に考えているけど)にプラグインが必要とするGD::SecurityImage::ACモジュールがあるかどうかわからない。このプラグインの前の版は、wikiのディレクトリ下にAuthen::Captchaを配置すれば動くのだけど、GD::SecurityImage::ACは“インストール”しないといけないらしい。古い情報かもしれないけど、さくらのサーバにはインストールされていないようだ。なので、何か他のものがないか調べてみた。

すると、MD5認証を加えたcommentプラグインがあった。原理を完全に理解してはいないのだけど、「MD5による任意の文字列を追加することで、自動投稿プログラムが対応しにくいフォームを作る」ものだと思う。こちらは、その気になればソースを見て“このWiki”に特有の投稿プログラムを作ることもできはするのだけど、まぁ、広告効果と天秤にかけて意味があるとも思えない。

人が使うぶんには見た目の変化はないし、とりあえずこれで様子を見てみることとする。

[TeX]ptexlive 2009のインストール

さっそく、TeXLive 2009対応のptexlive-20100225〜をインストールした。手順は以下の通り。なお、各種ソフトウェアのコンパイルに開発用パッケージが必要になるので、インストール中にエラーが出たら、メッセージをちゃんと読んで、「ない」と言われたものをインストールする。

TeXLive 2009のダウンロード

CTAN/systems/texlive/imagesからtexlive2009-20091107.iso.xzをダウンロードする。ウチからは、理研サイトからのダウンロードで4MB/sほどが常時出て、約6分でダウンロードが完了した。

xz圧縮されたTeXLive 2009の展開

TeXLive 2009のディスクイメージはLZMA圧縮されたiso.xzという形式になっている。なので、マウントする前に展開する必要がある。Fedora 10ではLZMA形式のファイルを取り扱える“xz-4.999.8-0.8.beta.20090817git.fc10”パッケージがあるので、(インストールしていれば)

unxz texlive2009-20091107.iso.xz

とすれば展開することができる。

ディスクイメージのマウント

TeXLive 2009のディスクイメージをマウントするには、rootで

cd /mnt
mount -o loop /usr/local/src/texlive2009-20091107.iso texlive

といったようにする。ディスクイメージの場所はどこでもいい。マウントポイント /mnt/texlive (名前は何でもいい)はあらかじめ作っておく。

TeXLive 2009のインストール

マウントができたらTeXLive 2009をインストールする。rootでマウントした /mnt/texlive などに移動し、ターミナルで

./install-tl

とインストーラを実行する。すると、

======================> TeX Live installation procedure <=====================

=======> Note: Letters/digits in <angle brackets> indicate menu items <=======
=======>       for commands or configurable options                   <=======
(略)
Other actions:
 <I> start installation to hard disk
 <H> help
 <Q> quit

Enter command:

という画面になるので、“I”キーを入力し、Enterを押してインストールする。TeXLive 2009は巨大なので、インストールにかなり時間がかかる。ウチの環境では

Time used for installing the packages: 03:33

となった。さらに、updmapや必要なファイルの生成(pre-generating all format files (fmtutil-sys --all), be patient...done)というので数分かかった。

ptexliveのダウンロード

http://tutimura.ath.cx/~nob/tex/ptexlive/ からptexlive-20100226.tar.gz(ページのいちばん下にある最新版)をダウンロードし、適当な場所( /usr/local/src/ptexlive/ 以下など)に置く。

ptexliveの展開

ptexliveのほうは“ふつう”の tar.gz 形式なので、/usr/local/src/ptexlive など適当な場所で

tar xzvf ptexlive-20100226.tar.gz

として展開する。なお、インストール直前までは一般ユーザで作業することになるので、一般ユーザの書き込み、実行ができるようにしておく必要がある。

設定ファイルのコピー

/usr/local/src/ptexlive/ptexlive-20100226 下にある ptexlive.sampleという設定ファイルのサンプルをひとつ上、つまり /usr/local/src/ptexlive/ に ptexlive.cfg という名前でコピーする。sampleと同じディレクトリにあっても動くのだけど、ひとつ上にあると、新しいバージョンに更新する時にそのまま流用できるので。

設定ファイルの編集

適当なエディタで、ptexlive.cfg を編集し、環境に合わせた設定にする。といっても、たいていの場合必要なことはごくわずかで、ディスクイメージをマウントした場所を適切に指定することぐらいだ。なお、現在(2010/2/26)の段階では、日本語に対応した pdvips および pxdvi がコンパイルできないそうなので、それらをコンパイルしない、テストの対象としない設定変更が必要となる。僕の環境でのサンプルとの差分は以下の通り。

--- ptexlive-20100226/ptexlive.sample	2010-02-25 01:57:40.000000000 +0900
+++ ptexlive.cfg	2010-02-26 01:12:09.000000000 +0900
@@ -11,7 +11,7 @@
 TEXLIVE_VERSION=2009
 
 ### (必須) mount した TeX Live 2009 DVD のディレクトリを指定
-ISO_DIR=/media/TeXLive2009
+ISO_DIR=/mnt/texlive/
 #ISO_DIR=/Volumes/TeXLive2009
 #ISO_DIR=/mnt/cdrom
 
@@ -97,11 +97,11 @@
 
 ### X 環境がない場合
 # conf_option --disable-x
-# conf_option --disable-xdvik
-# conf_option --disable-pxdvik
+conf_option --disable-xdvik
+conf_option --disable-pxdvik
 
 ### make test で xdvi と pxdvi を除外する
-# XDVI=echo
+XDVI=echo
 
 ### make test で ps2pdf を除外する
 # PSPDF=echo
@@ -168,4 +168,4 @@
 
 ### ディスクを少々節約する(知識がないと設定は困難)
 ### solaris ではうまく動かないことが多い
-# conf_option --enable-shared
+conf_option --enable-shared

最後の --enable-shared は、他に個人的にdvisvgmというツールをコンパイルする際に必要なためで、通常TeXを使って文書作成をするだけでは必要ない。

ptexliveのコンパイル

一般ユーザで /usr/local/src/ptexlive/ptexlive-20100226 に移動し、

make all0

とすると、ptexliveのコンパイルが始まる。なお、この段階でいろいろなチェックがおこなわれて、不備があると止まるので、メッセージを読んで対処する。コンパイルは、ptexlive 2008と比べても(体感的に)ものすごく時間がかかるので気長に待つ。僕の ptexlive 2008 がコンパイルできる環境(設定ファイルは上記)では、幸いにして何もエラーがなくコンパイルが終了した。

次に、(必要なら)otfパッケージのコンパイルをおこなう。

make otf

とすると、otfパッケージに必要な仮想フォントなどが生成される。なお、公開初日のptexlive-20100225では仮想フォントの生成に問題があるそうだ。翌日(20100226)以降のバージョンではその対処がなされている。

それから、TeX用フォント(cmap、実際のTrueType / OTFフォント)を設定する。

make fonty

とすると、cmapのインストール、あらかじめ設定ファイルに書いてあるディレクトリを検索し、フォントへのシンボリックリンクを貼るといった作業を自動でおこなってくれる。

make font

と y を抜かすと、ひとつひとつ尋ねてくるので、適切に回答する。

ここまでのテスト

一連のコンパイル作業が終了したら(まだインストールはしていない)、環境のテストをおこなう。

make test

とすると、文書の作成→ platex でのコンパイル→dvipdfmx での変換、ps2pdfでの変換といった作業のテストが自動でおこなわれる。本来は他に xdviでの表示、dvipsでの変換などもおこなわれるが、現段階ではそれらはコンパイル、インストールできないので、設定ファイルで除外してあるはず。特に何もエラーメッセージが出なければ、ptexliveは正しくコンパイルされている。

ptexlive 2009のインストール

いよいよインストール。インストールはもちろん root 権限で。

sudo make install

とするか、rootになって /usr/local/src/ptexlive/ptexlive-20100226 に移動し、

make install

とする。インストールは基本的にできあがったものをコピーするだけなので特に問題はないはず。あとは、画面に出力されるように

for sh/bash user
export PATH=/usr/local/texlive/p2009/bin/i686-pc-linux-gnu:$PATH

for csh/tcsh user
setenv PATH /usr/local/texlive/p2009/bin/i686-pc-linux-gnu:$PATH

と、必要な場所にシステムの設定ファイル( /etc/profile.d/ 下)を作るか、ユーザの設定ファイル( .bashrc など)にパスを指定すれば、ptexlive 2009が使えるようになる。

補1: 自分用TEXMFツリーを認識させる

TeXを使っていると、マクロやクラスファイルをダウンロードして使うことが多くなる。それらをシステムのTEXMF( /usr/local/texlive/p2009/texmf )に入れておくと、ptexliveを新しいバージョンに更新する時にうっかり消してしまったり、面倒な退避をすることになる。そこで、自分用のTEXMFツリーを作っておくと、ptexliveのインストールに影響を受けずにマクロ等を蓄積しておくことができる。

基本的にはシステムのTEXMFと同じディレクトリ構造で任意の場所にファイルを置けばよい。僕の場合は /usr/local/myTEXMF 下に

doc/    fonts/    ls-R      scripts/  tex/
dvips/  jbibtex/  pbibtex@  source/

(pbibtexはjbibtexのシンボリックリンク)という感じで配置している。このTEXMFツリーをptexlive 2009に認識させるには、環境変数 TEXMFLOCAL を使えばよい。システムのシェル設定ファイル(/etc/profile.d 下など)で

export TEXMFLOCAL=/usr/local/myTEXMF

とする。こうすると、rootで mktexlsr コマンドを実行した際に自分用TEXMFツリーの中身もデータベース(ls-Rファイル)に登録される。

補2: dvipdfmxのフォント埋め込みを制御する

ptexliveでは、前身のptetexから引き続き、updmapによるフォント管理が日本語フォントについても可能なので、簡単にdvipdfmxで“どのフォントを、埋め込むか埋め込まないか”を制御することができる(xdviでの表示フォントも)。

ここでは、例として rml(明朝)にIPA明朝、gbm(ゴシック)にM+フォントとIPAフォントの合成フォントのうちm+2m+ipagを使う設定をおこなう。

まず、自分用TEXMFツリー(上記)[2]

TEXMF/fonts/map/dvipdfmx

下に、ptex-allEmbed.map という名前で以下の内容のファイルを作る。

rml   H ipam.ttf
gbm   H M+2M+IPAG.ttf
rmlv  V ipam.ttf
gbmv  V M+2M+IPAG.ttf

また、ここで allEmbed という“セット”を作るので、ついでにotfパッケージ、utfパッケージでもIPAフォントの埋め込みがなされるよう、同じディレクトリに

ln -s /usr/local/texlive/p2009/texmf/fonts/map/dvipdfm/ptexlive/utf-ipa-ttf.map utf-allEmbed.map
ln -s /usr/local/texlive/p2009/texmf/fonts/map/dvipdfm/ptexlive/otf-ipa-ttf.map otf-allEmbed.map

(2010/3/3 ptexlive2009-20100302よりmapファイルの場所、名称が変更になったので修正)として、{ptex, otf, utf}-allEmbed.map というファイルが存在するようにする。[3]

このようにして、root で

updmap-sys --setoption kanjiEmbed allEmbed

とすると、dvipdfmxのデフォルトで、明朝体でIPAフォント、ゴシック体でM+2M+IPAGが埋め込まれるようになる。

埋め込みをやめたい場合は、

updmap-sys --setoption kanjiEmbed noEmbed

とすればよい。

補3: dvisvgmなど、kpathsearchを使う外部プログラムのコンパイルで“kpathsea_version_string”絡みでなんかエラーが出る場合

ptexliveがうまくインストールできたので、dvisvgmをコンパイルしようとしたら、

error: Could not compile a simple kpathsea program -- check your installation

と出て configure がうまくいかない。ちゃんと

./configure LDFLAGS="-L/usr/local/texlive/p2009/lib/i686-pc-linux-gnu" CPPFLAGS="-I/usr/local/texlive/p2009/include"

としているのに。で、configure(.ac)ファイルを調べてみたら、

AC_MSG_CHECKING([kpathsea version])
		AC_TRY_RUN([#include <stdio.h>
  			#include <kpathsea/kpathsea.h>
			extern const char *kpathsea_version_string;
			int main() {
				FILE *f;
				f = fopen("conftestval", "w");
				if(!f) exit(1);
				fprintf(f, "%s\n", kpathsea_version_string);
				fclose(f);
    			exit(0);
			}], 
			[kpseversion=`cat conftestval`], [kpseversion=], [kpseversion=unknown])
#		AC_RESTORE_FLAGS
		AC_MSG_RESULT("$kpseversion")
		if test -z "$kpseversion"; then
	  		AC_MSG_ERROR([Could not compile a simple kpathsea program -- check your installation])
		fi

となっていて、よくわからないけど ライブラリを開いて kpathsea_version_string という変数の数字をチェックしているらしい。で、これが返ってこないために、バージョンチェックでエラーになっているということのようだ。前のptexlive 2008やFedoraのパッケージでインストールされるkpathsea(4.0.0)では問題がないので、新しいTeXLive 2009の5.0.0で起こる問題のようだ。

そこで、kpathsea_version_string という単語で調べてみたら、gentooのバグトラック

This patch fixes compiling with kpathsea-5 headers from texlive-core-2009;

the issue is that kpathsea_version_string in texlive-core-2009 is a macro, not a variable.

ということが書いてあり、とりあえず理由はわかった。で、本当はそれに“正統に”対応しないといけないのだろうけど、プログラミングはよくわからないので、configure で

	@@ -5402,7 +5402,7 @@
	sed 's/^/| /' conftest.$ac_ext >&5

	( exit $ac_status )
	-kpseversion=
	+kpseversion=5

と、バージョンを決め打ちして対応することにした。いや、もともとconfigureにそう書いてある(変数 kpseversion を入力する行がある)んだから、きっとこの泥縄の対応こそが正統なのだろう。これでconfigure, makeともにうまくいった。

しかしCGIとしてうまく動かない。

  • [1]日記に関するコメントを受け付けない、本当に必要ならメールをください、というやりかたもあるだろうけど。
  • [2]別にシステムのTEXMFツリーでもかまわない。
  • [3]本当はotf、utfについてもM+フォントが埋め込まれるようmapファイルを新たに書かないといけないかもしれない。が、僕は普段otfパッケージを使うことはほとんどないので、このへんはテキトーで。

日記一覧へ

2010-2-26

<< 前の日記  次の日記 >>

[TeX,コンピュータ]svgtex.fcgiが動かない

ptexlive 2009がインストールできたので、TeXを使っているimgtex, svgtexの動作を確認してみたら、imgtexはちゃんと動く。しかし、svgtexのほうはどういうわけかうまくいかない。CGIとしてはほとんど変わらないうえ、同等のコマンド(latexでコンパイル→ dvisvgmで変換)をシェルでおこなえば問題なくSVGが生成されるし、ターミナルでCGIを実行しても問題がない。

QUERY_STRING="cmd=$\pi$" perl svgtex.fcgi
...(SVGのコードが出る)

なのに、ブラウザから実行した場合だけ、うまく動かない。

いろいろデバッグしていると、どうもlatexでコンパイルまではうまく行っているようで、ブラウザを経由したCGIからのdvisvgmの呼び出しがうまく行っていないらしい。どういうことなんだろうか……。


日記一覧へ

2010-2-27

<< 前の日記  次の日記 >>

[TeX,コンピュータ]IPAフォントの新版がリリース、新たにIPA exフォントも

IPAフォント(OTF版)を埋め込む解説を書いた途端、拡張子が .ttf に戻った[4]IPAフォント003.02がリリースされた。まぁいつものことだ。

さらに、和文は固定幅、欧文はプロポーショナルというIPA exフォント(明朝・ゴシック)もリリースされた。なんだか用途がよくわからない。プレスリリースには

一般的な日本語の慣例に従った文書を作成する場合、例えば欧文文字の部分には「IPA P明朝」を用い、和文文字の部分には「IPA明朝」を用いる、といった使い分けを、一つの文書の中で行う必要がありました。

とあるけど、ふつう、ワープロでなら和文IPA明朝、欧文Times New Roman(Liberation Serif)といったようにフォントを使い分ける(デフォルトでそうなってない?)ものじゃないんだろうか。あるいは、ソフトウェアでうまいことやってくれるか、気にしないか。もしかしたら、「全部の文字にIPAフォントシリーズを使わなければならない」といった役所的な事情があるのかもしれないけど。

……と思いきやなんか変だぞ

いつものように新しいIPAフォントとM+フォントを合成して、フォントフォルダへコピー、fc-cache -fv コマンドを実行、ログアウトという手順を踏むと、ツールバー等の高さがおかしくなったり、特定の文字だけが巨大になったり、表示がぐちゃぐちゃになってしまった。

ここではブラウザのフォントにIPAフォント003.02版で作ったM+2P+IPAGを指定している。“素の”IPAフォントを指定すると特に問題はないので、合成スクリプトのパラメータが合わないのかもしれない。

  • [4]拡張子 .otf で実体が .ttf だと不具合がある環境があるらしい。

日記一覧へ

2010-2-28

<< 前の日記  次の日記 >>

[日記]日記移行

2月いっぱいで、HNSによる日記は更新停止して、こちらに書くことにした。このサーバ(tanaken.myhome.cx)そのものも、3月半ばには引っ越しにともない公開を停止する予定。

で、移行すべくレンタルサーバを選んでいたのだけど、よく考えたら今契約してもすぐに住所が変わるので、レンタルサーバはともかくドメイン(独自ドメインを取ろうかな、と)のほうは変更手続きが厄介そうだし、引っ越してからにするかもしれない。まぁ、しばらくこのサーバ(というかコンテンツ)が見れないからといって誰が困るわけじゃなし。

あとは、移行に関連してここ2、3日くらいかけて、公開している写真を全部Windows Live上に移していた。基本的にはフォルダごとに画像を全部指定して放っておけばよいのだけど、とにかく転送に時間がかかる。見るぶんには、そんなに遅くはないと思うのだけど。そして、自宅サーバ上の写真を参照していたり、diary.cgi?... という形のリンクになっている古い日記の記述もできるだけ修正中。そのへんが終わったら、最終的にはローカルなリンクの /~ktanaka という部分を根こそぎ削除・改変しなくてはならない(レンタルサーバだと ~usernameにはならないため)。オンラインでも引っ越し準備はいろいろ大変だ。

[日記]社会人準備

今日は、春からスーツ生活をせにゃならんので、イトーヨーカドーでスーツを、ユニクロでシャツや靴下を購入。スーツ、靴とももう1組必要な状態だったのだけど、先にスーツを買ったら、明日(3月1日)から使える割引券をくれたので、靴やワイシャツは明日以降買うことにした。


日記一覧へ