トップ «前の日(12-23) 最新 次の日(12-25)» 追記   RSS 1.0 FEED  

Journal InTime


2000-12-24 (Sun)

_ クリスマスイブ

クリスマスイブにデパートなんて行くもんじゃないな。

_ 笑いながら死んだ男

ハンドラーの『笑いながら死んだ男』を久しぶりに読み返している。 やっぱりハンドラーのユーモアのセンスは最高ですね。

ただわからないジョークもいくつかある。(これはハンドラーに責任があるわけでは なくて全面的に僕の責任なんだけど。) たとえば、このシリーズでは毎回、

「何て呼ばてるんだ、スチューか?」
「ホーギー」
「あのカーマイケルと同じか?」
「いえ、チーズステーキの方です」

というようなやり取りがあるのだが、残念ながらどういう意味なのかわからない。 (そういえば『市民ケーン』の「薔薇の蕾」も結局わからなかった。)

だれか知ってたら教えてください。


2003-12-24 (Wed)

_ [Ruby] eruby-1.0.5

eruby-1.0.5をリリース。 変更はbug fixのみです。

_ [Ruby] eruby-1.0.5のバグ

リリース直後に バグ報告のメール を発見。 しまった…。 クリスマスにもう一回リリースするか。

_ [Ruby] Net::IMAP

高林さんにNet::IMAPのバグを指摘していただいたので、修正。 mobileimapで 問題になっていたらしい。ごめんなさい。

ruby-1.8.1に間に合ってよかった。

_ [その他] JIT

本日のリンク元を見ると、やっぱり「JIT」で検索してここに来る人がい るらしい。 申し訳ないけど*1、たぶんあなたが求めてい るJITはここにはありません。 <URL:http://shudo.net/jit/>へどうぞ。

*1  実は確信犯である。

_ [その他] クリスマスイブ

チキンとケーキを食べた。

本場(ってどこだ?)では七面鳥とプディング *1って聞いたことがあるけど、 本当だろうか。

*1  プリンと書くよりそれっぽい気がする。

本日のツッコミ(全1件) [ツッコミを入れる]

_ ただただし [こんなにURLが似てるとは気づかなかった! >jit]


2005-12-24 (Sat)

_ [家族] クリスマス

ケーキ

奥さんが作ったケーキでクリスマスパーティー。 今までで一番の出来じゃないだろうか。

来年のための教訓:

  • モスチキンの予約の時間は16:00にすること。
  • シャンパンの栓はすぐ閉めること。
  • 子どもが寝たらすぐプレゼントをデプロイすること。

ちなみに下の子へのプレゼントは、仮面ライダートドロキ DX音撃弦セットにした。 サティではかなり売れ残ってたけど、これはいいよ。かなり遊べるよ。


2009-12-24 (Thu)

_ [Emacs] 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である。