月曜日, 8月 24, 2009

PythonでC++コードを埋め込んで実行してみる

仕事でPythonコードを書いているのですが、かなり大きなデータファイル(500GB)を読み込んで解析計算をすることが望まれていて、実際の所相当な処理能力を求められつつあります。今手元にある2時間+α程度で作成したコードでは現実的な時間で処理することが難しいと思われます。このコードの処理時間を測定して、どの処理がどれくらい遅いのかを明らかにしながらボトルネックの高速化を図る必要があります。で、コードのいろいろな部分の計測を行いまして、for文を使って繰り返し計算を行う所が遅いという知見が得られました。で、これをどうするかが次の問題です。

C++で書いたコードを呼び出すような力技でいくのは効果があるかもしれないけど、学習時間と手間がしんどいだろうなと想像していました所、Scipy.weaveのinlineメソッドというものがあることをこちら(*1)で知りました。うまくいけば手間が掛からずにC++コードをマージすることができるかも、という淡い期待を抱き試してみることにしました。

うまくは行きましたが、それなりに落とし穴はありました。まず、Blitz(以前仕事で使っていたので懐かしいです)を使おうとするとUbuntu 9.04デフォルトのg++-4.3ではコンパイルできません。こちら(*2)にありますようにg++-4.2を読み出すと動きます。とりあえずg++-4.2から/usr/local/bin/(PATHの順序が/usr/bin/より先)へリンクを張ることで対処しました。

結構戸惑ったのは、コンパイルに失敗したときのエラーメッセージがPythonのものとg++のが入り混じってメッセージの可読性が非常に悪い事です。これはもう、慎重に書くか少しずつ書き足していくか、別にC++のみでコードを書き、十分にバグ取りをしてから持ち込む等をしないうまく行かないように思います。長いC++コードを書ける気がしません。

詳しいことはこちら(*3)やこちら(*4)を参考にしました。

そうして書いたコードですが、確かに速くはなります。ですが、思った以上に呼び出しのオーバーヘッドが大きいようで、実行時間の短いコードを何度も呼び出すような使い方には向いていません。やはり実行時間の長いコードを丸投げするような使い方が良い様に思います。

*1 http://scipy.dip.jp/index.php?SciPy%2FWeave
*2 https://bugs.launchpad.net/ubuntu/+source/python-scipy/+bug/302649
*3 http://www.mpia.de/homes/tamburro/whatisthepython/weave/weave.html
*4 http://www.scipy.org/PerformancePython#head-3e5e0b392866d319bb08e78a4f184fca7d32e9bd

Pythonで実効速度評価をする

import time
   :
start = time.time()
   :
 # なんかする
   :
print time.time()-start

これは簡単。

バイナリファイルからndarrayにデータを読み込む

最近、仕事で計測したデータの簡単な解析をするのに、Pythonで簡単なスクリプトを書いてこなしていましたが、現在計画している、もっと大規模な解析もPythonでやってみよう、という運びになりました。んで、お盆休みとかも適当に関連サイトを眺めてはいろいろ考えていましたが、お盆休み明けの今日(自分基準)は実際にテストコードを書いては確認する作業に専念致しました。

最初に問題にしたのは、バイナリで書かれたデータファイルをどう読むかです。 これまでは、考えるのが面倒でしたのでstructを使って、

x1 = struct.unpack('H', f.read(struct.calcsize('H')))[0]
みたいな感じでちまちまとデータを読んでnumpy.ndarrayに代入しておりました。ndarrayにもファイルから直接読み込むfromfileメソッドがありますが、直接ファイル名を与えて頭から読み込む仕様になっていて、ファイルオブジェクトを開いて適当にシークした所から読み込む、等の様な使い方ができないので弱っておりました。

こちら(*1)によると、Scipyのfreadメソッドを使うと良さげです。しかし実際に動かしてみるとdeprecatedと警告が出て気持ちが悪いです。もう少し調べますと(*2)、scipy.io.numpyioのfreadメソッドを使うことになっているようです。これで問題なくシークしながらバイナリデータをたくさん読み込めます。

もっとも実際にベンチマークを取ってみますと、ファイルの読み込みはあまりオーバーヘッドになっていませんでした。それでも、プログラムの設計上このような選択肢があった方が都合が良かったのです。

*1 http://scipy.dip.jp/index.php?SciPy%2FIO
*2 http://www.scipy.org/Cookbook/InputOutput

Pythonでソースレベルデバッグをする

