2011-01-29

[perl] pack, unpack で 16進文字列を扱うメモ

Perl の中でも関数 pack / unpack が Perl 的でとっつきにくい所だと思うので書いてみました。Ruby, PHP にも同様な関数があるようです。

関数名の覚え方は、pack: バイナリ列に pack する。unpack: バイナリ列を unpack する (文字列・数値など元のデータに戻す)。

16進数文字列を扱うときはフォーマットで必ず 'H' の方を使う。

unpack('H*', "\xF1\xE2")  # f1e2
unpack('h*', "\xF1\xE2")  # 1f2e (low nibble first 形式: ほとんどの人に必要なし)

# 繰り返し数の数え方にも注意:バイト単位ではなく[0-9a-f]の文字単位
unpack('H2', "\xF1\xE2")  # f1
unpack('H3', "\xF1\xE2")  # f1e

# 16進数文字列をpackするとバイナリになる
# 'C'は符号無し8bit整数。1バイトで収まるのでエンディアンの区別なし。
unpack('C', pack('H*', '10')) # 16
unpack('C', pack('H*', 'ff')) # 255

数値を扱うときは、符号有り・符号無し・リトルエンディアン・ビッグエンディアンに注意。

公式ドキュメント
pack - perldoc.perl.org - 簡潔にまとまった関数ドキュメント
perlpacktut - 素晴らしく詳細なpack/unpackチュートリアル

日本語訳
pack - perldoc.jp
perlpacktut - perldoc.jp

[jquery] jQuery(html, props)が便利

今更ながらjQuery 1.4からの新機能のプロパティ指定つきDOMエレメント生成は、こんな風に使えて便利です。

$('<p />', {
    id: 'sample123',
    'class': 'sample-class',
    text: '内容はないよう(>_<)',
    css: {
        color: 'black',
        background: '#ccf'
    },
    click: function () {
        alert('clicked');
    }
}).appendTo('body');

解説
特別な意味を持つプロパティ、上記の場合 text, html, css, click以外のid, classはattrとして扱われます。
classは予約語なのでクオートが必要です。

この機能を使わないで書くなら:

$('<p />')
    .attr({
        id: 'sample123',
        'class': 'sample-class'
    })
    .text('内容はないよう(>_<)')
    .css({
        color: 'black',
        background: '#ccf'
    })
    .click(function () {
        alert('clicked');
    })
    .appendTo('body');

詳しくは..
jQuery() - jQuery API

2011-01-28

[Node.js] 文字コード変換を行うライブラリ

なるべくUnicodeの世界で完結させたいと思っていても、歴史的事情によりShift_JIS、EUC-JP、ISO-2022-JPをUTF-8に変換したいなどの状況はまだたまにあると思います。しかし、Node.js本体ではそういう汚いところには関わらないポリシーの様で、encodingとしてUTF-8, UTF-16などしか扱えません。

そこでiconvをNode.jsから使えるようにしたnode-iconvを紹介します。親切なことにリポジトリ内にiconvが同梱されているので簡単にコンパイルでき、これで好きなだけUnicode化を進め、node.jsを布教することができます。

残念なお知らせ:文字コード推測機能は付いていません。

参考
bnoordhuis/node-iconv
nodejs - iconv wrapper?
nodejs - ndoe.js is Shift_JIS Encoding Support?

[blogger] Bloggerで公開した記事の取り下げ手順

Googleのインフラで安定して配信してくれる素晴らしいブログサービス Bloggerで、いったん公開した記事を少しひっこめるには、公開した記事の「投稿を編集」から、「下書きとして保存」を押すと、公開状態から下書き状態に戻り、公開待ちの状態に戻すことができます。

この方法を使うとウェブ上では公開されなくなりますが、Google ReaderなどのRSSリーダーには残るので、それも一掃するには、空の記事で上書きするよう、いったん内容を削除して「投稿を公開」を押し、数分後(BloggerはPubSubHubbub Publisherなので更新が早い)に「下書きとして保存」で非公開にすると良いと思います。

2011-01-25

[wimax] WM3500RのWi-Fiがたまに動作しなくなる件について

価格コム経由でBIGLOBEのWiMAXに申し込んだのですが、このプランに付いてくるWM3500Rの無線LANの動作が若干怪しいことが気になりますが、回避策が分かりました。

2週間ほどのテストの結果、ファームウエアバージョン1.1.0で、自分の見た動作不具合が生じている状況は、

  1. ふと思い立って192.168.0.1の管理画面を開く
  2. 直後からWi-Fiが通じなくなり、SSIDのブロードキャストは継続したまま認証が失敗する
  3. USBでつなぐとDHCP、インターネット接続ともにOK
  4. USBでつないで192.168.0.1を開くと、だいぶ待たされたのち、見慣れない「処理中」のエラーページが開く
  5. 電源の入れなおしで復活

以上のような感じなので、管理画面関連のプログラムが何らかの理由で暴走して、CPUを食い尽くす(?)ような欠陥があるようで、設定変更後再起動した後は、気になっても一切管理画面を開かないようにしていると安定動作しています。

2011/02/02 0:12 追記
先ほど管理画面を開かなくてもこのWi-Fiが死ぬ現象が発生しました。相変わらずUSB経由では問題なくネットにつながり、管理画面では「処理中」が出ます。

2011-01-16

[facebook] 交際ステータスSingleの訳として独身は不適切

映画ソーシャル・ネットワーク作品中でも強調されていた、Facebookの注目すべき機能: 交際ステータスの日本語インターフェースにおける訳語「独身」は、それだけを見ると付き合っている人が居るか居ないかの状態が区別出来ていないので、不適切であると考えます。

映画を見てようやく理解したRelationship Statusの言わんとするところは、日本語圏での「付き合っている人いる?」の質問に対する答えをあらかじめプロフィールに明示する、ということだと思うので、

その訳語で唯一思いあたるのは、
A「付き合っている人いる?」
B「今はフリーだよ」
このBさんの言う「フリー」であって、未婚・既婚・離別・死別の状態を区別するような言葉:「独身」はおかしいと思います。

A「付き合っている人いる?」
B「今は独身だよ」
このような受け答えは今まで存在していないと想像します。

もっと説明的な表現でいくなら、「付き合っている人はいません」「交際中の人はいません」というのはいかがでしょうか。