ActivePerl 5.18.X の Text-Kakasi が激重2015年01月27日 05時44分06秒

ActivePerl 5.16.X が Community Edition(Free) から外れてしまったので、5.18.X 用に PPM モジュールの作成を行いました。

ActivePerl 5.18.X から PPM モジュールを MinGw の gcc を使ってコンパイルするように変更されてしまったようなのですが、そのためなのか、mknmz の実行速度がものすごく遅くなってしまいました。

ActivePerl 5.16.X なら 1 秒(計測が秒単位なので、精度が荒いですが)で処理できたものが、50 秒超えるぐらい重くなっています。 試しに Text-Kakasi を kakasi コマンドを使うように修正すると、2 秒で処理できました。 これでは Perl モジュールの意味がありません。

Text-Kakasi だけの問題か、NKF を含めたバイナリの PPM モジュールの問題かはまだ切り分けができていません。 少なくとも Text-kakasi は遅くなったということです。

ちなみに遅くなっても pltests は PASS するので、動くことは動くのですが、ここまで遅いと公開する意味がないですね。

Perl 5.8.1 と 5.18.X 対応2013年12月15日 20時25分49秒

Perl 5.18 系だと make check で fail することがわかりました。

Perl 5.18 ではハッシュ周りに修正が入っているようです。

 > ハッシュのランダム化
 >
 > Perl のハッシュ関数が使う種はランダムになりました。 これは、
 > keys(), values(), each() のような関数が返すキー/値の
 > 順序は実行毎に異なるということです。

この修正の影響を受けており、Perl 5.8.1 の時のように環境変数 PERL_HASH_SEED に 0 を指定すると pass します。

PERL_HASH_SEED = 0 の有無の違いを調べたところ、 mhonarc.pl の each を使う部分があるのですが、

   # Format MHonArc X comment extracted headers as regular headers
   my $mha_header = "";
   my($fld_name, $fld_value);
   while (($fld_name, $fld_value) = each %$mha_fields) {
      $mha_header .= join('', $fld_name, ': ', $fld_value, "\n");
   }

each が返すキー/値の順番が実行毎に異なるため、$mha_header の 内容が変わってしまいます。

内容が変わるといっても、フィールドと値のペアの出現順が変わる だけですが、これによってフレーズが変わることになります。

ここのフィールドと値のペア間でのフレーズは、本来意味をなさない ものではありますが。

とりあえず実行毎に $mha_header の内容が変わらないようにすれば make check は通るようです。

mhonarc.pl のバグとは言えませんが、例えば以下のように修正しました。

   for my $key (sort keys %$mha_fields) {
       $mha_header .= join('', $key, ': ', $mha_fields->{$key}, "\n");
   }

なお、$mha_header の内容は実行毎に同じになりますが、ソートしているため、修正前のものを 5.18 より前の Perl で動かして作成した インデックスとは内容が異なるものと思います。

が、前述のように意味のないフレーズ部分ですので、大きな問題では ないものと思います。

この修正で PERL_HASH_SEED = 0 は 5.8.1 でも不要となりましたので、mknmz の 5.8.1 チェックも外しました。

これらの修正を行い、コミットしました。

pltests のサブテストを逐次実行に変更2013年12月01日 07時31分43秒

ActivePerl のバージョンが変わったためか、pltests のサブテストが並列に実行されてることに気づきました。

pltests のサブテストは順番に実行しないとまずいので、pltests/pltests.pl.in を修正し、逐次実行するようにしました。

olepowerpoint.pl の PowerPoint2013 を未サポートに変更2013年11月09日 20時54分54秒

PowerPoint2013 で olepowerpoint.pl がハングアップすることが確認されましたので、PowerPoint2013 のサポートを外しました。

これまでにも OLE フィルタ処理中にアプリケーションが終了せずにハングアップする不具合が起こることはありました。 ただし、それはインストールされている Office が壊れている場合であって、Office の再インストール、SP のインストール、update を行うことで解決しました。

PowerPoint2013 に関しては、クリンインストール状態でも終了できないという不具合が発生します。 また別件ですが、Word2013/Excel2013/PowerPoint2013 の x64 版は動かすことができないという不具合もあります。 どうも Office2013 がダメな感じです。

なお、Visio2013 は x64 版でも動作します。

Office 2013 x64 版だと OLE フィルタが動かない理由2013年10月14日 15時39分56秒

Office 2013 x64 版だと、Win32::OLE::Const->Load("Microsoft Excel 15.0 Object Library"); でエラーが発生します。

同様に Word も Excel も。

"Microsoft Office 15.0 Object Library" は見つかるのですけどね。

Office 2013 x64 版で OLE フィルタが動かなかったのはこれが理由のようです。

Office 2013 x64 版の問題のような気もしますが、Win32::OLE::Const の問題かもしれません。

Windows 8.1 + ActivePerl 5.16.3 + Office 2013 で不具合2013年10月12日 14時06分48秒

条件は絞りきれていませんが、Windows 8.1 + ActivePerl 5.16.3 (x64) + Office 2013 の環境で、OLE フィルタで不具合が生じています。

pltests を実行すると、Excel2013 と PowerPoint2013 でエラーが発生し、プロセスが終了しません。

Win32::OLE->new で開くとまずいようです。 Win32::OLE->GetActiveObject だと問題なく閉じるようです。(処理はできませんが。)

問題は古い Excel ファイル、PowerPoint ファイルを処理した場合に起きます。

Office 2010 だと問題は起きないことは確認できています。

Archive::Zip の罠2013年07月28日 15時03分46秒

pl/extzip.pl を使って zip ファイルを読み込みテストをしていたら、unzip コマンドの方が動いて、Archive::Zip が動いていませんでした。

調べてみると最近の Archive::Zip は Compress::Raw:Zlib を必要としていましたが、pl/extzip.pl では Compress::Zlib のチェックを行っていました。 version 1.16 ぐらいまでは Compress::Zlib を使っていたのに、Compress::Raw::Zlib を使うように変わっていたのに気づいてませんでした。

Namazu 2.0.21 からの修正内容2013年06月22日 22時10分46秒

Namazu 2.0.21 からの修正内容

  • フィールド検索時に日付ソートができないバグ対応
  • CentOS 6.0 64bitでnamazu-6に失敗するバグ対応
  • HACKING-ja のドキュメントの不具合修正
  • filter/{msword, excel, powerpoint}.pl の不要な 'require NKF' を削除
  • filter/pdf.pl の pdftotext poppler バージョンに対応
  • filter/visio.pl .vdx の判定変更
  • filter/win32/{olemsword, oleexcel, olepowerpoint, olertf, olevisio}.pl Office 2010/2013 対応
  • filter/win32/olevisio.pl Office 2010/2013 では、.vdw に対応
  • ビルド時のワーニグ対策、変数の型修正、変数の初期化追加
  • デバッグメッセージ追加
  • pltests/env.pl osvers, archname を出力
  • namazu.cgi Oracle-iPlanet 対策、SERVER_SOFTWAE 出力追加
  • lisp/*.el coding 指定追加

filter/pdf.pl の Poppler バージョン対応2013年05月27日 04時02分06秒

2.0.22pre2 公開したところですが、以下の修正を行いました。

  • filter/pdf.pl

Poppler バージョンに対応しました。(反映するのが遅くなりましたが、 田中さんありがとう)

  • src/form.c

ワーニングが出るので型を直しました。

Namazu for Windows x64 版の不具合修正2013年01月14日 10時09分21秒

Namazu for Windows x64 版で、pltests 実行時に異常終了するバグを修正しました。

とりあえず pltests は通るようになりました。