「初めてのRuby」一人勉強会最終日
Ruby をぼちぼち勉強しています。
教材はコレ↓
初めてのRuby
今日は第9章。本書を越えて
これを読みつつ、つぶやいてみます。
以下、つぶやきメモ。
※1 今のところ、正直あまり Ruby は好きではありません。
※2 オイラがまともにそこそこ書ける言語は C#, Java(5.0より前), Perl です。言語の機能を語っているときはその辺との比較になっているはず
※3 Ruby はまだあんま理解していないので、的外れでトンチンカンな批判してるかも
※4 コードはサンプルそのままのときと、オイラが勝手に変えてるときがあります
RubyGems (p.167)
% gem list gem: コマンドが見つかりません.
オイラの環境には入ってなかった。FreeBSD では ports で入れろってことね。devel/rubygem を入れるみたい。
openuri ライブラリ (p.170 例9-1)
#!/usr/local/bin/ruby require 'open-uri' open("http://www.oreilly.co.jp") { |connection| connection.each_line do |line| print line end }
HTTP のライブラリみたい。便利だね。
Active Record (p.170 例9-2)
#!/usr/local/bin/ruby require 'rubygems' gem 'activerecord' require 'active_record' ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory') ActiveRecord::Base.connection.create_table("books") do |t| t.string :isbn, :limit => 13, :null => false, :unique => true t.string :title, :null => false t.timestamps end class Book < ActiveRecord::Base; end Book.create!(:isbn => '9784003220931', :title=> "ガリヴァー旅行記") p Book.find_by_title("ガリヴァー旅行記")
% ruby a.rb a.rb:11: undefined method `string' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x28b881ac> (NoMethodError) from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.6/lib/active_record/connection_adapters/abstract/schema_statements.rb:94:in `create_table' from a.rb:9
このサンプルコードが動かなかった。Active Record の仕様が変わったのかなぁ?それともオイラがどっか内間違えてるのだろうか?
ちなみに、 database/rubygem-activerecord を SQLite3 のバインディングを付けてインストールした。バージョンは Active Record の 1.15.6 らしい。
GD2 (p.171 例9-3)
#!/usr/local/bin/ruby require 'rubygems' require 'gd2' image = GD2::Image::TrueColor.new(270, 200) image.draw do |pen| pen.color = image.palette.resolve GD2::Color[1.0, 1.0, 1.0] pen.fill pen.color = image.palette.resolve GD2::Color[1.0, 0.0, 0.0] pen.thickness = 2 pen.move_to 20, 50 # このサンプルは MAC 用かな? #pen.font = GD2::Font::TrueType['Library/Fonts/Courier New.ttf', 40] # FreeBSD だと下記でとりあえず動いた(多分 japanese/ipa-ttfonts がいる) pen.font = GD2::Font::TrueType['/usr/local/lib/X11/fonts/TrueType/ipag.ttf', 40] pen.text "%s\n%s\n%s" % %w[Welcome to Ruby].map{|s| s.center(7) } end image.export('09-003-output.png')
グラフィックスライブラリかな。初めて使ったので良く分からんです
graphics/rubygem-gd2 をいれたら動いた。元サンプルそのままだとダメで、ちゃんと存在するフォントを渡してやる必要がある。
wxWidgets (p.171-172 例9-4)
wxWidgets という GUI ツールキットもあるらしい。でもこのサンプル動かなかった。wxruby がちゃんと入っていないっぽい。x11-toolkits/ruby-wx ってのを入れたんだけどなぁ...
コンテキストのすり替え (p.174 例9-6)
#!/usr/local/bin/ruby class CybernatedAndroid def initialize(name) @name = name end end proc = Proc.new { p self p @name } dicey = CybernatedAndroid.new("dicey1") dicey.instance_eval(&proc)
実行するとこんな感じ。
% ruby a.rb #<CybernatedAndroid:0x28326ff4 @name="dicey1"> "dicey1"
うぉ、恐い。インスタンス変数にアクセスできちゃう。黒魔術な領域です。
method_missing (p.175-176 例9-8)
method_missing(method_name, *arguments) 定義されてないメソッドを呼んだときに呼ばれる。Perl の AUTOLOAD みたいなもんだね。