• 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

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

2/18に開催されたRails勉強会に参加してきました。 今回は、過去最大の参加人数だったようで、いつもよりだいぶ賑やかな感じでした。

参加したセッションは、前半が「scaffold_resource」、後半は「FeedのCache」でした。

■前半「scaffold_resource」

scaffold_resourceの話に入る前に、Rails1.2の新機能のおさらいとか、その辺の話で盛り上がっていました。ActiveSupportのrequireとconst_missingの上書きに悩まされてる人が多いようですね。form_forのブロックを用いる形式については、昔からその書き方を使っていたので、それほど影響は無かったです。

それにつけても、scaffold_resourceは便利ですね。

$ ./script/generate scaffold_resource user name:string password:string
のように第二パラメータ以降でテーブルのカラムを指定できたりするんですが、 これが素晴らしい。

■後半「FeedのCache」

FeedのCacheの話から、大規模運用でのキャッシュの話になってしまいました。

大規模運用はRuby on Railsのレイルが敷かれていない、無限の荒野です。 キャッシュの運用については、RubyKaigi2007のCFPに応募したので、 採用されたらお話できるかも。

■懇親会

今回も会場の予約が無かったので、ロデオでおなじみのZESTに行きました。 ここは大人数で予約無しでも入れるので便利ですね。 なんとなくC言語とか、動的言語の次のパラダイムとして、 動き続けるプログラムについて語ってみました。 dRubyとか使ってると、今にも実現しそうなんですよね。

メモリ空間のスナップショットを取って、補足されない例外が発生したら 直前のスナップショットに戻す。 エディタの実装言語とマクロ、SecondLifeの実装言語とLSLのように、 パラダイムの異なる二つの言語においては、動き続けるプログラミングが 半分だけ実現されているように見えますが、LSLからSecondLifeのコア部分は 書き換えられないのですよね。 Rubyのような言語なら、それが出来そうな気がする。 あるいはJavaScriptかな。

二次会はなぜかJavaの話をしていました。

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

posted by Png genki on Wed 21 Feb 2007 at 03:31

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

最近、各所でgem listを公開するのが流行っているようですね。

やってみたら相当数入っています。そしてほかのGemとの依存関係でインストールされたと思われる、あまり記憶に無いGemも結構入っています。

僕の経験では、こういったGemは便利なものが多い。以前紹介したHoeもこの方法で知りました。頻繁にCiteされる論文が良い論文であるというように、よくrequireされるGemは良いGemに違いないと思います。

今回やってみて気になったGemは、

・call_stack (0.1.0.0)
・cgi_multipart_eof_fix (2.1)
・daemons (1.0.4, 1.0.3)
・fastthread (0.6.4.1, 0.6.3)
・syntax (1.0.0)
・wirble (0.1.2)

この辺です。まだ何も調べて無い段階ですが、なんか面白そうだなあ。

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

posted by Png genki on Sun 18 Feb 2007 at 11:20

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

Rubyのダックタイピングを活用して、シンプルかつ汎用的な Stringパーサ&コンバータstring_to.rbを書いてみました。

このコードは、to_xxxx_xxxxメッセージを受け取り、 XxxxXxxx#parse(self)を呼び出すことで 自分自身をXxxxXxxxに変換する method_missingハンドラをStringクラスに付け加えます。


class String
  def method_missing(method, *arg, &block)
    method_name = method.to_s
    if method_name.slice!(0..2) == "to_"
      method_name.gsub!(%r(__), '::_')
      method_name.camelize.constantize.parse(self, *arg, &block)
    else
      super
    end
  end
end

利用方法:

  1. 上のコードをコピーして、

  2. $:の通った場所にstring_to.rbとして保存し、

  3. そしてこの機能を使いたいところからrequireします。

require 'date'
require 'uri'
require 'string_to'

"2007-2-11".to_date #=> Date.parse(self)
"http://www.drecom.co.jp/".to_URI #=> URI.parse(self)

