Re: バイナリ・プログラミング、バイナリ・ハック ― 2006年12月28日 15時42分11秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
やっと暇ができたので、
http://iiyu.asablo.jp/blog/2006/12/22/1041912
バイナリ・プログラミング、バイナリ・ハック
のコメントにまとめて返事です。
笑われ者さん
>でもビット操作も低レベルかっていえばスクリプト言語でもサポートしているし微妙
リスト操作しかないと誤解している人が多いCommon Lispでも、ビット演算はありますからね。
生のマシンに近いという意味で低抽象度というほうがいいのかな。
紹介した
http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/showshotcorne-22/ref=nosim
ジュニア,ヘンリー・S. ウォーレン著, 滝沢徹, 赤池英夫, 藤波順久, 鈴木
貢, 葛毅, 玉井浩訳「ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか」
にあるコードの例も、ほとんどは、Cで書いてあります。
とんこうさん、
> アセンブラの勉強をする時にビット操作もやるはずです。
古市(takechi)さんのメール
--- ここから ---
さて、22日のhot corner、binary hackの話題のときに、「ホワイトマジック」
「ブラックマジック」として、例にXOR3連発を挙げていらっしゃいましたが、
その他にもこの手のネタは豊富にあるんでしょうか? こういうのを集めた書籍なんて面白そうだと思い、メール差し上げた次第です。
--- ここまで ---
「ハッカーのたのしみ」にあるのは、アセンブラの勉強ですぐわかる程度のビット操作じゃないんです。
どうして、こんなのを思いつくのか、実際に詳しい解説をされてコードをみてもなお、なんで動くんだろうと思うようなテクニックが満載。
和田先生やガイ・スティール・ジュニアが本書を絶賛というオビがついてますけど、目次がアマゾンの紹介にはないので、探したら、
http://www.bk1.co.jp/product/2482678/review/377386
にありますね。これで雰囲気をつかんでください。
ガイ・スティールは、アメリカの誇るベスト&ブライテストの一人。
Common Lispとともに広く使われているSchemeの設計・開発者の一人だし、Javaの設計者の一人でもあります。
Common Lispの仕様をまとめた人物でもあり、初代ハッカーズディスクショナリの編纂など、自分がハッカーであるだけではなく、ハッカーの仕事をまとめて後世に伝える重要な仕事もしてきた人。いまは、SunでFORTRANを葬り去る?新しい言語Fortressを研究しています。
http://research.sun.com/people/mybio.php?uid=25706
や
http://en.wikipedia.org/wiki/Fortress_programming_language
Fortress (programming language)
を参照。
和田英一先生は、いわずとしれた日本最初のハッカーであり、スーパーハッカー。昔のbitの別冊で日本の計算機の黎明期の話があって、和田先生は、自己書き換えコードのエディタなど作ったりしてたんですね。いまから50年前の当時の計算機って、パラメトロン計算機ですよ。何か知らない人は、勝手にググってください。
と思ってググったら、和田先生のウェブページに行きました。\(^O^)/
http://www.iijlab.net/~ew/index-j.html
にPC-1ってあるでしょ。それが東大で作ったパラメトロン計算機。1語が18ビットで、メモリがたったの512語。1語16ビットの現代に置き換えると、512語(word) = 1024バイト。そういう世界で和田先生はプログラミングをやってたわけですね。
いまの30歳以下の計算機屋やソフト屋は知らない世界だと思うけど、ひょっとして40歳以下でも知らないかな。おれも文献でしか知らないんだけど、
http://www.iijlab.net/~ew/pc1/pc1.1.pdf
はPC-1のハードウェアがどういうものがわかる解説。
昔の人はすごいね。何もないところからこういうもの作るんだもの。割りだしという言葉も懐かしいし、PC-1は世界初のマルチプログラミングをやった計算機だったかもしれないんですね。
俗にいうIT企業でPerlやRubyでCGIばかり作ってる人とか、ネットワークのお守りばかりやっててつまんない人は、こういうの読むとリフレッシュされるんじゃないかな。
「ないなら作る」。これと「何でも面白がる」。これがハッカーの精神で一番重要なことでしょうね。
あ、そうそう、ハッカーのためのキーボード。Happy Hacking Keyboardの設計も和田先生ですね。これもないなら自分で作るの精神ですね。
「ハッカーのたのしみ」にある和田先生の序文から少し。どういう本か雰囲気つかめるかな。
--- ここから ---
当時はもちろんマシン語であった。以下の例はC言語だが、例えばasciiコードの0から9、aからfを入力し、対応する16進数を出力する関数は、(0から9のコードは48から57、aからfのコードは97から102なので)常識的には、
c2n(x)
{ return x-(x&64?87:48); }
と書くであろう。しかし私は、
c2n(x)
{ return x%87%48; }
と書きたい。(%は剰余をとる演算)実はこういう精神が本書に漲(みなぎ)っているのである。
--- ここまで ---
以下、和田先生が本書で注目したテクニックの感想をいくつか述べてらっしゃるのですが、おれも知ってるのがあった。
--- ここから ---
32ビットの語が32個の32×32の行列がある。これを転置したビット列を作るには、n=0,1,2,3,4について、2^n×2^n(中村注:2^nは2のn乗の意味。本ではちゃんと2の右肩にnがある)の行列を要素とする2×2の行列を全ビット領域で絨毯爆撃よろしくそれぞれ転置する。ビットマップの回転もそうやったっけ。
[7-3節の項「32×32のビット行列の転置」]
--- ここまで ---
そうです。和田先生。ビットマップの回転もそうやるんです。この話、和田先生ご自身が、bitでいつかお書きになってたと思います。
ぼくがそれを知ったのは、もう廃刊になりましたがアメリカの有名なパソコン雑誌BYTEの中でも特別の価値をもつ「BYTE 1981年8月号」。この号は、Smalltalk大特集号だったんです。
SmalltalkはそれまでXeroxのPARC(パロアルト研究所)のベールに包まれていて、詳細がわからなかった。ところが、この号で世界にその全貌が公開されたんです。それで、世界中の研究者がこの号を入手したというほどの号です。
ぼくもこれが九大工学部情報工学科の学科図書館にあるのを知って、借りて読みました。
Smalltalkは、ハードソフト一体のマシンでしたから、ハードからソフトま
でいろんな記事が載っていたんですが、その中にSmalltalkマシンのビットマップディスプレイの解説記事がありました。そこにビットマップの回転の説明があり、そこでこのアルゴリズムの紹介があったんです。
記事には、ミッキーマウスのビットマップを左か右に90度回転させる連続写真があって、写真が載っていたこともあって、視覚的にもわかりやすく、途中ぐちゃぐちゃになったミッキーの絵が、最後はちゃんと横倒しになるので、すごい不思議なマジックをみせられた気になりました。
余談だけど、ビットマップ処理といえば、BitBlt(ビットブリット)という演
算を使います。Windowsにもあって、実装は、スタック上に処理コードを展開して、どの演算を使うかのコードを埋めて処理する自己書き換えコードだったと思います。スタック上にコードを展開するのは、昔と違って、プログラム領域の書き換えは、プロセッサとOSが監視していて禁止しているからで、スタックならそれが可能ということですね。
とんこうさん。
>XORを使ったものにグレイコードがありますね。交番コードとも言います。
本書にもグレイコードが出てきます。次の数になったときの変化が1ビットだけなので、センサの世界ではよく使われるんですってね。
http://www.i.h.kyoto-u.ac.jp/~tsuiki/bit/gray.html
立木秀樹「グレイコードと実数」
をみると、実数のグレイコード展開なんてのもあるんですね。
いやあ、ビットの世界は深いわ。
実は、本書「ハッカーのたのしみ」で一番、こいつらどういう頭しとるんじ
ゃと思ったのが、第12章の「数の表現のための一風変わった基数」。
-2進数なんてのが最初に出てきて、どういう世界だこれはと思うのですが、さらに驚くのは、-1+i進数の世界。つまり複素数進数の世界もあるんです。\(^O^)/
1940年にはベル研で、複素数計算器が作られていたのも驚くし、4進虚数なんてもあって、なんじゃそりゃ。そこらのハードSFよりすごいな。
「事実は小説よりワイキキなり」(Copyrigt (c) 中村正三郎)。\(^O^)/
---
やっと暇ができたので、
http://iiyu.asablo.jp/blog/2006/12/22/1041912
バイナリ・プログラミング、バイナリ・ハック
のコメントにまとめて返事です。
笑われ者さん
>でもビット操作も低レベルかっていえばスクリプト言語でもサポートしているし微妙
リスト操作しかないと誤解している人が多いCommon Lispでも、ビット演算はありますからね。
生のマシンに近いという意味で低抽象度というほうがいいのかな。
紹介した
http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/showshotcorne-22/ref=nosim
ジュニア,ヘンリー・S. ウォーレン著, 滝沢徹, 赤池英夫, 藤波順久, 鈴木
貢, 葛毅, 玉井浩訳「ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか」
にあるコードの例も、ほとんどは、Cで書いてあります。
とんこうさん、
> アセンブラの勉強をする時にビット操作もやるはずです。
古市(takechi)さんのメール
--- ここから ---
さて、22日のhot corner、binary hackの話題のときに、「ホワイトマジック」
「ブラックマジック」として、例にXOR3連発を挙げていらっしゃいましたが、
その他にもこの手のネタは豊富にあるんでしょうか? こういうのを集めた書籍なんて面白そうだと思い、メール差し上げた次第です。
--- ここまで ---
「ハッカーのたのしみ」にあるのは、アセンブラの勉強ですぐわかる程度のビット操作じゃないんです。
どうして、こんなのを思いつくのか、実際に詳しい解説をされてコードをみてもなお、なんで動くんだろうと思うようなテクニックが満載。
和田先生やガイ・スティール・ジュニアが本書を絶賛というオビがついてますけど、目次がアマゾンの紹介にはないので、探したら、
http://www.bk1.co.jp/product/2482678/review/377386
にありますね。これで雰囲気をつかんでください。
ガイ・スティールは、アメリカの誇るベスト&ブライテストの一人。
Common Lispとともに広く使われているSchemeの設計・開発者の一人だし、Javaの設計者の一人でもあります。
Common Lispの仕様をまとめた人物でもあり、初代ハッカーズディスクショナリの編纂など、自分がハッカーであるだけではなく、ハッカーの仕事をまとめて後世に伝える重要な仕事もしてきた人。いまは、SunでFORTRANを葬り去る?新しい言語Fortressを研究しています。
http://research.sun.com/people/mybio.php?uid=25706
や
http://en.wikipedia.org/wiki/Fortress_programming_language
Fortress (programming language)
を参照。
和田英一先生は、いわずとしれた日本最初のハッカーであり、スーパーハッカー。昔のbitの別冊で日本の計算機の黎明期の話があって、和田先生は、自己書き換えコードのエディタなど作ったりしてたんですね。いまから50年前の当時の計算機って、パラメトロン計算機ですよ。何か知らない人は、勝手にググってください。
と思ってググったら、和田先生のウェブページに行きました。\(^O^)/
http://www.iijlab.net/~ew/index-j.html
にPC-1ってあるでしょ。それが東大で作ったパラメトロン計算機。1語が18ビットで、メモリがたったの512語。1語16ビットの現代に置き換えると、512語(word) = 1024バイト。そういう世界で和田先生はプログラミングをやってたわけですね。
いまの30歳以下の計算機屋やソフト屋は知らない世界だと思うけど、ひょっとして40歳以下でも知らないかな。おれも文献でしか知らないんだけど、
http://www.iijlab.net/~ew/pc1/pc1.1.pdf
はPC-1のハードウェアがどういうものがわかる解説。
昔の人はすごいね。何もないところからこういうもの作るんだもの。割りだしという言葉も懐かしいし、PC-1は世界初のマルチプログラミングをやった計算機だったかもしれないんですね。
俗にいうIT企業でPerlやRubyでCGIばかり作ってる人とか、ネットワークのお守りばかりやっててつまんない人は、こういうの読むとリフレッシュされるんじゃないかな。
「ないなら作る」。これと「何でも面白がる」。これがハッカーの精神で一番重要なことでしょうね。
あ、そうそう、ハッカーのためのキーボード。Happy Hacking Keyboardの設計も和田先生ですね。これもないなら自分で作るの精神ですね。
「ハッカーのたのしみ」にある和田先生の序文から少し。どういう本か雰囲気つかめるかな。
--- ここから ---
当時はもちろんマシン語であった。以下の例はC言語だが、例えばasciiコードの0から9、aからfを入力し、対応する16進数を出力する関数は、(0から9のコードは48から57、aからfのコードは97から102なので)常識的には、
c2n(x)
{ return x-(x&64?87:48); }
と書くであろう。しかし私は、
c2n(x)
{ return x%87%48; }
と書きたい。(%は剰余をとる演算)実はこういう精神が本書に漲(みなぎ)っているのである。
--- ここまで ---
以下、和田先生が本書で注目したテクニックの感想をいくつか述べてらっしゃるのですが、おれも知ってるのがあった。
--- ここから ---
32ビットの語が32個の32×32の行列がある。これを転置したビット列を作るには、n=0,1,2,3,4について、2^n×2^n(中村注:2^nは2のn乗の意味。本ではちゃんと2の右肩にnがある)の行列を要素とする2×2の行列を全ビット領域で絨毯爆撃よろしくそれぞれ転置する。ビットマップの回転もそうやったっけ。
[7-3節の項「32×32のビット行列の転置」]
--- ここまで ---
そうです。和田先生。ビットマップの回転もそうやるんです。この話、和田先生ご自身が、bitでいつかお書きになってたと思います。
ぼくがそれを知ったのは、もう廃刊になりましたがアメリカの有名なパソコン雑誌BYTEの中でも特別の価値をもつ「BYTE 1981年8月号」。この号は、Smalltalk大特集号だったんです。
SmalltalkはそれまでXeroxのPARC(パロアルト研究所)のベールに包まれていて、詳細がわからなかった。ところが、この号で世界にその全貌が公開されたんです。それで、世界中の研究者がこの号を入手したというほどの号です。
ぼくもこれが九大工学部情報工学科の学科図書館にあるのを知って、借りて読みました。
Smalltalkは、ハードソフト一体のマシンでしたから、ハードからソフトま
でいろんな記事が載っていたんですが、その中にSmalltalkマシンのビットマップディスプレイの解説記事がありました。そこにビットマップの回転の説明があり、そこでこのアルゴリズムの紹介があったんです。
記事には、ミッキーマウスのビットマップを左か右に90度回転させる連続写真があって、写真が載っていたこともあって、視覚的にもわかりやすく、途中ぐちゃぐちゃになったミッキーの絵が、最後はちゃんと横倒しになるので、すごい不思議なマジックをみせられた気になりました。
余談だけど、ビットマップ処理といえば、BitBlt(ビットブリット)という演
算を使います。Windowsにもあって、実装は、スタック上に処理コードを展開して、どの演算を使うかのコードを埋めて処理する自己書き換えコードだったと思います。スタック上にコードを展開するのは、昔と違って、プログラム領域の書き換えは、プロセッサとOSが監視していて禁止しているからで、スタックならそれが可能ということですね。
とんこうさん。
>XORを使ったものにグレイコードがありますね。交番コードとも言います。
本書にもグレイコードが出てきます。次の数になったときの変化が1ビットだけなので、センサの世界ではよく使われるんですってね。
http://www.i.h.kyoto-u.ac.jp/~tsuiki/bit/gray.html
立木秀樹「グレイコードと実数」
をみると、実数のグレイコード展開なんてのもあるんですね。
いやあ、ビットの世界は深いわ。
実は、本書「ハッカーのたのしみ」で一番、こいつらどういう頭しとるんじ
ゃと思ったのが、第12章の「数の表現のための一風変わった基数」。
-2進数なんてのが最初に出てきて、どういう世界だこれはと思うのですが、さらに驚くのは、-1+i進数の世界。つまり複素数進数の世界もあるんです。\(^O^)/
1940年にはベル研で、複素数計算器が作られていたのも驚くし、4進虚数なんてもあって、なんじゃそりゃ。そこらのハードSFよりすごいな。
「事実は小説よりワイキキなり」(Copyrigt (c) 中村正三郎)。\(^O^)/
Xbox360の保証期間が90日から1年に ― 2006年12月28日 17時04分21秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
===
標題: Xbox360の保証期間が90日から1年に
---
CNET Japanの記事です。
「マイクロソフト、米国とカナダでXbox 360の保証期間を延長--WiiやPS3に対抗
へ」
http://japan.cnet.com/news/tech/story/0,2000056025,20339982,00.htm
いままで保証期間が90日間しかなかったことが驚きです。よほどちゃちな部品を
使って
コストダウンしているんだろうなと邪推してしまいました。
こうやってせこいことをしているから儲かるんでしょうけど…
--
ryo
===
標題: Re: Xbox360の保証期間が90日から1年に
---
おれもびっくり。たった90日。
これってお試し期間。気に入らなければ返品OKみたいな日数ですよね。
さすがは、Microsoft。WiiやPS3が出るとこうやって泥縄的に対処療法。
記事にある、MSのマーケ屋の「顧客満足度の向上は最優先の課題だ」という
のが、虚しく聞こえて、笑えますね。
この前(2006/12/12)書いた、近所の量販店での出来事。
WiiとPS3はデモ機があって、人だかりがしてたのに、Xbox360だけ故障して
いたあのマシンも出荷後90日以上経ったマシンだったのでしょうか。\(^O^)/
中村(show)
===
標題: Xbox360の保証期間が90日から1年に
---
CNET Japanの記事です。
「マイクロソフト、米国とカナダでXbox 360の保証期間を延長--WiiやPS3に対抗
へ」
http://japan.cnet.com/news/tech/story/0,2000056025,20339982,00.htm
いままで保証期間が90日間しかなかったことが驚きです。よほどちゃちな部品を
使って
コストダウンしているんだろうなと邪推してしまいました。
こうやってせこいことをしているから儲かるんでしょうけど…
--
ryo
===
標題: Re: Xbox360の保証期間が90日から1年に
---
おれもびっくり。たった90日。
これってお試し期間。気に入らなければ返品OKみたいな日数ですよね。
さすがは、Microsoft。WiiやPS3が出るとこうやって泥縄的に対処療法。
記事にある、MSのマーケ屋の「顧客満足度の向上は最優先の課題だ」という
のが、虚しく聞こえて、笑えますね。
この前(2006/12/12)書いた、近所の量販店での出来事。
WiiとPS3はデモ機があって、人だかりがしてたのに、Xbox360だけ故障して
いたあのマシンも出荷後90日以上経ったマシンだったのでしょうか。\(^O^)/
中村(show)
最近のコメント