2012年3月28日水曜日

SaasesのVPS ( その3 )

tomcat6+postgresql を動かしている分には、さくらの1Gプランより、Saasesの512Mプランの方が、いくぶん速い気がする。
xenの方が、I/Oは速いということかな。

2012年3月15日木曜日

SaasesのVPS ( その2 )

去年の暮に industriaを試してみて、いまひとつだったので結局お試し期間だけでやめてしまったのだけれど、osukini の方が、初期費用無料のキャンペーンをしているので、こちらに申し込んでみた。
初期費用の高さだけがネックだったので、390円/月が450円/月になるが、OSに debianが選べて、ディスク容量も若干増えるなら、60円位の違いは大した問題ではない。
気になった IOの遅さも、今のところ特に問題はないようなので、この状態が維持できるなら、使い続けることになると思う。IPアドレスも、industriaのように変則的に private address が振られているような奇妙なことはないみたいだし...

[追記: 2012-03-21] さくらのVPSがspec-upして、従来の 512Mの値段で、メモリ1G,HD 100Gになるらしい。ちょっと気持ちが揺れる...

2012年3月13日火曜日

IPAフォントが、何か変。 ( その4 )

結局、fontforgeを使って、CIDフォントに変換してやると、問題の「垨」の字は表示できるようになったのだけれど、今度は、空白と、~ が未定義文字扱いになってしまった。

ま、どちらも、トラブルを起こしやすいことでは有名なので、個別に文字置換などで対応するしかないのだろう。

2012年3月11日日曜日

IPAフォントが、何か変。 ( その3 )

やっぱり何か変。

仕様書通りの解釈だと、glyphIdArrayへのオフセットは、ghostscriptのソースにあるように、

READ_SFNTS(pfont, pcmap->idDelta + segment2, 2, ttdata);
delta = U16(ttdata);
READ_SFNTS(pfont, pcmap->idRangeOffset + segment2, 2, ttdata);
roff = U16(ttdata);
if (roff) {
ulong gidoff = pcmap->idRangeOffset + segment2 + roff +
(chr - start) * 2;

となるのだけれど、chr=#x57a8の場合は、これは、直前のidRangeOffsetを指していて、

READ_SFNTS(pfont, gidoff, 2, ttdata);
value = U16(ttdata);
で得られる値は、#x0723 になるはず。

実際には、この値にさらに、idDeltaの値が加わるわけだけれど、こんなに tricky なコーディングをするはずがない。

[追記:2012-03-13]
少し、判った。正しく表示できるソフトウェアは、たぶん、cmap を見るのに、(platformID 3) (encodingID 1) (format 4)の方ではなくて、(platformID 3) (encodingID 10) (format 12) の方を参照しているのだろう。
(format 4)の方は、「過去との互換性」のために残されているだけで、こちらを参照してしまうと、グリフが見つからない結果になる。
(format 12)の方は
(Group (#x754) (startChar #x57A8) (endChar #x57A8) (startGlyphID #x28A8)
といったデータが書きこまれていて、たぶんこれが本当のグリフの場所。

ということは、エンコーディングを UTF16(UCS2)でなく、UCS4を指定すればいいのかな?

あるいは、format 12 の方を優先して検索するべきところを、format 4を優先している(?)という ghostscriptのバグの可能性もあるなぁ。

2012年3月8日木曜日

IPAフォントが、何か変。 ( その2 )

フォントファイルを dump してみると、問題の文字のあたりは、


(Segment (921)
(startCount #x57A2) (endCount #x57A4)
(idDelta 0) (idRangeOffset #x0723))
(Segment (922)
(startCount #x57A8) (endCount #x57A8)
(idDelta -12032) (idRangeOffset #xFFFF))
(Segment (923)

のようになっていて、idDeltaが負、idRangeOffset が #xFFFF になっている。
たぶん、これを見て、「グリフがない」と判断しているのだろう。
57A8は表示できないが、57A4 は表示できていることあたりとも辻褄があう。

で、そうであるにも拘わらず、この文字が表示できるソフトウェアはどこを見ているのだろう? ソフトウェアのバグでないとしたら、データ形式の冗長性(過去との互換性のためのデータとか)を利用して目指すグリフにたどりついているのだろうとは思うが...

[追記:2012-03-08] idRangeOffsetの#xFFFFはこれで正しいのかも。
まあ、どのみち、仕様書を読まないとだめだね。

2012年3月7日水曜日

IPAフォントが、何か変。

LibreOffice で、IPAフォントを指定して、「垨」の字は、表示できるし、これを PDFに文字埋め込みでイクスポートしてもちゃんと埋め込まれるのに、同じ事を ps2pdf で PDFに埋め込もうとすると、グリフがない、といってうまくいかない。( もちろん、他の普通の漢字では問題ない )

たぶん、ps2pdf ( というか、ghostscript ) のバグなんだろうけれど、フォントファイルの map 関連のデータが壊れている可能性も、捨てきれない。

フォントファイルのダンプが取れれば、うまくいかない理由もわかりそうなものだが、あまりいいツールが見つからない。検索してみると、fontforgeを使ってみるのがよいようなことが書いてあるのだけれど、ちょっと大げさだな。 Windows用の fontforge ってあるのだっけ?