2004-04-01 (Thu) [長年日記]
_ 新入社員入社
10:20頃に何気なく出社してメールチェックしていると、社長からこんな メールが。
松江本社の大部屋で10時から新入社員の紹介をしますので、みなさんよろしくお願いします。
がーん、ごめんなさい…。
_ version 0.0.0 リリース
とりあえず、リリースしてみた。 バージョン番号に相応しい品質を達成しています。
2004-04-02 (Fri) [長年日記]
_ Microsoft .NET Framework対応
Microsoft .NET Frameworkではやっぱり動かなかったので修正。 とりあえず、hello worldくらいはコンパイルできるようになった。
どうも、Microsoft .NET Frameworkの方がmonoより制約が多いようだ。 (というか、ドキュメントにない例外が発生するんですけど。) ほんとはこっちをメインの開発環境にした方がいいんだろうなあ。
2004-04-04 (Sun) [長年日記]
_ 花見
木次まで花見に。
多少葉っぱが出てたものの桜はきれいだったけど、寒いやら子供が重い やらであまり桜を見る余裕はなかった。
毎年焼サバを売ってるらしくて、奥さんのおばさんにもらったのを食べ たらおいしかったけど、よく考えたら木次って海に面してないよな。 何でサバなんだろう。
2004-04-05 (Mon) [長年日記]
_ mod_ruby-1.1.3
MLで「開発止ってるのか?」と言われてリリース。
一応メンテナンスは続けているものの、機能拡張などは停滞しているの で、1.2.0出した後は誰か引き取ってくれないかなあと思っていたりする。 会社の後輩が引き取ってくれると一番いいんだけどなあ…。
2004-04-06 (Tue) [長年日記]
_ nvi-m17n for sid
nvi-m17nの新しいバージョンが出ていたので、sid用にパッケージをビル ドしてみた。
deb http://shugo.net/debian ./ deb-src http://shugo.net/debian ./
バージョン番号がアレだけど、何か仕掛けられてるんだろうか。
_ babel-0.0.1
Windows XPのMicrosoft .NET Framework上でmake checkが通るようになっ た。
2004-04-07 (Wed) [長年日記]
_ tags-searchの検索文字列のデフォルト値
会社で「Emacs上である関数が使われている箇所を探す時どうするか」と いう話になった。 以前は、同じファイル内だけ探す時はisearch、複数のファイルを探す grepだったのだが、最近tags-searchを使うようになった。
後輩は検索のたびに関数名をコピーしてからミニバッファでペーストし て検索しているらしい。曰く、「長い関数名いちいちタイプするの面倒 臭くないですか?」 そういえば、そうだよな。でもコピー&ペーストもけっこう面倒だぞ。
tags-searchの検索文字列のデフォルト値に現在位置の識別子を渡す (find-tagみたいに)のがラクそうだなと思って、defadviceで拡張してみ た。
(defadvice tags-search (before default-value activate compile) "Provide default values." (interactive (list (let ((default (funcall (or find-tag-default-function (get major-mode 'find-tag-default-function) 'find-tag-default)))) (read-string (format "Tags search (default %s): " default) nil nil default t)))))
ついでにtags-query-replaceも。
(defun tags-query-replace-read-args (string regexp-flag) (let ((from nil) (to nil) (default (funcall (or find-tag-default-function (get major-mode 'find-tag-default-function) 'find-tag-default)))) (if query-replace-interactive (setq from (car (if regexp-flag regexp-search-ring search-ring))) (setq from (read-string (format "%s (default %s): " string default) nil query-replace-from-history-variable default t))) (setq to (read-from-minibuffer (format "%s %s with: " string from) nil nil nil query-replace-to-history-variable from t)) (if (and transient-mark-mode mark-active) (list from to current-prefix-arg (region-beginning) (region-end)) (list from to current-prefix-arg nil nil)))) (defadvice tags-query-replace (before default-value activate compile) "Provide default values." (interactive (tags-query-replace-read-args "Tags query replace (regexp)" t)))
ちなみに、自分は以下のキーに割り当てている。
(global-set-key "\M-s" 'tags-search) (global-set-key "\M-r" 'tags-query-replace)
最近ラクするのを怠けていたので、もっと頑張ってラクをしようと思う。
_ tDiaryのテーマ
ふと思い立って微妙に変えてみた。
_ グーグル、反ユダヤ論争に巻き込まれる
「Googleは、複数のコンピュータアルゴリズムだけをもとにして、検索結果の順位を決定する。基本的にウェブでの人気度を反映している」とKraneは述べる。「人間はGoogleの検索結果を操作しない。検索結果を手動で変えることはできない」(Krane)
[グーグル、反ユダヤ論争に巻き込まれるより引用]
あれ、そうだったんですか、ふーん。
2004-04-09 (Fri) [長年日記]
_ 「自衛隊は即時撤退しても日米同盟は壊れません」
リンクはJMMの冷泉彰彦氏の記事だが、 すぐに他の記事に変わってしまうと思う。*1 (前はバックナンバーが公開されてたような気がするんだけど。)
おおまかな論旨としては、
- もちろん人質の命は大切だが、撤退しない場合のリスクはそれ以外にもある。 日米同盟への影響は、撤退しない場合の方が深刻になる可能性がある。
- この事件がなくとも、昨今の治安情勢からこれ以上の自衛隊の活動は難しい。 今撤退したとしても、テロに屈したと考える必要はない。
といったように、自衛隊の撤退を主張している。 意見にはおおむね賛成 *2 なんだけど、
これに対しては、日本は堂々と自衛隊を引くべきです。胸を張って引き上げるべきです。アメリカの庶民は、誰も不思議に思わないでしょうし、大した悪感情も持たないでしょう。政治家のメンツは潰れます。ブッシュ=チェイニー=ラムズフェルドのメンツは潰れます。小泉=福田=石破のメンツは潰れるでしょう。ですが、それだけです、日米関係はビクともしないでしょう。
[「自衛隊は即時撤退しても日米同盟は壊れません」from 911/USAより引用]
この政治家のメンツが問題だよな。 皮肉なことに、福田さんは「人命は地球より重い」発言の福田赳夫元首相の息子ときている。
と思ったら、 父の時と「時代が違う」 だそうだ。
_ 3人の誘拐について大急ぎで
こちらは池澤夏樹氏のメールマガジンの記事(あ、Movable Typeなんだ)。 議論の流れはぜんぜん違うけど、結論は同じ。
ただし、3人が誘拐されたから、その生命を救うために撤退するのではない。それでは取引になってしまう。 今後、日本に対して何か強い要求を持つ者に対して、日本の民間人を誘拐すれば目的はかなうという前例を与えることになる。それこそテロに屈することになる。
そうではなくて、自衛隊を復興支援という名目のもとに派遣したことが間違いであったことを公式に認め、今のイラクを平和に導くために必要なのは武力ではないことを認め、その上で撤退を速やかに実行する。言い換えれば、誘拐とは無関係に、政策の転換を内外にはっきり表明する。
[3人の誘拐について大急ぎでより引用]
本当にそうできれば、と思います。
_ selector namespace
[ruby-list:39453]を見て思ったけど、やっぱりRuby2には selector namespaceが欲しいな。
簡単に復習すると、selector namespaceというのは、特定のスコープ においてのみ既存のクラスのインスタンスの振舞いを変えることが出来る仕組みである。
たとえば、
namespace mathematical class Fixnum def /(other) return Rational(self, other) end end end
みたいなselector namespace定義(?)があったとして、これを
import mathematical
のように特定のスコープ(たぶんファイルとかクラス・モジュールとか)にインポートすると、 そのスコープでのみ、
p 1 / 2 # => 1/2(Rational)
のようにFixnum#/の挙動が変わるわけだ。
この時、namespaceをimportするスコープが静的であるのがミソで、このスコープから メソッド呼び出しを行った場合、呼び出し先のFixnumの挙動には影響しないのだ。 *1
*1 動的なスコープでよければ、[RAA:scope-in-state]で同じようなことを実現できる。
_ selector namespaceとdouble dispatch
selector namespaceがあればこんなこともできる。たとえば、
class HTMLElement ... def print_on(output) ... case output when String ... when IO ... end ... end ... end
というコードがあったとしよう。
これはよくないコードだ。 なぜならオブジェクトのクラスを調べて分岐しているから。 こういうコードを書くと、outputにStringやIO以外の新しいクラス(たとえば、 IOと同じようなメソッドを提供するけれどもIOを継承していないようなクラス) のインスタンスを受け取ることができなくなってしまう。
より良いのは、こんなコードだ。
class String def print_part_of_html_element(element) ... end end class IO def print_part_of_html_element(element) ... end end class HTMLElement ... def print_on(output) ... output.print_part_of_html_element(self) ... end ... end
こうしておくと、新しいクラスのインスタンスをHTMLElement#print_onに渡したければ、 そのクラスにprint_part_of_html_elementというメソッドを定義すればよいわけだ (polymorphism万歳)。 *1
ところが、このコードにも問題がある。 それは組み込みクラスの挙動をグローバルに変更してしまっている点だ。 こんなことをするのはあまり気持ちのいいものではないし、何より、 他の人が同じようなことをしていたらメソッド名が衝突してしまうかもしれない。
そこで、selector namespaceの出番だ。
namespace html_element_printing class String def print_part_of_html_element(element) ... end end class IO def print_part_of_html_element(element) ... end end end
のようにnamespaceを定義しておいて、
class HTMLElement import html_element_printing ... def print_on(output) ... output.print_part_of_html_element(self) ... end ... end
のようにimportしてやればいい。 これなら、HTMLElementの外にはまったく影響がないのだ。 何て素晴らしいんだろう。
*1 こういうのをdouble dispatchという。 print_onとprint_part_of_html_elementの二回method dispatchをするから。 CLOSみたいにmulti methodならこんなことをしなくてもよいのだが、Rubyが そうなることはないだろう。まつもとさんはmulti methodが嫌いらしいから。 selector namespaceにもそういう面があるけど、オブジェクトとメソッドの結び付きが弱く なるんだよね。
_ selector namespaceと継承
もちろん、まったく問題がないわけではない。 一番大きいのは継承との整合性の問題だろう。
たとえば、[ruby-list:39453]を例にあげると、
namespace mathematical class Integer def /(other) return Rational(self, other) end end end import mathematical p 1 / 2
とした時に、出力は1/2(Rational)になるべきだろうか、それとも0になるべきだろうか。
知っての通り1はFixnumのインスタンスで、FixnumはIntegerのサブクラスだ。 /はIntegerではなくFixnumに定義されているので、普通はIntegerに/を定義しても Fixnumの挙動は変わらない。
問題は、selector namespaceの定義とどちらを優先するかだ。 場合によってはselector namespaceの定義の方を優先してほしい場合が あるかもしれないが、そうした場合、サブクラス化によるpolymorphismの恩恵を 受けることができなくなってしまう。 やっぱりサブクラスの定義を優先するべきなのかもしれない。
_ selector namespaceの実装
もう一つの大きな問題はどうやって効率的に実装するかということ。
これに関しては、selector namespaceをimportしているスコープのメソッド呼び出しの うち、selector namespaceで定義されたメソッドの呼び出しかもしれない部分(メソッド名 を見ればわかる)だけ、メソッド検索のアルゴリズムを変えてしまうのはどうだろう。
たとえば、前にささださんが日記で(メソッド検索全般の話として)書いてたと思うけど、 メソッド名毎にクラス(や特異クラス)をキーにしたテーブルを作っておくとか。 テーブルのメンテナンスが大変そうだとか、特異メソッドを多用してたら大変という のはあるかもしれない *1 けれど、selector namespaceを使わない場合の性能が落ちなければ許容できるような気がする。
*1 selector namespace使ってるところで特異メソッドは使わない気がするけど。
_ selector namespaceって名前でいいのか?
あと、selector namespaceって名前はどうなんだろう。 たぶん、Smalltalkのselectorのことだよね。 Ruby的にはmethod namespaceとかの方がわかりやすい?
2004-04-12 (Mon) [長年日記]
_ イラク自衛隊問題
解放宣言のニュースが流れた後も、いまだ人質の解放は確認されず、情報は錯綜している。
今回のテロがなかったとして、もともと自衛隊は撤退するべきだと考えていた人(自分も含む)の 中でも、意見が分れているようだ。 それは、今撤退するべきだ、という意見と、今はすべきでない、という意見だ。
後者の意見の人々はテロに屈するべきではないと言う。もちろん、それはその通りだ。 いかなる背景があろうともテロは許されざるべきものだし、一度それに屈すれば新たな テロを生む危険性もある。
しかし、もともと自衛隊は撤退するべきだと考えていたのならば、テロを受けて撤退する べきではないと表明することも、テロに屈していることになりはしないだろうか。
_ 入手
やっと入手できた。
第一印象:
- やっぱりカッコいい。 とくに、思ったよりアクリルカバーがカッコいい。 (邪魔ではあるけど。)
- 背面ジョグはやっぱり慣れるまでつらそう。 (慣れるのかなあ...。)
- やっぱりPalmwareは見た目がショボい。 (Athena widgetかと思ったよ。)
浅い感想ですみません。
2004-04-13 (Tue) [長年日記]
_ カメラ
カメラが一応付いてる(今時30万画素だけど)ので使ってみた。
カメラ単体で見ると携帯以下なんだけど、 スケジュールや手書きメモにドラッグ&ドロップできるのは面白いと思う。
あと、日記に写真を載せるのに便利そうだ…と思ったけど、NetFrontでの改行の入力の仕方が わからず結局PCから。
2004-04-14 (Wed) [長年日記]
_ LinuxでHotSync
Linuxで無線LAN経由のHotSyncを試みるも、なぜかBCMLib.prcのところでかならずSEGV。 pilot-linkでもjpilotでも同じ。
$ pilot-xfer -p net: -b clie/backup ... Backing up clie/backup/BCMLib.prc zsh: segmentation fault pilot-xfer -p net: -b clie/backup
gdb上で動かしてみるとどうも挙動がおかしい。
試しにpilot-linkを-O0でビルドしたら動いたのであまり深追いしないことにしよう。
2004-04-15 (Thu) [長年日記]
_ 離婚弁護士
妙齢の女性弁護士がカッカッカッと歩いて早口でまくしたてるところといい、 CGによる特殊効果といい、ビルの屋上で黄昏れるシーンでの音楽の使い方といい、 かなりAlly McBeal を意識している気がする。 あ、変態が出て来ないな。
_ C-u M-x grep
まつもとさんも知らなかったらしいし、周りの人はだれも知らなかった。 知らないのは自分だけだったのかも、と思っていたけど、ちょっと安心。
2004-04-25 (Sun) [長年日記]
_ NetFrontでの改行入力
NetFrontで改行を入力するには、メニューからキーボードを表示してやればいいらしい。 キーボードを表示しておきさえすれば、decumaの改行ボタンでも入力できるようだ。
これって仕様なのかなぁ。
_ キャッチャー・イン・ザ・ライ
かぜをひいて動けないので本を読もうと思って、奧さんに買い物のついでに「村上春樹訳の ライ麦畑を買って来て」と頼んだのだが、見つからなかったと言って帰って来た。 きっといっぱい置いてあるだろうにおかしいなあと思ったら、よくよく考えてみると、 村上版のタイトルは「キャッチャー・イン・ザ・ライ」なのですね。見つからないわけだ。
昔はOzzy Osbourneの"Shot In The Dark"が「暗闇にドッキリ」だったりして のけぞったものだけど、みんなカタカナというのもちょっとさみしいですね。
2004-04-26 (Mon) [長年日記]
_ PowerMac G4 Cube
OS9しか入ってなくて会社で打ち捨てられていたG4 CubeにLinuxを インストール。
しかし、メモリ64MBはつらいなあ。 だれかMac用の要らないメモリがあったらください。
2004-04-28 (Wed) [長年日記]
_ import
とりあえず、名前空間の導入(?)にはimportという予約語を使うことにした。 (usingには何となく抵抗があったので。)
定義する時には、
namespace FOO; class BAR is ... end;
と、
namespace FOO is class BAR is ... end; end;
のどちらがいいだろう。
後者の利点はファイルと独立した単位にできること、欠点はインデント幅が増えることかな。
_ ま2 [後者だと,namespase 〜 end; がものすごーく長くなって,対応が分からなくなるケースが増えるような気がし..]
_ Kouji [「会社の後輩」、それはあの人しか…。]
_ shugo [Y君のことですね:)]