ruby

全角スペース対応版strip

書いてみた。速度的にはまだまだ改善の余地があると思う。 class String def strip_with_full_size_space s = " \s\v" self =~ /^[#{s}]+([^#{s}]+)[#{s}]+$/ ? $1 : self end end ベンチマーク用のコード。 require 'benchmark' n = 50000 s1 = " 全半混在 …

irbの起動時はLoadErrorが発生しても無視されるが、その後のライブラリの読み込み等は行われない

.irbrcで require 'hogehoge' とやっても例外も警告も出なかったので、なんでだろうと思って調べてみた。 irbの起動処理はirb/init.rb内で行われる。このうち、irbrcを読み込んでいるのはIRB.run_configメソッドだと思われる。以下にコードを抜粋する。 def …

MySQL/Rubyのバージョン確認方法

gemでインストールするMySQL/Rubyのバージョンは2.7と少々古いので、念の為に2.7.4にバージョンアップしておく。 require 'mysql' Mysql.const_get(:VERSION) => 20704 でバージョンをチェックする。 20704だと2.7.4になる。 今見てみたら1.9対応の2.8pre1が…

Rubyでの正規表現についての覚書

Rubyで正規表現オブジェクトを作る方法は以下の三通り。 /pattern/option %r{pattern}option Regexp.new('pattern', option) 通常扱うのは/pattern/option。所謂正規表現リテラルで、リテラル内には式展開を含める事ができる。 /hoge#{"foo"}/ # => /hogefoo…

adv_attr_accessorの実装から感じるRailsの哲学

ActionMailerのソースを読んでいたら、 adv_attr_accessor :bcc と言うコードが合ったので、このadv_attr_accessorという謎のメソッドを調べてみた。 短かいコードだったので全文引用してしまう。 module ActionMailer module AdvAttrAccessor #:nodoc: def …

BackgrounDRbのWorkerオブジェクト削除タイミングについての悩み

BackgrounDRbのサンプルでよく見かけるのが以下のようなソース。 def start_background_task session[:KEY] = MiddleMan.new_worker(:class => :foo_worker, :args => "hoge") end #start_background_task.rhtmlから非同期で呼ばれるアクション def update_p…

Ctrl + Cで終了しないRubyプログラム

バッチ用のRubyプログラムをちょっと動かしてからCtrl + Cで終了させたものの、止まってくれなくて焦る。標準出力にガンガン出力されていく…。 kill -s 9 で強制的にKillするが、そもそもCtrl + Cで止まらないことが問題。 ちょっと考えてみたところ、原因は…

プレースホルダを遅延評価する

最近便利に使っているのがプレースホルダ(%s)を遅延評価させること。 要は動的な定数(?)を定義する事が出来る。 ソースを見た方が早いと思うのでさくっと。 SEARCH_URL = 'http://www.google.co.jp/search?q=%s' %w(ruby perl php).each{|word| puts SEAR…

セッタが未定義もしくはprivateなインスタンス変数の内容をクラスの外部から取得する

追記 エントリ本文の内容は間違い。 instance_variable_getメソッドの引数にはシンボルだが、変数名のみではなく@を含む必要があった。 puts c.instance_variable_get(:write_only) rescue puts $!.message #=>`instance_variable_get': `write_only' is not…

正規表現オブジェクトの作り方と注意点

Rubyで正規表現オブジェクトを作る方法は以下の三通り。 /pattern/option %r{pattern}option Regexp.new('pattern', option) 一番利用頻度が高いのが/pattern/で、この場合patternには式展開を含める事ができる。 /hoge#{"foo"}/ # => /hogefoo/ ただし、opt…

Railsではアクション内にConst変数を宣言することができない?

以下のようなコードをアクションに書いたらシンタックスエラーになってしまった。 Item = Struct.new("Item", :value, :name) case type when 'select' item.new(0, "選択して下さい") when 'search' item.new(0, "すべて") else item.new(0, "すべて") end …

Rubyでは制御文までオブジェクトです。

print( "#{ if true "hoge" else "foo" end} bar" ) #=> hoge bar おお、これは凄い。 若干キモ臭も漂うものの、やっぱりRubyは素敵。 参考 http://ruby.mirror.easynet.be/ja/column/v0004.html

file_columnプラグインでお手軽アップローダ作成

インストール 適当な名前でRailsアプリ作成 ruby script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk ディレクトリがtrunkで掘られるのでfile_columnにリネーム 動作確認 コントローラとアクション、モデルとか一…

RMagickをWindows環境にインストール

Rubyで画像処理がしたくなったのでRMagickをインストール。 Windowsでも動いた。 インストール http://rubyforge.org/projects/rmagickからrmagick-win32をダウンロード。 アーカイブを解凍後、ImageMagick-6.3.0-7-Q8-windows-dll.exeを実行。インストール…

はてなワンライナーコンテストRubyだけまとめ

はてなブックマーク - どうしてプログラマに・・・プログラムが書けないのか? 記事よりみんなのサンプルコードの方が楽しい。 ワンライナーもいいけどこういう時ってコメント欄に書くんじゃなくて編集欄にみんなでガリガリ書くのはどうなんだろ。Wikiっぽく…

ERB記法メモ

改行やら空白を良い感じに制御する記法が合ったと思ったんだけど、Google先生に聞いても(%とか記号が聞けないのが痛い)パッとしなかったので自分用に覚書。 Rubyのコードを実行。 Rubyのコードを実行し、その結果を出力する。 タグ以下はすべてコメント 改…

ARの実装とRuby処理系のTimeに関する実装でハマる

ActiveRecordでSQLServerからMySQLにデータを移行するスクリプトを書いているときに躓く。 正直全部書ききれないので端折って結論だけ書いてしまう。 Windowsの処理系においてTime.localメソッドはGMTとの時刻差を前提に入れて書いておかないとハマる。 これ…

クラス変数はサブクラスでも共通

クラス変数の内容を出力する簡単なソース。 なんだけど、実行結果は不思議な結果に。 class BaseHoge cattr_accessor :hoge @@hoge = 1 puts self.hoge endclass DHoge1 @@hoge = 3 endclass DHoge2 puts self.hoge end 自分が期待していたDHoge2のクラス変…