著作一覧 |
ごとけんさんもそういえばスティーブンスを読めと言っていたなぁと、突然、ステーブンスのあさましを繰り広げてみたり。
詳解UNIXプログラミング(W.リチャード スティーヴンス)
……おれ、これは読んでないし、持ってもいない気がしてきた(ということはたぶん持っていないし読んでいない)
というわけで、おれとスティーブンスの出会いは、
UNIX Network Programming(Stevens, W. Richard)
これだな。1990年出版というところもそれっぽい。
急にといっても前兆はあったのだが、LANが世の中にやってきて、それまでのHDLCとかBSCとかではなくCSMA/CDの上でTCP/IPやUDPを使っていったりきたりする必要がでてきて、さて、どうするかというときに、bit別冊のコマーのTCP/IP VOL1とVOL2、しばらくして原書のほうが3巻(BSDソケットだと思う、というのはSYSV UNIXはstream(TLSとかいったような記憶があるが忘れてしまった……調べた。TLIだ)なので、どうもコード例がいまいちだったので3巻が読みたかったはず)があるので、赤い本を3冊そろえて読んだ。
Internetworking With Tcp/Ip: Principles, Protocols, and Architecture(Comer, Douglas E.)
(これそうかな?)
読んだのはいいが、いまひとつピンと来ない。
というときに、白いスティーブンスの本を見つけて、こりゃいいや、となった覚えがある。で、ご多分にもれずだと思うが、最初はスティーブンスの実装を眺めながらTFTPを実装していろいろ試してみたりした。
が、考えてみれば、それから20年近くたっているのだ。
古典は古典で悪いものではないが、現代は現代で良いものだ。それなりの学び方ってものもあるのではなかろうか。
というわけで、別にStevensを読む必要もなかろうとは思うが、はて、では何が良いのかと聞かれるとわからない。
UNIXプログラミングと限定すれば、UNIXではないものの
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道(青木 峰郎)
まあ、ふつうでいいんじゃないかと思うが、ネットワークにはふつうはない。し、ネットワークのようにIOで脚を引っ張られるタイプのプログラミングについては(スケールしなければならないサーバーは別として。でも別とするとだめかも知れないが)、別にCでソケットたたかなくても、Rubyとかでいいじゃんの、HTTP限定でAjax(JavaScript)とかでいいじゃんという気もしないでもない。気のせいだが。
っていうか、プロトコルを自分で作らないネットワークプログラミングってのは、あまりおもしろくないような。と書いた瞬間から、RESTのAPIってプロトコルを決めているような、と気づかなくもない。アプリケーションプロトコルのさらに上位プロトコルを決めるというのは、多層化の層が厚くなってきたのだから、それで良いのだ、とも言えなくもない。
こないだ動かしてみた原先生のalgebraだが、因数分解の結果がでるまで明らかに待たされる。
なんで1.8.7で動かしたかといえば、install.rbがftoolを利用していて、ftoolが入っていないからであった。
というわけで、setup 3.4.1を使ったらどうだろうと、setup.rbを入れてインストールしてみた(ruby setup.rbを実行)。元々install.rb用のディレクトリ構成なのでsetup.rbで問題なくインストールできた。
で、動かしてみると少なくとも、多項式の因数分解はできた。
以下のプログラムの実行結果を示す。
require 'algebra/polynomial' require 'benchmark' puts RUBY_VERSION P, x = Algebra::Polynomial.create(Integer, 'x') f = x**5 - x**4 + 2*x - 2 puts(Benchmark.measure do 1.upto(10) do f.factorize end end)
x**5 - x**4 + 2 * x - 2の因数分解を10回実行した結果を取る。
1.8.7(MSWin32 P4 2.8GHz Vista64の32ビット環境上)
C:\test>ruby fact.rb 1.8.7 11.591000 0.016000 11.607000 ( 11.633000)
1.9.1(MSWin32 P4 2.8GHz Vista64の32ビット環境上)
c:\test>ruby fact.rb 1.9.1 7.909000 0.032000 7.941000 ( 7.977000)
という具合で、倍とは言わないが、1.4倍以上高速という結果だった。
ジェズイットを見習え |
うーん,まだまだ遅いですね.
すごい!入出力が無く、文字列操作とかトリビアルな処理ではない、総合的な処理の結果が1.4倍というのは、すごい結果だと思います。<br>(setup.rb ってのは知らなかったです。ありがとう。)