青木日記

<前月 | 最新 | 次月>

2006-12-02

BitClust: 動的な include

久しぶりにリファレンスマニュアル。

ああっ! そういえば動的なモジュールの include は考えたことなかった! どうしよう。

むー。真面目にやるなら、 include にもメタデータを付けて動的に追跡しないといけないよな。 検索は広めにひっかければいいとして、 検索後に情報を絞らないといけないな。

そうか。いまは追加元のライブラリ (origin-library) だけ表示してるけど、 この他にモジュールをインクルードしたライブラリ (include-origin-library) が必要だな。 ユーザからすれば、どのライブラリを require すると使えるかが問題なのだから、 include しているライブラリのほうが重要だ。 なぜなら include するということはそのライブラリは include すべきモジュールをすでに得ているはずである。 つまり origin-library を require しているはずである。 したがってユーザが include-origin-library を require したら 自動的に origin-library も使えるようになるはずだし、 またそのように期待してよいだろう。

真面目にやらない場合は、 (reopen/redefine) + include でドキュメントをごっそり複製してつっこめばいいわけだ。 このときにライブラリだけ書き換えれば include-origin も表示できるな。 うーんなんかこれでいいような気もしてきた。楽だし。

(17:15)

BitClust: 動的な include (2)

用語がいまいちなので再定義

  • (method-)origin-library: あるメソッドの定義を提供しているライブラリ
  • (module-)includer-library: あるメソッドを含むモジュールを include することによってそのメソッドを定義しているライブラリ

ん? でもあれか、origin-library と includer-library が 違う場合ってどれくらいあるんだろ。ていうか、存在するか? 今回問題になった base64 ライブラリは origin = includer だしな。

なんか Rails 方面とかでバリバリ活用されてそうな嫌な予感がする。 出てきたときに悔しいから実装しとくかあ。

やっぱ、単純にコピーで実装したほうが楽かもなあ。 どのような手段によって (継承か、include か、直定義か) 提供されたかよりも、 どのライブラリを require すると使えるのか、がユーザにとっては知りたいわけだろうし。

このさい、 違うメソッド (のドキュメント) を参照できるようにしてしまおうかなあ。 メタデータとして「このメソッドはアレと同じ」という情報を付けてしまえばいい。 Signal.trap と Kernel.#trap とか、共有したい場合はけっこうあるし。

んで、include だけするライブラリについては、 そのドキュメント共有の仕組みを使ってメソッド単位でリンクしまくればいい。

こういうのを入れるとリンク切れが問題になったりするわけだが、 まあそのへんはあとで考えよう。 最悪、エントリを全部なめてチェックすりゃいいわけだし。

う、いや待てよ、やっぱまずいか。 include を単にメソッドのリストにコピーした場合、 オーバーライドが表現できなくなるな。 チェックしつつコピーすればいいか? いやでもその時点では元のクラスがロードされていない可能性があるな。 ということは検索時にオーバーライドチェックが必要? それもダルい。 パースを終えた時点でオーバーライドされてるかチェックして消せば多少はマシか? 検索側をこれいじょう複雑にするときついし、こっちのほうがまだいいな。

Ruby の実装と同じに、iclass を導入するのはどうだろう。 「Base64」モジュールに対して「@1@Base64」モジュールのように別名を付けて、 メソッドごっそりコピー。

あっ! いやいやいや待てそれはまずいな。っていうかコピー案はだめだ。 include したモジュールがまた別のモジュールを include してる可能性を考えてなかった。 やっぱり実体を分ける方針は筋が悪い。

うーん、いや、そうか。 そもそも includer-library をどこに記録したらいいんだろう。 include 先クラスに記録したとすると、 メソッド検索後に ancestors を全部見て、 定義元モジュールが include されてるところを探して、 なんかえらく面倒だな。速度の点は継承メソッドキャッシュと同じ方法で解決するとしても、 もうちょっとスマートな方法はないのかな。

この問題の厄介なところは、reopen/redefine 属性で調べられないとこか。 defined メソッドを別のライブラリが勝手に include しても reopen と同等になってしまう。 激しくウザい。

