2007-01-01から1年間の記事一覧

JRuby+RailsとRuby+Railsの速度比較

JRuby が「本家Rubyより速い」という @IT 記事をみて、Rails 上でスループットを比較してみました 結論としては、本家のほうがだんぜん速かったです... (略) 各一分の簡単な計測ですので、誤差はあると思いますが、それでも倍近い差ですね [ruby-list:43602]…

来週の今日、再来週の今日、…の日付を出力する

今日を起点にして、来週の今日(つまり7日後)、さ来週の今日(つまり14日後)、…を指定した回数繰り返すRubyスクリプト。以下では10週後までを表示しています。 weeks = 10 start = Date.today start.step(start + 7 * weeks, 7) do |date| puts date end 実行…

at_exitで終了時の処理を登録する

Rubyでは、at_exitで終了時の処理を登録することができます。 以下では、終了時にresourceがnilになっているかどうかを調べ、nilになっていなければメッセージを表示します。乱数を使って確率1/2で失敗するようにしてあります。 resource = '(Important reso…

JRuby: JavaプラットホームのためのRuby

この土日はRuby会議2007があります。関係者のみなさま、頑張ってください。6月9日のセッション壱の最後にはJRubyがありますね。 Ruby has become one of the fastest-growing languages in the world. Java is the most widespread platform in the world. J…

Rijndaelで遊ぶ

急にRubyで暗号化がしたくなりました。 1. cryptをインストールします。 C:\work> gem install crypt Successfully installed crypt-1.1.4ちなみにファイルは C:\ruby\lib\ruby\gems\1.8\gems\crypt-1.1.4 にインストールされています。 2. スクリプトを作り…

Amazon.co.jpの特定商品のランキングを調べるRubyスクリプト(修正あり)

『数学ガール』がアマゾンで予約可能になりました。この機会に「Amazon.co.jpの特定商品のランキングを調べるRubyスクリプト」を書いてみようと思いました。いまから作るのは「ASINのリストを元に、その本のタイトルと現在のランキングを表示する」というス…

SQLite3で遊ぶ(2)

昨日は途中で眠っちゃったので、仕切り直し。今日はテーブルの作成(CREATE TABLE)、レコードの挿入(INSERT)、それにSELECTを実行します。それからトランザクションも。 1. テーブルの作成(init.rb) CREATE TABLEを使ってpeopleというテーブルを作ります。rub…

ActionController::Base, Paginator

Ruby on Railsのscaffoldで生成したコントローラを読み、スーパークラスのApplicationController経由でActionController::Baseをちらちらと読んでいます。renderメソッドを読んで、少しわかった気分になりました。 そのあとPaginatorクラスをすこし読んで「…

SQLite3で遊ぶ(1)

