ruby

ActiveRecordの複数形処理

ActiveRecordは要素クラスの名前を複数形に変えてテーブル名としてくれるのですが、なんだか不思議な感じがします。 # Users テーブルへアクセス class User < ActiveRecord::Base end # People テーブルへアクセス class Person < ActiveRecord::Base end U…

ActiveRecordはrequireに時間がかかる?

重い腰をあげてActiveRecordを実際にいじってみたのですが、これがずいぶん重たい。ちょっとした実験コードでも数秒固まります。 簡単に時間を計ってみると、mswin32でのrequireに8秒ちょっと(ActiveSupport 約5秒、ActiveRecord本体 約3秒)かかってるよう…

net/httpの例外捕捉方法(2)

先日のNet::HTTPの例外補足方法、 rescue Timeout::Error だけではエラーを捕捉しきれませんでした。*1たしかErrnoの何かかEOFErrorだったはずなのですが、うっかりエラーメッセージを記録しわすれてしまったうえに、サーバの調子が悪い時にしかお目にかから…

relative_time

Twitter Fan Wiki / RelativeTimeScriptsにあるスクリプトのRuby版です。 引数は文字列のままでもTimeオブジェクトでも受け付けます。 いつからかtwitterの表示が変わってしまったので*1完全再現できるものではありませんが、雰囲気は出ます。:-) *1:1分以内…

JavascriptのUnicodeをescape/unescape

Unicode エスケープシーケンスをRubyで扱う方法。 module Unicode def escape(str) ary = str.unpack("U*").map!{|i| "\\u#{i.to_s(16)}"} ary.join end UNESCAPE_WORKER_ARRAY = [] def unescape(str) str.gsub(/\\u([0-9a-f]{4})/) { UNESCAPE_WORKER_ARRA…

Net::HTTPの例外補足方法

Net::HTTPは内部でTimeoutを利用しているけども、これのエラー補足までの面倒は見てくれない。 なので必ずrescueで補足してあげる必要がある。 begin Net::HTTP.get(url) rescue puts "exception on HTTP: #{$!}" end ・・・と安直にやりたいところだけれど…

自分のプロセスの優先度を変える

require 'win32ole' module Win32 NORMAL_PRIORITY_CLASS = 0x00000020 IDLE_PRIORITY_CLASS = 0x00000040 HIGH_PRIORITY_CLASS = 0x00000080 REALTIME_PRIORITY_CLASS = 0x00000100 BELOW_NORMAL_PRIORITY_CLASS = 0x00004000 ABOVE_NORMAL_PRIORITY_CLASS …

O/RマッピングとActiveRecord

るびま で Object-RDB mapping というものがあると知る。 SQL文組み立てっておもしろいけど手間だもんねぇ。 多くはRuby/DBIを利用しているけれども、このうちActiveRecordは違うような。 RoRのコンポーネントだし、RoR + SQLiteという話は何度か見かけた記…

Ruby/DBI + DBD::SQLite は要コンパイル。

バックエンドの差を埋めてくれるDBIに慣れておいた方がいいのかな、と思ったけれども、DBD::SQLiteは拡張ライブラリしかなかった。 gemやバイナリ配布もなし。 いまはVCが入ってないから、そのままじゃインストールができません…。 mingw版はmswin32版と拡張…

sqlite3-rubyがおもしろい

手軽にDBが使えるSQLite。インストールまで手軽になってました。mswin32でもラクラク。 導入の仕方を覚え書き。

privateなメソッドはサブクラスから呼べるのか?

呼べました。 class Foo private def priv end end Foo.new.priv # => NoMethodError: private method `priv' called for #<Foo:0x28da3f4> class Bar < Foo def call_priv priv end end Bar.new.call_priv #=> nil なるほど、レシーバなしで呼べるからOKなんだね。 private</foo:0x28da3f4>…