むー、やっぱ iclass のようなものが必要だな。 それも検索時のみ動的に作ったほうがよさげ。 元のモジュールの仮身となる iclass を作成し、 iclass は元のモジュールのラッパーにする。 IClassEntry#entries はエントリの kind を reopen 属性に変えて返すと。

……あれ、常に reopen とは限らないかな。 いやいやそんなことはない、いまは reopen な include の話だった。 パース時に reopen include であることは区別できるから、 別のライブラリが include しているという情報をクラスに記録しておけばいいんだな。 reopen include が普通の include よりも早くなることはありえないだろうから、 ancestors の順番が常に最後になることはさほど問題ない。

よし、なんとか解決できそうだ。

(20:29)


2006-12-03

互換性問題

ありとあらゆる季節の変わりめを逃さず風邪をひくおれ。

冬におかれましては、もう少し夏および秋との互換性に配慮していただきたい。

(22:05)


2006-12-06

日本 Ruby 会議 2007

http://jp.rubyist.net/RubyKaigi2007/

遅ればせながら会議の件。

ささださんに「応募しといて」と名指しされたので なんか応募しようかと思うんだけど、何で応募しよう。 順当に行くとリファレンスマニュアルになるけど、あれどのくらい進むんだろう。

「このテーマでしゃべれ」てのがあったらコメントください。

(18:48)

リファレンスマニュアル進捗状況

~/c/bitclust % ./tools/statrefm.rb ../rubydoc
--- Status
97/225 files done (43.11%)
 
--- Ranking by number of files
 1  128 (not yet)
 2   57 sheepman
 3   23 okkez
 4   11 date
 5    3 aamine
 6    2 tadf
 7    1 moriq
 
--- Ranking by Kbytes
 1  386 (not yet)
 2  321 sheepman
 3  121 okkez
 4   37 date
 5   12 aamine
 6    2 moriq
 7    2 tadf

12 月いっぱいにエントリを揃える計画で、現在 43% (ファイル数ベース)。 なんてありがちな数字だ。

こんなん俺が全部書いてやるよチクショー!って方は

http://doc.loveruby.net/wiki/HowToJoin.html

を読んで参加してね。

(18:53)

リファレンスマニュアル進捗状況 (2)

まあ、でもあれだ。 あと 128 ファイルだから、1 日 5 ファイルかたづければ 12 月で終わるよ。

おれもせめて自分のメンテしてるライブラリくらいはどうにかしよう。

(18:55)

るりマ! / 作業方法

現段階の作業方法をなんとなくお伝えする。

とりあえず svn up

~/c/rubydoc/refm/api % svn up
At revision 839.

ASSIGN ファイルを編集してファイルのオーナーを自分にする

~/c/rubydoc/refm/api % grep net/smtp ASSIGN
net/smtp
~/c/rubydoc/refm/api % vi ASSIGN
~/c/rubydoc/refm/api % grep net/smtp ASSIGN
net/smtp                        aamine
~/c/rubydoc/refm/api % svn ci -m 'assign net/smtp to aamine' ASSIGN

本物にどういうメソッドが定義されてるか bc-methods で調査

~/c/rubydoc % bc-methods -rnet/smtp Net::SMTP
                               180 181 182 183 184 185 185 190