何となく、Rubyを使ってSQLite3で遊びたくなりました。 1. CREATE TABLEでテーブルを作ります require 'sqlite3' SQLite3::Database.new('rubyco.db').execute_batch(<<-'EOD') CREATE TABLE people ( name TEXT ,mail TEXT ); INSERT INTO people VALUES ('…

Rubyの{ }と戯れて

1. 「ブロックを表す { } と、ハッシュリテラルの { } が混同されることはあるか?」というのが最初に抱いた疑問でした。それについては自分で「tASSOC(つまり=>)の有無でわかるじゃん」と思いました。つまり、以下の二つのメソッドmethod1, method2の呼び…

OpenStructで動的構造体を作る

RubyのOpenStruct(ostruct)を使うと、属性が自動生成される構造体を作ることができます。 require 'ostruct' alice = OpenStruct.new alice.name = 'Alice' alice.mail = 'alice@example.com' p alice #=> #<OpenStruct name="Alice", mail="alice@example.com"></openstruct>

Structは値を集めるクラス(を作る手軽なクラス)

Structを使うと、構造体が作れます。 Person = Struct.new(:name, :email) person = Person.new('Alice', 'alice@example.com') p person #=> #<struct Person name="Alice", email="alice@example.com"> p person[:name] #=> "Alice" p person[:email] = 'riddle@example.org' p person #=> #</struct>

Rubyでdebug

Ruby で debug する7つの方法を読んでメモ。 p, pp, ppp, y, backtrace, caller, set_trace_func, logger, profile, ruby-prof.

Ruby on Railsインストールメモ

Rubyをインストールする。 http://rubyforge.org/frs/?group_id=167 へ行く。 ruby185-24.exe をダウンロードする。 ruby185-24.exe を実行し、指示に従う。 C:\work> ruby -v ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32] RubyGemsをインストール…

Rubyの配布パッケージにはProgramming Rubyの第1版がついてくる

Rubyの配布パッケージにはProgramming Rubyの第1版が含まれているのですね。知らなかった。 http://rubyforge.org/frs/?group_id=167 から、ruby185-24.exe を使ってインストール後、C:\ruby\doc\ProgrammingRuby.chm を開くと読めます(英文)。

Ruby on Railsインストールメモ

Install Ruby http://rubyforge.org/frs/?group_id=167 (ruby185-24.exe) Install RubyGems http://rubyforge.org/frs/?group_id=126 (rubygems-0.9.4.zip) unzip rubygems-0.9.4.zip cd rubygems-0.9.4 ruby setup.rb Install Rails gem install rails --in…

配列をユニークにしてその個数とともに返せ

配列をユニークにしてその個数とともに返せ。 具体的には、["foo", "bar", "foo", "baz", "bar", "foo"] を、[ ["foo", 3], ["bar", 2], ["baz", 1] ] にする。 golf - babie, you're my home 考える道筋を全部書いてみます。 (1) 配列を表示させます。 a = …

Kernel#puts

普段使っているputsはどのクラスのメソッドなのだろう。riを使って探してみる。 C:\WORK> ri puts More than one method matched your request. You can refine your search by asking for information on one of: IO#puts, Kernel#puts, StringIO#puts, Zli…

irbは値を表示

irbを使うときにはprintはいらないのね。 C:\WORK> irb irb(main):001:0> print "Rubyco" Rubyco=> nil Rubycoの部分はprintの結果でた文字で、nilは(print "Rubyco")の値 irb(main):002:0> "Rubyco" => "Rubyco" irb(main):003:0>^Dabsしてみる。 C:\WORK> …

コマンドプロンプトでのCTRL+D

Windows XPのコマンドプロンプトでCTRL+Dを打ってもEOF代わりになるみたい。へえ。いままでCTRL+Zを使っていたよ。 C:\WORK> ruby print "Rubyco" ^D RubycoPerlでも同じですね。 C:\WORK> perl print "Rubyco" ^D Rubyco追記:a3さんから「ファイルおよびデ…

JRubyを使ってFizz-Buzz問題を解く

JRubyを使ってFizz-Buzz問題を解いてみましょう。以下手順。 Java(JDK)をインストールします。 (省略) JRubyをダウンロードします。 JRuby→Download!→zipファイル(たとえばjruby-bin-1.0.0RC2.zip) JRubyを展開します。 unzip jruby-bin-1.0.0RC2.zip バッチ…

JRuby

JRuby - Java powered Ruby implementation

Fizz-Buzz問題

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 どうしてプログラマに・・・プログラムが書けないのか? Fizzを…

Rubyのどこが好き?

artonさんのたくさんの好きを読んで。 rubycoはまだRubyが好きかどうかよくわかりませんが、今後好きになっていくとすれば…。 文法が好きだから好き(≒プログラムが書きやすいから好き) ソースがきれいだから好き(これって処理系のソースという意味でしょう…

$LOAD_PATHはファイルをロードするときのパス

$LOAD_PATHはloadやrequireがファイルをロードするときのパスの配列です。 $LOAD_PATH.each {|path| puts path } 実行結果です。 c:/ruby/lib/ruby/site_ruby/1.8 c:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt c:/ruby/lib/ruby/site_ruby c:/ruby/lib/ruby/…

すでにクラス以外のものが代入されている定数をクラス定義で使おうとしたらTypeError

すでにクラス以外のものが代入されている定数をクラス定義で使おうとしたらTypeError. 自然。 Rubyco = 123 p Rubyco # => 123 p Rubyco.class # => Fixnum class Rubyco end # => Rubyco is not a class (TypeError) 追記: znzさんから、 結局は同じ事です…

クラス定義の中は新しいフレーム、別のself

Rubyのクラス定義の中は新しいフレーム。 x = 123 p x #=> 123 class Rubyco p x #=> undefined local variable or method `x' for Rubyco:Class (NameError) end x = 123 p x #=> 123 class Rubyco x = 456 p x #=> 456 end p x #=> 123 Rubyのクラス定義の…

nil.yield

http://www.ruby-lang.org/ja/man/?cmd=view;name=ruby+1.9+feature nil.yield が導入されました。no block given (LocalJumpError) という例外を生成します Ruby 1.9では、ブロックが与えられていないのにyieldするとno block given (LocalJumpError)になる…

-xオプションはファイル中のスクリプトを抽出して実行

Rubyで-xオプションをつけると、ファイル中のスクリプトを抽出して実行します。 たとえば以下のファイルをsample.txtとしましょう。 次のようなプログラムをRubyで実行したらどうなるでしょう。 #!/usr/bin/ruby p "Hello" __END__ 結果は標準出力に"Hello"…

今度、Rubyのまつもとさんにお会いします

この「rubycoの日記」の中の人(id:hyuki)が近々、Rubyのまつもとさんとお会いすることができそうです。 ということで、何かもしMatzさんへの質問があれば、お送りください→詳細。 (注意:この「rubycoの日記」のコメント欄には書かないでください)