Pythonでお手軽にソースレベルデバッグをしたいなーと思ったりして、pdbはちょっと調べると判るし、これはこれで便利そうだと思うのですが、もうちょっと手軽に使えそうな環境はないかなーとも思ったのです。Eclipse+Pydevというのも考えない訳でもないのですが、ああいうGUIな統合開発環境というのにどうも慣れないロートルなねこなので、それはもうちょっと大規模な開発の覚悟ができてから考えることにします。

でもうちょっと調べると、emacsでpdbが手軽に使えることが判りました。ここ(*1)とかここ(*2)を参考に使ってみましたが、ソースをいじる必要もなく使い勝手はよさそうです。

これで少しは頑張れそうです。

*1 http://http://lab.hde.co.jp/2009/01/pdb-modeelemacspython.html
*2 http://d.hatena.ne.jp/jkani4/20071202/1196596733

日曜日, 8月 23, 2009

M-241cだった

筐体をよく見るとM-241cとか余計なアルファベットが付いてるな、と若干気にはなっていたのですが、Blurtooth使えないのですか。

微妙に騙された気分なのですが、どうしようかな。

Pythonの継続行

とあるPythonコードを読んでいて気がついた。

  • 行末にbackslashを付けると次の行が継続行になる
  • 文字列リテラルを連続して記述すると一つに連結される

勉強が足らな過ぎる orz

微妙に落ち込んだ事

実家の近くの農家で買った梨が今朝届いたのに、うっかり朝ごはん用のパンを買ってしまった orz

某Note PCの電力設定

某社製のAtom Z550なNote PCを導入する際、試しに電力設定を「超いたわり充電モード」というのにしていたのですが、50%しか充電できないのにはちょっと堪り兼ねました。

後、電源プランという設定で「省電力」というのにしていたのですが、これもやり過ぎかも。「スタミナ設定」とかいうのに変更。これでどうかな。

HOLUX M-241を買ってみた

GPS自体を触ることは全然なかったのですが、仕事で勉強せざるを得なかったこともあって以前から興味はありました。今回帰省の帰りに秋葉原によって目に留まったものを買ってみました。

まだ電池を入れてファームウェアをアップデートしただけで満足に使えてません。アップデートすると確かにBluetoothが使えるようになりました。これで8000円ならいいかもしれません。

製品に関する詳しい情報はここ(*1)を参考にしました。ファームウェアやユーティリティなどのファイルはここ(*2)からM-241 Firmware V1.12 update package (New)と書かれたファイルをダウンロード・展開して、USBドライバCP210x_VCP_Win2K_XP.exeを実行してインストール、HoluxLoggerユーティリティとファームウェアファイルを展開して、この説明書き(*3)を参考にユーティリティを実行してファームアップデート。電源を入れるとBluetoothが使えるようになっていました。日本語のマニュアルはこちら(*4)からダウンロードできました。

時間を見つけながらぼちぼち触ってみます。

*1 http://www33.atwiki.jp/gpsgps/pages/53.html
*2 http://www.holux.com/JCore/en/products/products_download.jsp?pno=341
*3 http://www.gpsdgps.com/product/gpsdgps_dl/080327/hlx_m241_mj_080327.pdf
*4 http://www.hemgps.com/ManualSmall.html

実家から戻った

昼過ぎに実家を出て、東京駅で荷物を預け、新宿 ミラノ1に寄って(一度大きな箱で見てみたかった)秋葉で物色してから帰りました。

新宿の金券ショップで新幹線切符を買いましたがかなり安かったです。東京駅でまい泉のお弁当と杏仁豆腐を買って電車の中で堪能。

金曜日, 8月 21, 2009

UbuntuでnPOPを動かしてみた

先日、実家に居ても会社のメールが使えるように、Vista上でputtyとnPOPの設定をしたのですが、仕事はUbuntuでやっているので、できればUbuntuでnpopかそれに準ずるメーラを使いたいなと思っていたのですが、wineでnPOPを動かすのがよろしそうな感じがして来たので試してみました。

存在自体は相当昔から聞いているのですが、wineを使うのは初めてですので、まずSynapticでインストール。次にnPOPをダウンロードしてnpop.exeをダブルクリック。実に何の事もなく起動・設定して動いてしまった。フォントは設定しないと化けるのではと思っていたのに、そのままで表示できてしまっていて拍子抜け。

それなりに表示が変だけど、気にしない。実に便利。

[追記]
新しいPCにも入れたら見事にフォントが化けた。ここを見るとttf-kochiフォントがあれば表示できるらしい。以下のフォントをインストールすればよいと。別のフォント設定するのは別の機会に。

