麺屋武蔵 武骨

東大から御徒町まで歩いてみた。デリー目当てでだったのに、歩いてるうちにカレーな気分じゃなくなって駅を超えて武蔵まで行ってしまった。

白武骨。ちょっとコッテリしすぎかも。最近の僕にはちょっと厳しい濃ゆさかも。あと、量も多め。なのに周りの客は更にチャーシューのっけ飯みたいなの一緒に食ってんのな。漢を感じた。

subversionでコードリーディング

ソースコードを読むための技術

ソースコードを読みなさい、あるいは読んでいく、という話題はわりとあるけども、どう読んだらいいか書いたものは見たことがない。プログラマならプログラムの読みかたは当然わかっているものだということなのだろうか。

しかし自分には人の書いたプログラムを読むことがそんなに簡単なことだとは思えない。プログラムを書くのと同じくらい、読むことにだって技術や定石があるはずだし、必要だと思う。そこで、コードをどう読むべきか、とりあえずは C 言語を前提として、無意識のうちにやっていることを明示的に整理してみる。

ソースコードを読むのはおもろいし勉強になる。で、学習の過程をとどめておくのにいい方法はないものかと思案していたら、plaggerのソース読みをtracで管理してたのを思い出して、僕もsubversionでやることにした(FC1だとtrac入れるのは面倒なので)。

最近色々ごちゃごちゃやってるグラフ関係のコードはC++が多いので、C++のコードリーディングをしてますが、subversionで管理するとなかなか調子が良いことがわかって満足。

あとはググっても興味をそそるサンプルが少ないので、なんか本でも買うかナァと思ってたら、mixiの[C言語とC++言語コミュニティ]が酷すぎる件に付いてであげられてたC/C++の課題丸投げメールマガジン『Perlクイズ』みたいで楽しかったり。

おい、丸投げしすぎだろうってのも結構あるけど、問題選べばいいだけ。あともうちっとC++の割合増えると嬉しいかも。

MeadowでPerlのデバッグ

今までデバッグ環境というものにあまりこだわったことがなくて、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を実行させる(その際引数をきいてくるので必要に応じて入力)

perldebug

実行結果は下の画面に表示される。エラー行の表示されている領域をクリックすると実際のコードの該当行にカーソルが移る。

おー快適!

SWIGのシャドークラス

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};

みたいにアクセスできるようにするオプションだそうだ。

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


IRCを始めてみたヨ

なんとなくIRCもという気運が高まってきたので、ここらでいっちょと思い立ったのが(何ヶ月前だっけ?)で、思い出したようにここ何日かいじってみてる。

ChatZilla使ってみたけど、他のクライアントも試してみようとLimeChatに替えてみた。

my に \つけるのありなのか

perlのデータ構造をDFSするモジュール探してたら、Data::Traverseというモジュールを見つけた。

で、ソースを眺めてたら、こんな記述が。

no strict 'refs';
local(*{$caller."::a"}) = \my $a;
local(*{$caller."::b"}) = \my $b;
use strict 'refs';

おーなんか気持ち悪い。

my $a;
\$a;

を縮めると

\my $a;

になるのか。

学習テスト

いまさら感があるが読んだ。

というか、エントリとか見ると欲しくなって書店に行くんだけど、売ってないんだよね(田舎ゆえに)。あと、うちの近くだと売ってるところが限られててちょっと足をのばさないと買えないという。

ProductName WEB+DB PRESS Vol.35

技術評論社 / ?円 ( 2006-10-21 )


テスト駆動開発のとこがやっぱ面白かった。特に興味をひいたのが5章の学習テストという未知のライブラリの調査、習得の為にテストを書くってやつ。

perlの場合だとモジュールにはtestがついてくるから、.tを読むとかモディファイしつつprove でテストすれば学習テストになるのかな。とか、そんなこと書いてないかナァと探したけどみつからなかった。perlの.tの面白い使い方もっとありそうなんだけどナァ。

と、色々探してる中で、プログラミング中に湧くアイデアを書き留めるというエントリは面白そう。僕もSKIP, TODOをアイデア置き場として使ってみよう。

ポスター出します

またもや、個人的ネタで恐縮ですが、今週末のスポッポファイアーのユーザー会でポスター出します(多分)。

しかも名前だけで発表はしないでうろうろします。単なる質問要員としてノミネート。

発表自体は、ITインフラ系構築ネタになる予定。明日から2人で作り始めます。Ajaxとかバリバリ取り入れてるので、そこらへんの話になるかなぁ。か、いわゆる(インフォマティクス的に)テックレイヤーの人達に如何にデータトラッキングの重要性とか、一元管理を浸透させたかとかそういう苦労話メインになるかなぁ。明日、オーバービュー書きながらどっちに転ぶか決めまする。

ホントは、スポッポファイア meets Ajaxとかいうネタがやれればよかったんだけど、手動かす暇なくて。僕の頭の中で腐りかけてル。

はな二歳

ウェットフードで豪華にお祝い。キャンドルに見立てたスティックチーズが二本刺さってる(U隊長作)

gSpan

テキストいじったり、化合物検索したりとグラフ構造いじることが多いのでgSpan をちゃんと覚えようと。

gspan-del.icio.us

DFS-CODEとか枝刈りのあたりとか断片的には理解できるけど、全体としてイメージできてないな。

ちゃんと理解するために、あとでperlで書いてみよう。で、 Chemruby使ってこんなこともやれるみたいなので、同じことをPerlMol使ってできないかなとか思った。gSpanPPで。