2000-12-24 (Sun)
_ クリスマスイブ
クリスマスイブにデパートなんて行くもんじゃないな。
_ 笑いながら死んだ男
ハンドラーの『笑いながら死んだ男』を久しぶりに読み返している。 やっぱりハンドラーのユーモアのセンスは最高ですね。
ただわからないジョークもいくつかある。(これはハンドラーに責任があるわけでは なくて全面的に僕の責任なんだけど。) たとえば、このシリーズでは毎回、
「何て呼ばてるんだ、スチューか?」 「ホーギー」 「あのカーマイケルと同じか?」 「いえ、チーズステーキの方です」
というようなやり取りがあるのだが、残念ながらどういう意味なのかわからない。 (そういえば『市民ケーン』の「薔薇の蕾」も結局わからなかった。)
だれか知ってたら教えてください。
2003-12-24 (Wed)
_ eruby-1.0.5
eruby-1.0.5をリリース。 変更はbug fixのみです。
_ eruby-1.0.5のバグ
リリース直後に バグ報告のメール を発見。 しまった…。 クリスマスにもう一回リリースするか。
_ JIT
本日のリンク元を見ると、やっぱり「JIT」で検索してここに来る人がい るらしい。 申し訳ないけど*1、たぶんあなたが求めてい るJITはここにはありません。 <URL:http://shudo.net/jit/>へどうぞ。
*1 実は確信犯である。
2005-12-24 (Sat)
_ クリスマス
奥さんが作ったケーキでクリスマスパーティー。 今までで一番の出来じゃないだろうか。
来年のための教訓:
- モスチキンの予約の時間は16:00にすること。
- シャンパンの栓はすぐ閉めること。
- 子どもが寝たらすぐプレゼントをデプロイすること。
ちなみに下の子へのプレゼントは、仮面ライダートドロキ DX音撃弦セットにした。 サティではかなり売れ残ってたけど、これはいいよ。かなり遊べるよ。
2009-12-24 (Thu)
_ Emacsユーザのためのadvice
Emacs Advent Calendar jp: 2009の参加記事。昨日はid:hayamizさん。 明日は他に参加する人がいなければid:authorNariさん。
最近はVimを使うことが多いけど、shiroさんのお話を聞いてやっぱりLispは強力だなあとか思ったりしたので参加してみた。 知ってる人も多いと思うけど、Emacs Lispのadviceという機能を簡単に紹介しよう。
adviceとは、簡単に言うとCLOSのmethod combinationみたいなものだ。あるいは、Railsのbefore/after/aroundフィルタみたいなものと言った方がいいだろうか。要は、既存の関数(正確にはマクロや特殊フォームを含む)の実行の前(before)あるいは後(after)、前後両方(around)で実行したいコードを定義する機能である。
たとえば、以下のコードはGNU Emacs拡張ガイド―Emacs Lispプログラミングに載っている例(だったと思う)で、switch-to-bufferで存在しないバッファ名を指定した時に、新しいバッファを作らないようにするためのものだ。
(defadvice switch-to-buffer (before existing-buffer activate compile) "When interactive, switch to existing buffers only, unless given a prefix argument." (interactive (list (read-buffer "Switch to buffer: " (other-buffer) (null current-prefix-arg)))))
簡単に説明すると、defadviceはadviceを定義するためのマクロ(マクロ万歳!)で、defunに似ているがちょっと違う。 switch-to-bufferの部分には拡張対象の関数名を指定し、beforeの部分にはbefore/after/aroundのいずれかを、existing-bufferの部分にはadviceの名前を指定する。activateとcompileはフラグで、それぞれadviceを活性化することと、コンパイルすることを指示している。 詳細はマニュアルなどを参照。
以下の例は、find-fileを拡張して、C-u C-x C-fのようにprefix引数付きで実行した時に明示的にcoding-systemを指定できるようにするもので、標準の機能が見つからなかったので自分で定義して愛用している。
(defadvice find-file (around coding-system activate compile) "When a prefix argument given, specify coding-system-for-read." (let ((coding-system-for-read (if current-prefix-arg (read-coding-system "coding system: ") coding-system-for-read))) ad-do-it))
aroundの場合は、元の関数(この場合はfind-file、正確には自分より内側で実行されるaround adviceも含む)の前後でadviceを実行するわけだが、上記のad-do-itの部分で元の関数が実行される。 この例だとad-do-itの後に何も処理していないのでbeforeでもいいと思われるかもしれないが、letでcoding-system-for-readを束縛する範囲にad-do-itを含めるためにaroundにする必要がある(Emacs Lispはdynamic scopingを採用しているので、letで束縛されたcoding-system-for-readの値は、ad-do-itで呼び出される元のfind-fileからも参照されることに注意)。
というわけで、今日はEmacs Lispのadviceを紹介した。 こういったadviceが色んな人の.emacsに散らかっている(そしてどれもちょっとずつ違う)のが、Emacsの楽しいところであり、やっかいなところでもある。 他人のマシンで作業する時のために、第2母エディタとしてviなども習得しておくことをお勧めする…というのが僕からのEmacsユーザのためのadviceである。
_ ただただし [こんなにURLが似てるとは気づかなかった! >jit]