備忘録的な何か

技術ブログ的な何かです

2013-01-01から1年間の記事一覧

Slimを.rbファイルの中に書く (Railsネタ)

タイトル通りの話です。 次のようにすればできますが、効率は悪いような気がします。 engine = Slim::Engine.new eval engine.call('a href="http://www.google.com" Google') #=> <a href="http://www.google.com">Google</a>

CRuby(MRI)はスレッドセーフなのか

少々炎上しそうな表題ですが、色々と調べたので覚書。まず、前提条件として、CRubyはGIL(Global Interpreter Lock)という仕組みがあります。 細かい説明は グローバルインタプリタロック - Wikipedia を参照いただくとして、Rubyインタプリタは必ずGILを取得…

C#のiEnumerable#SelectはEnumerator::Lazy#mapだった件

C#は.net framework 3.5より、LINQ用のEnumerableメソッドが追加されています。Select,Where,OrderByなどです。 これらのメソッドは、LINQでの使用はもちろん、ラムダ式を渡して、利用することができます。これは、Rubyのmapやfilterに当たるものになります…

C#でeach_with_indexをする

Rubyのeach_with_indexって便利ですよね。 C#には、each=ForEach、map=Select、select=WhereとRubyのEnumeratorのメソッドに相当するものが有りますが、私の大好きなeach_with_index相当がありません。 ということで、拡張メソッドを使ってサクッとモンキー…

ActiveRecordのTimeZoneConversionが遅い件 (Rails小ネタ)

ActiveRecordでレコードを取得する場合、以下の様なコードを書いたとする。 Article.where(cond).map{|record| #condは検索条件 record.attributes.each{|name,value| #hoge } } この処理はレコード数が多い場合に非常に遅い。その理由は、record.attributes…

Rubyのnilの挙動を利用する

皆さんご存知の通り、RubyはnilはNilClassのオブジェクトである。 NilClass.instance_methods(false).sortとしてみると、結構な関数が定義されている。 => [:&, :^, :inspect, :nil?, :rationalize, :to_a, :to_c, :to_f, :to_h, :to_i, :to_r, :to_s, :|] #…

ActiveRecordで複数条件のorクエリまたはinクエリを投げる(Rails小ネタ)

ActiveRecordでor検索をしようと思うと、意外と簡単にはできない。 Table.where(id: 1).or(id: 2) とかでできそうなものだができない。 真面目にやるには、Arelを使ってやるのが一番のようだ。 http://techracho.bpsinc.jp/tsunekawa/2013_05_24/8502 非常に…

compactしないで、nilを含む配列からnilではない最初の要素を取得する方法

表題どおり。 arr = [nil,"hoge","fuga"]という配列があり、nilではない最初の要素を取得したい場合、私は以下のようにしていた。 arr.compact.first #=>"hoge" コードゴルフ的に言えば18byteなので、あまりいただけない。(firstではなく、[0]でアクセスする…

tapを使って配列じゃなくてもeachする方法

処理対象がEnumerableな要素かそうでないかわからない時ってよくありますよね。 ActiveRecordなんかもそうですが、1要素の時は単体のオブジェクトがきて、複数要素の時はEnumerableが来るapiってわりとあります。(scanとかもそう。) で、tapを使えばそれを…

ActiveRecordのjoinsで全カラムを取得する方法 (Rails小ネタ)

ActiveRecordではjoinsメソッドを利用して、inner joinすることができる。 例: Blog.joins(:article) #=> SELECT "blogs".* FROM "blogs" INNER JOIN "articles" ON "articles"."blog_id" = "blogs"."id" ここで、問題になるのは"blogs".*である。articles…

Rubyでまとめて動的クラス定義

リファクタリングRubyエディションを読んでいたら、def_eachというイカしたメソッドがあった。まとめて、似たようなメソッド定義をするものだ。 ここで、まとめて似たようなクラス定義をする関数もあったらいいなと思ったので作ってみた。役立つか微妙だが*…

redcar(Ruby)のオレオレ改造をしてみた。

JRuby製テキストエディタRedcarというのがある。 https://github.com/redcar/redcar 便利なのだが、個人的に以下の不満があった。 (1) Ruby1.8系でしか動かない。Evalする時にRuby1.9系のHashの構文とか使えない (2) 日本語ファイル名がNG。日本語ファイル(U…

Excel VBA To Ruby Converter

手抜きプログラムシリーズ。 Excel VBAが吐き出したコードをRubyのWin32ole対応のコードに変換するスクリプトを作成した。やっぱ、ExcelやるならRubyでしょ的な。 https://www.dropbox.com/s/jw51apxtrgjle3k/vba2ruby.rb 基本的な文法(SubとかWithとかForと…

postgreSQL RC 9.3 インストール

http://www.enterprisedb.com/products-services-training/pgdevdownload に行く。 Linuxの場合、Linux版のをダウンロードする。 chmod 755 postgresql-9.3.0-rc1-linux.run で権限を付けて、 ./ postgresql-9.3.0-rc1-linux.run すれば、Windowsのインスト…