Hatena::ブログ(Diary)

<s>gnarl,</s>技術メモ”’<marquee><textarea>¥ このページをアンテナに追加 RSSフィード Twitter

2014-04-30

2014-02-10

JMeter、試験中にorg.apache.commons.httpclient.NoHttpResponseException(The target server failed to respond)とか言われる理由

HTTPリクエスト設定でKeepAlive有効になってる場合、サーバ側で接続がタイムアウトしてる可能性あります。KeepAliveのタイムアウト設定を見なおしてみると幸せになれるかも。

2014-01-22

Ruby、スーパークラスにメソッドが定義されている時だけsuperしたい

あけましておめでとうございます!!!!!!!!!!!!!

表題の機能はinheritedメソッドが定義されてるモジュール複数includeする時などに欲しくなるわけですが、

def inherited(klass)
  super if defined?(super)
end

などとすることで実現できる。

defined?(super)はメソッド呼び出しではなくて太古からある謎の構文です(ref: http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html#defined)

2013-06-24

Rubyでトポロジカルソートする

トポロジカルソート - Wikipedia

依存関係を定義したグラフを元に処理順決めるときに使ったりするあれです、あれ。

gitコミットオブジェクト(複数の親を持つ可能性がある)を並び替える必要があったので調べた。

Rubyには tsortというライブラリが標準添付されているので便利。1.7あたりからある模様。

トポロジカルソートには

というデータ構造に依存する処理が必要で、それを用意してやればtsortがうまいことやってくれる。

require 'tsort'

class Nodes
  include TSort
  def tsort_each_node(&block)
    # ノードを列挙してblockに渡す処理を実装する
  end
  def tsort_each_child(node, &block)
    # node が繋がっている先のノードを列挙してblockに渡す処理を実装する
  end
end

nodes = Nodes.new(...)
nodes.tsort # トポロジカルソートされたノードの配列を取得する

みたいな使い方です。

2013-02-01

ActiveRecord、STIする時のクラス決定ルールを自由に決める

前提

実装

クラスの決定はActiveRecord::Inheritance#instantiate(record)内で行ってるので、そこにパッチ当てればいける。

ただ、クラスの決定はロード時にしか行われないわけで、動的に変わるカラムを元にしたSTIを定義すると意味不明状態になるというリスクがある。typeカラムに格納されたクラス名のみを元にするっていうARの設計は妥当なのかも。