Ruby

delete_ifとreject!

プログラミング言語 Ruby リファレンスマニュアル delete_if {|x| ... } reject! {|x| ... } 要素を順番にブロックに渡して評価し、その結果が真になった要素をすべて削除します。 delete_if は常に self を返しますが、reject! は要素が 1 つ以上削除されれ…

ローカル変数宣言

http://www.ruby-lang.org/ja/man/?cmd=view;name=%CA%D1%BF%F4%A4%C8%C4%EA%BF%F4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4 宣言は、例え実行されなくても宣言とみなされます。 v = 1 if false # 代入は行われないが宣言は有効 p defined?(v) # => "local-va…

akasaka.rb #4

同僚の送別会を捨ててakasaka.rbに参加してみました。薄情ですまん。だって話がくるのぎりぎりなんだもん。最終出社日にまたなんかしましょう。 んでakasaka.rbだけですが、行ってよかったなと。言語の実装とかすごく興味あるんだけど、C言語があまり分から…

はじめてのRubyプログラミング(iPod touchでの)

同僚が貸してくれたUNIXシステム管理 第3版を電車の中で読んでると「2の0乗〜16乗は暗記しとけ」とか書いてるじゃないですか。でもここは電車の中。計算機があるわけでもなくどうしようもない・・・と諦めかけてたんですが、そこで思い出しました。 「私には…

画像をクリッピング

たとえば100x100の画像に10x10のマージンを用意するにはこんな感じ。 draw.define_clip_path 'clip' do draw.path "M 10 10 L 10 90 L 90 90 L 10 90 z" end draw.push draw.clip_path 'clip' # draw使っていろいろ描画 draw.pop パス指定のフォーマットはSV…

find_or_create_by

いつも _by を忘れる...

super

superってモジュールで定義されてるメソッドも読んでくれるんすね #super_test.rb module Modul def method puts 'module' end end class Klass include Modul def method super puts 'klass' end end Klass.new.method % ruby super_test.rb module klass

BackgrounDRb 0.2.1 README

とりあえず、興味ないところは飛ばしています。 ちなみに gem install backgroundrb だと古いのが入るので注意。(2007/8/7現在)http://backgroundrb.rubyforge.org/files/README.html BackgrounDRb BackgrounDRbはrubyのジョブサーバー兼スケジューラーです…

xmpp4rでGTalkにメッセージを送る

とっても簡単。 require 'xmpp4r' to = 'someone@gmail.com' body = 'This message is from xmpp4r.' subject = 'test' message = Jabber::Message.new to, body message.subject = subject id = 'myname@gmail.com' password = 'mypassword' client = Jabbe…

form_remote_tagにエレメントIDを設定する

form_remote_tagで生成されるフォームにIDを設定するには:htmlと:urlを同時に使う。 <% form_remote_tag :url => {:controller => "hoge", :action => "bar", :id => num}, :html => {:id => 'special-element'} do %> :htmlだけじゃだめなんすね・・・ <%# …

凸包の高速な計算

(amazon:476490277X p.8)逐次添加法。 点列をx座標順に並び替えて、最初の3つの点の凸包(3点からなる三角形)から初めて、1点ずつ追加しながら凸包を更新して行く。詳しくはこのpdfの12ページ当たりを参考。 require 'geo_base' # 「コンピュータ・ジオメトリ…

クラスの比較

Rubyのcase文は対象の比較に === メソッドを使ってくれてとても便利。 some_instance = BarClass.new case some_instance when FooClass print 'foo!' when BarClass print 'bar!' else print 'other' end とかすると some_instance が属するクラスに応じて…

凸包のバカ正直な計算

(amazon:476490277X p.4)GoogleでI'm feeling luckyしてみると、「点集合の凸包-数学アルゴリズム演習ノート-」 凸包とは、平面グラフ上の点(ある点集合)の中で最も「外側」にある点を直線で結んで出来る線分の集合です。つまり、凸包の直線群はその線の内…

自習開始

ちょっと興味がわいたので、amazon:476490277Xに擬似コードで書かれてるアルゴリズムを実際にRubyでちまちまと組んでいこうかなと。まずは、ベースのクラスを作っとく。 require 'sdl' class GeoBase attr_accessor :screen class Point attr_accessor :x, :…

