ruby

書評:『初めてのRuby』は『やり直しのRuby』でもある!

生まれて初めて書評というのを書いてみます。Yuguiさん(id:yugui)より初めてのRubyを献本してもらいました。一言で言うと、「濃い」です。プログラミング言語にはその言語独自の文化がありますが、それを言葉で説明するのは難しいです。それを著者のYugui…

この記事自体が釣りじゃないか?

マスゴミ屋さんとJava屋さんの区別がつきません(もちろん部分集合) - kなんとかの日記GNU/Linux一筋でMacintosh使ってない非国民が釣られてみる。RubyKaigiを10分ほどしか聞いてない人がエントリ書くから、「発表のごく一部だけを切り取って、前後の文脈を…

Rubyでwebにアクセスするならhttpclientが手軽

http://d.hatena.ne.jp/willnet/20080626/1214487378httpclientはopen-uriの手軽さと、Net::HTTPの機能を両立させてる使い勝手のいいライブラリだ。クッキーやkeep-aliveもサポートしている。ただし、Ruby 1.9未対応。Ruby 1.9だとParseDateなんてないぞーっ…

そこでRangeですよ

2007-03-25 if 1 < x < 10 puts "#{x}は1から10の間!" else puts "#{x}は1から10の間じゃない" end みたいにかけるようにしてみた。 範囲リテラルがあるから不要だと思うなぁ。 x = 2 if (2..9).include? x puts "#{x}は1から10の間!" else puts "#{x}は1か…

w3mで406 Not Acceptableになるサイトが見られるようになった

Refactormycodeが見られないよー>< - http://rubikitch.com/に移転しました結論から言うと、「受けつけるメディアタイプ(Accept:)」(~/.w3m/configではaccept_media)が text/*, image/*, application/*, audio/*, video/* と設定されていたから。いじっ…

nkfっていろんなことができるのなぁ

nkfはただの漢字コード変換ツールではない。 改行コードやひらがな・カタカナを変換したり、MIMEエンコード・デコードやったり、他いろいろ。 nkfはそのままRubyやPerlからでも使える。いつも使っているツールの機能を再確認すると、おもしろい発見がでてき…

正規表現の先読みについて解説してみる

先読み正規表現について、この前やっと理解できた。Rubyリファレンスマニュアルではこんな説明になっている。 (?= ) 先読み(lookahead)。パターンによる位置指定(幅を持たない) (?=re1)re2 という表現は、re1 と re2 両方にマッチするものにマッチする正規表…

xmpfilterの紹介御礼

Vim+xmpfilterでirbいらずのRuby試行錯誤開発 - ナレッジエース秀丸でxmpfilterを使う - 書き捨て御免xmpfilterの紹介どうもありがとう。広まっていくと嬉しい。xmpfilterの実例等については「ruby」の検索結果 - http://rubikitch.com/に移転しましたや「xm…

スーパーマリオブラザーズの「次の面」を求める→裏面に対応してみた

スーパーマリオブラザーズの「次の面」を求める 〜Rangeとsuccメソッドの甘い(?)関係〜 - http://rubikitch.com/に移転しました

testrbで複数のテストを一括実行

テストスイートの作り方 - うなの日記 以下のようなテストケース「foo-test.rb」,「hoge-test.rb」があるとして、 これら両方のテストを実行するようなテストスイートは、次のように書けます。 んなことしなくてもRubyインストール時に付いてくる「testrb」…

privateなアクセサは例外的に「self.value = x」という形が許される

2008-06-12 self.methodのように書くのもだめ ぢつは例外がひとつだけ。 class Hoge private attr_accessor :value # !> private attribute? def foo() :hoge end public def hoge self.foo rescue $! # => #<NoMethodError: private method `foo' called for #<Hoge:0x83893f4>> self.value = 3 end end hoge = Hoge.new hoge.</nomethoderror:>…

専用クラスを作ってキーワード引数の代わりにする

