タグ

ブックマーク / www.xmisao.com (8)

  • RubyのEnumerable#each_consを使ってN-gramを簡単に作る -- ぺけみさお

    N-gramN-gramは文字列をN文字単位で区切って1要素としたものです。 N-gramは全文検索を高速に行うためのインデックスとして良く使われます。 Nが2のものをbi-gram(バイグラム)、Nが3のものをtri-gram(トライグラム)と呼びます。 Nが4以上は応用例が少なくメジャーでないためか、私は聞いたことがありません。 例えば最初の文章をbi-gramで表現して並べると以下のとおりです。 文字列の先頭からはじめて、1文字ずつずらしながら、2文字単位で1要素としていきます。 Enumerable#each_consRubyではEnumerable#each_consを使って、このようなN-gramを簡単に作ることができます。 Enumerable#each_consのRubyリファレンスマニュアルの解説は以下のとおりです。 要素を重複ありで n 要素ずつに区切り、 ブロックに渡

  • nginxのproxy_passの注意点 -- ぺけみさお

    nginxをリバースプロキシにする場合に使用するproxy_passディレクティブは、URIが与えられた場合と、そうでない場合で挙動が異なる。 どういうことかというと、以下の1.と2.は別々の結果となる。proxy_passディレクティブの引数に注目して欲しい。 # 1. specified with a URI location /name/ { proxy_pass http://127.0.0.1/; } 1.はproxy_passディレクティブに完全なURIを与えた例である。この場合http://example.com/name/fooへのアクセスは、/nameが削除されたhttp://127.0.0.1/fooへ転送される。 2.はproxy_passディレクティブに完全なURIを与えなかった例である。この場合http://example.com/name/fooへのアクセスは、

  • Rubyでメソッドの呼び出し元を取得する -- ぺけみさお

    Rubyではcallerメソッドでバックトレースを取得することができる。 これを利用すればあるメソッドが何処から呼び出されたのか、呼び出し元を取得することが可能だ。 def foo bar end def bar puts caller[0][/`([^']*)'/, 1] #=> "foo" end foo なおcallerの返却値はバックトレースの文字列の配列である。 バックトレースの文字列にはファイル名、行番号、メソッド名が含まれている。 上記コードの正規表現/`([^']*)'/はこの文字列からメソッド名を抜き出すものだ。 ちなみに呼び出し元ではなく、現在のメソッド名を取得するにはKernel.#__method__を使う。

  • findとxargsの基本的な使い方 -- ぺけみさお

    findとxargsは、手作業ならうんざりするような作業であっても、コマンドライン一発で済ませられる可能性を秘めている。 このエントリーではfindとxargsの基的な使い方をtipsとしてまとめる。 findによる検索findはあるディレクトリ以下の条件にマッチしたパスを検索し一覧を出力するコマンドだ。 最初の引数には検索対象のパスを与える。以下の例ではカレントディレクトリ以下のファイルとディレクトリが一覧される。 findに条件を与えれば、条件にマッチしたパスのみ出力させることができる。 条件には色々書くことができるが、一番良く使われるのは-nameによる名前の指定だろう。 名前の指定にはワイルドカードを使う。以下の例は.rbで終わるパスのみを出力させる。

  • Rubyのdupとcloneの違い -- ぺけみさお

    RubyのObject.dupとObject.cloneの違いは、特異メソッドとfreezeをコピーするかどうかである。 Object.cloneの方がコピーされる情報が多いが、一般的な用途にはObject.dupで十分だ。 以下は検証コード。 obj1 = Object.new obj1.taint def obj1.singleton_method; end obj1.freeze obj2 = obj1.dup obj3 = obj1.clone p obj1.tainted? #=> true p obj1.respond_to?(:singleton_method) #=> true p obj1.frozen? #=> true p obj2.tainted? #=> true p obj2.respond_to?(:singleton_method) #=> false p

  • Rubyのattr_accessor, attr_reader, attr_writerとは何か -- ぺけみさお

    Ruby初心者であれば構文の一種だと誤解してしまいそうだが、これらはインスタンス変数にアクセスするためのメソッドを定義するメソッドである。 Java等の他の言語を経験した人には、プライベート変数に対するセッタやゲッタを勝手に定義してくれるメソッド、と説明すればわかりやすいかも知れない。 これらのメソッドの役割分担は以下のとおり。 通常はattr_accessorを目にする機会が多いと思われる。 attr_accessor – セッタとゲッタを共に定義する attr_reader – ゲッタのみを定義する attr_writer – セッタのみを定義する以下の2つのRubyスクリプトは、どちらも質的に同じ意味である。 しかし、attr_accessorを使うことで、記述量を大幅に減らせていることがわかる。 Rubyでは単なるセッタやゲッタを自分でゴリゴリと定義する代わりに、attr_*を使

  • Amazon S3で静的ホスティングする際のDNS設定 -- ぺけみさお

    Amazon S3はCNAMEで参照する事になるが、CNAMEは他のレコードと一切共存できないので注意が必要。 特にexample.comのようにサブドメインをつけない場合は良く考えた方が良い。(naked domainと呼ばれる) Web公開用にはwwwなどをつけておいて、example.comへの接続は、www.example.comに転送するようにしておくのが無難。 DNSのサービスに転送がついていない場合は、wwwizer.comのサービスを使えば別途サーバを用意せずに済む。 単にwwwを付与したいドメインのAレコードを174.129.25.170に向けるだけで良い。 wwwizer.comを使ってAmazon S3で公開した静的Webサイトを公開すると、アクセス時には以下のような挙動になる。 example.comへのDNS問い合わせがwwwizer.comのサーバに解決されるw

  • Linuxのシグナルまとめ -- ぺけみさお

    Linuxのシグナルについて調べたのでまとめる。 最初にシグナルの一覧を示し、重要なものは抜粋して説明する。 参考: http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/signal.7.html シグナルの一覧killコマンドで送信できるシグナルの一覧は-lオプションで見ることができる。

  • 1