• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

gitを使っていてローカルでつけたタグを、リモートにpushする場合は、

   1  % git push --tags

逆に、リモートのタグ情報をローカルに持ってくる場合は

   1  % git pull --tags

これでok

posted by Png genki on Wed 20 May 2009 at 12:23

今度は-std=c99の時にstrdupが使えなくて困ったので解決策をメモ。 以下のようなオプションをつけると良いようです。

   1  -D_GNU_SOURCE

See Also

posted by Png genki on Wed 20 May 2009 at 02:53

gccで-std=c99を指定した時に、filenoが利用できなくて困ったのですが、 filenoはC標準ではなくて、POSIXの関数なので、以下のようなオプションを指定する必要があるようです。

   1  -D_POSIX_C_SOURCE=200112

See Also

posted by Png genki on Wed 20 May 2009 at 02:44

ribmosaic を使うと、 blender からrib形式のファイルをエクスポートできるようになります。 ribmosaicのtar.gzをダウンロード後展開し、中にあるmosaic.pyファイルを scriptsディレクトリにコピーします。

   1  /usr/share/belnder/scripts

scriptsディレクトリは、 たとえば上記のような場所にあります。

あとは、blenderを起動して、メニューから "Render" -> "MOSAIC RenderMan(R) System" を選択すると、 以下のようなパネルが開きます。

スナップショット1.png

Mosaic Settingsのタブから、レンダラを選んで、Export Directoryを指定し、(R)ender Current Frame/Passesをクリックすれば、指定したディレクトリの下にMosaicディレクトリが作成され、その中にribファイルなどが一式出力されます。

posted by Png genki on Mon 18 May 2009 at 10:01

行末に|を記述するHamlの複数行記法が書きにくかったので、 Vimで整形出来るようにするための外部プログラムを作ってみました。

http://gist.github.com/112140

   1  set fp=/path/to/haml_formatter.rb

して、visualモードで選択してgqで整形です。

posted by Png genki on Sun 17 May 2009 at 07:35

rubyで普通にinjectを使って合計を求めようとした場合、こんな感じになります。

   1  (1..10).inject(0){|sum, i| sum + i} #=> 55

しかし、以下のように書く事も出来ます。

   1  (1..10).inject(&:+) #=> 55

posted by Png genki on Sun 10 May 2009 at 04:55

ポジティブ/ネガティブ投票による正しいランキング方法が以下の記事で紹介されています。

How Not To Sort By Average Rating

この計算方法では、投票数が少ない場合には分散が大きく不正確な評価で、 投票数が多くなるにつれて分散が小さく正確な評価が得られているという事を考慮しています。以下数式


\frac{\hat{p}+\frac{z^2_{\alpha/2}}{2N}\pm{}z_{\alpha/2}\sqrt{
\frac{\hat{p}(1-\hat{p})+\frac{z^2_{\alpha/2}}{4N}}{N}
}}{1+\frac{z^2_{\alpha/2}}{N}}

これはScoreの{}_{1-\alpha/2}信頼区間を表しています。 この信頼区間の下界をランキングのスコアにすれば良い事になります。 ここで、{}_{\hat{p}}は、

です。全体に占めるポジティブ投票数の割合ですね。

{}_{z_{\alpha/2}}は標準正規分布上の {}_{1-\alpha/2}信頼区間の有意確率です。

さて、五段階評価によるRatingに同様のテクニックを適用する場合はどうしたらいいでしょうか。 単純に、1回の投票を4度のpositive/negative投票行為だと考えると (例えば星1つは[-,-,-,-], 星3つは[+,+,-,-])、以下のような {}_{\hat{p}'}を使えば良さそうです。


\hat{p}'=\frac{\sum_{i\in{[1,5]}}(i-1)N_{i}}{4N}

従って、最終的にこんな感じになります。


\frac{\hat{p}'+\frac{z^2_{\alpha/2}}{2N}\pm{}z_{\alpha/2}\sqrt{
\frac{\hat{p}'(1-\hat{p}')+\frac{z^2_{\alpha/2}}{4N}}{N}
}}{1+\frac{z^2_{\alpha/2}}{N}}

Rubyコードで表すとこんな感じですね。

   1  require 'statistics2'
   2  
   3  def score(ni, alpha)
   4    n = ni.inject(&:+)
   5    return 0 if n == 0
   6    m = ni.size
   7    z = Statistics2.pnormaldist(1-alpha/2)
   8    phat = m.times.zip(ni).inject(0){|s,(i,j)| s + i*j}/((m - 1.0)*n)
   9    (phat + z*z/(2*n) - z*Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
  10  end

posted by Png genki on Sun 10 May 2009 at 04:46

hamlでtext_areaヘルパメソッドを使う場合は、以下のように"~"を使うと良い。

   1  ~ text_area :foo

~ について (cheat hamlより)

Ruby expression preserving whitespace, e.g. %pre~ @content.body Works just like =, but calls the find_and_preserve helper to keep line breaks intact in the output.

posted by Png genki on Wed 6 May 2009 at 11:33

dm-is-remixable は、Commentなどの複数のリソースにまたがって共用されるがちなリソースをDRYにするためのDataMapperプラグインです。

しかし、Validationのためのコードを記述しても、正常に動作しないという問題がありました。これは、以下のようにすれば解決できます。

   1  module Commentable
   2    include DataMapper::Resource
   3    is :remixable, :suffix => "comment"
   4  
   5    (..snip..)
   6  
   7    def self.included(base)
   8      base.class_eval do
   9        validates_present :message
  10      end
  11    end
  12  end

See Also

posted by Png genki on Mon 4 May 2009 at 17:56