Net::SMTP.default_port           o   o   o   o   o   o   o   o
Net::SMTP.default_ssl_context    -   -   -   -   -   -   -   o
Net::SMTP.default_ssl_port       -   -   -   -   -   -   -   o
Net::SMTP.default_tls_port       -   -   -   -   -   -   -   o
Net::SMTP.disable_ssl            -   -   -   -   -   -   -   o
Net::SMTP.disable_tls            -   -   -   -   -   -   -   o
Net::SMTP.enable_ssl             -   -   -   -   -   -   -   o
Net::SMTP.enable_tls             -   -   -   -   -   -   -   o
Net::SMTP.ssl_context            -   -   -   -   -   -   -   o
Net::SMTP.start                  o   o   o   o   o   o   o   o
Net::SMTP.use_ssl?               -   -   -   -   -   -   -   o
Net::SMTP.use_tls?               -   -   -   -   -   -   -   o
Net::SMTP#address                o   o   o   o   o   o   o   o
Net::SMTP#auth_cram_md5          -   -   -   -   -   -   -   o
Net::SMTP#auth_login             -   -   -   -   -   -   -   o
Net::SMTP#auth_plain             -   -   -   -   -   -   -   o
Net::SMTP#authenticate           -   -   -   -   -   -   -   o
Net::SMTP#data                   -   -   -   -   -   -   -   o
Net::SMTP#debug_output=          -   -   -   -   -   -   -   o
Net::SMTP#disable_ssl            -   -   -   -   -   -   -   o
Net::SMTP#disable_tls            -   -   -   -   -   -   -   o
Net::SMTP#ehlo                   -   -   -   -   -   -   -   o
Net::SMTP#enable_ssl             -   -   -   -   -   -   -   o
Net::SMTP#enable_tls             -   -   -   -   -   -   -   o
Net::SMTP#esmtp                  o   o   o   o   o   o   o   o
Net::SMTP#esmtp=                 o   o   o   o   o   o   o   o
Net::SMTP#esmtp?                 o   o   o   o   o   o   o   o
Net::SMTP#finish                 o   o   o   o   o   o   o   o
Net::SMTP#helo                   -   -   -   -   -   -   -   o
Net::SMTP#inspect                o   o   o   o   o   o   o   o
Net::SMTP#mailfrom               -   -   -   -   -   -   -   o
Net::SMTP#open_message_stream    o   o   o   o   o   o   o   o
Net::SMTP#open_timeout           o   o   o   o   o   o   o   o
Net::SMTP#open_timeout=          o   o   o   o   o   o   o   o
Net::SMTP#port                   o   o   o   o   o   o   o   o
Net::SMTP#quit                   -   -   -   -   -   -   -   o
Net::SMTP#rcptto                 -   -   -   -   -   -   -   o
Net::SMTP#rcptto_list            -   -   -   -   -   -   -   o
Net::SMTP#read_timeout           o   o   o   o   o   o   o   o
Net::SMTP#read_timeout=          o   o   o   o   o   o   o   o
Net::SMTP#ready                  o   o   o   o   o   o   o   o
Net::SMTP#send_mail              o   o   o   o   o   o   o   o
Net::SMTP#send_message           o   o   o   o   o   o   o   o
Net::SMTP#sendmail               o   o   o   o   o   o   o   o
Net::SMTP#set_debug_output       o   o   o   o   o   o   o   o
Net::SMTP#start                  o   o   o   o   o   o   o   o
Net::SMTP#started?               o   o   o   o   o   o   o   o
Net::SMTP#starttls               -   -   -   -   -   -   -   o
Net::SMTP#use_ssl?               -   -   -   -   -   -   -   o
Net::SMTP#use_tls?               -   -   -   -   -   -   -   o
Net::SMTP::Revision              o   o   o   o   o   o   o   o

bc-methods --diff (いまオプションつくった) で足りないエントリを確認。

~/c/rubydoc/refm/api % bc-methods -rnet/smtp --diff=src/net/smtp.rd  Net::SMTP
-Net::SMTP#auth_cram_md5
-Net::SMTP#auth_login
-Net::SMTP#auth_plain
-Net::SMTP#authenticate
-Net::SMTP#disable_ssl
-Net::SMTP#disable_tls
-Net::SMTP#enable_ssl
-Net::SMTP#enable_tls
以下略

がんばって編集

~/c/rubydoc/refm/api % vi src/net/smtp.rd

もいっかい bc-methods --diff

~/c/rubydoc/refm/api % bc-methods -rnet/smtp --diff=src/net/smtp.rd  Net::SMTP
+Net::SMTP.new

ぜんぶエントリが書けた。new は継承してるメソッドだから増えてても OK。

ASSIGN ファイルの status を done にする

~/c/rubydoc/refm/api % vi ASSIGN
~/c/rubydoc/refm/api % grep aamine ASSIGN
_builtin/Struct__Tms            aamine          done
fileutils                       aamine
net/http                        aamine
net/https                       aamine
net/pop                         aamine          done
net/smtp                        aamine          done    ←これな
ping                            aamine          done

