Just another Ruby porter,

〜2006年6月上旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2006-06-01 (Thu)

5月のspam

558通。Gmail側約5000スレッド。微妙に増えた。 なんか最近Gmailのspam判定が甘いような。日本語のspamが目立つ。


2006-06-02 (Fri)

[Vim] Vimでバイナリファイルを編集

Vimでバイナリファイルを編集するにはいくつか方法がある。

:help edit-binaryすると-bオプションかset binaryせよとある。 set display=uhexとすれば表示できない文字も16進数で表示される。

<Nul> characters are shown on the screen as ^You can enter them with "CTRL-V CTRL-or "CTRL-V 000" {Vi cannot handle <Nul> characters in the file}

コードはCTRL-V x0fとかすれば16進数でも入力できる。 いちいちCTRL-Vって打つのが面倒であるが。

そこで真打。:help xxdを参照。

If one has a particular extension that one uses for binary files (such as exe, bin, etc), you may find it helpful to automate the process with the following bit of autocmds for your <.vimrc>. Change that "*.bin" to whatever comma-separated list of extension(s) you find yourself wanting to edit: >

とあって、以下を.vimrcへ追加しろとある。

" vim -b : edit binary using xxd-format!
augroup Binary
  au!
  au BufReadPre  *.bin let &bin=1
  au BufReadPost *.bin if &bin | %!xxd 
  au BufReadPost *.bin set ft=xxd | endif
  au BufWritePre *.bin if &bin | %!xxd -r
  au BufWritePre *.bin endif
  au BufWritePost *.bin if &bin | %!xxd
  au BufWritePost *.bin set nomod | endif
augroup END

すばらしい。これで*.binという拡張子にしとけば16進ダンプ形式で編集できる。 ただxxdコマンドは2バイト単位がデフォルトなので

% echo hoge |xxd
0000000: 686f 6765 0a                             hoge.

となってしまう。やっぱ1バイト単位のほうがわかりやすいので

" vim -b : edit binary using xxd-format!
augroup Binary
  au!
  au BufReadPre  *.bin let &bin=1
  au BufReadPost *.bin if &bin | silent %!xxd -g 1
  au BufReadPost *.bin set ft=xxd | endif
  au BufWritePre *.bin if &bin | %!xxd -r
  au BufWritePre *.bin endif
  au BufWritePost *.bin if &bin | silent %!xxd -g 1
  au BufWritePost *.bin set nomod | endif
augroup END

のようにxxdコマンドの実行に-g 1を追加。

% echo hoge |xxd -g 1
0000000: 68 6f 67 65 0a                                   hoge.

こんな感じになる。 silentは「続けるにはENTERを押すかコマンドを入力してください」 というメッセージで止まるのを抑止。 右側のアスキー文字列を編集しても無効なので注意。


2006-06-03 (Sat)

[TV] 白銀比

なんだか怪しい番組で1:√2を白銀比と呼ぶと言ってた。 個人的には黄金比より白銀比のほうが美しく感じる。


2006-06-04 (Sun)

[freshmeat] spamになってたfreshmeatのNewsletter

今日来たfreshmeatがなんか新鮮な気分なのでなぜかと思ったら、 ここ1週間ほど来てないことに気づいた。 Gmailにてin:spam freshmeatで検索したらわらわらと1週間分が出てきた。 ここで食われてたか。しかしなぜ急に?

[Firefox] FootieFox

W杯に備えて FootieFoxを入れた。 いつでも来い。

Key Features


2006-06-05 (Mon)

[Vim] Vim6とVim7の:a,:i時のautoindentの挙動の違い

Vimでinsert modeで貼りつけると、たとえばRuby modeだったりすると、 階段状になったり余計に深いindentになったりで非常にうっとうしいことになることがしばしば。 そこで:a,:iして貼りつけて"."で終了という有名な技がある。 でもVim7だとinsert modeと同じ挙動になってしまっているようで、どうしたもんだか。

gvimだったらふつうに貼りつければいいようだ。 gvimってあまり使わないしなあ。


2006-06-06 (Tue)

[Vim] autoindentをやめてみる

昔々の名残りでずーっと~/.vimrcでset aiしてたけど、 やめてもちゃんとautoindentだったりするのはなぜ? filetypeとかsyntaxで決まるもんなのかな。

というわけで、 昨日の問題は解決。


2006-06-07 (Wed)

[C] Cの+と<<の優先順位

今日はちょっとはまった。Cで

x = 1 << 8 + 1;

とやるとxは0x0101になると思っていた。でも実際は0x0200になる。つまり

x = (1 << 8) + 1;

ではなく

x = 1 << (8 + 1);

ということだ。<<よりも+のほうが優先順位が高い。 ここは

x = 1 << 8 | 1;

と+ではなく|を使えば思った通りになる。逆に+を使いたければ

x = 1 * 256 + 1;

とすればいい。

ビット演算と算術演算を混ぜるな危険ってことで。


2006-06-08 (Thu)

[Ruby] unpackのテンプレート文字列X

1バイト整数と3バイト整数(ビッグエンディアン)というバイナリデータがあって、それをRubyでどうやって読むかというのが今日のお題。 1バイトのほうは種別みたいなもので、3バイトのほうはそのあとの続くデータのサイズと思ってくれればいい。 素直に書くと

type, *s = data.unpack("C4")
size = s[0] << 16 | s[1] << 8 | s[0]

という感じになるというか、実は 昨日の話はこれをCで書いていたわけなんだけど、 RubyでもPerlでもやはりCと同じ優先順位なんだね。 それはそれとして、sという一時変数がなんか無駄なのでなくしたい。 Nを使えばいいか。

size = data.unpack("N")
type = size >> 24
size &= 0xffffff

てな感じで。あ、Xで戻るのもありだな。もうちょっと工夫してみる。

type, size = data.unpack("CXN")
size &= 0xffffff

Xなんて何に使うんだと思っていたけど、意外にも役に立つことがあるもんだ。


2006-06-09 (Fri)

[PC] マウス

マウスのホイールの調子が悪い。回しても回してもスクロールが進まない。 進まないというかむしろ戻る。やはり安物だけあってへたれるのも早い?


2006-06-10 (Sat)

[Ruby] 日本 Ruby カンファレンス 2006

暑い。そして akrさんの発表 に感動した。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!