« 2013年3月 | トップページ | 2013年10月 »

2013年5月

2013年5月27日 (月曜日)

Python の正規表現が激遅だと思ったら

仕事で書いてた perl のスクリプトを python で書きなおした時に少しだけハマったのでメモ。

問題のスクリプトは100MBくらいのテキスト(ログ)を解析して結果を出力するモノですが、処理に 10 分弱もかかるようになってしまいました。 perl で書いてた時の処理時間はちゃんと測定してませんが、明らかに劇的に遅くなってます。
そこでドキュメントなどを参考に、 python 標準のツールで超簡単にプロファイリングしてみました。
プロファイリング対象のスクリプト my-script.py は標準入力から処理対象のテキストを入力し、複数の引数をとるので、下記のようなコマンドラインで python のプロファイラ cProfile.py を実行しました。

cat input-log-file | cProfile.py -o prof-result-file my-script.py script-arg1 script-arg2

cProfile.py は python の lib フォルダにあります。(例えば Cygwin の python 2.7 の場合 /usr/lib/python2.7/cProfile.py)

上記コマンドで得られるプロファイル結果 prof-result-file は、下記の様なスクリプトでソートして時間を食ってそうな処理を探しました。(ドキュメントまんま)

import pstats
p = pstats.Stats('prof-result-file')
p.sort_stats('cumulative').print_stats(10)

結果、どうも正規表現オブジェクトのコンパイルと search メソッドに殆どの時間が費やされていたようなので、正規表現オブジェクトを予めコンパイルしておくことと、正規表現のマッチング時に可能な限り search に代えて match を使うことで処理時間を約 1/3 にすることができました :-)

因みに、元のコードではループ処理中に re.search メソッドを多用していました。(こことかここなどご参考)

以後、気をつけます。(…って python 界では常識なんでしょうね)

| | コメント (0) | トラックバック (0)

2013年5月25日 (土曜日)

kobo touch の microSD で日本語ファイル名

kobo touch の現状のソフトウェア(2.4.0)では microSD 上の日本語ファイル名が正しく表示されないので対策したメモ。

ネットで検索すれば方法はすぐ見つかるけど、 /usr/local/Kobo/udev 以下の sd, usb に書いてある mount コマンドのオプションに iocharset=utf8 を追加すればいいみたい。


$ diff sd sd.original
38c38
< mount -r -t vfat -o shortname=mixed,iocharset=utf8 $DEVNAME /mnt/sd
---
> mount -r -t vfat -o shortname=mixed $DEVNAME /mnt/sd

$ diff usb usb.original
68c68
< mount -r -t vfat -o shortname=mixed,iocharset=utf8 $DEV /mnt/sd
---
> mount -r -t vfat -o shortname=mixed $DEV /mnt/sd

usb の方も変更しとかないと、PC に接続した後、元に戻ってしまうみたい。
内蔵メモリ(/mnt/onboard)の方には元々このオプションが指定されてるけど、なんで?

| | コメント (0) | トラックバック (0)

2013年5月16日 (木曜日)

kobo を使い始めた

楽天トラベルのキャンペーンで貰えたらしい kobo touch を使い始めたメモ。

Kobotouchsleeve2_2 調べてみると内部ストレージは microSD で簡単に増設できそうだったので、余ってた 32GB に入れ替えてみました。裏のカバーは、こちらのページなどを参考に簡単にはずせます。テレカ(死語?)や定規を使って…と紹介しているページが多いですが、僕の場合は親指の爪でなんとかなりました :-)


Kobowith32gb_3 Mac で作業しましたが、元の microSD のイメージは MacPortsddrescue で取り出して新しい microSD に書き出せたものの、その後パーティション上のデータを残したままそのサイズを変更する方法が分かりませんでした。 Mac で MBR パーティションテーブルを変更するツールを見つけられなかったので、結局諦めて Linux の QtParted を使って新しい microSD の FAT32 パーティションを最大限に広げました。

その後は、こちらのページなどを参考に ftp, telnet が使えるようにしたり、こちらのページから fb2bmp を戴いて、簡単にスクリーンショットをとれるようにしたり。なんか linux なんで何でもできそうです。元の microSD をとっておけば文鎮化する心配もないですし。

本命の読書は、今のところ殆ど自炊の漫画しか読んでませんが、今までスマホで読んでたのに比べれば当然格段に読みやすいですね(笑)。自炊データを PC から簡単にコピーできるのもいい感じです。 PDF の文書内検索ができないとか他にも不満が無い訳ではないですが。本の購入に楽天ポイントが使えるのはいいですね。

本体サイズが Kindle Paperwhite とほぼ同じなので、ケースやカバーなど流用できそうです。カバーの開閉時に磁気センサーで自動的にスリープ解除/スリープする機構も同じっぽいので、その辺も流用できるのかもしれませんが、カバーはサイズの微妙な差が問題になる鴨ですね。
取り敢えず今回は下記を購入。ケースは kindle 用。フィルムは kobo touch 用と紹介されていますが、届いたパッケージには for Kindle と書いてありましたので、画面の縦横も Kindle の 6 インチモデルとほぼ同じなんでしょうね。

| | コメント (0) | トラックバック (0)

« 2013年3月 | トップページ | 2013年10月 »