markdownは行の先頭にスペース4文字を入れればcodeブロックになるので、
perl -ne 'print " " . $_' file
とやった出力をblosxomのエントリにペーストしてるんだが、もうちょい楽な方法はないもんだろうか?
とか思った。
markdownは行の先頭にスペース4文字を入れればcodeブロックになるので、
perl -ne 'print " " . $_' file
とやった出力をblosxomのエントリにペーストしてるんだが、もうちょい楽な方法はないもんだろうか?
とか思った。
19112006 perl
perlのモジュールのバージョンを知りたくなったときは、手軽にモジュールのバージョンを得る方法をよく使うんだけど、さっきActivePerlで同じことしたら動かなかった。
でなくて"でスペースを囲めばよいみたい
DBIx::Class version 999 required--this is only version 0.07002. BEGIN failed--compilation aborted.
cgiじゃなく、phpとかでmarkdownが使えるwikiが欲しかったのだけど、ヨサゲなのがみつからなかったので、結局Kwiki入れた。(職場で)使い慣れているPukiWikiも考えたんだけど、やっぱKwikiのほうが色々遊べそうなので。
Kwiki::Theme::Bluepoleのテーマ使って、Kwiki::DoubleClickToEditでダブルクリックでeditするようにしてる。
12112006 perl
ソースコードを読みなさい、あるいは読んでいく、という話題はわりとあるけども、どう読んだらいいか書いたものは見たことがない。プログラマならプログラムの読みかたは当然わかっているものだということなのだろうか。しかし自分には人の書いたプログラムを読むことがそんなに簡単なことだとは思えない。プログラムを書くのと同じくらい、読むことにだって技術や定石があるはずだし、必要だと思う。そこで、コードをどう読むべきか、とりあえずは C 言語を前提として、無意識のうちにやっていることを明示的に整理してみる。
ソースコードを読むのはおもろいし勉強になる。で、学習の過程をとどめておくのにいい方法はないものかと思案していたら、plaggerのソース読みをtracで管理してたのを思い出して、僕もsubversionでやることにした(FC1だとtrac入れるのは面倒なので)。
最近色々ごちゃごちゃやってるグラフ関係のコードはC++が多いので、C++のコードリーディングをしてますが、subversionで管理するとなかなか調子が良いことがわかって満足。
あとはググっても興味をそそるサンプルが少ないので、なんか本でも買うかナァと思ってたら、mixiの[C言語とC++言語コミュニティ]が酷すぎる件に付いてであげられてたC/C++の課題丸投げがメールマガジン『Perlクイズ』みたいで楽しかったり。
おい、丸投げしすぎだろうってのも結構あるけど、問題選べばいいだけ。あともうちっとC++の割合増えると嬉しいかも。
今までデバッグ環境というものにあまりこだわったことがなくて、Meadowで書いてコマンドプロンプトでデバッグという作業環境だったが、Meadowにsvnクライアント(psvn)入れた勢いにのってperlのデバッグもMeadowでやってみようと。
ちなみに僕が使っているMeadowのバージョンは3.00-devで、cperl-modeは最初から用意されていた。 mode-compile.elはダウンローしてきて、適当なディレクトリに放り込む。
.emacsの設定
;; perl-mode -> cperl-mode (defalias 'perl-mode 'cperl-mode) ;; mode-compile (autoload 'mode-compile "mode-compile" "Command to compile current buffer file based on the major mode" t) (global-set-key "\C-cc" 'mode-compile) (autoload 'mode-compile-kill "mode-compile" "Command to kill a compilation launched by `mode-compile'" t) (global-set-key "\C-ck" 'mode-compile-kill)
例えばこんな感じに6行目でわざとエラーがでるようなコードを用意する。
use strict; use warnings; my $name = $ARGV[0]; print hello $name\n"
デバッグするときにはCPerlモード上でC-ccでperlを実行させる(その際引数をきいてくるので必要に応じて入力)
実行結果は下の画面に表示される。エラー行の表示されている領域をクリックすると実際のコードの該当行にカーソルが移る。
おー快適!
SWIG使ってフラクタル図形を書いた際にshadowってオプションをつけたのだけどよくわかってなかったのでちゃんと調べた(というか実用Perlプログラミングに書いてあったんだけど)。
C/C++のオブジェクトのメンバ属性、メンバ関数に対し、perlのハッシュ記法でアクセスできるようにするメカニズムだそうだ。
class Shape { public: int x, y; int w, h; drwaw(); }; class Poligon : public Shape { public: polygon(int x, int y, int w, int h); draw(); };
とやると
use Graphics; $poly = new Polygon(10, 10, 30, 40); print $poly->{x}, $poly->{y};
みたいにアクセスできるようにするオプションだそうだ。
DjangoとTurbogears ってsql文を書いたりしなくていいので楽だナァと。djangoだとクラス定義して
$ python manage.py syncdb
ってやればいいし、Turbogearsも同様に
$ tg-admin sql create
でうまくやってくれる。で、そういえばYAPCでJiftyもそんなこと発表してたのを思い出して、大量のモジュールと共にインストールしてみた。
練習用に使ったサンプルはJifty::Manual::Tutorial。ちなみにJiftyのバージョンは0.60912。
最初の流れはCatalystと違って、アプリケーションだけつくれば、ビューとかコントローラー作る必要ないみたい。いきなりモデルをつくりはじめるわけだが、もちろんデータベースの設定はSQL文など書かなくてよくて、
column title => type is 'text', label is 'Title', default is 'Untitled post'; column body => type is 'text', label is 'Content', render_as 'Textarea';
とハッシュっぽく記述しておいて、
jifty schema --setup
これだけ。あとはテンプレートまわりをいじるわけだが、僕の使ったバージョン(0.60912)だとwebではなくshare/web/だった。また、テンプレートシステムにMason利用しているので、実用Perlプログラミングなど読み返しながら。
%でperl式を挿入する場合%は行頭から始めないといけない(間にスペースとかをいれてはいけない)ことを理解していなくてちょっとはまった(下の部分)。
% while (my $post = $posts->next) { <dt><%$post->title%></dt> <dd><%$post->body%></dd> % }
Masonってなんかphpっぽいな。今回Jiftyの触りしかいじってないけど、アプリ作成すると、オンラインドキュメントも一緒に作られるので、これを読むのがなかなか面白い感じ。あとMasonも暇があればなんかで使ってみよう。でもMason使うとビューとコントローラーの切り分けが曖昧になってきちゃうような気がするんだよナァ、、、
あーめんどうだ、テンプレートに直接書いちゃえ!
みたいな(うーん実際はどうなんだろうか)。
というわけで、一通りサンプルを作ってみて、感想を。Jiftyは(RoR,djangoもそうだけど)フルスタックなのでサクサク開発できそうで、なにより使っていて気持ち良い。
Catalystと使い分けできれば生産性は上がるかな。ちょっとしたもの作る場合にはJiftyはいいと思った。
DBICのMLより
Belongs to is a child -> parent relationship Has one is a sibling <-> sibling relationship?
has_oneはちょっと違うんじゃないかと。
101号室より愛をこめてに詳しい解説があった。
家族の関係、核家族とか最近の4人家族のイメージだと
ぐらいに捉えておけばいいのか。
26102006 perl
最近テストファーストの楽チンさがわかってきた気がしてテストから書き始めるのが楽しい今日この頃。
いつもh2xs -AXnでモジュールを作成してたけど、なんとなくmodule-starterに変えようかと。
module-starterはh2xsと違ってboilerplateのテストが組み込まれているので、最初のmake testはいきなり失敗する。なんで、全OKを出すために、最初にPodのボイラープレートつぶしするし。その際、synopsisちゃんと考えながら、メソッドとかインターフェースとかとりあえずの形を念頭におけるのがいい。
最近のTDDの話も追っかけてて参考になった。Test::Baseも使おうと思った。
24102006 chemoinformatics perl
昔作ったコードが気に入らなかったので書き直したら、そこそこ動くようになったので、Chemicho-0.01.tar.gzとしてダウンロードできるようにしておいた。これはPerlMolを使って実装された化合物にランダムに変異を入れていくツールで、例えば、H2Lでヒット化合物に修飾を軽く加えてみたりとかしてくれる、ケミストチックな小人さんに育つことを期待してるわけだ。
設定はYAMLで。
Generationは世代数で、cycleは世代で生成される化合物の数。ちなみに第0世代は親。例えばcycle3で第三世代まで発生させると3^3で27化合物で4世代目には3^4で81化合物できる。ランダムな置換の頻度はweightで変えられるようになってる。
reactionはSMARTS使ってこんな感じで反応させてる。
いまんとこ、変異用のモジュールが少ないのでバリエーションが少ないのだけど、これから増やす予定。あと、cycle間で重複を許しているのでこの部分は改善する。