初めてのXS

SWIGついでにXSも。YAPCでDaisuke MakiさんのGetting Your Feet Wet With XSを聴いてから、一度やりたいと思ってたんだけど、最後のほうわかんなかったんだよね、SVとかからあやしくなってベンチマークでまたついていけるようになったという(実は)。

というわけで、相変わらず、実用Perlプログラミング初版を片手に。20章はperlの内部構造で、60ページぐらい割いてます。XSの説明とか書いてあるけど、まだちゃんと読んでないけど、HVとかAVとかSVとか詳しく書いてある(第二版にはないヨ)。

ProductName 実用Perlプログラミング
スリラム スリニバサン
オライリー・ジャパン / ?円 ( 1998-11 )


というわけで、mandel.cとmandel.hはSWIGで使ったソースを。

$ h2xs -x -n FractalXS mandel.h
Defaulting to backwards compatibility with perl 5.8.3
If you intend this module to be compatible with earlier perl versions, please
specify a minimum perl version with the -b option.

C::Scan required if you use -x option.
To install C::Scan, execute
   perl -MCPAN -e "install C::Scan"

C::Scanをインストールして再度。

作成されたMakefile.PLを少し修正、LIBSに-lgdを付加するのと、OBJECTにmandel.oとFractal.oを。

あとはmake,make test,make installで。

plaggerでChangeLogを扱う

clmemoみたいなchangelog形式のファイルをplaggerでフィルタリングしながらしかるべきとこ(はてブ,gmail,デリシャスとか)に送れたら便利じゃんと思ったので、シコシコと書いてみた。最初ココいじればいいかなと思ったんだけど、配列だとちょっと使いにくいのとヘッダーもう少し分けたかったので自分で書いた(そのせいでちょっとおかしいとこがある)

Plagger::Plugin::CustomFeed::ChangeLog

clmemo.txtはこんな感じ

2006-05-26  kzfm  <kerolinq@gmail.com>
        * test: テスト汁
        断酒でコーディング、呑むとやる気なくなるからな

2006-05-23  kzfm  <kerolinq@gmail.com>
        * 雑感: 今日は朝からお疲れ気味。
        最近雑用おおすぎ
        ちょっと会議もふえすぎ

* 雑感: WindowsXPだと環境変数の扱いがイマイチわからなくて苦労した
        なかなかつらい
global:
  timezone: Asia/Tokyo

plugins:
  - module: CustomFeed::ChangeLog
    config:
      changelog_file: /home/kzfm/clmemo.txt

- module: Publish::Gmail
    config:
      mailto:   xxxxxx@gmail.com
      mailfrom: xxxxxx@gmail.com
      mailroute:
        via: smtp
        host: localhost:25

gmailに送ったらこんな感じ。

changelog2plagger

あー、毎度のことながらwarningでてます。

$ ./plagger -c changelog.yml 
Plagger [info] plugin Plagger::Plugin::CustomFeed::ChangeLog loaded.
Plagger [info] plugin Plagger::Plugin::Publish::Gmail loaded.
Plagger [info] plugin Plagger::Plugin::Aggregator::Simple loaded.
Plagger::Plugin::CustomFeed::ChangeLog [info] Load /home/kzfm/clmemo.txt

Warning (line 22): Found an action ({$item[1]}) after an unconditional
                       
Plagger::Plugin::Publish::Gmail [info] Sending ChangeLog to xxxxxx@gmail.com

まだParse::RecDescentのitembodyのところが駄目駄目なのと、データの構造汚いのが気に入らない。日付とアイテム毎に入れ子のループを回さないといけないのだが、そういう場合ってどういうデータの構造にするのがよいのだろう?ハッシュと配列が入り混じっててヘナチョコになってしまったヨ。

初めてのSWIG

openbabelのperlラッパーに触発されたので、実用Perlプログラミングの初版を片手に。SWIGを使って、マンデルブロ集合を描いてみた。

mandelbrot

