トップ «前の日記(2009-02-24) 最新 次の日記(2009-02-26)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2009-02-25

_ 宝島

ごとけんさんもそういえばスティーブンスを読めと言っていたなぁと、突然、ステーブンスのあさましを繰り広げてみたり。

詳解UNIXプログラミング(W.リチャード スティーヴンス/W.Richard Stevens/大木 敦雄)

……おれ、これは読んでないし、持ってもいない気がしてきた(ということはたぶん持っていないし読んでいない)

というわけで、おれとスティーブンスの出会いは、

UNIX Network Programming(W. Richard Stevens)

これだな。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(Douglas E. Comer)

(これそうかな?)

読んだのはいいが、いまひとつピンと来ない。

というときに、白いスティーブンスの本を見つけて、こりゃいいや、となった覚えがある。で、ご多分にもれずだと思うが、最初はスティーブンスの実装を眺めながらTFTPを実装していろいろ試してみたりした。

が、考えてみれば、それから20年近くたっているのだ。

古典は古典で悪いものではないが、現代は現代で良いものだ。それなりの学び方ってものもあるのではなかろうか。

というわけで、別にStevensを読む必要もなかろうとは思うが、はて、では何が良いのかと聞かれるとわからない。

UNIXプログラミングと限定すれば、UNIXではないものの

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道(青木 峰郎)

まあ、ふつうでいいんじゃないかと思うが、ネットワークにはふつうはない。し、ネットワークのようにIOで脚を引っ張られるタイプのプログラミングについては(スケールしなければならないサーバーは別として。でも別とするとだめかも知れないが)、別にCでソケットたたかなくても、Rubyとかでいいじゃんの、HTTP限定でAjax(JavaScript)とかでいいじゃんという気もしないでもない。気のせいだが。

っていうか、プロトコルを自分で作らないネットワークプログラミングってのは、あまりおもしろくないような。と書いた瞬間から、RESTのAPIってプロトコルを決めているような、と気づかなくもない。アプリケーションプロトコルのさらに上位プロトコルを決めるというのは、多層化の層が厚くなってきたのだから、それで良いのだ、とも言えなくもない。

_ algebraにみるYARV

こないだ動かしてみた原先生の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倍以上高速という結果だった。

本日のツッコミ(全2件) [ツッコミを入れる]
_ ささだ (2009-02-25 13:17)

うーん,まだまだ遅いですね.

_ はら (2009-02-25 16:41)

すごい!入出力が無く、文字列操作とかトリビアルな処理ではない、総合的な処理の結果が1.4倍というのは、すごい結果だと思います。<br>(setup.rb ってのは知らなかったです。ありがとう。)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え