• 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
 
 

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/147

西さん(a.k.a. maiha)のRuby on Rails入門のp112に書かれてる偽STIが面白そうだったので、 instantiateのソースコードをメモ。

# File src/rails-1.1.6/activerecord/lib/active_record/base.rb, line 975
def instantiate(record)
  object = 
    if subclass_name = record[inheritance_column]
      if subclass_name.empty?
        allocate
      else
        require_association_class(subclass_name)
        begin
          compute_type(subclass_name).allocate
        rescue NameError
          raise SubclassNotFound,
            "The single-table inheritance mechanism failed to locate the subclass: '#{ record[inheritance_column] }'. " +
            "This error is raised because the column '#{ inheritance_column }' is reserved for storing the class in case of inheritance. " +
            "Please rename this column if you didn't intend it to be used for storing the inheritance class " +
            "or overwrite #{ self.to_s }.inheritance_column to use another column for that information."
        end
      end
    else
      allocate
    end

  object.instance_variable_set("@attributes", record)
  object
end
ソースコードはここから持ってきました。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/147

posted by Png genki on Fri 29 Dec 2006 at 13:02

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/145

WirbleというRubyGemsの話です。

from RubyInside:

Wirble: Tab-Completion and Syntax Coloring for irb
これを使うとirbの出力をカラフルにして視認性をよくすることができます。

使い方は、まずWirbleをインストールします。

$ sudo gem install wirble --include-dependencies
続いて、~/.irbrcに以下の記述を追記します。
require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize
以上で完了です。irbコマンドだけでなく、script/consoleやscript/breakpointerでも色づけされた結果が表示されます。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/145

posted by Png genki on Mon 18 Dec 2006 at 17:55

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/144

今年最後のRails勉強会に参加してきました。 今回は、勉強会終了後に日本Rubyの忘年会が行われ、普段はなかなか会うことがない方々とお会いできて楽しかったです。

参加したセッションは、前半が「ワークフロー ステートの話」、後半が「Rubyist SNSを動かそう」でした。

■前半「ワークフロー ステートの話」

ABD飲み会でもお世話になった高井さんがセッションオーナーとなり、 jBPMのソースを読んだり、高井さんがそれをRubyに移植したものを眺めたりしながら Railsにあるべきワークフローエンジンの姿を思い思いに語り合いました。

jBPMのようなWorkflowエンジンをRailsにそのまま移植するには相性があまり よくないという感じでしたが、Rubyの動的言語的性格を生かして、Railsテイストな Workflowエンジンというものを1から作り上げていくのであれば、そもそもの目的である Workflowを管理するという機能は、むしろRailsと相性が良いのではないかなあと思います。 RailsにはWorkflowエンジンと衝突するような機能がまったく実装されていないですからね。 思うままに自由に線を引けるというのは楽しそう。

一説によると、来年1月初頭には、もろはしさん作のRails用のワークフローエンジンが世に出るみたいです。jBPMの枠にとどまらない凄いものが出てくる事を期待したいです。

■後半「Rubyist SNSを動かそう」

高橋さんがオーナー。このセッションは、新しいRubyist SNSのソースを持ってきて 動かしてみようというものだったのですが、いつのまにかBlueTrainをマージしようという運びになりました。

かなり強引な外科的手術の結果、あっさりとSNSとBlueTrainの混合物は新たな生を受け、 特に問題なく動いているようでした。二つのRailsアプリをマージするという作業は初めてでしたが、 お互いに初期段階であれば意外とすんなりできるようですね。

■日本Rubyの忘年会

冒頭でも述べましたが、今回はRails勉強会のメンバー以外にも普段なかなかお会いできない Rubyistの方々と再会できて楽しい時間がすごせました。

話した事:

  • artonさんや高井さんとCometの話をしました。Drecom Chatを作っていてCometについてはいろいろ思うところがあったので、情報交換ができて大変有意義でした。どの方法も一長一短なんですよね。何か決め手になる方法は無いものか。gifファイルの話とかは興味深かった。
  • Yuguiさんとギートステイトの話ができた。YuguiさんはGeet肯定派らしい。僕はそうなれば楽しいなあと思いつつ、実現は難しい派かな。でも脳を計算機として使うという方法なら確かにうまく行くかもですね。量子コンピュータとかが実用化されてしまったらあまり価値はなくなるかも。というような話をしてました。Second Lifeにはまっているという話をしたらYuguiさんもアカウントを持っているということで、Second Lifeネームの交換をしました。Second Life用の名刺があったら良いな。
最後に、暗いところだとぶれてしまってあまり鮮明じゃないですが、適度に顔がわからなくなって良いかもしれない忘年会の様子の写真です。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/144

