Hatena::Grouprubyist

bongoleのRubyを楽しむ日記 このページをアンテナに追加 RSSフィード

Rubyを楽しむ日記

2007-07-18

[]定数が見えない 01:26 定数が見えない - bongoleのRubyを楽しむ日記 を含むブックマーク

module Fuga
    CONSTANT = 'constant'
end

module Hoge
    include Fuga

    class Hige
        def initialize
            puts CONSTANT
        end
    end
end

p Hoge::Hige.new

と書くと

test.rb:10:in `initialize': uninitialized constant Hoge::Hige::CONSTANT (NameError)

from test.rb:15:in `new'

from test.rb:1

とおこられてしまう。

module Hoge
    CONSTANT = 'constant'

    class Hige
        def initialize
            puts CONSTANT
        end
    end
end

p Hoge::Hige.new

こっちはちゃんと動く。

なんでだろ。。。。

んー今更ながら、includeの理解が曖昧だ。。。

2007-07-17

[] do..end or {} ? 00:35  do..end or {} ? - bongoleのRubyを楽しむ日記 を含むブックマーク

#test.rb
p [1,2,3].collect { |i|
       i
  }.compact

と書くと

[1,2,3]

が表示されるけど、

#test.rb
p [1,2,3].collect do |i|
       i
  end.compact

と書くと

[1,2,3]

test.rb:3: undefined method `compact' for nil:NilClass (NoMethodError)

と表示される。

この違いがなんなのか説明できない。。。。orz

ちなみに実験環境

ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]

2006-08-08

[]ロギング 01:38 ロギング - bongoleのRubyを楽しむ日記 を含むブックマーク

railsのLoggerの出力が激しく役に立たなかったので元に戻す方法。

config/enviroment.rbのrequireの下あたりに以下のコードを追加する。

class Logger
  def format_message(severity, datetime, progname, msg)
    @default_formatter.call(severity, datetime, progname, msg)
  end
end

RAILS_DEFAULT_LOGGER = Logger.new("#{RAILS_ROOT}/log/#{RAILS_ENV}.log")

あとActiveRecordのログが色つきで困るので

ActiveRecord::Base.colorize_logging = false

も忘れずに書く。

あとログのローテートは、コピーして削除するシェルスクリプト書くといいらしい。

2006-07-19

[]Pathname 23:53 Pathname - bongoleのRubyを楽しむ日記 を含むブックマーク

いまさらながらPathnameクラスの出来のよさに感動する。

まじあり得ないくらい便利。

mkpathとかrmtreeとかすげーよ。バッチテストするときすごい役にたちました。

ありがとう。

2006-06-30

[]残ってた!!! 00:37 残ってた!!! - bongoleのRubyを楽しむ日記 を含むブックマーク

すげー俺!!!!

ちょっと前に使ってたiTunesフォルダまだ削除してなかったよ!!

奇跡!!

これで全部復旧できるYO!!!

まじで定期的にバックアップとるかRAID組もう。

[]iTunesライブラリ存在するのにファイルがない曲を探すスクリプト 00:29 iTunesのライブラリに存在するのにファイルがない曲を探すスクリプト - bongoleのRubyを楽しむ日記 を含むブックマーク

iTunesに登録してるフォルダがあるHDDが逝かれて大変だった。

なんとか復旧したものの200曲近く失うことになってしまった。。。。orz

で、どうやって失った曲を調べたかというと以下のスクリプトを"iTunes Music Library.xml"がある場所で実行して調べました。

実行結果としてCSV形式で失った曲のリスト標準入力に出力されます。

("iTunes Music Library.xml"は通常"マイドキュメント/iTunes"の下にあります)

require 'open-uri'
require 'kconv'
require 'csv'

$KCODE='u'

class Mp3
	attr_accessor :name, :album, :artist, :location
end

records = []

tmp_record = nil;
open('iTunes Music Library.xml', 'r').each_line do |line|
	line.strip!
	line =~ %r!<string>(.*)</string>!
	next unless $1
	str = $1
	case line
	when %r!^<key>Name</key>!
		tmp_record = Mp3.new
		tmp_record.name = str.tosjis
	when %r!^<key>Artist</key>!
		tmp_record.artist = str.tosjis
	when %r!^<key>Album</key>!
		tmp_record.album = str.tosjis
	when %r!^<key>Location</key>!
		tmp_record.location = URI.decode(str.sub('file://localhost/','')).tosjis
		records << tmp_record
	end
end

buf = ""
CSV::Writer.generate(buf) do |csv|
	records.each do |r|
		unless test(?e, r.location)
			csv << [r.artist, r.album, r.name, r.location]
		end
	end
end

print buf

CSVアーティスト名, アルバム名, 曲名, ファイルの場所 の順番で出力されます。

もうね、200行近く出力された瞬間泣きそうになったというか泣いてた。。。。。。。。。。。。OTZ