こみっと

~/c/rubydoc/refm/api % svn ci -m 'net/smtp done' src/net/smtp.rd ASSIGN

(完)

ちなみに、文法エラーとかがあると cron で回してるビルドスクリプトから ruby-reference-manual-diff ML にエラーメールが飛ぶので、あせってなおす。

(19:31)


2006-12-07

グラコロ同盟

おやつにグラコロセットを食べてきた。 何気に毎年一個は食べている隠れ同盟員なのだ。

(00:49)


2006-12-11

レポート

朝っぱらから宗教社会学II のレポートを書く。 おれもいろんなレポートを書いてきたけど、 ここまであからさまにやっつけとわかるレポートは久しぶりである。 もういいや D で

(06:31)

グラコロ同盟

昨日の夕食にチーズグラコロセット。 寒風ふきすさぶ公園でこごえながら食べた。

(06:32)

暖房の季節

寒くなってきたので AlphaServer DS20E を動かすことにする。

まだ寒い。うーん次はどうすっかな

(06:52)


2006-12-16

『Write Great Code vol.2』

『Write Great Code vol.2』が届いた。 結局 Amazon を使ってしまうあたりが弱い。

中身は半分くらいしか読んでないけど、おもしろいな。 いま書いてる本と内容が近いせいかも。

「高級言語のコードがどうコンパイルされるか見ていく」 という方針の本は他にも意外とある。 『高級言語プログラマのためのアセンブラ入門』とか 『プログラミングの力を生み出す本』とか。 そのへんとこの本が違うところは、以下の三点だろう。

  • x86 以外のアセンブリ言語 (PowerPC) も大々的に紹介しており、 しかも複数学ぶことを積極的に推奨している
  • Windows と Linux の両方を想定している
  • 厚い (= 細かく、深く書いてある)

この三点から、複数のプラットフォームや言語を 苦もなくスイッチできる人 (== 必然的に上級者) 向けだなーという感じを受ける。 おれ的にはこの本が一番好みだ。

ただ、最初のほうではさんざん速度が速度がって言ってるけど、 本文はそれほど速度にこだわってるようには見えないんだよな。 なんだかんだ言ってありがちな結論に落ち着いているように見える。 少なくとも、RISC CPU でパイプラインスケジューリングとかやって ガリガリ高速化するぜ、という話ではない。 まあ、最初に大風呂敷広げすぎてたたみきれなくなることは 俺も覚えがあるので、あまりこの点は深くつっこまないでおく。

それから、"The Art of Assembly Language" でも使ってた HLA とかいう高級アセンブラを使ってるんだけど、 これはイマイチな選択だと思うんだよなあ。 学生にとってとっつきやすくなるとかなんとか書いてるけど、 本当にとっつきやすいか? これが? 微妙に似てるくせに違う言語が増えるのってめんどくさくね? ただでさえ GNU as と nasm で mov の向きが違って面倒なのに、 これ以上微妙な違いを増やさないでほしい。 俺は "The Art of..." も持ってるけど、HLA のせいで読む気なくなったんだよな。 GNU as でも nasm でもいいから、素直にアセンブラをそのまま使ってくれ。

あるいはせめて、コードリストの上に「何のコードなのか」を明示しておけば もうちょい混乱は減ったんじゃないのかな。このへんは編集の責任か。 これは自戒を込めて言うんだけど、著者とか翻訳者のような立場だと、 あるコードリストが何の言語で書いてあるかってのは意外とすぐわかるんだよね。 でも読者にはわかんない。 そのような差ができてしまうのは、コードに対するコンテキストの量が段違いだからだ。 特に俺みたいに大雑把なやつは 目次とか索引から用語だけで飛んでいくような読みかたをしているので、 突然コードリストが出てくると、いったいこれはどういうリストなんだろう……? と悩むことになってしまう。

それと、インストラクションのリファレンスは付けてほしかった。 アセンブリ出力の diff をえんえん載せるページがあるなら、 そのぶんをリファレンスにまわすべきだ。 オンラインリファレンスを引きながらじゃないと読めないってのはきつい。

