Ruby

Pythonのデコレータが面白いのでRubyで実装してみた

・・・けどいまいちだったorz一応説明すると、デコレータって言うのはPythonにあるアノテーションでメソッドを拡張できる機能・・・らしい。今回の目標はこれを動かすこと。(@declareArgs(float, float)がデコレータ) http://www.itmedia.co.jp/enterprise/a…

RejectRejectKaigi

お祭りみたいな発表の場でAward on Railsをそのまんま紹介するような空気読めない真似だけはしちゃいけないと思ってがんばった*1。 あとでささださんに「あの発表はどうなんですかね?」とか言われちゃったけど、 どうって・・・、最高じゃないっすか、ねぇ…

NullObject

昨日の続き。こんなん考えてみた。 class NullObject def initialize(value=nil) def value.method_missing(name, *args, &block) self end unless [Symbol, NilClass].include? value.class @value =value end def method_missing(name, *args, &block) @va…

NilClass#method_missing

まいどまいど value = an_instance ? an_instance.some_method : nil とか、いやじゃんね? class NilClass def method_missing(name, *args, &block) nil end end ときどきこう言うのが欲しくなる。

jpmobileプラグインとSoftbank

バージョンによるかもしれないけど、jpmobileプラグインってソフトバンクの時だけ文字コードの変換をしないようになってんのね。 class Jpmobile::Filter::Sjis # 前略 # to_internalを適用するべきかどうかを返す。 def apply_incoming?(controller) # Voda…

クックパッドLTに参加してきた

今回で3回目になるクックパッドさんでのLT(というかRailsサービス紹介?)に参加してきました。 ベトナム料理がむちゃうまかったです。ごちそうさまでした。 ・・・ で、終わりたくなるくらい料理が美味しかったですが、それはおいといて発表の話。作品で面白…

FlashのデータをRails経由でDBに書き込んだり読み出したり

できてしまえば結構簡単だけど、この方式に至るまでが長かった・・・ 使うもの rubyamf (Rails側) ssr (Flex側) Rails側 例としてFlashControllerでデータを受けて、FlashDataモデルのdata属性にデータを保存することにします rubyamfプラグインをインストー…

キャッシュ回りの設定

environment/development.rb とか見てるとキャッシュ周りの設定がいくつかあってちょっと混乱したのでメモ config.cache_classes アプリケーションのソースを変更したときにリロードするかどうか config.action_controller.perform_caching ページキャッシュ…

find_by_sql_with_deleted

acts_as_paranoidはレコードを論理削除してくれるRailsプラグインで、findの条件節に自動的にdeleted_at IS NULLとか付けてくれるわけなんだけど、どうもfind_by_sqlはその範囲外らしい。 by_sqlって付けてるんだからそのSQLをそのまま実行したいという気持…

全てをProcに

さらに気付いた。これでいいじゃん。 class Object def to_proc lambda {|arg| self === arg} end end こんな風に使って ['123', 'abc', '1bc'].select(&/^\d/) [1, 2, 4, 8, 16, 32].select(&(3..10)) 結果はこんな感じ ["123", "1bc"] [4, 8]

正規表現をProcに

正規表現をProcインスタンスに変えてくれるメソッドがあったら便利な気がした。こんな感じ。 class Regexp def to_proc lambda {|arg| self =~ arg} end end したらこう使える ['hoge', 'foo', 'bar', 'xyzzy'].select(&/^.{3}$/) 結果は ["foo", "bar"] Sym…

Rubyのcaseって

同僚のコードで見たんだけど case when t < Time.now.last_month.beginning_of_month '先月以前' when t < Time.now.beginning_of_month '今月以前' when t < Time.now.next_month.beginning_of_month '来月以前' else '未来' end caseって対象オブジェクト…

injectをwhileの代わりに使う

Railsのacts_as_treeで、あるノードの親を全て取得するのに def parents ret = [] current = self while current.parent ret << current.parent cur = current.parent end ret end とかやってたんですけど、どうもどんくさくて嫌なので無理やり回避。 class …

ActiveRecordの抽象サブクラスを作る

普通にActiveRecordのサブクラスを作るとSTIと見なされて、サブクラスはテーブルと一対一対応にはなりません。親クラスだけがテーブルと対応してて、サブクラスのインスタンスには親クラステーブルから必要なのだけとってきて設定される感じ。 これはこれで…

サブディレクトリ内のコントローラに同一ディレクトリ内のapplication.rhtmlを適用

admin/top_controller.rbにはviews/layouts/admin/application.rhtmlを自動的に適用して欲しかったので、とりあえず次のようにしてみた。app/controller/application.rb class ApplicationController < ActionController::Base class <

Backgroundrb最新

