バイナリ・プログラミング、バイナリ・ハック ― 2006年12月22日 06時00分11秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
Binary 2.0なんて集まりがあるのね。
http://itpro.nikkeibp.co.jp/article/NEWS/20061216/257100/
「PS3上のLinuxをWiiリモコンで操作」---Binary 2.0 カンファレンス2006よ
り
コンピュータがある以上、こういうシステムの中をえぐるプログラミングは、
絶対に重要。悪用するとどうのこうの以前に、技術屋であれば、ブラックボッ
クスの中身を知るのは絶対的に重要なこと。
その意味で、こういう会合があるってのは、とてもいいことです。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061108/253099/?ST=oss
時代はバイナリ?低レイヤー・プログラミングの楽しさ
低レベルプログラミングというと、単に技術水準が低いプログラミングにな
るので(苦笑)、低レイヤー・プログラミングといってるんだろうね。
初めて知ったが、
http://www.amazon.co.jp/exec/obidos/ASIN/4873112885/showshotcorne-22/ref=nosim
高林哲, 鵜飼文敏, 佐藤祐介, 浜地慎一郎, 首藤一幸著「Binary Hacks ―ハ
ッカー秘伝のテクニック100選」
という本もあるのね。
バイナリ・ハックというからには、2進数であることを駆使したビット演算
プログラミングのハックかと思った。
でも、目次をみると、彼らがいうバイナリ・ハックは、そういう意味じゃな
いのね。オブジェクトファイルを操作したり、コンパイラ、リンカ、アセンブ
ラ、ローダ、プロファイラ、デバッガなどのツールのTips集みたい感じね。
ここにあるような話よりもっと面白いのが、2進数のビット演算のハック、
ほんとのバイナリ・プログラミング、バイナリ・ハック。
本物のハッカーがどういうバイナリ・ハックを築いてきたか、驚異のプログ
ラミングテクニックを知りたい人は、
http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/showshotcorne-22/ref=nosim
ジュニア,ヘンリー・S. ウォーレン著, 滝沢徹, 赤池英夫, 藤波順久, 鈴木
貢, 葛毅, 玉井浩訳「ハッカーのたのしみ―本物のプログラマはいかにして問
題を解くか」
が必読。
おれ、25年くらい前に管理工学研究所に就職したとき、ビット操作のテク
ニックって全然知らなかった。かの有名な、XOR3連発による一時変数なしの
データ交換すら知らなかった。
当時は、日本語入力ソフトの松茸や日本語ワープロの松、新松などアセンブ
ラで書いていた。で、データ交換用のマクロ定義にXOR3連発があって、何を
やっているのか全然わからなかった。
「え、中村。お前、そんなのも知らないの?」といわれて、恥ずかしかった。
以来、勉強したら、少しはわかるようになったかというと、全然(泣)。
わはは、ま、一応、謙遜ですけど。
嘘、こけ。まるっきり、事実だろ。\(^O^)/
さすがに2の割り算はシフトでやるくらいは知ってたけど。^^;
ともかく、そんなおれだから、「ハッカーのたのしみ」は驚異の世界。XOR
3連発なんて、初歩の初歩の初歩の初歩。
ビットの魔術を知りたい人は、ほんとに必読。
おれなんか、理解できずに、全部、忘れたけどね。\(^O^)/
とにかく、プログラミングってね。こういうハードウェアの命令レベルに近
いところと、LispやProlog、最近の流行りでいえば、HaskellやCleanなどの関
数型言語のように抽象度の高いところを学べば、あとはなんとでもなるのよ。
ほかの、CやC++やJavaやJavaScriptやPerlやRubyやPythonなんて、全部、そ
の中間だからね。
慶応大学教授かつLispハッカーの故中西正和先生の持論は、「プログラミン
グの最初にアセンブラとLispを教えるべし」でした。BASICとかそんなのでプ
ログラミング入門をして、変な癖がつく前に、アセンブラとLispだけやれば、
あとはなんとでもなるということ。
抽象度の高いプログラミングマジック、たとえば、高階関数とか無限リスト
とかユニフィケーションとか各種の効率的なソートや探索アルゴリズムやAI的
アルゴリズムがホワイトマジックだとすれば、「ハッカーのたのしみ」にある
バイナリ・ハックは、ブラックマジック。
ホワイトマジックとブラックマジック、双方に精通してこそ、真のマジシャ
ンですからね。
XOR3連発を知らない人は、
http://ja.wikipedia.org/wiki/XOR交換アルゴリズム
をどうぞ。
あ、もう朝の6時になりそうだ。一眠りして、会社行ってバイオのソフト書
かないと。年内早く仕事を済ませたい。
いまやってるのは、グラフ探索、OWL/RDFの操作とか、そういうのばっかだ
から、バイナリ・ハック、全然、関係ないです。^^;
グラフといっても、棒グラフや円グラフのグラフじゃなくて、有向グラフや
DAGやトポロジカルソートでいうときのグラフ。ネットワークといったほうが
いいかな。インターネットなどの通信のネットワークとはまたちょっと意味が
違うな。用語の意味って難しいね。
Lispなど抽象度の高い高水準言語で、バイナリ・ハックが関係ないかといえ
ば、そうともいえませんね。高速なライブラリの実装は、低レイヤのハックが
必要ですもんね。
たとえば、FranzのAllegro Common Lisp用の超高速RDFデータベースAllegro
Cacheで使われているCommon Lispで書いたB+ツリーのエンジンやテキスト処
理は、低レイヤプログラミングを駆使しているみたいですもんね。
http://www.franz.com/support/tech_corner/btree-121306.lhtml
High Performance Btree Module Now Available
http://www.franz.com/support/tech_corner/read-line-variants-071406.lhtml
Space-efficient variants of read-line
RDFもトリプルの数が10億個くらいになると、はんぱな量じゃないからね。
Allegro Cacheはそんな世界でも実用的に動くのがウリだそうです。Oracleな
どの通常のデータベースじゃ、数百万か数千万個くらいで、もう動かないそう
ですからね。
この前のLispセミナー初日の夕方。懇親会の会場に行く道すがら、Franzの
Jansさんと話してたら、彼は、前述のどうやって効率的なB+ツリーエンジンを
作ったかの話を少ししてくれました。それが公開されたということですね。
おれもノードが100万個くらいあるツリーを作ったりしてるけど、何をやる
にも時間がかかって、面倒。
バイオの世界って、データが膨大だから、32bit、メモリ2GBなんてマシンで
も、なんかね、8bitのマシン、64KBのメモリで10MBのデータをどう料理しよう
かなとやってる感覚。
先祖がえりですね。^^;
---
Binary 2.0なんて集まりがあるのね。
http://itpro.nikkeibp.co.jp/article/NEWS/20061216/257100/
「PS3上のLinuxをWiiリモコンで操作」---Binary 2.0 カンファレンス2006よ
り
コンピュータがある以上、こういうシステムの中をえぐるプログラミングは、
絶対に重要。悪用するとどうのこうの以前に、技術屋であれば、ブラックボッ
クスの中身を知るのは絶対的に重要なこと。
その意味で、こういう会合があるってのは、とてもいいことです。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061108/253099/?ST=oss
時代はバイナリ?低レイヤー・プログラミングの楽しさ
低レベルプログラミングというと、単に技術水準が低いプログラミングにな
るので(苦笑)、低レイヤー・プログラミングといってるんだろうね。
初めて知ったが、
http://www.amazon.co.jp/exec/obidos/ASIN/4873112885/showshotcorne-22/ref=nosim
高林哲, 鵜飼文敏, 佐藤祐介, 浜地慎一郎, 首藤一幸著「Binary Hacks ―ハ
ッカー秘伝のテクニック100選」
という本もあるのね。
バイナリ・ハックというからには、2進数であることを駆使したビット演算
プログラミングのハックかと思った。
でも、目次をみると、彼らがいうバイナリ・ハックは、そういう意味じゃな
いのね。オブジェクトファイルを操作したり、コンパイラ、リンカ、アセンブ
ラ、ローダ、プロファイラ、デバッガなどのツールのTips集みたい感じね。
ここにあるような話よりもっと面白いのが、2進数のビット演算のハック、
ほんとのバイナリ・プログラミング、バイナリ・ハック。
本物のハッカーがどういうバイナリ・ハックを築いてきたか、驚異のプログ
ラミングテクニックを知りたい人は、
http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/showshotcorne-22/ref=nosim
ジュニア,ヘンリー・S. ウォーレン著, 滝沢徹, 赤池英夫, 藤波順久, 鈴木
貢, 葛毅, 玉井浩訳「ハッカーのたのしみ―本物のプログラマはいかにして問
題を解くか」
が必読。
おれ、25年くらい前に管理工学研究所に就職したとき、ビット操作のテク
ニックって全然知らなかった。かの有名な、XOR3連発による一時変数なしの
データ交換すら知らなかった。
当時は、日本語入力ソフトの松茸や日本語ワープロの松、新松などアセンブ
ラで書いていた。で、データ交換用のマクロ定義にXOR3連発があって、何を
やっているのか全然わからなかった。
「え、中村。お前、そんなのも知らないの?」といわれて、恥ずかしかった。
以来、勉強したら、少しはわかるようになったかというと、全然(泣)。
わはは、ま、一応、謙遜ですけど。
嘘、こけ。まるっきり、事実だろ。\(^O^)/
さすがに2の割り算はシフトでやるくらいは知ってたけど。^^;
ともかく、そんなおれだから、「ハッカーのたのしみ」は驚異の世界。XOR
3連発なんて、初歩の初歩の初歩の初歩。
ビットの魔術を知りたい人は、ほんとに必読。
おれなんか、理解できずに、全部、忘れたけどね。\(^O^)/
とにかく、プログラミングってね。こういうハードウェアの命令レベルに近
いところと、LispやProlog、最近の流行りでいえば、HaskellやCleanなどの関
数型言語のように抽象度の高いところを学べば、あとはなんとでもなるのよ。
ほかの、CやC++やJavaやJavaScriptやPerlやRubyやPythonなんて、全部、そ
の中間だからね。
慶応大学教授かつLispハッカーの故中西正和先生の持論は、「プログラミン
グの最初にアセンブラとLispを教えるべし」でした。BASICとかそんなのでプ
ログラミング入門をして、変な癖がつく前に、アセンブラとLispだけやれば、
あとはなんとでもなるということ。
抽象度の高いプログラミングマジック、たとえば、高階関数とか無限リスト
とかユニフィケーションとか各種の効率的なソートや探索アルゴリズムやAI的
アルゴリズムがホワイトマジックだとすれば、「ハッカーのたのしみ」にある
バイナリ・ハックは、ブラックマジック。
ホワイトマジックとブラックマジック、双方に精通してこそ、真のマジシャ
ンですからね。
XOR3連発を知らない人は、
http://ja.wikipedia.org/wiki/XOR交換アルゴリズム
をどうぞ。
あ、もう朝の6時になりそうだ。一眠りして、会社行ってバイオのソフト書
かないと。年内早く仕事を済ませたい。
いまやってるのは、グラフ探索、OWL/RDFの操作とか、そういうのばっかだ
から、バイナリ・ハック、全然、関係ないです。^^;
グラフといっても、棒グラフや円グラフのグラフじゃなくて、有向グラフや
DAGやトポロジカルソートでいうときのグラフ。ネットワークといったほうが
いいかな。インターネットなどの通信のネットワークとはまたちょっと意味が
違うな。用語の意味って難しいね。
Lispなど抽象度の高い高水準言語で、バイナリ・ハックが関係ないかといえ
ば、そうともいえませんね。高速なライブラリの実装は、低レイヤのハックが
必要ですもんね。
たとえば、FranzのAllegro Common Lisp用の超高速RDFデータベースAllegro
Cacheで使われているCommon Lispで書いたB+ツリーのエンジンやテキスト処
理は、低レイヤプログラミングを駆使しているみたいですもんね。
http://www.franz.com/support/tech_corner/btree-121306.lhtml
High Performance Btree Module Now Available
http://www.franz.com/support/tech_corner/read-line-variants-071406.lhtml
Space-efficient variants of read-line
RDFもトリプルの数が10億個くらいになると、はんぱな量じゃないからね。
Allegro Cacheはそんな世界でも実用的に動くのがウリだそうです。Oracleな
どの通常のデータベースじゃ、数百万か数千万個くらいで、もう動かないそう
ですからね。
この前のLispセミナー初日の夕方。懇親会の会場に行く道すがら、Franzの
Jansさんと話してたら、彼は、前述のどうやって効率的なB+ツリーエンジンを
作ったかの話を少ししてくれました。それが公開されたということですね。
おれもノードが100万個くらいあるツリーを作ったりしてるけど、何をやる
にも時間がかかって、面倒。
バイオの世界って、データが膨大だから、32bit、メモリ2GBなんてマシンで
も、なんかね、8bitのマシン、64KBのメモリで10MBのデータをどう料理しよう
かなとやってる感覚。
先祖がえりですね。^^;
コメント
_ とんこう ― 2006年12月22日 07時24分00秒
アセンブラの勉強をする時にビット操作もやるはずです。
_ とんこう ― 2006年12月22日 09時06分37秒
XORを使ったものにグレイコードがありますね。交番コードとも言います。
_ 笑われ者 ― 2006年12月23日 19時34分45秒
一番最初のネタは低レベルプログラミングでは無いですね、
5段階で真ん中ぐらいのレイヤーじゃないですか?
しかもドライバも言語はPythonだしSDLとかに頼った成果物がもっぱらみたいです。
与えられた資料やソフトにもとづいて修正している程度なので
システムハッキングとかいうのとも違うと思います。ハイ。
結構OS依存度の少ないハイレベルプログラミングであるとすらいえます。
Wiiリモートのドライバを直接作るって発想(リンク先の)はそもそもずれてます。
WiiリモコンはHIDオブジェクトとしての信号を送っているわけだから
bluetoothとHIDの基本さえOSが持っていればいいわけです。
LINUXはしらないけれど多分NetBSDはOK、Windowsの2000とかXP、MacOS10とかも最上位とはいかなくてもAPIベースのプログラミングで
Wiiリモコンは使えるんですね、
ハイ
あと全然プログラムとは関係ないけれど
WiiリモコンをWii本体無で使うにはセンサーバーが無いとポイント情報を作れないので
センサーバーを自作しないといけないんですね、
でこれは発振回路とかはいらなくて抵抗でギラギラひからせるだけでOKとか
それと振動に対応していなければwiiリモコン対応はうたっちゃダメですね、
リンク先のドライバーとかやらはどうなのかな?
低レベルプログラミングに対するブログ記事自体に対する否定ではありません。
でもビット操作も低レベルかっていえばスクリプト言語でもサポートしているし微妙
wiiリモコンに関する話は非プログラマーでもすでに知られているものなので
最低限のプログラミングの知識が無い文はやっぱちょっとね、
半端なアセンブラ風味のバイナリ操作より
素直にpdfあたりのフォーマットプログラミングから
バイナリー関連の話に持っていった方が
ぼろが出ないんじゃないですかね、
で比較としてライブラリーを使った方法を出して車輪の再発明とかに言及するとか
5段階で真ん中ぐらいのレイヤーじゃないですか?
しかもドライバも言語はPythonだしSDLとかに頼った成果物がもっぱらみたいです。
与えられた資料やソフトにもとづいて修正している程度なので
システムハッキングとかいうのとも違うと思います。ハイ。
結構OS依存度の少ないハイレベルプログラミングであるとすらいえます。
Wiiリモートのドライバを直接作るって発想(リンク先の)はそもそもずれてます。
WiiリモコンはHIDオブジェクトとしての信号を送っているわけだから
bluetoothとHIDの基本さえOSが持っていればいいわけです。
LINUXはしらないけれど多分NetBSDはOK、Windowsの2000とかXP、MacOS10とかも最上位とはいかなくてもAPIベースのプログラミングで
Wiiリモコンは使えるんですね、
ハイ
あと全然プログラムとは関係ないけれど
WiiリモコンをWii本体無で使うにはセンサーバーが無いとポイント情報を作れないので
センサーバーを自作しないといけないんですね、
でこれは発振回路とかはいらなくて抵抗でギラギラひからせるだけでOKとか
それと振動に対応していなければwiiリモコン対応はうたっちゃダメですね、
リンク先のドライバーとかやらはどうなのかな?
低レベルプログラミングに対するブログ記事自体に対する否定ではありません。
でもビット操作も低レベルかっていえばスクリプト言語でもサポートしているし微妙
wiiリモコンに関する話は非プログラマーでもすでに知られているものなので
最低限のプログラミングの知識が無い文はやっぱちょっとね、
半端なアセンブラ風味のバイナリ操作より
素直にpdfあたりのフォーマットプログラミングから
バイナリー関連の話に持っていった方が
ぼろが出ないんじゃないですかね、
で比較としてライブラリーを使った方法を出して車輪の再発明とかに言及するとか
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。
トラックバック
_ ホットコーナーの舞台裏 - 2009年07月16日 05時33分56秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
マーヴィン・ミンスキーの新刊が出てますね。
http://www.amazon.co.
---
マーヴィン・ミンスキーの新刊が出てますね。
http://www.amazon.co.
