2008-05-01から1ヶ月間の記事一覧

配列のシャッフルの決まり文句は「sort_by{ rand }」だった

配列要素のランダム抽出でRuby1.8.7をチェック - 技術メモ的なモノと気になるモノ元のget_random_dataはエラーが出てたので修正。Ruby 1.8.6以前ではあれこれ考えるよりも「sort_by { rand }」するのが手っ取り早い。 だが、Ruby 1.8.7になるとそんなイディ…

Ruby 1.8.7で使えるようになったRuby 1.9のメソッドたち

Ruby 1.8.7ではRuby 1.9からのbackportがとても多い。つまり、Ruby 1.9のあのメソッドがRuby 1.8でも使えるようになったということだ!! これがすごいという機能がもりだくさん、ちょっと大人になったRuby 1.8をお楽しみに。Enumeratorは組み込みになり、ea…

バッファが変更されてないのにbuffer-modified-tickが変動する

(buffer-modified-tick)という関数はバッファ変更のたびにカウンタが増える。 だから、前回の測定時よりも増えてなければバッファは未修正だ。そのはずなんだが、font-lock-modeをonにしているとスクロールするだけで増えてしまう。 text-propertyとかoverla…

rcodetools

rcodetools の導入 - gan2 の Ruby 勉強日記試してくれてありがとう。rcodetoolsは共同開発で作ったツールなんだが、ここ何ヶ月も相方と連絡が取れなくてリリースできないのだ(涙) 俺の手元のバージョンだとRuby 1.9に対応したりバグを潰したりしているのだ…

Emacsを無料ソフト呼ばわりは失礼

http://digimaga.net/200805/best-text-editors.htmlエディタ6選。Notepad++、Emacs、UltraEdit、TextMate、Vim、TextPad。なぜか秀丸はない。Emacsの紹介の仕方がきわめて失礼だ。どこにも「自由」と書かれていなくて「お値段無料」と紹介するのはなぁ… Ema…

followはレスという意味もある

http://d.hatena.ne.jp/piyo2-moko/20080507#1210125001followは「話についていく」の意味があるが、それが転じてメーリングリストのメールに返事するという意味もある。インターネットの文脈だとむしろそっちの方が多いかもしれない。→follow-up

Object#instance_exec欲しいなあ

Ruby 1.8.7にはいろいろなRuby 1.9のメソッドがbackportされてウハウハなんだが、Object#instance_execが含まれなかったのが残念。 ついにEnumerable::Enumeratorまで入ったのになぁ。Object#instance_execはObject#instance_evalにブロック引数が渡せるやつ…

そこで__send__ですよ

1.8.6 で 1.8.7 な inject を使う - gan2 の Ruby 勉強日記injectは引数を省略できるし、四則演算以外のシンボルにも対応している。よーく見てみれば__send__を使えばいいことに気付くだろう。 module Enumerable alias_method :_inject, :inject def inject…

もしかして拡張子隠してない?

http://ruby.g.hatena.ne.jp/BeAr/20080507/1210090090 C:\src>ruby read_text.rb ChangeLog read_text.rb:2:in `initialize': No such file or directory - ChangeLog (Errno::ENOENT) from read_text.rb:2 ブログをいじる時に他にエラーになりそうな事って…

クラス階層を書き出す

突然Rubyのクラス階層を厳密に知りたくなった。Rubyリファレンスマニュアルはアテにならないので、せっかくなのでRubyに訊いてみた。Ruby 1.8.7の場合。 RUBY_VERSION # => "1.8.7" # まず、スーパークラス=>サブクラスのHashを作成する。 table = {}.tap{|h…

今はinjectよりもtapだよね〜

tapかわいいよtap - http://rubikitch.com/に移転しました俺も含めたinject厨は、Ruby 1.8.7からtapへ鞍替えしたほうがいいかもしれない。たとえば、簡単な例題として、1〜6のうちで偶数の二乗を集めるコードを示そう。 (1..6).select{|x| x % 2 == 0}.map{|…

Module#define_methodを抽象化する話

Jay Fields' Thoughts: Ruby: Dynamically Define Methodたとえば、インスタンス変数にメソッド名のシンボルを格納するような一連のメソッドがあるとする。 def failure self.state = :failure end def error self.state = :error end def success self.stat…

振舞いベースのテストを明確に書く方法

Jay Fields' Thoughts: Testing: One expectation per testテストメソッドにて assertionがあるときはmockを使うな。そのかわりstubを使え。 mockを加えるときは、意味のある値を返す必要はない。返り値を確かめないだろうから。 すでにmockがある場合はstub…

メタプログラミングなテストは書くな

Jay Fields' Thoughts: Testing Anti-Pattern: Metaprogrammed Testsループとdefine_methodでテストメソッドを定義したらだめだという話。 行番号が意味なくなる。 失敗したテストが見つけにくくなる。 テストが複雑になりすぎる。そのため、メンテナンス性…

ARGV

http://d.hatena.ne.jp/piyo2-moko/20080503#1209822796書いてあるようにコマンドラインに引数を指定していないからすべてがnilになる。 コマンドプロンプトから実行してみよう。そのスクリプトをargvtest.rbで保存している場合はこんな感じ。 もちろん実行…

aliasによるメソッドの再定義は危険なのでUnboundMethodかextendを使おう

Jay Fields' Thoughts: Alternatives for redefining methodsメソッドの再定義の技法はいろいろあるが、どれも欠点があるというお話。状況に応じて使い分けるべき。 aliasで再定義 メソッドを再定義するときにこんな感じでaliasで元のメソッドをコピーするの…

オブジェクトの特異メソッドを定義するよりもモジュールをextendしよう

Jay Fields' Thoughts: Extend modules instead of defining methods on a metaclass特異メソッドを直接定義するのではなくて、可能な限りモジュールをextendしよう。そうしたほうが柔軟性が高まるというお話。 当たり前の話なんだが、言われてみるまで気が…

Story→functional test→unit test

Jay Fields' Thoughts: Story 9: Display Customer Support Number何かを実装するときには、まず最初におおまかなstoryを思い浮かべる。storyを描いたら、コードはfunctional testから書く。もちろんunit testも書くのだが、まずはfunctional testからだ。 …

「なぜ」を問うのがソフトウェア技術者にとって一番大切なこと

Jay Fields' Thoughts: Understanding Whyソフトウェア開発において常に「なぜ○○なのか?」と問い掛けることが大切だ、というお話。 best practiceだっていつも特効薬ではない。状況によって変わる。多くの人は、なぜそれがbest practiceなのか疑問に感じず…

tapかわいいよtap

Ruby 1.9で導入されたObject#tapはRuby 1.8でも1.8.7から使えるようになった。 tapメソッドとは何かというと、自分自身にブロックを作用させて自分自身を返すだけのメソッドだ。つまり副作用専門メソッド。定義はいたって簡単、コレ。 class Object def tap …

まぁ気をつければ大丈夫かと

http://d.hatena.ne.jp/piyo2-moko/20080430#1209565788 間違ったコマンドを〜〜OSが壊れることも!?え!そんな!こわーい!!!! 怖いコマンドをいくつか知っていれば、そんなに怖がらなくていいと思う^^ 少なくとも自作のRubyスクリプトを動かすくらい…