2009-01-23

elscreen-gfのチートシート

とーぜん、開発はemacsを使っていています。だって便利だもん。 で、コードを読むときにこの関数てどこで使われているか/定義されているかを知りたいときは多々あります。根性でgrepしてもいいですが、世の中にはGNU ID UtilsとかGNU GLOBALとか便利なツールもあるので、こういうツールを使ったほうが時間の節約にもなります。 しかも、emacsから使うならelscreen-gfという便利なlispがあります。まぁ、このあたりはelscreen-gfとかで検索したら色々出てくると思うからばっさり省略。 今日の本題はelscreen-gfでglobalを使うときのチートシートです。 elscreen-gfはglobalだけじゃなく、上記のGNU ID Utilsやgrepなども使えますが、phpの開発が主体なのでGNU GLOBALしか使っていません。一応、たしなみとしてGNU ID Utilsやctagもインストールしているけどね。。。 で、phpのコードの中でGNU GLOBALを使うときは以下な感じ。
elscreen-prefix-keyC-g t gtagの実行
elscreen-prefix-keyC-g l カーソルがある箇所の関数、もしくは任意の関数を調べる(0で定義している箇所を探し、1で使われている箇所を探す)
elscreen-prefix-keyC-g lを実行したらglobalの結果を整形してElScreen-GFバッファに結果が表示される。そのバッファでは以下が使える。
n 下の行に移動
p 上の行に移動
> バッファの最後に移動
< バッファの最初に移動
N 次のファイルに移動
P 前のファイルに移動
o 該当するファイルの該当行にジャンプする
O 該当するファイルの該当行にジャンプする(読み込み専用)
q ElScreen-GFを終了する
一応、elscreen-gf.elではわかりやすい関数名で書かれている。

2009-01-19

ptp遊び (その後)

かなーり以前にptp遊びをしていて、このBlogでもptpcamで遊んだら面白そう、というエントリを残したんだけど、実はあのあとにちょっとゴタゴタあってptpではちゃんと遊んでいませんでした。ただ、このBlogにGoogleからptpcamというキーワードでたどり着いている人がいるので、ちょっとだけアップデート。 て、言っても、Fedora 10でちょろっとだけ使ってみた、ということだけです。 えと、まず昔にlibptpで遊んだときはgcc4でコンパイルできないよ、ぎゃおーと叫んでいたと思いますが、Fedora 10ではきっちりコンパイルできました。とくにトリッキーなことはしていないです。ふつーに./configure && make && sudo make installでインストールまでいけると思います。ただ、libusb-develは必要かも。つかったバージョンはlibptp2の1.1.10。多分最新のstableだと思うんだけど、ちょっとリリースした日が古いかも。 あと、ptpcamで遊ぼうと思ったんだけど、gphoto2にD80を先に奪われちゃったので断念しました。多分、gphoto2のgvfs関係のパッケージを削除したらいけるんじゃないかな。あと、runlevelが3な状態でもいけそうな気がする。もっとちゃんとしたいならgvfs関係をちゃんと設定するとか。 というわけで、libptp2はFedora 10でコンパイルできるけど、まじめに使おうとしたら、ちょっとめんどくさかったという話でした。

2009-01-05

なぞのUCD-DISKIO-MIB