引数をハッシュにするより専用クラスを作って(ry - きみのハートを8ビットキャスト class Freq def initialize( freq ) ; @freq = freq ; end def to_i ; @freq ; end end class Bit def initialize( bit ) ; @bit = bit ; end def to_i ; @bit ; end end cl…

Rubyの代入は名札貼り付け

人にRubyを教えるとき - 18 til i die (another phase) ・ 代入が実は代入ではないということ 箱ではなくて名札であると教えればよいと思う。なまじ「代入」という言葉を使うから混乱するんだろう。 名札というかポストイットか。貼って剥がせるもの。 # "ho…

Module#define_methodとsuper

define_methodの中にsuperを書くとどうなるか実験。 class A def hoge "hoge" end end class B < A define_method :hoge do "[#{super}]" end end class C < A define_method :hoge do "[#{super()}]" end end RUBY_VERSION # => "1.8.7" B.new.hoge rescue …

スーパーマリオブラザーズの「次の面」を求める 〜Rangeとsuccメソッドの甘い(?)関係〜

Range#eachはsuccメソッドを内部で呼ぶ、だからRangeにStringを指定することもできる。 しかーし、String#succが常に「正しい」次の文字列を返すとは限らない!そこで、おれおれsuccを定義してやろうじゃないかというお話。平成生まれの人は知らないかもしれ…

最新版のgemパッケージのディレクトリ、RubyGems内のRubyスクリプトを列挙するスクリプト latest-gems

システムでインストールされているRubyスクリプトのリストがほしかったので、リストを得るスクリプトを書き殴ってみた。 locateやfindでリストできるけど、RubyGemsは複数のgemパッケージがインストールされている状況なので、だぶってしまうのが嫌。機能は…

Enumerable#reduceはEnumerable#injectの別名

DjangoのORMのすごいところ - 偏った言語信者の垂れ流し Rubyで言うところのinject Enumerable#collectにEnumerable#mapが用意されてるように、今のRubyはinjectにreduceという別名も用意されている。 ついでに演算子をシンボルで渡せるようにもなってるぞ!…

ブロックのdo〜endは制御構造に、{}は式に

{ } と do end の違い - gan2 の Ruby 勉強日記 require 'benchmark' puts Benchmark::CAPTION puts Benchmark.measure { a = [1, 2, 3] a.replace [4, 5, 6] } このように { } を使うのは OK なのに { } を do end に変えると require 'benchmark' puts Ben…

Structは便利

RubyのStruct - 西尾泰和のはてなダイアリーハッシュのようにも配列のようにもオブジェクトのようにもアクセスできるからRubyのStructは萌える。そこでStructですよ - http://rubikitch.com/に移転しました

rubyforgeのことも紹介してあげなよ

Ruby/Python/PHP | 日経 xTECH(クロステック) 「Ruby」は,日本発のオブジェクト指向スクリプト言語です。Webアプリケーション・フレー ムワーク「Ruby on Rails」で有名になりました。プログラムの可読性が高く,大きなプログラ ムを効率よく開発できます…

Time.nowのテスト? それMochaでできるよ

[ruby][rails]テストの時にTime.nowで好きな時間を使えるようにするMock - よしだメモTime.nowは偽装しないとテストは書けない。 だったらこんなまわりくどいことしないでMocha使おうよ。stubで簡単に偽装できるから。 Mochaの偽装のスコープはテストメソッ…

組み込みメソッドを再定義してみるテスト

やってはいけないとわかっていつつも。さっそく導入されたばかりのinstance_execを使ってみた。 class Module def redefine_method(meth, &block) old = instance_method meth remove_method meth define_method(meth) do |*args, &methblock| new = old.bin…

影武者(kagemusha)というスタブフレームワークはテスト時以外にも使えるかも…

Time.nowのテスト? それMochaでできるよ - http://rubikitch.com/に移転しましたを書いてるとid:ujihisaより「kagemusha」というgemを教えてもらった。 require 'rubygems' require 'kagemusha' birthday = Time.local(1993, 2, 24) Time.now # => Tue Jun …

Rubyにおけるモックとスタブについて

Mochaが楽しそう - LukeSilvia’s diaryスタブはただ偽装するだけ、モックは引数や呼ばれた回数等のチェックを行う。 チェック機能がほしいときにモックを使って、そうじゃなけりゃスタブを使う。 require 'test/unit' require 'rubygems' require 'mocha' cl…

Ruby 1.8.7リリース!!

ついにRuby 1.8.7がリリースされた。 Ruby 1.8.7の最大の魅力は、なんといってもたくさんのRuby 1.9のメソッド群が取り込まれたことだ。 また、RubySpecというRubyの仕様書のようなものができつつあり、それに準拠するようにしている。仕様書ができつつある…

そこでerubisですよ

2008-05-28 ERB で引数の hash を展開して欲しい - #生存戦略 、それは - subtech puts ERB.new('<%= example %>').result_hash(:example => 'foo') ローカル変数とインスタンス変数の違いはあれど、erubisならばすでに実装されている。 Erubis::FastEruby.n…

メソッド名と同じローカル変数がある場合はローカル変数が優先される

2008-05-28 require 'erb' Foo = Struct.new(:foo, :bar) foo = Foo.new('foo', 'bar') ERB.new('<%= foo %> and <%= bar %>').result(foo.instance_eval{binding}) # => "#<struct Foo foo=\"foo\", bar=\"bar\"> and bar" これはfooがすでにローカル変数として宣言されているからそっちが優先さ</struct>…

Rubyで「require 'http://〜'」できるライブラリってあったよな

なんだったか…忘れてしもうた。ちなみにEmacs Lispにはrequire-or-install.elがある。Rubyのrequireにディレクトリ名が必要な理由 - http://rubikitch.com/に移転しました←更新

Rubyのコンストラクタについて

コンストラクタ - RubyBeginner (ルビギナー)の世にも奇妙な開発 initializeはRubyの仕組みでNewというエイリアスコールができるようになっているようです。 エイリアスではない。Class#newがそう定義しているだけ。Rubyはクラスそのものがオブジェクト…つ…

ねんがんのObject#instance_execをてにいれたぞ! 〜Object#instance_evalに引数が渡せるようになった〜

Object#instance_exec欲しいなあ - http://rubikitch.com/に移転しましたinstance_execキターーーーーー(゜∀゜)ーーーーーー!!たった今、Ruby 1.8.7-preview4がリリースされた。 念願叶ってやっとObject#instance_execがbackportされたのだ!つまり、Rub…