ところで、どうでもいいことだけど、 p.210 のページ上端の見出しが「ブール論理とデジタル設計」になってる。 いったい何がどうしてこうなったんだろう。

えーっと、こんな感想だとメタクソに言っているように見えるかもしれないけど、 実際はそんなことはなく。そもそも、このクソ厚い本を届いた日に半分読むくらいだから、 個人的にはとても面白かったということだろう。

(16:22)


2006-12-20

キーボード壊れた?

とつぜんメインマシンのキーボードがきかなくなった。 例の、テンキーぶったぎり改造してあるやつが。 抜き挿ししても再起動しても KVM スイッチをリセットしてもダメ。 他のキーボードだとつながるということは、これは壊れたかな。 そろそろ 9 年目だし、壊れてもおかしくはない。

うう、この適当なキータッチが気にいっていたのになあ。 同じキーボードをもう一枚くらい買っとくべきだった。 それにしたってテンキーはまた改造しないと邪魔だしなあ。ああーめんどくせー。

それに、どのキーボードを買ったらいいんだろ。 最近のナチュラルキーボードって、 クソ邪魔くさい、なんたらボタンがてんこもりなんだよな。 うざすぎる。

(09:09)

本日のツッコミ (全7件)

なかむら(う) [実は、同じキーボードを持ってて、余ってたりするんだけど...]

zunda [HHK!高いけど!]

青木 [ガーン。ちょうど今日買ってきてしまった……。
Microsoft の wireless optical desktop pro (長い)。]

青木 [えー、HHK は小さすぎですよ。
あれ打ってると肩がこって……。]

HHK信者zunda [あれー。それぞれのキーの大きさは普通のものと一緒なんだけどなぁ…。]

青木 [根本的にキーが左右に分かれてないとだめなのですよ。
一回ナチュラルキーボードに慣れちゃうと普通のは無理です。
ノートはしょうがないんで我慢しますけど。]

zunda [なるほどー。確かにアレに比べると普通のは小さいですね。]


2006-12-21

キーボードを買った

ということで買ってきた Microsoft Wireless Optical Desktop Pro。opticalってなんだ。ふーむ。「眼の、視覚の、可視の、光学上の」らしい。ますます謎だ。ん、そうか、もしかして光学マウスのことを言ってるのか?

余計なものも買ってきた (1)

秋葉原ヨドバシでキーボードを買ったついでにサンワサプライの「液晶用ウェットティッシュクリーナー」なるものを買ってきた。いつもウェブ見ながらごはん食べたりしてるので、どうしても汁が飛んだりするんだよね。そのたびにビクビクしながらティッシュでふくんだけど、いまいちきれいにならなくて困ってたんだ。

余計なものも買ってきた (2)

秋葉原ヨドバシでキーボードと液晶ふきを買ったついでに、ついうっかり Ys origin も買ってしまった。どうも今日発売らしくて、そこらじゅうでデモってたのね。そんで音楽聞いてたらフラフラと。もうだめだ。「空の軌跡」のせいで完璧に Falcom 信者と化してる。いまのおれでは Falcom が作ったというだけで何でも買ってしまいそうだ。ていうか Falcom は早く英雄伝説 VII を出してくださいおながいします。

それにしても、こんなもん買って、いつやる気なんだ俺は……。


2006-12-22

Microsoft Wireless Optical Desktop Pro

本当に長いよこの名前。特徴を全部名詞で並べとけばいいと思ってないか?

で、いま KVM スイッチ (CPU 切り替え器) 経由で AMD64 な Linux につないでるんだけど、 何事もなく使えてしまっているな。 もっとも、打ち込んでから文字が表示されるまでに微妙なズレを感じる。 無線のオーバーヘッドじゃなかろうか。 ま、これくらいならシリアルコンソールからログインしてると思えばいいか。 そのうち慣れるだろう。

無線通信にも注意が必要っぽい。 モニタの左奥に置いておくとキーボードの通信が途切れることがある。 右まで持っていったら大丈夫になった。 キーボードの通信部が右にあるのかもしれない。

