2008-01-27
■ puttyのemacsにコピペ

g:subtech:id:clouder:20080116:1200466044で書いた件。
id:k12uさんに教えてもらったように設定したらできました。
文字コードの設定は下記です。
terminal-coding-systemは設定してたけど
keyboard-coding-systemは設定してなかったのでそれを指定したらできました。
ちなみにemacsのバージョンはGNU Emacs 22.1.1 (i686-pc-linux-gnu)です。
(utf-translate-cjk-mode t)
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(utf-translate-cjk-set-unicode-range
'((#x00a2 . #x00a3) ; ¢, £
(#x00a7 . #x00a8) ; §, ¨
(#x00ac . #x00ac) ; ¬
(#x00b0 . #x00b1) ; °, ±
(#x00b4 . #x00b4) ; ´
(#x00b6 . #x00b6) ; ¶
(#x00d7 . #x00d7) ; ×
(#X00f7 . #x00f7) ; ÷
(#x0370 . #x03ff) ; Greek and Coptic
(#x0400 . #x04FF) ; Cyrillic
(#x2000 . #x206F) ; General Punctuation
(#x2100 . #x214F) ; Letterlike Symbols
(#x2190 . #x21FF) ; Arrows
(#x2200 . #x22FF) ; Mathematical Operators
(#x2300 . #x23FF) ; Miscellaneous Technical
(#x2500 . #x257F) ; Box Drawing
(#x25A0 . #x25FF) ; Geometric Shapes
(#x2600 . #x26FF) ; Miscellaneous Symbols
(#x2e80 . #xd7a3) (#xff00 . #xffef)))
2008-01-16
■ あけましておめでたまきん

ことしもよろしくん
■ id:tokuhiromのshipit講座

15:36:24 tokuhirom: 誰かのプロジェクトから /lang/perl/Geo-Coordinates-Converter/trunk/.shipit から自分とこにコピってきて 15:36:31 tokuhirom: sudo -H cpan ShipIt して 15:36:36 tokuhirom: あとは shipit コマンドうつだ
よくわかった。
2007-12-15
2007-11-18
■ Digest::SHA1をOO的に使うときの罠

livedoor Authの認証の時にHMACのsigunatureを生成するんだけど、その時に使うDigest::HMAC_SHA1をいじってたら、hexdigest()で1回目と2回目以降で値が違うことがわかった。
% /usr/local/bin/perl -MDigest::HMAC_SHA1 -e '$a = Digest::HMAC_SHA1->new("foo"); $a->add("bar"); warn $a->hexdigest; warn $a->hexdigest; warn $a->hexdigest; warn $a->hexdigest;'
46b4ec586117154dacd49d664e5d63fdc88efb51 at -e line 1.
a8705f3f1f3557cef3c0a2788fb1c79a20db1c01 at -e line 1.
a8705f3f1f3557cef3c0a2788fb1c79a20db1c01 at -e line 1.
a8705f3f1f3557cef3c0a2788fb1c79a20db1c01 at -e line 1.
1回目の値でlivedoor Authの認証は通るけど2回目以降の値だと通らない。
HMACってそういう仕様なのかな…?
でも、以下のようにreset()を呼ぶと同じ値になる。
% /usr/local/bin/perl -MDigest::HMAC_SHA1 -e '$a = Digest::HMAC_SHA1->new("foo"); $a->add("bar"); warn $a->hexdigest; $a->reset; $a->add("bar"); warn $a->hexdigest;'
46b4ec586117154dacd49d664e5d63fdc88efb51 at -e line 1.
46b4ec586117154dacd49d664e5d63fdc88efb51 at -e line 1.
ということで2回目になると何かが変わるんじゃないかという予想の元で、Digest::HMAC_SHA1の内部で呼ばれているDigest::SHA1のperldocを眺めていたら、digest()の説明のところで
Note that the "digest" operation is effectively a destructive,
read-once operation. Once it has been performed, the "Digest::SHA1"
object is automatically "reset" and can be used to calculate
another digest value. Call $sha1->clone->digest if you want to
calculate the digest without reseting the digest state.
という記述を見つけた。
なるほど、Digest::SHA1のdigest()は破壊的なもので1回呼ぶ用なのね。
1回でも呼ぶと自動でreset処理されるっぽい。
もしそれをしたくなければ、以下のようにclone()を呼んでインスタンスを別に保存しておいてねってことみたい。
% /usr/local/bin/perl -MDigest::SHA1 -e '$a = Digest::SHA1->new; $a->add("barbar"); $b = $a->clone; warn $a->hexdigest; warn $b->hexdigest;'
0f6c5d02114253073f6b80c7bbcbba27548715e8 at -e line 1.
0f6c5d02114253073f6b80c7bbcbba27548715e8 at -e line 1.
これを知らないでDigest::SHA1のインスタンスを使い回してたりするとえらいめにあいそうな予感がするね。
いつもOO的に使わないでdigest_sha1()を使ってたからこんなの気付かなかったよ。
masnhtpfozpb07C5 <a href="http://axxackimhsbn.com/">axxackimhsbn</a>, [url=http://eqvzvtgnvzgx.com/]eqvzvtgnvzgx[/url], [link=http://husdnkewcytn.com/]husdnkewcytn[/link], http://egldctphmlhd.com/
ちょと試してみます。