2005-01-02 (Sun) [長年日記]
_ iBook購入
奥さん用のノートPCを買いにヤマダ電器に。Toshibaの安いノートを買うつもりが、すでに売り切れだったのでiBook(111,100円)を購入。
これ以上ハックする時間が減るとまずいので、あまり深入りしないように 気を付けよう。
2005-01-03 (Mon) [長年日記]
_ Uターン
無事に松江に戻る。
反対車線はずいぶんと混んでいたようだ。 こっちは京滋バイパスを使ったこともあって、渋滞知らず。 途中でけっこう雪を見たので、松江も積もっているのではないかと心配したが、ぜんぜん積もっていなかった。
2005-01-06 (Thu) [長年日記]
_ 仕事始め
今日から仕事始め。 休み明けはしんどいですねえ。
_ AssemblyBuilderAccess.SaveでSEGV
AssemblyBuilderAccess.RunAndSaveだと、type parameterがbindされたgeneric instanceをフィールドに持つTypeBuilderをCreateType()した時に エラーになるので、AssemblyBuilderAccess.Saveにしてみたら上手く行った。
ところがmake checkすると、他のテストコードのコンパイル時にSEGV。 うーん、わけがわからん。
2005-01-18 (Tue) [長年日記]
_ skippy
T君からexpocityというものもあると聞いたが、metacityへのパッチで、 しかもちょっと古そうだ。 もうちょっと探すと、skippyというものを発見。officialではないものの debもあるので試してみた。
<URL:http://www.debian.org.hk/~glee/deb/skippy/>
skippy-XDの方なら、ウィンドウの最新の状態を表示してくれるようだ*1が、Xサーバを入れかえないといけないのはちと面倒だ。
*1 ちなみにXDなしのskippyやkomposeはしてくれない
2005-01-20 (Thu) [長年日記]
_ 汚染状態の伝搬
分かってると思うけど、
汚染されている文字列や 汚染されている文字列を指しているオブジェクトから to_sとかinspectとかで生成される文字列は汚染される.
[雄也の?日坊主日記(2005-01-19)より引用]
というのは常に成り立つわけじゃないよね。
class Foo def initialize(s) @s = s end end f = Foo.new("abc".taint) s = f.to_s p s #=> "#<Foo:0xb7d5a778>" p s.tainted? #=> false s2 = f.inspect p s2 #=> "#<Foo:0xb7d5a778 @s=\"abc\">" p s2.tainted? #=> true
重要なのは、fが「汚染されている文字列を指している」かどうかではなくて、 to_sやinspectが汚染されている文字列を使うかどうか。 上の例だと、to_sには@sの値はまったく使用されないので、汚染が伝搬しない (する必要がない)。
2005-01-21 (Fri) [長年日記]
_ fixed typo
ひさびさにcommit。 ChangeLogに、
fixed typo. fixed: [ruby-list:40546]
と書こうとしたら、
fixed typo. fixed: [ruby-lis:40546]
と書いてしまった。
もう一度直したけど、今度はだいじょうぶだよな。
2005-01-23 (Sun) [長年日記]
_ uim-primeで入力できず
apt-get dist-upgradeすると、uim-primeで入力できなくなってしまった。 どうも、.uimでESCを押した時に英数モードにするようにしていた せいのようだ。
とりあえず、ESCを押した時に英数モードにするだけなら以下でいいみたい。
(define prime-push-key-orig prime-push-key) (set! prime-push-key (lambda (c key key-state) (if (or (= key 'escape) (and (= key 91) ;; [ (= key-state 2))) ;; control (prime-mode-set c prime-mode-latin)) (prime-push-key-orig c key key-state)))
本当はvim側でうまくコントロールできるといいんだろうけど、GTKまわりの コードがよくわからず。
2005-01-24 (Mon) [長年日記]
_ 087 複数の配列を並行処理する
今日はRuby講習会の講師。講習中にレシピブックの説明をしていて、
配列が非常に大きく、zipメソッドで配列を作る余地がない時は、Array#each_indexで繰り返します。
[Rubyレシピブック 268の技 p.150より引用]
という記述にはじめて気付いた。
よく読むと、レシピブックではArray#zipの戻り値に対してeachの 呼び出しを行っていて、
as.zip(bs) do |a, b| ... end
のようにArray#zip自体にブロックを与える方法は 説明されていない。 もしかして、1.8.0とかの古いバージョンではブロックを渡せなかった のかなと思って、1.8.0のソースを見てみたが、
if (rb_block_given_p()) { for (i=0; i<RARRAY(ary)->len; i++) { VALUE tmp = rb_ary_new2(argc+1); rb_ary_push(tmp, rb_ary_entry(ary, i)); for (j=0; j<argc; j++) { rb_ary_push(tmp, rb_ary_entry(argv[j], i)); } rb_yield(tmp); } return Qnil; }
のようになっていて、問題なさそうに見える。 cvs logで調べると、
revision 1.98 date: 2002/11/19 08:07:48; author: matz; state: Exp; lines: +44 -3 * array.c (rb_ary_zip): iterates over items in the receiver. zipped with nil if argument arrays are shorter. if arrays are longer, left items are ignored. now works with blocks
この変更らしいので、レシピブックの記述はそれよりも前に書かれたのかな?
2005-01-28 (Fri) [長年日記]
2005-01-29 (Sat) [長年日記]
_ 米国ドル小切手 - 私の処理方法
なんかGoogle AdSenseでUSドル建て小切手の換金が、手数料だなんだで面倒くさくて...という話を散見するので、お勧めというか私の場合のお話。
[MODULE.JP - 米国ドル小切手 - 私の処理方法より引用]
へえ、なるほど。
しかし、私の場合、当分お世話になりそうもない。
_ ハッカーと画家
オーム社の方にいただいた。 表紙がバベルの塔であることにどきっとする。
ちなみに、収録されているエッセイのうちのいくつかは Webで翻訳が読める ので、私のように本を買う余裕のない方はどうぞ。 とくに、技術野郎の復讐とそれに対する反論がおもしろいと思う。
と、思って今読み返したら、WebにはRuby版のコードがないのか。日本向けのサービス なのかな。ちなみに、こんなコード。
def foo(n) lambda { |i| n += i } end
多くのRubyハッカーを代弁して一言。「ありえねー」
_ 上司 [本当に役立つってんなら買えないこたあないでしょう。 ちゅーか、買えば。]
_ shugo [では、お願いしてみます:)]