posted by Png genki on Mon 18 Dec 2006 at 10:47

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/143

DrecomWantedに招待状況をネットワーク表示する機能がついたみたいです。

インフルエンサーがわかって面白いですよ。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/143

posted by Png genki on Wed 13 Dec 2006 at 22:53

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/142

生産的なゲームを作りたいの記事で書いた問題:

「生産的なゲームが無いのはなぜか」
について、記事にしてみたらその理由といえそうな仮説を思いついたので書いておきます。
仮説:ゲーム的な作業の成果物はチープである
ゲーム的な作業は、その楽しさ・中毒性ゆえに放っておいても繰り返されるので、その行為の成果物は自然とあふれかえる事になります。 したがって、希少性に根ざした類の価値は、ゲーム的作業による成果物に対しては宿らないという事が推測できます。

こうなると、ゲーム的作業によって生産性を獲得するためには、 希少性とは無関係な価値体系を見出さないといけないかな。 なかなか難しいですね。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/142

posted by Png genki on Tue 12 Dec 2006 at 10:27

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/141

1年ぐらい前から思ってる事なんですが、brazilさんのこちらの記事を読んで、同じような事を考えてる人がいるんだなあと思い、記事にしてみました。

ゲームのような作業はどうしてみな非生産的なのか。
生産的なゲームはなぜ存在しないのか。

問題の単純化のために言い切ってしまうと、生産的な作業というのは、それをする事によってお金が得られる(価値を生み出す)ような作業のことです。

ゲームをする事によってお金が得られるようなゲームが存在しないのはなんでだろう。
価値を生み出す作業がゲーム的な楽しさや中毒性を持ち合わせていない理由はなんだろう。

そうでなければならない理由なんて無いように思えるのに、なぜかそうじゃない例を見つけられないんですよね。

これが本当に不思議。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/141

posted by Png genki on Tue 12 Dec 2006 at 10:09

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/140

Ruby on Railsを使って多人数で開発を行う場合、各々の開発環境で別々に作成されたmigrationの番号が衝突してしまうことがあります。

この問題を解決する方法として、以下のようなものが提案されています。

simultaneous migrations
同じ番号のmigrationファイルを並列に実行する事を可能にするパッチ
Migrations, branches and dependencies
migration番号の代わりにタイムスタンプを用いることで、そもそも衝突を起こさなくする方法の提案(コードはまだ無い)
後者の方法はシンプルですが、VERSION指定でmigrationを管理するのが若干面倒になりそうですね。番号でも指定できれば便利かな。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/140

posted by Png genki on Sun 10 Dec 2006 at 19:08

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/138

今まで気がつかなかったけれど、Ruby-1.8.5になってから ActiveSupportのBinding.of_callerが動かなくなっているのですね。

Binding.of_callerはRubyの継続(Continuation)を使った面白い機能の一つなのですが、使えなくなるのは残念ですね。なんとかならなかな。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/138

posted by Png genki on Sun 10 Dec 2006 at 16:59

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/137

先日見つかった、CGI.rbのDoS脆弱性を簡単に修正するHotfix RubyGemsが公開されたようです。 RubyGem Hotfix for cgi.rb Vulnerabilities Released

RubyGemsなので使い方は簡単です。以下のようにHotfixをインストールします。

sudo gem install cgi_multipart_eof_fix --source blog.evanweaver.com
続いて、Rubyアプリケーションの中でHotfixを呼び出します。
require 'rubygems'
require 'cgi_multipart_eof_fix'
Railsアプリケーションの場合であれば、environment.rbの中に記述すればOKです。

稼動中のシステムを抱えていて、簡単にRuby本体のバージョンを上げられない場合などには重宝しそうですね。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/137

posted by Png genki on Thu 7 Dec 2006 at 05:18

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/135

Ruby on Railsで、form_forのようなブロック引数を取るhelperメソッドを書く方法を紹介します。

ブロック引数を取るhelperメソッドは、例えば以下のような感じで使うとします。

<% foo do %>
  test
<% end %>
この結果、以下のようにヘッダとフッタが挿入された結果が出力されるとします。
foo header
  test
foo footer
このような挙動をさせるためのfooメソッドの定義は、以下のようになります。
def foo(&block)
  concat('foo header', block.binding)
  block.call
  concat('foo footer', block.binding)
end
concatメソッドは、ERbが内部的に使用している_erbout変数に文字列を追加します。 concatメソッドの定義はこんな感じです。
def concat(string, binding)
  eval("_erbout", binding).concat(string)
end
blockが持っているERbの実行コンテクストで_erbout変数にアクセスし、 _erbout.concat(string)を呼び出しています。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/135

posted by Png genki on Thu 7 Dec 2006 at 04:49