2009年12月アーカイブ

なんか急に書いてみようと思い立ちました。

すべてを書ききれてないし、どの会社なのか、なんのプログラマなのか、どんな立場なのか、だれから見てなのかなど多角的に見たら正しくなかったり当てはまらないところもあるかもですが、個人的になんとなく「よいプログラマってなんだろう?」について現時点で思っていることをまとめてみました。

ちなみに、これらは今の時点で思っていることなので、またしばらくしたら変ってくるかもしれません。

  • 目的への近道を知っている
    • バグってる箇所を効率的に見付ける方法を知っている
    • 目的の実装をする近道を知っている
    • ターミナルでの操作が早い(我流でもよい)
  • 広い視野で設計できる
    • 場当たり的な対応をしない
    • 場当たり的な対応ができる(敢えて)
    • 複数人での開発を意識できる
    • プログラム・作業量・インフラなどのコストを計算できる
    • 自分の書いたプログラムの影響範囲を把握している
  • 実装が早い
    • 無駄な実装をしない
    • 無駄な実装をしてもそれが結果として良い実装に繋がると知っている
    • とはいっても早けりゃいいってもんじゃない
  • トラブル経験が豊富
    • 経験がものを言う
    • トラブル時になにを捨てて、なにを残すかの選択ができる
    • どこでトラブルっているかの把握が早い、見付けるのが早い
  • 温故知新と温新知故
    • 古い技術を理解していることで、新しい技術の取捨選択ができる
    • 新しい技術を理解しつつ、古い技術を選択できる
    • 無駄に新しい技術に飛び付かない
  • コードが綺麗
    • センスが半分(いや半分以上かも...?)
    • 他人のコードを多く読んでいる
    • 無駄なコード(スニペットとか)をいっぱい書いている
人それぞれ思うところはあると思いますが、自分としては現状こんな感じに思っています。
最近Tokyo Cabinet(正確にはTokyo Tyrant経由でTokyo Cabinet)のテーブルデータベースを使っているんですが、どうも検索が遅いなぁと思ったらインデックスを張り忘れてて、Tokyo (Cabinet|Tyrant)でどうやってインデックスを張るのかを調べたので、そのまとめです。

実際にTCのテーブルデータベースでインデックスをどう張るのかというと、foo.tctってDBのnameってカラムにインデックスを張るとすると
% tctmgr setindex foo.tct name
ってやればOK。実際には張るインデックスのタイプが選べますが、その辺はドキュメントに載っていますのでそちらをご覧ください。

PerlモジュールのTokyoCabinetを使って張る場合は、
my $tdb = TokyoCabinet::TDB->new;
$tdb->open("foo.tct", $tdb->OWRITER | $tdb->OCREAT);
$tdb->setindex("name", $tdb->ITLEXICAL);
ってやるだけでOK。

Tokyo Tyrant経由でもTokyoTyrant::RDBTBLにsetindex()って関数があるのでそれでインデックスが張れます。

また、Tokyo Tyrantのttserverでテーブルを指定して起動する際にも
% ttserver "foo.tct#idx=name:lex"
って感じにファイル名のあとに指定することもできるみたい。
いろいろな張り方があるんですねぇ。

ちなみインデックスを張るとfoo.tctとは別に「foo.tct.idx.name.lex」ってファイルが出来ます。どうやらここにインデックスが入ってるようです。
ファイル名がどのDBのどのカラムにどんなタイプのインデックスが張られているのか一目瞭然ですね!最後の.lexはインデックスのタイプですね。

で、ここまでわかって思ったのが、これって一度作成したらレコードがputされる毎に更新されるのか、わからなかったのでTokyo Cabinetのソースをみてみたらputされるタイミング(tctdbputimpl())でtctdbidxput()が呼ばれるようなので(両関数ともにtctdb.cの中)、一度作成作成しておけば、あとは勝手に更新されるようだ。

なるほどねぇ。
よくできてるなぁ。

追記: githubにリポジトリを作りました。

#soozy@freenodeでidコールされてて、なにかと思ったらText::MicroTemplateのEmacsのメジャーモードがあったらいいねーみたいな話しだったのでてきとうにでっちあげてみた。

そしたらすぐにimakado先生が問題あるところを修正をしてくれました。

imakado++

まだT::MTのパッケージには入れてないですがgithubのリポジトリの権限はもらったので問題なさそうだったら入れさせて頂こうかと思います。

名前はIRCですでに呼ばれてたtmt-modeにしてみた。

検索

広告

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.12