思ってたよりも、楽だ。まず、本の18章の mandel.cmandel.hを用意する。本だとgifに出力してあったが、FC1のgd-2.0.15.1ではできなかったのでpngで出力するようになってる。

続いて、SWIGインターフェースのFractal.i

%module Fractal
%{
#include "mandel.h"
%}
%include mandel.h

を用意したら、swigコマンドを実行。本だとperl5を引数にとってたけど、ネット調べたらperlでいけそうだし、-shadowオプション付けてるのが多いので、よくわからんけど付けてみた(これは後でちゃんと調べる)。

$ swig -shadow -perl Fractal.i

あとはMakeFile.PL書いて、普通にmakeでOK

use ExtUtils::MakeMaker;
WriteMakefile(
              'NAME' => 'Fractal',
              'LIBS' => ['-L/home/kzfm/perltest/swigtest -lgd'],
              'INC'  => '-I/home/kzfm/perltest/swigtest',
              'OBJECT' => 'mandel.o Fractal_wrap.o'
              );

Perlで呼び出す

普通にモジュールを呼び出すだけですな。

use Fractal;
Fractal::draw_mandel('mandel.png', 300, 300,
                     -1.5, 1.0,
                     2.0, 20);

で、絵の出来上がり!

実用Perlプログラミングは初版、第二版ともにもっているけど、型グロブとかクロージャとかXS,SWIGなんかは初版の方が詳しく書いてあるので、僕は今でも重宝するヨ。というか最近わかってきたっぽくて読むのが楽しい。

ProductName 実用Perlプログラミング
スリラム スリニバサン
オライリー・ジャパン / ?円 ( 1998-11 )


openbabelのperlラッパー

openbabelにはobfitっていうツールがあることをケムインフォマティクスに虚空投げで知った。なかなかイカス。今まで、「babelって調子いいフォーマットコンバーターだよな」ぐらいの認識だったヨ。

でもobfitはmol,molで重ね合わせるコマンドライン向きのプログラムなんで、普通にライブラリをMCSでぶん回すには、シェルスクリプト書いたりしなきゃならんし、シェルスクリプトでまわすとin,outでテンポラリのファイルがたくさんできるからやだナァ。

と思ったのでドキュメント漁りをしてみたら、Chemistry::OpenBabelっていうperlラッパーがあった。 うーんCPANでみたことないなぁ、、、と思ったらCPANにはあがってなくて、展開したアーカイブのscripts/perl/で配布してるみたい。

ソースを眺めたら、SWIG使っているのね。普通にインストールはOK。C++の関数をそのままPerlでラップしてるみたいなので、obfitのソース眺めながら、そのままperlで書きなおしてやれば、perlスクリプトとして使えるかな?って感じなのであとでやる。

それよりもSWIG覚えたいかも。実用perlプログラミングの初版には詳しく書いてあったはずだけど、第二版ではばっさり削られてInline::Cとかになってた。こんなん覚えてくるとperlでjavaライブラリのCDKとか呼びたくなるにちがいないんだろうけど、Inline::Javaって使えるのかな?これもあとで調べる。

ProductName 実用Perlプログラミング
スリラム スリニバサン
オライリー・ジャパン / ?円 ( 1998-11 )


ただ、API見る感じだと、Chemistry::OpenBabeで分子のモディファイとかリアクション関連いじるのやりにくくなかろうか?やっぱPerlMolははずせないわなと思ったが、Readmeに、そのうちPerlMolとopenbabelのグルーモジュール作るよん!って書いてあった。ナイス、楽しみ。

Future development will include a "glue module" to integrate with PerlMol and other Perl chemistry projects.

で、さらにケムインフォマティクスに虚空投げでOELibという記述が何度か出てきたので、もしやOpenEyeかと思ったら、やっぱそうだった。OpenEyeのライブラリなんだったら別にPerlMol使わなくても、化合物いじり出来るんではないの?とか思ったが、FAQに歴史的な経緯が書いてあった。だから、やっぱ素直にPerlMol使ったほうがいいのでしょう。OEChemはOELibを書き直してるってことはデータの内部構造結構違うんだろうな。

