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

RubyForgeでCometサーバの開発プロジェクトを開始しました。
http://rubyforge.org/projects/shooting-star/

1台のサーバあたり、同時10万コネクション以上を実現する実用的なCometサーバの開発を目的としています。

現在のところ、epollおよびkqueueを使って実装したバージョンを、このブログのChatで使用しています。来週中を目処に、アルファバージョンをリリースする予定です。

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

posted by Png genki on Sun 18 Mar 2007 at 05:33

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

Cometサーバのコネクション数の実験のために、ブログにChatを設置してみました。

Chatの本体はこちら(http://developer.drecom.jp/)にあります。

【追記】
XSS脆弱性が見つかりました。ご指摘くださいましてどうもありがとうございます。
現在は修正されています。

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

posted by Png genki on Wed 14 Mar 2007 at 12:20

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

メモ。

集中力は、どんな仕事であれ、いい仕事をするためには必須の能力だと思う。

プログラマーに必要な集中力は、スポーツ選手のような数分から1時間の短時間の深い集中力ではなくて、例えば外科医が手術中に発揮する、十数時間に及ぶような、持続的な集中力だなあと思う。

多分、短期間にすごい量の仕事をする人たちは、持続的な集中力を持っている。
彼らは集中力を発揮するのにTPOを選ばない。
その姿は、ともすれば変人に見えるかもしれない。

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

posted by Png genki on Sun 11 Mar 2007 at 14:57
undefined method `<<' for nil:NilClass
posted by Png genki on Thu 8 Mar 2007 at 20:33

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

以下は、rb_iterateを使ってHashをiterateするコードです。

static VALUE iterator_proc(VALUE Pair, VALUE Arg, VALUE Self){
  VALUE Key = RARRAY(Pair)->ptr[0];
  VALUE Value = RARRAY(Pair)->ptr[1];
  return Qnil;
}

rb_iterate(rb_each, Hash, iterator_proc, Arg);

HashはiterateされるべきHash、 Argはイテレータ・ブロック関数に渡される任意のVALUEです。

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

posted by Png genki on Tue 6 Mar 2007 at 10:10

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

もちろん万能薬ではないのですが、どう考えても正しいコードなのにJavaScriptエラーが発生してしまったりするときに、ブラウザのキャッシュを消して再挑戦するとうまくいったりします。

どうやら稀に、中途半端に途切れたprototype.jsのファイルが、ブラウザにキャッシュされてしまうことがあるようなんですよね。そうすると、「Ajax.Xxxxが定義されていません」、とか、そういう感じのエラーが出たりします。

確証は無いのですが、Lighttpdを使っている時に多く発生するような気がしますね。

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

posted by Png genki on Fri 2 Mar 2007 at 11:08

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/hibi/archive/43

MovieClipやButtonには、基準点(下記+で表示)と変形点(○)があります。



★基準点
基準点は座標(_x, _y)とか回転(_rotation)とかに関係します。
基準点を変更するときはMovieClipのシンボルの編集画面を開き、MovieClipを動かして+を変更したい位置に持っていきます。
シンボルに変換ダイアログで基準点を指定することもできます。
情報ウィンドウにあるシンボルの位置を変更して基準点を変更した気になりますが、なっていません


★変形点
変形点はモーションをつけると影響があるので注意が必要らしいです(使ったことない)。
変更するときには、自由変形ツールで変形点をダブルクリックするとできます。
http://f-site.org/articles/2004/11/14132703.html http://rails.office.drecom.jp/hibi/archive/43

This article was migrated from http://rails.office.drecom.jp/hibi/archive/43

posted by Png satoko on Fri 16 Feb 2007 at 01:18

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