2008年11月3日月曜日

namespaceは:で

Rake騒動のおかげで、こちらを拝見することができ、長年(といっても3日程)疑問だった:コロンがネームスペース修飾だということが分かった。そういう理解でいいんだろうか? 何せ#はコメントだけじゃないからね。{}もブロックだけじゃないからね。

Rakefileにlib/tasksに置いたrakeファイルを記述する方法は?

10日で本にrakeのタスクの構文と例が載っているが、肝心のrakefileにlib/tasksの下に置くrakeファイルの書き方が載ってないので分からない。

と思ったら何のことは無い、デフォルトのままでlib/tasksに.rakeファイルを置けば良いだけだった。NetBeansでRakeファイルの作成が無かったため、何でも良いだろうとRubyファイルの作成としたのだが、こうすると強制的に.rbが末尾に付与されてしまい、IDE上で名前の変更として.rakeを付けても、.rake.rbとなるのであった。な〜んだよ。。。

でも10日でおぼえる本には「Rakefile内dタスクファイルを探索するためのパスを設定します」p69 と明記されているよなあ?と思ったら、これが読み間違いで、よく読むと「Railsが」行うこととして書いてある。すまん。申し訳ない。

なぜ気づいたかと言うと、コマンドラインからやって作ったプロジェクト上で同じことをするとうまくいったから。なんでNetBeansだとダメなんだ?ということでよーくみたら、そういうことでした。

2008年11月2日日曜日

RoR本の購入

前から何度も立ち読みやAmazonでチェックしていた本だが、なかなか買うところまで行かなかった。今回余りにも分からないことが多すぎて(それでも大分馴染んできたが)、ついに購入に踏み切りました。


当然な人には今さら何言ってんの?的本ではないかと思いますが、こんな厚くて見辛い本、私は見た目で引きます。それに作者の本より、良き理解者の本を好む質(タチ)なので、ROR作者作という点で逆に引いたのと、 RoR2.0対応じゃないということで敬遠してました。でもあるとき、NetBeansのサンプルソースとしてついているDepotというアプリケーションが、このサンプルだということを発見して、絶対買おうと思って高島屋の紀伊国屋さんに行きましたよ確か、2週間ぐらい前? や〜っぱり買えませんでした。でも今は気合いが違いますからね。何でも来いです。(知りたいことがこれに)載ってるかどうかは分かりませんでしたが、まあ、これに載ってなかったらしょうがないだろうと。

2. Ruby on Rails逆引きクイックリファレンス ISBN978-4-8399-2826-1

これもこんなレベルまで踏み込む予定は全くありませんでしたから、それにクイックリファレンスという割にはリファレンスっぽくない感じがしていたので、これは全然買う予定じゃありませんでした。でも今までの流れから、どうせ藁をも縋る思いで買うんでしょ?みたいな感じで。

あ、藁っていうのは相対的な意味であって、こっちがカナヅチなんで、浮き輪も藁も同じに感じるということです。

3. Railsレシピブック 183の技  ISBN-978-4-7973-3662-7

これも2.と同様、逆引き系です。2.を買ったので、比較とかN増しとかいう感覚で買い増しした感じです。なぜ183個なのかということについては特に気にしてません。

4.UNIXシェルスクリプト辞典 ISBN4-7981-0923-1

これはおまけ(といっては失礼ですが)。この間MySQLで空のテーブルが何個作れるか試すのに作成はいいんだけど削除で"y"って入力を返すのがわからず、どこかのQ&Aサイトで質問して教えて頂きました。自分でもecho y | echo ってやったんだけど、これだと改行しかしないので、ダメだと思ってしまった(何故だろう?)。echo y | mysqladmin -u root detete file名でやったわけですが、rootがパスワードなしでいいと割り切っていたので(実験ですから)。で、試しにexpectを使おうとしたんですが、これがまた全然ダメで、そういう関係ないところで時間無駄にしてしまって、大いに反省していたところに、偶然Ruby売り場の隣に置いてあったので、衝動買いしてしまいました。でも肝心のコマンドが本とMacOSXで合ってるのかやや心配です。

クラスメソッド

この辺がなんだかなあなのでメモ。
クラスメソッドとクラスの特異メソッドの違い。
クラスとメタクラスの関係。

Classクラスがその他のクラスのメタクラスじゃないのか?