それから、これはしょうがないことだが、 「変換」と「カタひら」キーのキーコードが前のキーボードと違うらしくて 右 ALT になってない。まあ、これは調べて変換すれば済む話。

……あ、そうか。 「変換」と「カタひら」キーはもともと ALT にしてなかった。 元のキーボードだとスペースの上に押し込められてたんだ。 それで最下段があんなにすっきりしてたんだな。 つくづく 109 配列って糞だよな。 無変換だのカタひらだの残しといて、誰が喜ぶんだよ。 いや、だからって 104 キーが好きなわけでもないというところが俺の変なところだが。 あくまで 106 から無変換とかを抜いたやつがいいんだよな。

そしてこのキーボードで地味に最低なのが、 「6」の位置が右から左に移動してること。 左右がキッパリ分かれてるナチュラルキーボードでこの変更は辛い。 ここまでも「6」と打とうとするたびにキーのない場所を強打してしまった。

マウス。どこの設定が悪いのか知らないが、反応がよすぎるな。 xset でちょっと遅くしとこう。 あと、ホイールの反応が「ぬるぬる」している。 ホイールのクリックがめっちゃ固い。

そんなわけであまり気に入っていないキーボードだが、 それでもこれ以外にもう選択肢がないというところが本当に最低だ。 市場原理万歳。

(19:03)

Microsoft Wireless Optical Desktop Pro (2)

無変換、変換、カタひら、Win, App をぜんぶ左 ALT に置き換え。 X のキーコードの調べかたなんてすっかり忘れてたけど、 xev というコマンドがあったね、そういえば。

keycode 115 = Meta_L
keycode 116 = Meta_L
keycode 120 = Meta_L
keycode 129 = Meta_L
keycode 131 = Meta_L

ちなみに CapsLock は左 Ctrl にしてしまう。 役立たずのキーどもはみんな死んでしまえ。

Linux 端末のほうは……まあいいかあっちは。

(19:23)

Microsoft Wireless Optical Desktop Pro (3)

マウスが重い。なんか知らんが重い。

ホイールも重い。そして固い。

コードがないのは思いのほかいいものだ。からまる心配をしなくていい。 ただし受信機のコードはやっぱり目障りだ。

やはりマウスを使っているとキーボードのテンキーが邪魔くさい。 また前回と同じようにぶったぎりたい衝動にかられるが、 無線受信機がテンキー前部に配置されてたりすると泣くに泣けない。 あと、テンキーを切るとゴム足がいっしょになくなってしまうのも困る。 なんかいい方法はないかな。

まあ、あれだ。とりあえず開けるか。

(19:40)

Microsoft Wireless Optical Desktop Pro (4)

試してみたら、あっさりテンキー部分を切除できそうな目途がたった。 内部は全部プラスチックだから、鉄板が入ってた前回に比れば作業は楽そうだ。 強度がちょっと心配だけど、なんとかなるか?

あとは道具か。プラスチックカッターくらいは買っておきたいところだな。 100 円カッターと精密ノコギリだけではさすがに無理そう。

しばらく使ってみて、不満エネルギーがたまったところで作業しよう。

(20:07)


2006-12-23

RHG 読書会

うはー、また寝過ごした。 いまからダッシュで行く。

(14:04)

なんとか Pro

マウスの接続が切れまくってるようだ。 移動したのは伝わってるのにクリックが伝わってない。

再接続したら直ったような気がする。 24h つけっぱなしなんて想定してないのかな。 ちくちょうめんどくせえぞ無線。

(14:10)


2006-12-25

日本 Ruby のリファレンスマニュアル 2007

いやー、まずい、まずいなこれは。 予定通り進まないだろうとは思ってたけど、 やっぱり 12 月いっぱいでは第二段階が終わらなそうだ。 この段階って退屈だしなあ。 やっぱ文章書きたいよな文章。

(23:44)

日本 Ruby のリファレンスマニュアル 2007 (2)

えーと進行状況は 70% くらい?

~ % ruby c/bitclust/tools/statrefm.rb c/rubydoc
--- Status
157/226 files done (69.47%)
 