会社のFedoraなマシンのサーバステータスをrrdtoolsを使ってグラフ化してます。グラフ化している値の中でUCD-DISKIO-MIBのdiskIONReadとdiskIONWrittenを使ったディスクIOの読み込みと書き込みをグラフ化しているんだけど、最近ちょっと変。 どう変なのかというと、sdaのつもりでとっていたdiskIONReadやdiskIONWrittenの値がループでバイスの値になっているぽい。つまり、
nabeo@foo:~[8413]% snmpwalk -c public -v 1 bar diskIODevice UCD-DISKIO-MIB::diskIODevice.1 = STRING: ram0 UCD-DISKIO-MIB::diskIODevice.2 = STRING: ram1 UCD-DISKIO-MIB::diskIODevice.3 = STRING: ram2 UCD-DISKIO-MIB::diskIODevice.4 = STRING: ram3 UCD-DISKIO-MIB::diskIODevice.5 = STRING: ram4 UCD-DISKIO-MIB::diskIODevice.6 = STRING: ram5 UCD-DISKIO-MIB::diskIODevice.7 = STRING: ram6 UCD-DISKIO-MIB::diskIODevice.8 = STRING: ram7 UCD-DISKIO-MIB::diskIODevice.9 = STRING: ram8 UCD-DISKIO-MIB::diskIODevice.10 = STRING: ram9 UCD-DISKIO-MIB::diskIODevice.11 = STRING: ram10 UCD-DISKIO-MIB::diskIODevice.12 = STRING: ram11 UCD-DISKIO-MIB::diskIODevice.13 = STRING: ram12 UCD-DISKIO-MIB::diskIODevice.14 = STRING: ram13 UCD-DISKIO-MIB::diskIODevice.15 = STRING: ram14 UCD-DISKIO-MIB::diskIODevice.16 = STRING: ram15 UCD-DISKIO-MIB::diskIODevice.17 = STRING: sda UCD-DISKIO-MIB::diskIODevice.18 = STRING: sda1 UCD-DISKIO-MIB::diskIODevice.19 = STRING: sda2 UCD-DISKIO-MIB::diskIODevice.20 = STRING: sdb UCD-DISKIO-MIB::diskIODevice.21 = STRING: sdb1 UCD-DISKIO-MIB::diskIODevice.22 = STRING: sr0 nabeo@foo:~[8414]%
というつもりでMIB値をとっているつもりが、いつのまにか
UCD-DISKIO-MIB::diskIODevice.1 = STRING: ram0 UCD-DISKIO-MIB::diskIODevice.2 = STRING: ram1 UCD-DISKIO-MIB::diskIODevice.3 = STRING: ram2 UCD-DISKIO-MIB::diskIODevice.4 = STRING: ram3 UCD-DISKIO-MIB::diskIODevice.5 = STRING: ram4 UCD-DISKIO-MIB::diskIODevice.6 = STRING: ram5 UCD-DISKIO-MIB::diskIODevice.7 = STRING: ram6 UCD-DISKIO-MIB::diskIODevice.8 = STRING: ram7 UCD-DISKIO-MIB::diskIODevice.9 = STRING: ram8 UCD-DISKIO-MIB::diskIODevice.10 = STRING: ram9 UCD-DISKIO-MIB::diskIODevice.11 = STRING: ram10 UCD-DISKIO-MIB::diskIODevice.12 = STRING: ram11 UCD-DISKIO-MIB::diskIODevice.13 = STRING: ram12 UCD-DISKIO-MIB::diskIODevice.14 = STRING: ram13 UCD-DISKIO-MIB::diskIODevice.15 = STRING: ram14 UCD-DISKIO-MIB::diskIODevice.16 = STRING: ram15 UCD-DISKIO-MIB::diskIODevice.17 = STRING: loop0 UCD-DISKIO-MIB::diskIODevice.18 = STRING: loop1 UCD-DISKIO-MIB::diskIODevice.19 = STRING: loop2 UCD-DISKIO-MIB::diskIODevice.20 = STRING: loop3 UCD-DISKIO-MIB::diskIODevice.21 = STRING: loop4 UCD-DISKIO-MIB::diskIODevice.22 = STRING: loop5 UCD-DISKIO-MIB::diskIODevice.23 = STRING: loop6 UCD-DISKIO-MIB::diskIODevice.24 = STRING: loop7 UCD-DISKIO-MIB::diskIODevice.25 = STRING: sda UCD-DISKIO-MIB::diskIODevice.26 = STRING: sda1 UCD-DISKIO-MIB::diskIODevice.27 = STRING: sda2 UCD-DISKIO-MIB::diskIODevice.28 = STRING: sdb UCD-DISKIO-MIB::diskIODevice.29 = STRING: sdb1 UCD-DISKIO-MIB::diskIODevice.30 = STRING: sr0
になっていたりする。つまり、いつの間にかloop0とかというデバイスができてしまっている。 MIB値をとっているシェルスクリプトではデバイスの番号をきめ打ちで書いているので、こういうことに対応できない。多分、udevあたりの設定でloop0を作らないようにできると思うんだけど、調べるのがめんどいし、そもそも決め打ちで書くなよということもあったので、最初にdiskIODeviceで必要なデバイスの番号を調べてから、本命のMIB値をとりにいくようにスクリプトを書き直した。 ここまできたらシェルスクリプトじゃなくて、Rubyとかで収集用スクリプトを組んだほうがいいと思うけど、いまいちRubyは勉強不足なのでできていない。今年の目標かなぁ。。。

org-modeでTODOを管理

一年の計は元旦にあり、ではないが今年から自分のタスクをorg-modeを使って管理してみようと思う。ここでは自分用に設定と使い方をメモとして残しておく。 そもそも、これまでは自分のタスク管理は特にツールは使わず、メールやスケジュール帳などで管理をしていた。基本的にタスク処理は投入された時点での優先順位に従ってベストエフォートで行ってきたが、如何せんベストエフォートなのでドロップすることもあった。あと、自分の性能としてマルチタスクも弱いので、疑似マルチタスクでなんとか処理能力もあげたい、なんてことも考えている。 ということで、emacsの設定。今使っているemacsはM-x emacs-versionとするとGNU Emacs 22.3.1 (i386-apple-darwin9.5.0, Carbon Version 1.6.0) of 2008-11-01 on leopard.localと表示される。つまり、Carbon Emacsの2008年秋版。このCarbon Emacsには標準でorg-modeの5.23aが入っている。以下はこの環境でorg-modeの設定。
(require 'org) ;; 拡張子がorgのファイルをorg-modeで扱う (add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) ;; キーバインドの設定(global map) (define-key global-map "\C-cl" 'org-store-link) (define-key global-map "\C-ca" 'org-agenda) ;; TODOファイルの登録 (setq org-agenda-files (list "/path/to/file/todo-00.org" "/path/to/file/todo-01.org") ;; TODOのタスクの種類としてTODO Wait Doneを定義 :: C-c C-tでTODO -> Wait -> Doneと切り替わる (setq org-todo-keywords '("TODO" "Wait" "Done")) (setq org-todo-interpretation 'sequence)
サイトによっては他にも設定をしているみたいだけど、とりあえずorg-modeの試食ができればいいのでこれくらいにしておく。 あとはよく使うと思われるキーバインドをメモっておく。
階層の操作 追加 : C-c C-RET 階層を深くする : M-Right 階層を深くする(下の階層も同時にする) : M-S-Right 階層を浅くする : M-Left 階層を浅くする(下の階層も同時にする) : M-S-Left 第一階層のみの表示 (トグル) : Shift-TAB すべてを開く : C-c C-a 次の項目に移動 : C-n 同階層の次の項目に移動 : C-c C-f 前の項目に移動 : C-p 同階層の前の項目に移動 : C-c C-b TODOリスト TODOリストを追加 : M-S-RET TODOの状態を変更 : C-c C-t org-todo-keywordsの順番でトグルする TODOのアイテムのみを表示する : C-c C-v 表組 項目の区切り : | 行の区切り : |-
このリストを育ててチート表にしたら便利だろうなぁ。ということでTODO追加。