というわけで、ツールキットみたなかではいまんとこOEChemが一番良く出来てる気がしてる。

沼津でキス釣り

日曜は今年初の釣りに行ってきた。、先シーズンのボードはニューカマーのユッキー様のお世話でほとんど滑れなかったので、釣りは頑張るぞと。烏賊釣るぞとキス釣るぞとカワハギ釣るぞと。まぁ、やる気だけはあるヨ。

4時起床、集合で、414沿いの途中の釣り具屋トージンで餌買って4時半にはボートに乗り込む。例年に比べると一時間近く早いペースだ(謎)。

ボート屋のおっちゃんが「沖めのほうがいいよ」というので、アドバイスに従い、沖へと。朝焼けが綺麗だ。

早速、釣り糸をたらすが悪い予感的中。空回りしまくってますぞ。隣では、すでに数匹のキスを釣り上げているのに、

いっこうにのらねー。いや、キスごときにのせるとかいう表現は不適切だ。だって巻き巻きするだけでくっついてくんのに、、、、 と思ったら、強めのあたりがブルン!と。おっ初ヒット っと思ったら、エソだった、、、、何故?

怖ギス釣れたけどリリースや」

ま、メゴチ以外は、一応キスの仲間ってことで。続いて、またもや強いひきが、、、、

長ギスでした。

「長ギスってぬるぬるしてるから困るよねー」とかいいながらこれまたリリース

うーん今日は釣れる気がしないかも、と思いながら小一時間したころ、ボートがなんか潮とは逆のほうに動いてるような気が。気がしただけじゃなくて、漁船に向かって引っ張られてる!

どうやら網に碇が、、、、

漁船のおっさんが、とりゃーーとりゃーーって叫んでんだけど、網は重いし、ものすごい絡まってるしで、いっこうに碇をはずせん。そうこうしているうちに、どんどん引っ張られていくし、焦れば焦るほどアレだ。 もうほとんどテトリス最上段ってな感じでパニくったところで、

漁船のおっちゃんが包丁でロープを切ってくれた。ありがとう、おっちゃん。ってか、ボートぎりぎりのところでで網投げんで欲しかった、一言声変えてくれたらどいたのにな。

というハプニングがあって、釣るのは慣れているが、釣られることには慣れていない、我々は心がポッキリ折れちゃった。というわけで釣りにも集中できるわけがなく、惰性で糸をたらしてた。

なんかもういいやって気になってたら、最後に一匹だけ。ボーズぎりでセーフ。

もう、満足。8時過ぎだけど風も強いし(疲弊してるし)撤収。あまりつれなかったけどキスとメゴチが天ぷらにする分くらいは確保。

帰り際に、ボート屋のおっちゃんにきいたら、漁船はシラスとってんだってさ。土曜は市場が休みなんで漁にでないらしい。それで、今まではバッティングしなかったのね(いつもは土曜日にボート出す)

夜、捌く前。メゴチは背びれを頭に向かって削いで頭を落としつつ、皮がついた状態で、尻尾のほうに引っ張ると皮が剥げる。

天ぷらうまい。今週もいくかも。

OEChem

OEChem すごい。いまのとこPerlMolとかChemRubyよりも完成度高い感じがする。

PDB->XYZ->MOL2->SMILES->FASTA

とかファイル形式変えてっても最後にアミノ酸のFASTAが出力されたときには、びびった。

  • PDB->XYZ
  • 結合情報失われる
  • XYZ->MOL2
  • 結合情報再構築
  • MOL2->SMILES
  • 空間座標情報失われる
  • SMILES->FASTA
  • smilesからアミノ酸配列再構築

とかやっても、情報の欠損がおきないのは純粋にすごいと思う。まぁ、なんでもMOl2でセーブしとけはいいじゃんっていう突っ込みはおいといても。