--- Ranking by number of files
 1   96 sheepman
 2   69 (not yet)
 3   31 okkez
 4   11 date
 5   10 iwadon
 6    5 aamine
 7    2 tadf
 8    1 kimuraw
 9    1 moriq
 
--- Ranking by Kbytes
 1  423 sheepman
 2  200 (not yet)
 3  180 okkez
 4   37 date
 5   32 aamine
 6   30 iwadon
 7   13 kimuraw
 8    2 moriq
 9    2 tadf

あ、でも思ったよりは進んでるんだなあ。 まあほとんど sheepman さんと okkez さんによるわけですが。 俺ももうちょっとなんとかしよ。

俺はついつい文章まで一緒にいじっちゃうから進まないし 面倒くさくなるんだよねー。わかっちゃいるのだが。

(23:48)

日本 Ruby の以下略 (3)

しかし残りのファイルは約 70 だ。 仮に 5 人がフル稼働したとすると、1 人 14 ファイル。 今年は今日を入れてよければあと 7 日あるので、 1 日 2 ファイルやればよいことになるな。

……こういう計算をしてると、 なんか夏休みの宿題をやるみたいなデジャヴ感がただよいますな。 他にも「原稿を 1 日何ページやれば……」とか。

(00:09)

カードリーダー壊れた

今度はデジカメのカードリーダーが壊れた…… orz

静電気か!? 静電気がいかんのか?!!

(00:56)

なんたら Pro (6)

写真を入れてみた。

▼新旧キーボード比較の図

やはりテンキーが邪魔だ。 Firefox とか使うときにどうしても PageUp/PageDown を使いたいんだけど、 それがうまく見付けられない。 前のテンキーなしキーボードではキーボードの右端 == PageUp/PageDown だったんだけど、 いまはテンキーがあるからな。

また、十字キーを中心に寄せるために右 Ctrl が妙に左にあり、 とても押しにくい。ウザい。 こんなことするくらいならテンキーの幅を減らしやがれ。

そしてやっぱり「6」のキーが移動してるのが最低だ。 さっきコマンド打ってて、 「6」が打てなくなると「^」まで打てなくなることに気付いた (基本は 101 配列であるため、Shift + 「6」は「^」である)。 本当に最低だ。おかげで grep しにくくてしょうがない。

▼コードレスマウス

マウスホイールのクリックが妙に固いと思ったら、 俺の押しかたが合ってないようだ。 俺はホイールの後ろ側を前に押し出すように押すんだけど、 このマウスはその逆に、前から後ろに向かって押さなきゃいけないらしい。 全体的にもっと前を持てってことか。 あるいは、もっと手の大きい人間を想定しているのかもしれない。 とにかく俺のマウスの持ちかたとは非常に合わない。

マウスの右親指を当てるところがぐにーっとへこんでて、 親指と人差し指でつまむように持てるのはちょっといい感じ。

▼話には全然出てこない無線受信部。見ためがスイカの種っぽい

(01:19)

漢文とキャベツについて

高校のときの漢文の先生はボケてるんじゃないかというのがもっぱらの噂であった。 なにしろ一学期に 10 ページしか進まないし、 授業中に突然キャベツの千切りのしかたについてレクチャーを始めるし。 あるいはうちの学年には問題児が多かったので、ストレスがたまっていたのかもしれない。

……てなことを、キャベツの千切りをしているといつも思い出してしまう。

……と日記に書こうと思いながら夕食作ってたら、 キャベツごと皿が落ちた。不幸だ。

(02:46)


2006-12-26

日本 Ruby のリファレンスマニュアル 2007 (4)

進行状況をよくよく見てみる。 なんか意外と例外クラスとかが多いんだが、 残る大物はと言うと、dl, soap, tk, wsdl, xsd ……って、大物すぎだろこれは。

(06:05)

CVS → Subversion

実はちょっと前から Subversion に乗り換えてたりする。 ついに世の趨勢に負けました。 TMail とか Racc とか、メンテする気のあるやつはすでにすべてコンバート済み。

http://i.loveruby.net/svn/public/