[English]

POSTSCRIPT:

constantizecamelize等のRails依存のメソッドを 書き直して、RubyForgeにプロジェクトを登録しました。

  string-to
これでようやく、いつものようにgemコマンドでインストールできるようになりました。
$ sudo gem install string-to
使い方は以下のとおり:
require 'rubygems'
require 'string_to'
require 'date'

"2007-2-13".to_date # => Date.parse("2007-2-13")
parseメソッドを実装しているクラスやモジュールは意外と多いですね。 CGI、Date、Name、Ripper、URI、Time、YAML、JSON、CGI::Cookie...

次のバージョンでは、parseメソッドがあったら便利なモジュールにparseを追加するのをやろう。

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

posted by Png genki on Sun 11 Feb 2007 at 09:32

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

RailsのIntegrationTestの仕組みを使って、Code To Test Ratio(コード量に対するテストコードの割合)が一定以上に保たれているかどうかを検証するテストを書いてみました。

require "#{File.dirname(__FILE__) }/../test_helper"

class TestingRuleTest < ActionController::IntegrationTest
  def setup
    @stats = `rake stats`
  end

  def test_code_to_test_ratio
    cttr = @stats.match(%r{Code to Test Ratio: 1:([\d\.]+)})[1].to_f
    assert cttr >= 0.8, "Need more tests."
  end
end
多人数で開発をしてるとなかなか面白いですよ。一人の場合でも自分への戒めに使えるかな。

[English]

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

posted by Png genki on Sat 3 Feb 2007 at 05:47

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

Railsを使っていると、formにActiveRcordオブジェクトのアトリビュートが勝手に入ってくれたり、フォームの内容が勝手に解析されて、Controllerからparamsで参照できたりと、とても便利です。

Railsのフォームヘルパーが生成したフォーム要素のnameやidを見てみると、"user[name]"のように、ARオブジェクトの属性名がマーシャリングされた状態で織り込まれています。 このようなフォームから送信されたリクエストの結果を解析して、paramsでアクセスできるように変換してくれるのがFormEncodedPairParserです。

今回は、FormEncodedPairParserが解析可能な形式で、ネストしたHashやArrayをQueryStringに変換するFormEncoderモジュールを作ってみました。

module FormEncoder
  def self.encode(parameters, prefix = "")
    case parameters
    when Hash; encode_hash(parameters, prefix)
    when Array; encode_array(parameters, prefix)
    else "#{prefix }=#{CGI.escape(parameters.to_s) }"
    end
  end

private
  def self.encode_hash(hash, prefix)
    hash.inject([]) do |result, (key, value)|
      key = CGI.escape(key.to_s)
      result << encode(value, prefix.empty? ? key : "#{ prefix }[#{ key }]")
    end.join('&')
  end

  def self.encode_array(array, prefix)
    array.inject([]) do |result, value|
      result << encode(value, "#{prefix }[]")
    end.join('&')
  end
end
使用法:
FormEncoder.encode :foo => {:bar => [1, 2], :baz => "Rails"}
#=> "foo[baz]=Rails&foo[bar][]=1&foo[bar][]=2"

CGIMethods.parse_query_parameters(
  "foo[baz]=Rails&foo[bar][]=1&foo[bar][]=2")
#=> {"foo"=>{"baz"=>"Rails", "bar"=>["1", "2"]}}
これを使用することで、formから送信するのと同様な形式でさまざまな情報をQUERY_STRINGに変換できるので、paramsで受け取ることが出来ます。

[English]

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

posted by Png genki on Fri 2 Feb 2007 at 07:02
Contents
Rails勉強会@東京#15レポート
気がつかないうちに入っているGemは便利なGemに違いない
シンプルで汎用的なStringパーサ&コンバータ
テストをテストするメタテスト
FormEncodedPairParser互換のQueryStringを生成する
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