rubyに関するhyoneのブックマーク (3)

  • Perfect Frozen String Literal - Qiita

    現時点では解説がパーフェクトではないのを自覚しているが、めんどくさいので後でパーフェクトにする Frozen String Literalとは "str".freezeのようなリテラルのこと。 Feature#8992 (r43627) でこのようなリテラルを書くと事前にallocate & freezeされた文字列オブジェクト(内部的にはfstringと呼ばれる) が取得されるようになり、Ruby 2.1以降ではイミュータブルな文字列が必要な場面でこのリテラルを使うと高速になる。 以下、それに関連した機能や最適化がどのバージョンで入ったか、各バージョンでのお勧めの書き方をまとめておく。 Ruby 2.0.0まで まだ入ってないので気にしなくてよい Ruby 2.1〜2.2 Ruby 2.1: Use String#freeze and compiler tricks to replace

    Perfect Frozen String Literal - Qiita
    hyone
    hyone 2017/06/25
  • Ruby でラインメモリプロファイラ - Qiita

    プロファイラ好きなモニタの前の皆さんこんにちは。@sonots です。この記事では、Ruby コードのどの行がどのぐらいメモリを消費しているか調べる方法を紹介します。 オブジェクトの数を数える Ruby には ObjectSpace というオブジェクトの情報を集めたり操作したりする module があります。 このモジュールの each_object メソッドを使用すると、RubyVM 上の全てのオブジェクトを取り出すことができます。 このメソッドを使って、以下のようなコードを書くと、実行した地点で、RubyVM 中にどのクラスのオブジェクトが何個存在しているのかカウントできたりするわけです。興味深いですね! ObjectSpace.each_object.inject(Hash.new 0) {|h,o| h[o.class]+=1; h } #=> {Class=>241, Strin

    Ruby でラインメモリプロファイラ - Qiita
    hyone
    hyone 2017/01/12
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

    正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。 はじめに 大垣さんのブログエントリ「PHPer向け、Ruby/Railsの落とし穴」には、Rubyの落とし穴として、完全一致検索の指定として、正規表現の ^ と $ を指定する例が、Ruby on Rails Security Guideからの引用として紹介されています。以下の正規表現は、XSS対策として、httpスキームあるいはhttpsスキームのURLのみを許可する正規表現のつもりです。 /^https?:\/\/[^\n]+$/

    hyone
    hyone 2016/11/09
  • 1