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

  • ProxyCommandによるsshの多段接続について -- ぺけみさお

    sshを使っていると、図のようにsshの接続先のホストから更に別のホストにsshコマンドを実行して接続する事があるかも知れない。接続先でまたsshコマンドを叩くのは骨が折れるが、sshにはこのような使い方をサポートしてくれる機能がある。それがProxyCommandだ。 ProxyCommandが指定されると、sshはまずProxyComamndを実行して、入出力を手元のホストのsshコネクションに直結させる。つまりProxyCommandで踏み台となるホストを経由して目的のホストに接続することができれば、sshコマンド1発で目的のホストとの多段接続を行うことができるのだ。 ProxyCommndを使った多段接続には、これまでnetcatいわゆるncが使われてきた。しかし、最近のsshは-Wオプションをサポートしており、ncを併用することなく、多段接続を実現することができるようになっている

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

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

    crist18
    crist18 2016/04/10
    caller
  • RubyGemsのダウンロード数を集計してランキングするWebサービスBestGemsを作った -- ぺけみさお

    http://bestgems.org/ RubyGemsには無数のパッケージが公開されているが、どのパッケージが流行っているのかざっと調べる方法は案外なかったりする。 一応The Ruby Toolboxでは、Gemをカテゴリー分けして、プロジェクトのアクティビティを評価しているが、ビジュアルでないし、今の流行はわからない。 そこで もう少し見た目に訴えて流行りのGemが見つけられること時系列で流行り廃りがわかることを目標に、タイトルの通りRubyGemsのダウンロード数を集計して、ランキングするWebサービスBestGemsを作った。 このサービスでは、 全Gemを対象とした合計ダウンロード数、日別ダウンロード数のランキング個々のGemの合計ダウンロードの推移を表したグラフを見ることができる。 データは、RubyGems.orgを定期的にスクレイピングして取得している。 流行りのG

    crist18
    crist18 2015/06/23
    best gems
  • UTF-8として不正な文字を除去する -- invalid byte sequence in UTF-8例外を発生させなくするには -- ぺけみさお

    ネットワークから収集したテキストファイルには、時にUTF-8として不正な文字が含まれている場合がある。 そのような不正な文字列に対して正規表現によるマッチなど何か操作を行おうとすると以下のエラーが発生する。

    crist18
    crist18 2015/06/23
    “ArgumentError: invalid byte sequence in UTF-8”
  • Rubyのattr_accessor, attr_reader, attr_writerとは何か -- ぺけみさお

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

    crist18
    crist18 2014/07/17
    “attr_accessor :foo”
  • Rubyの[1, 2, 3].map(&:to_s)的なイディオムとSymbol#to_procについて -- ぺけみさお

    ちょっと凝ったRubyのソースコードで良く目にする[1, 2, 3].map(&:to_s)のようなイディオムについて書いておきたい。まず以下はすべて同じ結果となる。 [1, 2, 3].map(&:to_s) #=> ["1", "2", "3"] [1, 2, 3].map(&:to_s.to_proc) #=> ["1", "2", "3"] [1, 2, 3].map{|n| n.to_s} #=> ["1", "2", "3"] このイディオムはSymbolがto_procメソッドを持っているから実行可能になっている。(※標準で使えるのはRuby 1.8.7以降、それ以前はActiveSupportで定義されていた) というのもブロック付きメソッドを呼び出す際にto_procメソッドを持つオブジェクトは&修飾して引数に渡せる決まりだからである。このことはリファレンスに書かれている

    crist18
    crist18 2014/07/02
    “[1, 2, 3].map(&:to_s) #=> ["1", "2", "3"] [1, 2, 3].map(&:to_s.to_proc) #=> ["1", "2", "3"] [1, 2, 3].map{|n| n.to_s} #=> ["1", "2", "3"]”
  • 1