『たのしい Ruby』高橋征義・後藤裕三共著、ソフトバンク。 これから Ruby 関連の本・記事を書くときに 「わかんなかったら『たのしい Ruby』読んでね☆」で済ませられるか どうかの瀬戸際 (?) ゆえ、一切おまけなし本気モードで評価しようと思う。
とりあえず、部の表紙にある引用を選んだのは高橋さんに違いない。
『コンパイラ II』A.V.Aho/R.Sethi/J.D.Ullman、サイエンス社。 当然両方そろえとくべきだったけど、あまりに高いので躊躇していた。
『プログラム意味論』横内寛文、共立出版。 これまではラムダ計算とか面倒そうなとこからはずっと逃避してきたが、 このさいプログラムの基礎をちゃんと勉強してみようかと思いたち買って みた。しかし、なぜこういう本はギリシャ文字を使うのが好きなんだろう?
次書く本、決まるかなあ。 あんな売れなそうな本を出す強者 (出版社) は果たしているのかッ?!
他のネタも考えておくべきか。Ruby を使って実験しまくり、システムの 仕組みを勉強する『Ruby で探検!』なんてどうだろう。……ダサッ!
関連してひとつ思ったこと。いまある本のほとんどは「成功体験」を 本道として書かれていると思う。つまり、失敗なし例外なしで本文が 書かれ、失敗への対処は付録に追いやられる。しかし現実にプログラム を書けるようになるには「いかにたくさん失敗を潰すか」にかかって いる。真正面から失敗の仕方をとらえた技術本というのもあってもよい のではなかろうか。
もういっこ思いだした。中学のとき通ってた塾の教師がこんなことを 言っていた。
「最高の問題集ってのは自分が解けない問題だけ集めた問題集なんだぜ。 でもそんなのは普通売ってないから、それを自分で作らなくちゃいかん。 従って問題集の一回目は問題集を作る過程であり時間の無駄だ、 そんなのはさっさと済ませて二回目以降をじっくりやれ。」
うーむ。似てる……
どこまで互換性を保つべきか悩む。そろそろ Ruby 1.4 は対象にしなく てもいいかな。TMail の 0.10 ブランチはすでに 1.6 以上限定にして しまった。
2ch で「strscan は stringio と被ってる」という指摘。確かに そのとおりだ。ふーむ、個人的にはそのほうが楽でいい。メンテ するライブラリが減るのも魅力的である。そもそも strscan は Ruby の実装上の障害を横道まわって回避するための「実装回避 ライブラリ」であって正式インターフェイスになるべきものでは ない。
しかし MatchData 関連メソッドがあるから、ちゃんと実装するのは Ruby レベルではいまだに無理なのよ。というわけで (誰だか知らんが) あきらめてください。Ruby の標準ライブラリは急激な進化の過程、 最初から全て美しく、というわけにはいかないのさ。
ぐわぁっ、日本語っ、日本語、にほんごーーー! 俺に文章を書かせろー! 書かせてくれー!
怠惰に一日を生きてみた。(午後の) 四時起床。カップうどん食って メール読んで ruby-dev の要約やったら……もう七時かよ! なんにもできないじゃん。ああ。だめだ。今日はもうだめだ。 いっそのことこのまま怠惰に終えてしまおう。
どうして反省や学習なく同じ間違いを繰り返すのであろうか。 なんで……なんで起きたら (午後の) 四時になっているんだー!
今日は食べるものすらない。死ぬ……。腹減った……死ぬぅーー!
茶だ。茶を飲んで紛らわそう。ああ、玄米茶に入ってる玄米が なんかうまそう。つーかうまい。しかし葉っぱはまずい。
メール読んで ruby-dev の要約やった。七時。順調に昨日と同じ 運命をたどっている。今日もこうして無駄無駄な一日が終わるの だろうか。
ruby-talk での投稿。net/http で ECONNECT が出るらしい。 例の Cygwin 現象かと思いきや Linux らしい。きっと Cygwin と 同じ対策で通用するんじゃないかなーと思ってパッチを出したら、 今度はパッチが当たらないですか。なんですかそれは。ちゃんと 1.6.6 のソース使ってんのか。はたまたディストリ固有パッチでも あたってるですか? パッチくらい自分でなんとかあてろ、手動で やれ、.rej チェックしろ!
ということを (優しく) 英語で書くにはどうしたらいいんですかね。
『TRICK』全巻ようやく全部見た。おもしろかった。 何がいいって、やはり仲間由紀恵の「えへへへへ!」である。 あれなくして TRICK は成立しないのである。
ただしトリック自体がどんどん簡単になってくるのがちょっと なんだな。双子のあたりからは見てて一瞬でわかった。
正式に決まったようだ。書くぜ。
お前らのやっていることは全部お見通しだ!
だったよ……。くそう!
今日も今日とてコンビニバイト。大学が始まって客数爆発。 ついでに荷物量も過去最大級。残業時間も過去最長の一時間半を記録。
やめて。
ファミマでもかかっていた。 ちょっとだけ CD が欲しくなった。
リピュアを買っていく人はみんな横幅が長い。
リピュア …… 最近出た、爽健美茶みたいなお茶。 ペットボトルがヘロヘロしてるのが特徴 (嘘)。 あんなもんで健康になれるなら苦労はしない。
どうしてこう日本語をちゃんと使えない人が多いのだろうか。 教育がいけないんだよね、教育が。
ちなみに文章の書き方ならなんと言っても 『日本語の作文技術』(本多勝一、朝日文庫) がお勧め。小中高の国語の教科書ひとそろいよりも この一冊のほうがずっと役に立ちます。
いまが旬の tdiary でも使ってみようかなあ。 すると名前は当然「あおきにっきつっこみつき」になるのだろう。
みなさんちゃんと Referer 見たりカウンターを付けたりして自分 のサイトの状況に気を配ってるのですね。おれはサーバ自宅に持っ てるくせになにもやってません。時々 access.log をチェックして 「どのページが一番アクセス多いのかなー」なんて見てるだけです。 そんなわけで今日はアクセスランキングを集計してみようと思いま す。
loveruby.net の中で一番アクセスが多いのは Linux Conference 2001 でやった Ruby チュートリアルの資料のページ。いまだに ruby-lang.org のWhat's New に載ってるせいだろう。あの資料、 すげえ出来が悪いので、ある意味とても悲しい。「そのうち書き直 します」なんて書きつつ全然やってないしなー。
その次が日記の最新ページ (ここ)。日記の月ごとのページだと、 ADSL とルータまわりのトラブルについて細かく書いている月が突 出して多い。やはりこのへんはトラブってる人が多いのか。
んでその次が strscan のダウンロード。Walrus が使ってるからだ ろう。
さらにその次は Racc と amstd。こいつはやっぱ RDtool が原因だろな。
そのあとがかなり意外にも Ruby Hacking Guide の各 ページ。ページアクセスのディレクトリごとの総計だと断 然多い。なんとっ。でも object.html や class.html は少なく、 GC が妙に多い。表紙より多い。なんでだろう。
む、AlphaStation600 のインストールページ が意外な人気。つっても 10 アクセスです。
なんか考えようかなあ。 「最終決戦 emacs VS vi、Ruby スクリプトを書くならどっちだ!」 なんてので投票所を作ってみるとか! やめたほうがいいですね。やめます。
そうそう、Ruby のコーディングスタイル に 掲示板を併設して意見を募集、というのは前からやろうと思ってたんだよな。 これはいつかやろう。
stdin から二行読んで stdout に書き空行を出力、という コマンドをシェルで書くにはどうするのが一番短いだろうか。
まあいいや。シェルはあきらめて ruby で書こう。
while true s = gets() or exit print s s = gets() or exit print s puts end
意地でも $_ は使いたくないらしいよ。
そうかあ、やっぱり扉の引用は高橋さんだったんだ。実はあの引用の 「引用具合」が一番たのしかったとか言ったらだめですか? (笑)
ま、それは冗談ですが。初心者向けには一番いい本じゃないですかね。 これでぼくも安心して中上級者向けの文章ばっかり書けるというもの です (だから売れないって)。
『たのしい Ruby』と言えば、「日本語の表示」で桐壷が 出てきたので times では
7.times do puts 'いちめんのなのはな' end puts 'かすかなるむぎぶえ' puts 'いちめんのなのはな'
とかやりそうだなあ、と思ったら本当に後のほうでやってて驚愕。 そのままの文を出すと著作権がらみで問題になるから七回は できなかったんね。
なんで Ruby Hacking Guide のアクセスが多いのか判明した。 ぐ〜ぐるのディレクトリに「1.6.6 のソース解説」って書いてある からだ。
うあ、page rank 低っ!
問題。stdin から二行読んで stdout に書き空行を出力、という コマンドをシェルで書くにはどうするのが一番短いだろうか。
% sed '3~2i\ '
sed かあ。(日常的に使えるくらい) 覚えたいなあと思いつつ 覚えられないんだ sed。ちょっと行数多いだけで ruby でも 同じことできるしさ。まあ、そんなこと言ったらアセンブラだって そうだな (ただちょっと、行数が多いだけ)。
ところでなんでこんなことをしたいかと言うと、eval.c から関数の 定義部分だけを grep で抜きだしたらこうなったからなのだった。
void rb_secure(level) void rb_check_safe_str(x) static void print_undef(klass, id) void rb_clear_cache() static void rb_clear_cache_by_id(id) :
どうやらきれいに二行づつまとまってるようだ。 というわけで関数ごとに空行を入れたかったのです。
全部まとめると結論はこうだな。 Ruby の eval.c から関数ヘッダ部分だけ抜きだすスクリプト (ただし仮引数の型宣言はない)。
egrep '^\w' | egrep -v '[{;]' | sed '3~2i\ '
たぶん eval.c 以外でもそこそこいけるはずだ。
うわ、array.c がだめだー。宣言の途中に #ifdef があると行数がずれる。
再度 Crouton さんから。 ありがとうございます。
sed '/)$/!i\ ' sed '/[^)]$/i\ '
なのかあ。そうかあ。発想を変えればよかったのですね。 しかもこっちのほうが表示結果がキレイなうえ array.c でも変にならない。
まとめ。Ruby のソースはほとんどいけるようだ。(grep もちょっと変えてみた)
egrep '^\w' | egrep -v '[{;=]' | sed '/)$/!i\ '
これ以上真面目にやるには ReFe のパーサ持ってくるのが結局早そうね。
ソースコードを解析しているうちに解析を補助するツールを 作りこみ始めてしまうわたしはプログラマの鑑でしょうか、 それとも無駄な再発明を繰り返す大馬鹿者でしょうか。
わたなべさんにも指摘されてた のを見逃していたぁー。
sed -n '/^[a-zA-Z]/{;/[{;]/d;s/)/)\ /;p;}' array.c
ううむ、確かにちゃんと動いている。定義の途中に #ifdef が あっても大丈夫だ。
しかしわたしにはもはや何が何やら。man sed とウェブに頼って 解読すると…… -n がデフォルトの出力抑止、その次の {...} は コマンドブロックだな。するとセミコロンは文区切りと見た。 ということは、整形するとこうか。
/^[a-zA-Z]/ { /[{;]/d s/)/)\ / p }
これならわかる。「^[a-zA-Z]」にマッチした行に対して以下を実行…… 「[{;]」にマッチした行は捨て、「)」にマッチした行を「)\n」に置き換え、表示。 ということだな。Ruby で同じように書けばこうなる。
ARGF.grep(/^[a-zA-Z]/) do |line| next if /[{;]/ === line print line.sub(/\)/, ")\n") end
うーん、こうして見るとツールの知識がないことより 発想 (パターンの見極め) が悪かったのがうまくいかなかった原因なのだな。 今回は「関数ごとに空行」を「返り値宣言の前に改行を入れる」 または「パラメータ宣言の後に改行を追加」という思考に転換できるか (そしてパターンをうまく見付けられるか) どうかが最大のポイントか。
指定した数だけ一気に pop してくれるコマンドはないのかあ。 popd +2 が一見それらしいかと思ったけど、単に指定したもの (ひとつ) を スタックから消すだけだし、そこに cd してくれるわけでもない。 つーわけで関数を作ろう (少しは学習したらしい)。
function po { if [[ $# -eq 0 ]] then builtin popd else i=$1 while [[ $i -gt 0 ]] do builtin popd ((i--)) done fi }
シェルも楽しいなあ。
ruby コンパイルしてたらサーバークラッシュ。やめて。
復旧した。 しかし次はないかもしれないので急いでバックアップを作ることにする。
やっと tDiary が設定できたぞー! と思った瞬間、 この日記をアップするために rsync --delete が動き 全部消してしまった……(泣)
というわけで tDiary を始めました 。
tDiary 面白いです。完全に移行を決定しました。 あおきにっき つっこみつき です。
そういえばこのサイトはなんで / と /~aamine/ に分かれているのだろう。 よくよく考えると分ける意味ないよなあ。/~aamine/ に置くのは日記だけにして、 読みものは全部ルートに持っていこうかな。
Copyright (c) 2000-2002 Minero Aoki
<aamine@loveruby.net>
This site is link free.