なにかの購入ページだか登録ページだかで、規約に同意する必要があって、規約へのリンクをクリックすると別ウインドウで規約のページが開いた。それを読んで、元のウインドウに切り替えて「同意する」というリンクをクリック。すると……
「セッションがタイムアウトしました」
……。
規約を読む人がいるとははなから思ってないらしい。21世紀ってさあ、どんどん滑稽になってきてるよね。
MeCab の Python バインディングを Windows で使う話の続き
先日、Windows で MeCab の Python バインディングを使うインストーラを作ったけど、このライブラリで、たとえば次のようなコードを書いて、test_mecab.py foo.txt のように適当なテキストファイルを食わせると、特定の行で python.exe が落ちることがある。(Windows での話で、たとえば Leopard では落ちなかった。)
# test_mecab.py import sys import MeCab t = MeCab.Tagger() for filename in sys.argv[1:]: for line in open(filename): sys.stdout.write(t.parse(line))
落ちる時はいつも同じ行で落ちる。が、その行の内容で決まるわけではないらしい(同じ内容の行でも別の場所にあるものは問題なかったりする)。C/C++ で libmecab.dll を使った同様のプログラムを書いて実行した場合は落ちない。また Python からでも、ctypes モジュールを使って libmecab.dll の C 関数を直接呼んで同様の処理をするスクリプトなら落ちない。
MeCab_wrap.cxx のどこで落ちているかまでは追いかけたけど、よくわからない。これ以上原因を探る気力もないし、ctypes モジュールを使って自分でラッパを書いたほうがいいだろうか……。
それにしても、今までよく知らなかったけど ctypes ってすごいですね。