ttf-kochi-mincho
ttf-kochi-gothic

DropboxとかAdobe Airとかが飛んだ

ついうっかり何も考えずに[システム]→[システム管理]→[不要パッケージの管理]をしてしまい、いろいろなものがアンインストールされてしまった orz

直ぐにも必要なものだけでも復旧。DropboxとAdobe Airだけを再インストールしておいた。

木曜日, 8月 20, 2009

SSDでAtom Z550でGMA 500 PoulsboなPCにUbuntuをインストール

いろいろ調べたけど、結局普通にインストールして必要なパッケージを追加、ハードウェアに合わせた設定を行った。

具体的には、こちら(*1)を参考にSSDへのディスク書き込み頻度を抑える設定をした。肝心のpsbに対応したX serverのインストールは以下のサイト(*2, *3, *4, *5)を参考にさせて頂いた。

*1 http://tech.lampetty.net/tech/index.php/archives/299
*2 http://rubbishbag.sblo.jp/article/30184523.html
*3 http://gihyo.jp/admin/serial/01/ubuntu-recipe/0057
*4 http://viva-ubuntu.net/?p=1551
*5 http://akirasnd.justblog.jp/gigabyte/2009/05/ubuntu-jaunty-j.html

水曜日, 8月 19, 2009

非力なのにVistaが入ってるNote PCを使う (2)

だいぶ面倒になってきたので、以下のサイトを見て、いくつか参考にして設定を行った。あとはこちら(*1)を参考にCapsとCtrlを交換して、とりあえず終了。

http://www.call-t.co.jp/blog/mt/archives/entry/009439.html
http://pochi.posterous.com/vaio-type-p
http://pc.watch.impress.co.jp/docs/2009/0303/kai57.htm
http://itsa.blog.so-net.ne.jp/2009-01-23

*1 http://www.center-left.com/blog/archives/2007/02/windows_vistacaps_lockctrl.html

PuTTY ごった煮版を使ってみる

ついでだというのとそもそもポートフォワードが目的なので、PuTTY ごった煮版(*1)を使ってみます。実際にはpfwd.exeだけを使ってみたのですが。

やったことはこちら(*1)を参考に設定しただけです。あっけなく動きました。

*1 http://blog.jojo.jp/?eid=727846

非力なのにVistaが入ってるNote PCを使う (1)

会社は今日から仕事ですが、年休を取ってまだ実家。でも仕事場が気になるので、会社のメールを盗み読みする環境を構築しております。とりあえず起動してみただけで後はずっとUbuntuを使っていたNote PCでVistaを使ってみるテスト。

まずはMcAfeeを削除。ESET(*1)でも入れようかと思ったけど、とりあえずはAVG(*2)でお茶を濁しました。それと起動が遅い割にまだ全然使っていないので、起動時にサイドバーを開始しないようにしました。後はFirefoxがないとお話になりません。

そもそも仕事がらみで設定しているのでSSHクライアントを準備。久々にTeraTerm(*3)にしようと思ったけど、やっぱりマルチユーザユースに対応していないのでヤメ。本当はmsysDTK(*4)がいいのだけど大げさすぎるので保留。軽さを考えて日本語化putty(*5)に。でメールを使うために25と110を通そうと、ローカルの10025と10110にマップしてみたのだけど、何故か25は通っても110が通りません。ファイアウォールを設定してみてtelnetで確認すると通るけどnPOP(*6)はダメ。9110にマップすると何故か問題ない。面倒なのでそのようにしました。ちなみにVistaにはtelnetがデフォルトではインストールされていません。こちら(*7)を参考にしました。とりあえずこれで、nPOPを使って会社のメールの読み書きができました。

それ以外は後で。

*1 http://www.eset-smart-security.jp/
*2 http://www.avgjapan.com/
*3 http://ttssh2.sourceforge.jp/
*4 http://www.mingw.org/wiki/msysDTK
*5 http://hp.vector.co.jp/authors/VA024651/#PuTTYkj_top
*6 http://www.nakka.com/soft/npop/
*7 http://www.atmarkit.co.jp/fwin2k/win2ktips/960vistelnet/vistelnet.html

火曜日, 8月 18, 2009

VistaのLoaderからLinuxをブートする

Note PCにUbuntuをVistaとデュアルブート環境でインストールする事にしたのですが、問題はどうブートさせるかでした。