メイドカフェAPIのRubyインターフェース

作りました。わざわざブラウザを立ち上げなくてもメイドカフェなんかの萌えなお店が検索できて、とても便利ですね。 インストール gem install ruby-maidcafeRubyForgeに登録しました。RFの右上の検索窓に "maidcafe" または "メイドカフェ" と書いて検索ボ…

コマンドテンプレート

optparseが面倒くさいので今後はここからコピペする。 元は瀧内さんのコードだけど、どれからパクったか忘れた。 require 'optparse' COMMAND_LINE = "#{$0} #{ARGV.join(' ')}" OPT = {} opts = OptionParser.new opts.on('-a <abc>'){|v| OPT[:abc] = v} opts.o</abc>…

斉藤さん

Reject会議のゆきひろ認証は個人的に非常にツボったので今日中に3-4個くらいは実装出てくるかなーと思ってたんだけど、ぜんぜん出てこないのな。というかこれの発表者に関する情報の少なさは異常。公式サイトですら 「ゆきひろ」(not ひろゆき) 認証 斉藤 っ…

クラスメソッドの別名

んー、なんかもっといいのないのかなー class Hoge def self.fizz; puts :fizz end class <

before_filter内でのrenderとredirect_to

before_filter内でエラーメッセージをrenderしたりエラーページにリダイレクトした場合は同時にreturn falseする必要があります。そうしないと、以降のフィルタが実行されて描画が2度以上行われるというエラーになります。ゆきひろ認証の例で言えばこの部分…

ゆきひろ認証プラグイン(acts_as_yukihiro_ninshoable)

Ruby会議2007、もとい、Reject会議2007で発表されたベーパーウェアのアイデアに感銘を受け、いきおいまかせに実装してしまいました。反省はしていない。 このRailsプラグインをインストールすると素人がまつもとゆきひろさんの名前をよく「ひろゆき」と間違…

uniq!

uniq! は削除を破壊的に行い、削除が行われた場合は self を、そうでなければ nil を返します。 削除しなくてもself返してよ・・・。

テストでユーザーエージェントを指定する

こんだけ @request.user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4'

ユーザーエージェントでアクセスを制限

application.rb に追加。 def refuse_ua(condition=nil, &block) ret = if block block.call request.user_agent else case condition when String refuse_ua /#{condition}/ when Regexp !condition.match(request.user_agent) when Array condition.inject…

ファイルアップロードのテスト

ActionController::TestUploadedFileと言うのが使えるみたい。 同僚に教えてもらいました。 def test_upload post :upload, { :file => ActionController::TestUploadedFile.new( "#{RAILS_ROOT}/public/images/test.png", 'image/png'), }, @session assert…

Array#deleteとArray#delete_if

Array#delete_ifは指定した要素を削除した配列を返すけど、Array#deleteは配列から除去した要素を返す

Ruby会議懇親会チケット買えた

販売開始直後の10時にLoppiで直接購入しようとしてるのに3回も回線の混雑で弾かれて、一瞬もう駄目なのかと思いました。

クイズ

以下のメソッドが true を返しました。なぜ? def hoge @objects.inject([]) do |result, obj| begin result << obj.do_something rescue Exception => e handle_exception e ensure result end end || [] end 解答プログラミング言語 Ruby リファレンスマニ…

LT落選っぽ

日本 Ruby 会議 2007 - Program-LT まー、まだ連絡はなんも無いんだけど。残念。

状態変更通知

ある時点でのリスン中ユーザーは昨日ので拾えるんですが、せっかくShootingStar使ってるんだからその変更も通知してくれないといやだ。で、そのために必要なのが:eventオプション。コードは以下。 <%= meteor_strike channel, :uid => uid, :event => js_cod…

ファイルアップロード

今まで何度となくファイルアップロードを書いては忘れ、その都度調べてて、いい加減疲れてきたのでここにメモる。今後はここをコピペする方向で。基本的にこちらのコピーなので、要respond_to_parentプラグイン。説明もそちらを参照。ここには単にコードだけ…