最新のbackgroundrbを入れて ./script/generate worker DoSomethingすると % ./script/generate worker DoSomething config/backgroundrb.yml vendor/plugins/backgroundrb/lib/backgroundrb.rb:16:in `init': You have a nil object when you didn't expect…

annotate_modelsをちょっと改造

annotate_model便利なんだけど、変更されてないテーブルのモデルとかフィクスチャとかのヘッダも書き換えるので、うっかり実行するとものすごい勢いで他の人の変更と衝突して辛い。ので、無理やり改造。vendor/plugins/annotate_models/lib/annotate_models.…

配列からランダムに指定数分アイテムを抜き出す

def pick_some(num, ary) (1..num).inject([]){|s, e| s << ary.delete_at(rand(ary.size))}.compact end 順序は崩れます。 inject使いたいのでtimes doじゃなくてむりやりRangeにした。

to_blob

これはエラー irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'RMagick' => true irb(main):003:0> img = Magick::Image.new 10, 10 => 10x10 DirectClass 32-bit irb(main):004:0> img.to_blob Magick::ImageMagickError: no decod…

MapReduce

セミナーでそれなりに気持ちが盛り上がったので、dRuby版をなんとなく動くようにしてみました。 ruby examples/word_count.rb -ts # TupleSpace ruby examples/word_count.rb -m # Map ruby examples/word_count.rb -m # Map ruby examples/word_count.rb -r…

ruby-xslt

sudo apt-get install libxslt-dev sudo gem install ruby-xslt

MapReduce

マルレクサブセミナーのメモ。 MapReduceの入出力単位はKey:Valueの組(ペア)のリスト 処理単位はMapとReduceに加えて、隠された処理であるSort 大まかな処理の流れは Map : 処理に適したペアに組みなおす(入出力は一対一) Sort : 出力をReduceの入力として…

<<メソッド

へー irb(main):010:0> class Foo irb(main):011:1> def <<(val1, val2) irb(main):012:2> puts "#{val1}, #{val2}" irb(main):013:2> end irb(main):014:1> end[f:id:technohippy:20071209014327p:image] => nil irb(main):015:0> foo = Foo.new => #<Foo:0xb7dbef40> irb(m</foo:0xb7dbef40>…

TMailで携帯の変態アドレスを通す

ActionMailerで、って書いた方が受けがいい? 携帯では「o...rz.@docomo.co.jp」とかいうお茶目なアドレスが未だ有効だったりします。が、残念ながらTMail(0.10.7で確認)だと3つ以上連続するピリオドを持つアドレスは不正と判断されます。まぁ実際に不正なア…

RMagickの使い方 (How to use RMagick)

サーバーに上げてみたKaoChartは想像を遥かに超える重さで、このままでは世間様に全く申し訳が立たないので今さら真面目にRMagickのドキュメントを読んでみる。ちなみにちょろっと読んだ結果、数倍は早くなりそうな予感。画像生成部分は修正と言うより作り直…

to_json

>> JSON.parse 1.to_json JSON::ParserError: A JSON text must at least contain two octets! from /usr/local/lib/ruby/gems/1.8/gems/json-1.1.1/lib/json/common.rb:119:in `initialize' from /usr/local/lib/ruby/gems/1.8/gems/json-1.1.1/lib/json/co…

KaoChart.com

ざわ・・http://kaochart.com 最近、「お察しください」的事情で株価をチェックすることが多いんだけど、そこで目にしたYahoo株価のフェース分析がおもろいなーと思ったので作ってみた。 単体だと単なるシンプルな顔だけどたくさん並べるとなかなか面白いと…

ruby-gettextってActiveRecord使ってないRailsアプリじゃ使えない?

いやActiveRecord使わないRailsアプリって存在がレアなのは分かるけど、gettextにAR必須ってのも普通に考えておかしな話だよね・・・。もしかしてどっかでなんか設定すれば通る? #config/environment.rb config.frameworks -= [:active_record] こうしても…

ruby-gettext

"hello #{_('gettext')} world" ↑これは認識してくれないみたいなので "hello " + _('gettext') + " world" ↑こうしないと駄目。 文字列の一部って思われてるのかな?

pseudo_gettext.rb

,;r'"´;;;;;;;;;;;;;;;;;;;;;;;;;;`ヽ、 ,r'";;;;:::::;彡-=―-=:、;;;;;;ヽ、 /;;ィ''"´ _,,,,....ニ、 ,.,_ `ヾ;;;;〉 `i!:: ,rニ彡三=、' ゙''ニ≧=、!´ 屋上へ行こうぜ・・・・・・ r'ニヽ, ( ・ソ,; (、・') i' ll' '゙ ,;:'''"´~~,f_,,j ヾ~`''ヾ. 久しぶりに・・・・・・ …