Rails 2.0.2に移行する。一応Rubyも最新版に上げておこう
現在の環境は以下の通り。on Debian。
ruby -v #=> ruby 1.8.5 (2007-06-07 patchlevel 52) [i686-linux] rails -v #=> Rails 1.2.3
rubyはユーザーのローカルディレクトリにインストールしている。
まずはRubyを最新安定版のruby 1.8.6-p111に
http://www.ruby-lang.org/ja/downloads/から最新安定板ソースを取得。
既存のRubyを消去。
mv ~/local/ruby ~/local/ruby-old
ここではユーザーのローカルディレクトリ/home/dan/local/rubyにインストールするものとする。
mkdir temp cd temp wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p111.tar.bz2 tar xvf ruby-1.8.6-p111.tar.bz2 cd ruby-1.8.6-p111 ./configure --prefix=/home/dan/local/ruby make make install
ruby 1.8.6がインストールされたことを確認しておく。
ruby -v #=> ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-linux]
ここまではOK。
Ralilsを入れるためにRubyGemsを入れる
RubyGemsのページから最新版(0.9.5)をダウンロード。
cd ../../temp wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz tar xzvf rubygems-0.9.5.tgz cd rubygems-0.9.5 ruby setup.rb
確認しておく。
gem -v #=> 0.9.5
OK。
Ralisをインストールしようとしたら……
こんなエラーが。
gem install rails #=> ERROR: While executing gem ... (Gem::Exception) #=> SSL is not installed on this systemむむ。
Capistrano で遊ぶ - ねもぷらすにも同じエラーの報告が。こちとら、rubyはapt-getじゃないんで、どうしたものか。
続き(解決)
次の手順で解決した。上記エラーは手元の環境にssl.hがなかったのが原因らしい。rootで下記コマンドを実行して解決。ruby-openssl のインスコ問題は1行でイナフだった - Home And Dryを読んでいたらなんとなくわかった。
apt-get install libssl-devlibssl-devを入れた後、rubyのインストールをconfigureからやり直す。
ちなみに「ruby -r openssl -e ""」と打ち込んでみて何も表示されなければ、rubyにopensslはインストールされている。
メモ
SSLの問題を解決する前の話。gemを0.9.4にしてみたら上記のエラーはでなくなったけど、今度は次のエラーが。
Select which gem to install for your platform (i686-linux) 1. activesupport 2.0.2 () 2. Skip this gem 3. Cancel installation > 1 ERROR: While executing gem ... (OpenURI::HTTPError) 404 Not Foundこれも上記opensslで問題を解決したら出なくなった。(それとも時間が解決してくれた?)
Ralisをインストール
gem install rails
次のようなメッセージが表示されてインストール完了。
Bulk updating Gem source index for: http://gems.rubyforge.org Successfully installed rake-0.7.3 Successfully installed activesupport-2.0.2 Successfully installed activerecord-2.0.2 Successfully installed actionpack-2.0.2 Successfully installed actionmailer-2.0.2 Successfully installed activeresource-2.0.2 Successfully installed rails-2.0.2 7 gems installed Installing ri documentation for rake-0.7.3... Installing ri documentation for activesupport-2.0.2... Installing ri documentation for activerecord-2.0.2... Installing ri documentation for actionpack-2.0.2... Installing ri documentation for actionmailer-2.0.2... Installing ri documentation for activeresource-2.0.2... Installing RDoc documentation for rake-0.7.3... Installing RDoc documentation for activesupport-2.0.2... Installing RDoc documentation for activerecord-2.0.2... Installing RDoc documentation for actionpack-2.0.2... Installing RDoc documentation for actionmailer-2.0.2... Installing RDoc documentation for activeresource-2.0.2...
Rails 2.0.2でデフォルトDBがSQLite3に
Rails 2.0.2でデフォルトDBがSQLite3に - idesaku blog
先日2.0.1をリリースしたばかりのRuby on Railsだが、早くも2.0.2がでてきた。このバージョンで、RailsのデフォルトDBがMySQLからSQLite3に変更されたそうだ。
これはうれしい気がする。全部SQLite3で済ませようと思っていたし。
早く2.0試してみないと。
書きかけだった正規表現のページを書き始めた
はっきり言って、正規表現は苦手。正規表現は、日常的に使うけれど、他人に正確に説明するほどの自身はない。
特に覚えられないのが、ここ。
- ^ …… 行頭。文字列の先頭や改行文字の直後の位置にマッチします。
- $ …… 行末。文字列の末尾や改行文字の直前の位置にマッチします。改行自身は含みません。
- \A …… 文字列先頭。^ とは異なり改行の有無には影響しません。
- \Z …… 文字列末尾。文字列が改行で終っていればその改行の直前にマッチします。
- \z …… 文字列末尾。$ や \Z とは異なり改行の有無には影響しません。
整理しよう。
まず、「^」と「$」。この2つは行頭と行末にマッチする。そして、文字列の先頭と文字列の末尾にもマッチする。うん、これはOK。
次に、「\A」と「\z」。これらは改行があろうがなかろうが関係ない。改行は無視して、単純に文字列の先頭と末尾にマッチする。これもOK。
最後に「\Z」。これはなんだろう。「文字列が改行で終っていればその改行の直前にマッチします。」って。改行で終わっている文字列とは、次のような文字列だよな。
"hello\n"
で、その改行の直前にマッチすると。試してみよう。
"hello\n" =~ /.\Z/ p $& #=> "o" "hello\n" =~ /.\z/ p $& #=> nil "hello\n" =~ /.\z/m p $& #=> "\n"
ふうむ。わかったようなわからないような。
プログラムを知らない人にRubyについて、Rubyの魅力、Rubyを取り巻く状況を伝えるとしたら
どんなのがいいだろう。
- コードがわかりやすい
- シンプルに書ける
- 少ない文字数で書ける
- 無駄なことは書かなくていい
- 仕事に集中できる。ややこしい作業に煩わされない
- プログラミングが楽しい
- 日本で生まれた言語
- 日本人によって開発されている
- 世界で使われている
- 今急速に使う人が増えている
- オープンソース
- 無償で利用することができる
- 開発に関するやり取りがMLで行われ、公開されている
- 誰でも意見を述べることができるし、開発に参加できる
- 今も進化している
開発版では登録された要素の順序が記憶されるように
最新の開発版のRubyでは、ハッシュは登録した順序を記憶するようになりました。
次のような処理を試してみると、登録した順序の通り処理が行われていることが確認できます。
# ruby 1.9.0 (2007-12-13 patchlevel 0) [i686-linux] a = { "tomato" => 120, "potato" => 50, "carrot" => 30, } p a #=> {"tomato"=>120, "potato"=>50, "carrot"=>30} a.keys #=> ["tomato", "potato", "carrot"] a.values #=> [120, 50, 30] a.each do |key, value| puts "#{key}の値段は、#{value}円です。" end #=> tomatoの値段は、120円です。 potatoの値段は、50円です。 carrotの値段は、30円です。
ちなみにruby 1.8.5では、次のような結果となり、順序は保存されません。
# ruby 1.8.5 (2007-06-07 patchlevel 52) [i686-linux] a = { "tomato" => 120, "potato" => 50, "carrot" => 30, } p a #=> {"carrot"=>30, "potato"=>50, "tomato"=>120} a.keys #=> ["carrot", "potato", "tomato"] a.values #=> [30, 50, 120]
個人的には、最新版のように順序を記憶してくれる仕様が正式に採用されることを祈っています。
疲れる小人さん
class Kobito def initialize(tree, basket) @tree = tree @basket = basket @tiredness = 0 end def work unless @tree.empty? if tired? eat else carry end end end def tired? @tiredness >= 3 end def eat @tree.shift @tiredness = 0 end def carry @basket.push @tree.shift @tiredness += 1 end end tree = ["apple", "apple", "apple"] basket = [] while gets hobbit = Kobito.new(tree, basket) hobbit.work p tree p basket end
プリントアウトして直し
赤ペンを持って校正。でも、それをPCに向かってフィードバックするのがめんどくさい。でも印刷して読み直すといろいろ見えてくるから仕方がない。
昨日はフィードバックの日だった。今日はまた新しいところを書く日。メソッド定義が終わったから、次は配列またはクラス定義。どっちも半分以上書けているのだが、残りのややこしいところを書き上げる必要がある。