普通に(というか最初はこう考えた)起動ディスクの頭にブートローダのGRUBを入れておけばいいかと思ったのですが、こちら(*1)を見ますと、融通の利かないVistaのLoaderからブートできる様にした方が良さそうに思えてきたのでそれに倣う事にします。

とにかくいろいろ参考にさせて頂きました(*1,*2,*3,*4)。大雑把にはGrub4dos(*5)をこちら(*6)からダウンロードして、grldrとgrldr.mbrを起動ドライブのルートディレクトリにコピーしてこちら(*4)を参考にbcdeditで設定します。Grub4dos自体はこちら(*7)を参考にしました。

[追記]
結局参考にしたのはこちらでした(*2)

*1 http://taka8aru.blogspot.com/2009/05/windowslinux.html
*2 http://shino.pos.to/linux/grub4dos.html
*3 http://inscrutable.seesaa.net/article/29524655.html
*4 http://www.roy.hi-ho.ne.jp/yamaden/sunbbs/index.html
*5 http://diddy.boot-land.net/grub4dos/Grub4dos.htm
*6 http://diddy.boot-land.net/grub4dos/files/links.htm
*7 http://www10.plala.or.jp/palm84/grub4dos.html

月曜日, 8月 17, 2009

Note PCのストレージ選択とかパーティション分割とか

先月Note PCを購入したのですが、その際にはストレージをHDDにするかSSDにするかでかなり悩みました。結局SSDにしたのですが、その後押しになったのがこのサイト(*1)でした。思いの外長持ちしている事に驚いた訳です。かと言って、SSD上で大きなソースツリーの再コンパイルを際限なく繰り返せる程の勇気は持てない。少量の書き込みと大量の読み出しなど普段の使用はSSDで、大量に書き込みが発生するような用途には多少遅くてもHDDをUSB接続で使用するつもり。CPUが遅いのでストレージバスだけ速くても仕方ないし。

Note PCにはVista Home Premiumをプレインストールして貰っていたのです(*1)が、最近仕事でUbuntu使い続けていた事で味を染めて、新しいPCにもUbuntuを入れたいと思ったのです。んで、調べると(*2)Vistaでは既存パーティションのサイズを小さくする事ができるとのこと。早速そのとおりにやって、Vistaパーティションを半分にし、残りをUbuntu用に開けておきました。実際にインストールしたのは最近(先週)です。

*1 Windows 7のアップグレードキャンペーン対象になるため
*2 http://xfreak.com/mcp/vista/labroom/nph-bbs_sys.cgi?&dsp_bbs_thread=1&sid=1183338785000

UbuntuでLinuxカーネルのリコンフィグをする

休み中なので、今まで書き忘れている備忘録を少し書き足してみる…微妙に自分で何言ってるのか判らないけど orz

5月~6月辺りは何故かLinuxカーネルやデバイスドライバのソースコードを読んで、自分の都合に合わせて修正する、という自分的には未経験の荒行を連日行ってきてました。今までもカーネルにパッチを当ててリコンフィグする事は度々やっていたのですが、ここ最近のDebian標準カーネルは良くできていたおかげで、自分が必要としているハードウェア・システムの範囲では、改めて自分で再構築する必要をまったく感じることがなかったのです。しばらくやっていなかったというのと、Ubuntuでは未経験ということもあって少し調べてみたのでした…まぁいつもの様に参考にしたサイトのリンクを貼るだけですけど。

基本的にはこちら(*1)を参考。それ以外にLinuxカーネル一般に関する事をここ(*2)とここ(*3)を参考にしました。以上。

*1 http://dogmap.jp/2009/06/19/rebuild-kernel/
*2 http://www.itmedia.co.jp/enterprise/articles/0708/21/news018_2.html
*3 http://www.turbolinux.co.jp/support/document/knowledge/319.html

土曜日, 8月 15, 2009

UbuntuでWS002INを使う

帰省の出立の直前にヤフオクに出品されていたWS002INに入札だけしておいて、実家に着いたら何故か思いの他安価で落札されていた。で、品物が今朝届いて現在絶賛使用中。

通信用の青耳W-SIMは既に手元にある。これを挿して、こちらとこちらを参考にpppconfigでプロファイルを作成して、"pon [プロファイル名]"で接続、poffで切断。昔のアナログモデムで繋いでいた時代を思い出します。

HSDPAとかある昨今、微妙な使用感も想定したけど、割り切って使うなら、なかなかいい感じ。自分的にはほとんど投資なしでモバイル環境を構築できてとても良い。むしろ、実に悪くない。真面目に使い込む事を考えてみよう。