表題は「404 Blog Not Found」のまね。
まだ最初しか読んでいないけれど、ご紹介。
あと、前回のエントリでは大きいことを書きすぎて恥ずかしくなったので削除した。
今回はRuby ベストプラクティスという本のご紹介。
この本には、筆者 (Gregory Brown さん) 流の開発方法や考え方の
エッセンスが詰まっている。
(と、思う。)
対象者は、Ruby の中級者以上。
大体、1000ステップ以上の Ruby プログラムを 1から作成した事の
ある人ならば、簡単に読めるだろう。
ただ、誤解を与えないために一応書いておくと、
ここで言う「簡単に読める」とは「簡単に身につく」ではない。
読む事は簡単だけれども、自分の血肉にする為には実践が必要だと思う。
また、本書には小手先のテクニックはあまり書いていない。
「監訳者のあとがき」で高橋征義さんは、
本書は、そういう本だ。
ある意味、「仕事のやり方」みたいな How to 本に近いかもしれない。
自分の能力を底上げしてくれる本だ。
本書には、筆者の過去ソフトウェア開発の経緯とその時の考えを
時系列で記載してある。
1. イントロ + 前提知識の簡単な紹介
2. こういうプログラムを作ろうと思った
3. とりあえず、こうしてみた + コード例
4. ここで、こう思った。だから、次にこうした
という流れの繰り返し。
これにより、筆者のソフトウェア開発を追体験する事ができる。
例えば、1章の TDD (テスト駆動開発) の前半は、
1. Unit Test や TDD の簡単な紹介
2. Prawn というソフトウェア開発で、パーサーを作ろうと思った
3. まず、パースの必要が無い文字列を入力した際の仕様とそのテストを作成
4. 作成したテストが通る簡単なメソッドを作成
5. 同様に、順次仕様とテストを追加し、それを通るようにメソッドを拡張
6. 途中でメーリングリストに投稿してみた
テストも一緒に投稿すると、意図がちゃんと伝わる
7. 作業を続けていると、最初に作成したテストが通らなくなった
でも、これは仕様を変更した事が原因
テストを修正した
8. module にした方がいいと思ってリファクタリングした
という流れ。
ちなみに、実は原著(英語版)は Web 上に公開されていたりする。
http://blog.rubybestpractices.com/posts/gregory/022-rbp-now-open.html
でも、この本に限って個人的な見解を述べると、
日本人は日本語に訳された本書を読んだほうが良いと思う。
なぜなら、日本語の方が簡単に読めるから。
普段から英語のドキュメントを読みなれている人でも、日本語の方が
もっと楽に読めると思う。
最初に書いたけれど、本書を読む事は簡単。
むしろ実践する事に意義がある。
力の入れどころを間違えてはいけない。
私自身は、仕事中の休憩とか、息抜きの際に読んでいる。
私のような凡人には、上級者からのレクチャーによる経験地アップに、
上級者には、他人の考え方を知るになると思う。
ぜひ、皆さんも読んでみてください。おまけせっかく Ruby の TDD が書いてあったので、ネットワーク越しの通信を行うプログラムのテストにつかうモックやスタブをうまく(汎用的に)作る事ができないか考えてみた。Ruby で記載したプログラムも、内部的には OS の動的ライブラリを使用しているはずなので、「そのライブラリに手を加えればうまくいくかな」と。調べた事・Linux で環境変数 LD_PRELOAD で優先的に使用する動的ライブラリを指定できる・dlsym(RTLD_NEXT, "シンボル名") を実行すると、 次の優先順位のシンボル(関数)を実行できる例) read 実行時に、通常は read(2) を、標準入出力から読み込む場合は "Hallo World!" と出力するライブラリの作成方法
まだ最初しか読んでいないけれど、ご紹介。
あと、前回のエントリでは大きいことを書きすぎて恥ずかしくなったので削除した。
今回はRuby ベストプラクティスという本のご紹介。
この本には、筆者 (Gregory Brown さん) 流の開発方法や考え方の
エッセンスが詰まっている。
(と、思う。)
対象者は、Ruby の中級者以上。
大体、1000ステップ以上の Ruby プログラムを 1から作成した事の
ある人ならば、簡単に読めるだろう。
ただ、誤解を与えないために一応書いておくと、
ここで言う「簡単に読める」とは「簡単に身につく」ではない。
読む事は簡単だけれども、自分の血肉にする為には実践が必要だと思う。
また、本書には小手先のテクニックはあまり書いていない。
「監訳者のあとがき」で高橋征義さんは、
「あなたはあなたのスタイルでコードをかくべきだ。とおっしゃっている。
そんなあなたの、あなたらしいスタイルを確立するために、
本書が役立てば幸いである」
本書は、そういう本だ。
ある意味、「仕事のやり方」みたいな How to 本に近いかもしれない。
自分の能力を底上げしてくれる本だ。
本書には、筆者の過去ソフトウェア開発の経緯とその時の考えを
時系列で記載してある。
1. イントロ + 前提知識の簡単な紹介
2. こういうプログラムを作ろうと思った
3. とりあえず、こうしてみた + コード例
4. ここで、こう思った。だから、次にこうした
という流れの繰り返し。
これにより、筆者のソフトウェア開発を追体験する事ができる。
例えば、1章の TDD (テスト駆動開発) の前半は、
1. Unit Test や TDD の簡単な紹介
2. Prawn というソフトウェア開発で、パーサーを作ろうと思った
3. まず、パースの必要が無い文字列を入力した際の仕様とそのテストを作成
4. 作成したテストが通る簡単なメソッドを作成
5. 同様に、順次仕様とテストを追加し、それを通るようにメソッドを拡張
6. 途中でメーリングリストに投稿してみた
テストも一緒に投稿すると、意図がちゃんと伝わる
7. 作業を続けていると、最初に作成したテストが通らなくなった
でも、これは仕様を変更した事が原因
テストを修正した
8. module にした方がいいと思ってリファクタリングした
という流れ。
ちなみに、実は原著(英語版)は Web 上に公開されていたりする。
http://blog.rubybestpractices.com/posts/gregory/022-rbp-now-open.html
でも、この本に限って個人的な見解を述べると、
日本人は日本語に訳された本書を読んだほうが良いと思う。
なぜなら、日本語の方が簡単に読めるから。
普段から英語のドキュメントを読みなれている人でも、日本語の方が
もっと楽に読めると思う。
最初に書いたけれど、本書を読む事は簡単。
むしろ実践する事に意義がある。
力の入れどころを間違えてはいけない。
私自身は、仕事中の休憩とか、息抜きの際に読んでいる。
私のような凡人には、上級者からのレクチャーによる経験地アップに、
上級者には、他人の考え方を知るになると思う。
ぜひ、皆さんも読んでみてください。おまけせっかく Ruby の TDD が書いてあったので、ネットワーク越しの通信を行うプログラムのテストにつかうモックやスタブをうまく(汎用的に)作る事ができないか考えてみた。Ruby で記載したプログラムも、内部的には OS の動的ライブラリを使用しているはずなので、「そのライブラリに手を加えればうまくいくかな」と。調べた事・Linux で環境変数 LD_PRELOAD で優先的に使用する動的ライブラリを指定できる・dlsym(RTLD_NEXT, "シンボル名") を実行すると、 次の優先順位のシンボル(関数)を実行できる例) read 実行時に、通常は read(2) を、標準入出力から読み込む場合は "Hallo World!" と出力するライブラリの作成方法
$ cat my_read.c#define _GNU_SOURCE#include「これで read(2) や write(2) をフックすれば、ネットワーク越しの ソケット通信時だけ別の挙動を示すプログラムが作れる」と思った。が、ファイルディスクリプタが指す物がソケットかどうか確認する方法がわからなかった。#include #include // オリジナルの read(2) を read_org というシンボルで呼び出せるようにするstatic ssize_t (*read_org)(int fd, void *buf, size_t count);void __attribute__((constructor))init_read_org(){ read_org = dlsym(RTLD_NEXT, "read");}// read を書き換えるssize_t read(int fd, void *buf, size_t count){ if( fd > 2 ){ // 標準入出力以外 (fd > 2) ならば通常の read(2) を実行 return (*read_org)(fd, buf, count); }else{ // 標準入出力から読み込む場合は "Hallo World!" と出力 printf("Hallo World!\n"); return (ssize_t)0; }}$ gcc -shared -fPIC -o my_read.so my_read.c -ldl && \ LD_PRELOAD=./my_read.so