タグ

ブックマーク / shugo.net (8)

  • Rubyで遅延評価 - delay, force, lazy - Journal InTime(2012-04-11)

    _ Rubyで遅延評価 - delay, force, lazy 正格評価の言語で明示的に遅延評価を行う方法として、Schemeのdelay/forceがある。 Rubyで実装するとこんな感じ。 class Promise NULL = Object.new def initialize(&block) @value = NULL @block = block end def self.delay(&block) new(&block) end def force if @value == NULL @value = @block.call else @value end end end count = 0 x = Promise.delay { count += 1; 1 + 2 } p x.force #=> 3 p x.force #=> 3 p count #=> 1 メモ化してく

    yugui
    yugui 2016/04/21
  • メソッドのネスト - Journal InTime(2010-03-16)

    _ メソッドのネスト Rubyist Hotlinksを読んでて思いついたアイデアをメモ(るびま関係者のみなさん、おつかれさまでした)。 まつもと メソッドの中で def を定義した時に何が定義されるかって言う時に、もしそれがメソッドであるとすれば、どっかのオブジェクトに属してないとダメだよね。で、そのスコープにいる時だけ存在するメソッドって何なんだろうって。 [Rubyist Hotlinks 【第 23 回】 yhara さんより引用] というまつもとさんの発言を読んで思いついたんだけど、これってselector namespaceが導入されたら、外側のメソッドのスコープだけで有効になる匿名のnamespaceを作って、そこに内側のメソッドを定義すればいいんじゃない? 問題は、selector namespaceをどうするかだけど。 あと、namespaceとそのメソッドが定義されるタ

  • instance_eval/class_evalの仕様変更 - Journal InTime(2009-12-10)

    _ instance_eval/class_evalの仕様変更 Ruby 1.9で変更されていた、instance_eval/class_evalのブロック内での定数・クラス変数の探索時の挙動を1.8の挙動に戻した(r25984)。 たとえば、class_evalの場合、レシーバが探索対象に含まれなくなったので注意してください。 1.9の新しい挙動の方が一貫性があってわかりやすいと思っていたが、メタプログラミングではレシーバに何が来るかわからないことが多く、定数名の衝突が問題になるため、Yehuda Katzの強い要望で結局元に戻すことになった。これで、Railsの1.9対応が加速するかも? また、ブロックパラメータについても、1.8同様にレシーバが渡されるようになった(r26062)。 ちなみに、Yehuda Katzがしきりに定数のスコープをlexicalと言っているが、厳密にはlex

  • 竹内先生を囲む会 - Journal InTime(2009-09-06)

    _ 竹内先生を囲む会 RubyWorld Conferenceのウェルカムディナーの後、自然な成行きで竹内先生を囲む会に。 竹内先生の名言: (日Rubyの会は)年功序列なのか。 角谷さんは(サッカーの)中田(最初は中澤って言ってたような)。 ビールを飲んでプログラムを書く。一晩寝て素面になってからデバッグする。デバッグに行き詰まったらサッカーをすると解決する。 ビールはRubyに似ている。 型推論なんてだめ。今のハードウェアに合わせるな。 (Evan Phoenixの話から)姓を変えるなら「ぬえ」。当の漢字は夜じゃなくて空の方。 ソフトウェア肛学。 ピカを見ないと70才過ぎてプログラムは書けない。 高井さんの名言は書けない。 Tags: その他

  • COBOLとRails, Joel SpolskyとPaul Graham, Bruce Bouillet 復活, Rails嫌い - Journal InTime(2006-11-30)

    _ COBOLRails あ、今、一瞬、21世紀のCOBOLerのRailerというのが脳裏をかすめたが気のせいだろう [L'eclat des jours(2006-11-29)より引用] ちょうどおとといに、宴席でCOBOLを引き合いに出してRailsの説明をしたりしてた。うーん、シンクロニシティ。 その時はある理由で話さなかったけど、COBOLRailsの一番の違いは、COBOLにはアプリケーションプログラマに対する信頼をあまり感じないのだけど、Railsにはそれを感じるということ。 じゃなかったら、○○さん(適当に知っている人で置き換えてください)はRailsに手を出してないだろう。 Railsの規約は徹底的にプラグマティックなもので、プログラマを縛るためのものではない。 ひょっとしたら、みんなDHHに欺かれているのかもしれないけど("Constraints are liber

    yugui
    yugui 2006/11/30
  • Rubyコーディング規約

    はじめに 文書は、Rubyによりコーディングを行う際の規約について述べる。 実際のプロジェクトに適用する際には、このコーディング規約をカスタ マイズして用いることを推奨する。 ソースコードの整形 インデント プログラムを読みやすくするため、インデントを適宜行う。インデント 幅は2とする。また、インデントにはスペースのみを使用し、タブは使用 しない。(環境によりタブ幅が異なるため。) 例: if x > 0 if y > 0 puts "x > 0 && y > 0" end end 一行の桁数 一行の桁数は最大80桁までとする。 空行 複数のクラスの区切には空行を挿入する。 例: class Foo ... end class Bar ... end 誤った例: class Foo ... end class Bar ... end また、クラス内の各構成要素の区切にも空行を挿入する。

  • Journal InTime - to_jsonのSafari対策

    _ to_jsonのSafari対策 この間のコードだと、Safariで文字化けしてしまった。 やっぱり\u記法を使わないといけないようだ。 class String JSON_ESCAPED = { "\010" => '\b', "\f" => '\f', "\n" => '\n', "\r" => '\r', "\t" => '\t', '"' => '\"', '\\' => '\\\\' } def to_json return '"' + gsub(/[\010\f\n\r\t"\\]/) { |s| JSON_ESCAPED[s] }.gsub(/([\xC0-\xDF][\x80-\xBF]| [\xE0-\xEF][\x80-\xBF]{2}| [\xF0-\xF7][\x80-\xBF]{3})+/ux) { |s| s.unpack("U*").pack("n*").

  • CSRF対策, Login GeneratorのSession Fixation Attack対策, クッキーのパス, セッションファイルの作成場所 - Journal InTime(2005-07-15)

    _ CSRF対策 0.13.0にもCSRF対策のコードはとくにないようだ。 MLの議論を追ってなかったのだが、結局アプリケーション側で対策する べしということだろうか。 まず、ApplicationControllerとApplicationHelperに以下のような記述をしておく。 app/controller/application.rb: class ApplicationController < ActionController::Base private def validate_session if @params[:session_id_validation] == @session.session_id return true else render(:text => SESSION_VALIDATION_FAILED_HTML, :status => "403 Forbi

  • 1