こうなると、BitChannel も Subversion に乗り換えざるをえないよなあ……。

(08:35)

本日のツッコミ (全1件)

ただただし [>BitChannel も Subversion に乗り換えざるをえないよなあ
期待age。]


2006-12-30

日本 Ruby のリファレンスマニュアル 2006 歳末セール

組み込みライブラリが終わって 85.15% 完了。 残りはこんなもん (すでに割り当てられてるものも含む)。

  • cgi
  • cgi/session
  • dl/struct
  • dl/types
  • dl/win32
  • irb
  • net/ftp
  • net/ftptls
  • net/http
  • net/https
  • net/imap
  • net/telnet
  • net/telnets
  • profiler
  • rexml
  • ripper
  • rss
  • sdbm
  • soap
  • test/unit
  • tk
  • win32/registry
  • win32/resolv
  • win32ole
  • wsdl
  • xmlrpc
  • xsd
  • yaml
  • yaml/store
  • zlib

……なんかデカいやつばっかりだし。 しかもこれでまだ中身は書き始めてないってんだから嫌になるね。

(09:32)

はかどる

締め切り前ゆえ、とてもはかどる。洗濯が。

(12:59)


2006-12-31

そうだコンパイラ作ろう (n+1)

水面下でコーディングが続いている cflat コンパイラ (プロトタイプ Ruby 版)。 いつの間にかポインタが使えるようになった。

~/c/cflat/test % cat pointer.cb
int
main(int argc, char **argv)
{
    int i;
    int *ptr;
 
    ptr = &i;
    *ptr = 5;
    printf("%d;%x\n", i, *ptr);
    return 0;
}
~/c/cflat/test % rm -f pointer
~/c/cflat/test % make pointer
ruby -I../lib ../bin/cbc pointer.cb
~/c/cflat/test % ./pointer
5;5

いまだにレジスタアロケーションを真面目にやっていないので、 アセンブリのコードがかなり笑える。

(07:01)

Linux → Tru64UNIX の scp

なーんか以前から Tru64UNIX のマシンに scp できなくて困ってたんだけど、 ようやく原因が判明した。 Tru64UNIX は商用 SSH (SSH2) が入ってるので、 OpenSSH な Linux とは scp の互換性がないらしい。

しょうがないので、次のように ssh コマンドを使って代用する。

% tar cf - ruby-1.8.?.tar.gz | (ssh tunami "cd /usr/users/aamine; tar xf -")

(12:52)

ネストした rescue から retry

なんかすげー笹田さんが嫌がりそうなところを突いてしまった。 ネストしてる rescue の内側の、rescue に入る前で retry するとエラーになる。

~ % cat t
ret = false
begin
  puts 'outer rescue'
  exit if ret
  begin
    puts 'inner rescue'
    exit if ret
    ret = true
    retry
  rescue
  end
rescue
end
 
~ % ruby t
outer rescue
inner rescue
t:13: retry outside of rescue clause

元のコードはこんなの。

when link?
  begin
    File.symlink linkname(), path()
  rescue Errno::EEXIST
    begin
      File.unlink path()
      retry  ← ファイルをunlinkできたら改めてシンボリックリンクを作る
    rescue SystemCallError
    end
  end

うーむ、これは ruby-dev に投げるべきかどうか、微妙だ。 簡単に回避できるしな。

(15:42)

本日のツッコミ (全6件)

ささだ [これって仕様どおりじゃないの?]

青木 [その仕様を変えたほうがいいんじゃないか、
と提案したほうがいいような、しなくてもいいような、
微妙なところだなあということ。]

ささだ [あー、やっと問題がわかった。うーん、確かに悩ましい。]

ささだ [あれ、サンプルコード間違ってない? だから勘違いしたんだ。

begin
(p :exit; exit) if (count += 1) > 1
raise
rescue
p count
begin
p :retry
retry
rescue
end
end

は1.8.5でもYARVでも動くよ。]

ささだ [count = 0 忘れた。]

青木 [げ、本当だ。テストスクリプトが間違ってただけか!
これは恥ずい。しつれいしますた。]


<前月 | 最新 | 次月>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|