あと、やっぱ海外だとRubyは少ないみたいでPythonがメジャーっぽい。どこもグラフのモデルなので、やっぱ描画ルーチンとドキュメントのしっかりしていて事例の多いところに流れるのかな。

そういやケミッチョ書きっぱなしのままだなぁ、そろそろまとめよう。

Smart::Comments

perl hacks読んでたらHack #54:Debug with comments Smart::Commentsが便利そう。

と思ったら、Elementaryエントリになってたヨ。

perl hacksには書いてないけどElementaryで紹介されてた

プログレスバーいい!

初心者気味の他人のコードのデバッグすんのにDebug::EchoMessageすすめるんだけど、プリントデバッグみたいじゃないのでいまいち浸透しない。(あと、Debug::EchoMessageは標準じゃなかったはずなので、モジュールインストールしてないマシンだとエラー吐くし。)

Smart::Commentsだったら、

プリントデバッグした残骸を###付けて残しとけヨ

って指示するだけで、use Smart::Commentsしてなくても、

とかやるだけで、デバッグできるし、ループの部分に

### [===>   ] % done

とか入れるといい感じになるので、面倒見られるほうも見るほうも効率的かなぁ?

ProductName Perl Hacks: Tips & Tools for Programming, Debugging, And Surviving
Damian Conway
Oreilly & Associates Inc / 2303円 ( 2006-05-30 )


というわけで、職場に浸透するかどうか試してみよう。

Fedoracore5でWebDAV設定

昨晩からFC5マシンの設定をはじめてマス。とりあえず、夜中までかかってCatalystのインストールは終了。

FC5のデスクトップ触るの初めてだったけど、FireFoxのフォントがモサモサしてて読みにくい以外は、自分でいつも使っている拡張は大体入ってるし、ターミナルがタブ式になってて使いやすいし、日本語入力も困んないし、いい感じかも。

昨日はapacheとsubversionはrpmでさくっと入ったし、今日はwebdavの設定でもするかなと、、、、

これもRPMでさくっとインストール。らくちんらくちん。

でも、WIndowsでテストしたら、httpで接続するとwebフォルダでなくて共有フォルダとして認識されてしまい、putができん。http://hostnameで認識するのにアイコンのプロパティみると\\hostnameに替わってるの。

共有

うーん、なんでかな?Winが悪いのかFC5が悪いのか?と悩んだが結局深追いせず、軽い気持ちでhttpsで接続してみるとあら不思議、、、

webフォルダとして接続できてるヨ

webfolder

まぁいいや、trac用だから。と、とりあえず深入り禁止の方向で。

あと、mod_encodingの設定すんのメンドイナァと思ってたら、FC5用のRPM作ってる人がいた。

素晴らしい、感謝感謝でインストール。OK!

サーバー交換中

今日も、昼過ぎに瞬停があって、家サーバーがおっこった。で、相変わらず不調だ、このサーバー。電源入れるときに必ずBIOSのCPU設定が必要。マシンが落ちるたびにディスプレイを接続しないとあかんのでやっぱ面倒だ。

しょうがないので、一月ほど前に後継として購入したんだけど、排気がちょっとうるさいので、FC5インストールした段階で放ってあったSempronマシンの設定をはじめた。

ドスパラ - BTOオリジナルパソコン Prime(プライム)

Prime A Slim Regulus VM
■Sempron 2800+
■512MB メモリ (DDR SDRAM)
■160GB ハードディスク (7200rpm)
■DVDスーパーマルチドライブ (DVD±R×16 / DVD-RAM×5 / DVD2層書込み対応)

やっぱ静音キューブのほうが良かったかな?

Perl Hacks届いた

アマゾンで予約してたPerl Hacksが届いた。

ProductName Perl Hacks: Tips & Tools for Programming, Debugging, And Surviving
Damian Conway
Oreilly & Associates Inc / 2303円 ( 2006-05-30 )


パラパラめくった感じではハック満載って感じ。

うそです、ほんとはよくわからん。明日、じっくり読んでみるヨ