なぜなら、例えばObjectクラスはClassクラスのインスタンスだから(だと思うから)。つまりクラスのクラスということでメタクラスなんじゃないの?

でもここにはClassのインスタンスとしてObject(などのメタじゃないクラス)と同名のメタクラスがClassのインスタンスとして存在すると。で、それがObjectが持っている? 持っているっていうのは、どういう格好だろう? クラス変数として? わからん。『もちろんClassで定義されているメソッドもクラスメソッドとして使えます』ってどういうこと? またクラスメソッドって何ってなるじゃん。


必要に迫られるまで、ペンディングだが、経過をメモ。

受け入れる

例えば繰り返しについて考えてみよう。
intであろうと、floatであろうと、
for( i = 0 ; i <10 ; i++ )
{
    m[ i ] = rand( i ) ;
}
は(mについて)同じ結果になる。
しかしオブジェクト指向で実装する場合、integerとfloatは別クラスであるため、両方とも繰り返し構造が必要になる。とすれば、1つの繰り返し処理で両方処理できるのではないか?できる、したい、する、となる。でもそれにmix-inを使わなければならないのだろうか。もし進化の木が一本の根につながるのであれば、さらに掘り下げればビッグバンを越えてインフレーションまで1つの川を遡るのであれば、むしろ、どこかの段階で繰り返しメソッドが入るべきではないかと思う。

しかしコンピューティング上のオブジェクトは、あくまで便宜上のものであり、生物や宇宙の進化を表しているわけではない。うまく利用することこそが重要視されて驚けない。しかも数学的な問題となれば、なおさら物質的な問題そのものとは違ってくるだろう。

「なるほど。」

ということは、特に数学的な特徴を活かした機能に関しては、オブジェクトの木とは違う場所にあって然るべきなのかもしれない。長年理解できなかった答えとは、こういうことじゃないか? それが概念交換機へと繋がる源流なのかも。

rubyのモジュールの実際のコードや使われ方もまだ見ていないけど、名前はともかく、本来のオブジェクトとは別にしてmix-inして取り込むというのは、実は非常に合理的な考えなような気がしてきた。考えが一転してしまった。

本当はモジュールのようなやり方に納得できない病が発生しそうだったので、前に言ったように考え方に合意せず、受け入れようという主旨で書き始めたのに、30秒程冒頭部分のことを考えてたら、こんなエントリになってしまった。

まてよ? だとしたら、宇宙はどこから数学をmix-inしたんだろう。

2008年11月1日土曜日

yied の読み方

辞書の発音記号を見ると、jíːldとなっている。カタカナで訳す("yield".katakana)とジールド? 

でもジーっぽい単語を適当に見ていくと、dʒíː ばっかり。例えばジープはJeepでdʒíːp。google( "yield イールド" ) だと沢山出てくるので、やはりイールドなのか? でもeastは íːst、ってやったら偶然イースト菌のイーストがyeastでjíːstなのを発見。

どうしても知りたい。で、こちらを見つけました。

なるほど、やっぱり違うんだ。だったら発音が付いている辞書で実際に聞いてみれば良い。なぜ最初にそれを思いつかなかったのか? バカだなあ。

まずeastを聞いてみるとイースト。yesetを聞いてみるとイイースト?もしくはィイーストみたいな感じです。イがダイナミックというか長い。私的にはイイーストですが、一般的にはイースト、でしょうな。うん、納得。あれ?肝心のyieldは?というと、なんかふつーにイーオドって聞こえます。(このオはよくLはこうなりますよね)。ちなみにこれらの発音はExcuite辞書で聞きました。

ところでrubyでカタカナに訳してくれるメソッドはある? さっき"yield".katakanaって書いたけどruby的には"yield".to_katakanaってしたいのかな? ググってみると、katakanaもto_katakanaもあるけど英語(外国語)→カタカナっていうのは見つからないね。辞書が必要な割に誰も必要としてないってことか。

とにかく、イールドで納得した私でした。

イテレータの意味

繰り返し子?http://www.swlab.it.okayama-u.ac.jp/man/ruby/uguide/uguide09.html
思わす「くりかえしっこ」と読んだけど、「くりかえし・し」?

いずれにせよ、イテレータの意味が「iterate: 繰り返していう[する]。反復する」だったとは不覚も不覚。何で意味調べようとしなかったんだろう。