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

7/23日のRails勉強会@東京#8に参加してきました。

前回に引き続いてドリコム本社での開催でしたが、大きなトラブルも無く、無事に終わってよかったです。前回足りていなかったホワイトボードの準備が間に合ってよかったです。

さて勉強会のほうですが、今回も今までと同様にオープンスペース形式で、前半・後半に分かれて6つ(前後にまたがるものが1つ)のセッションが行われました。

■前半
RailsでABD実践(要、『楽々ERDレッスン』)
BackgrounDRbを触ってみる
Rails Chatのソースを読む
"Rails Recipes"を淡々と読む
■後半
ソーシャルブックマークを作る
BackgrounDRbを触ってみる
19Rails Tricks Most Rails Codes

今回は、「Rails Chatのソースを読む」と「BackgrounDRbを触ってみる」に参加しました。

□Rails Chatのソースを読む

Rails Chatは、のりおさんが作られたリアルタイムチャットシステムです。JuggernautというComet for Rails?なストリーミングAjax系?のライブラリを使っているところが特徴です。

タイミングよく、今朝方Juggernautの紹介記事を書いていたのでセッションオーナーをやる事になりましたが、肝心のRailsChatのソースを持っていなかったので、よしみかんさんにバトンタッチ。

ソースコードを読む事自体は淡々と勧められました。 Juggernautは面白そうですね。いろいろ使えそうです。大規模運用が可能なのかどうかはわからないですが、小規模での運用には非常に便利だと思います。

Pushサーバが大規模運用に耐えうる同時コネクション数を実現できるのかどうか、ファイアウォールを越えられるかどうかといった点は、やはり気になりますね。検証してみたいです。

□BackgrounDRbを触ってみる

BackgroundDRbは、バックグラウンド処理を行うworkerを生成するためのRailsプラグインです。前半にも同じセッションがあったのですが、人気があったため後半も継続になりました。

オリジナルの紹介記事「Introduction to BackgrounDRb」やよしみかんさんによる翻訳版を参照しながら、実際にサンプルを作ってみました。

オリジナルの記事のソースにバグがあり、いろいろ苦労した人もいましたが、これも非常に便利そうなプラグインですね。BackgroundDRbで非同期化したプロセスの完了通知をJuggernautで行うようにしたら面白いかも。

□懇親会

禅問答説が飛び出すなど、ABDの話とかが盛り上がっていました。 他にもいろいろと他所では聞けない話題もあり、非常に楽しかったです。

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

posted by Png genki on Sun 23 Jul 2006 at 21:37

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

Juggernautは、Ajaxianとかでも紹介されていましたが、Comet for Rails?なRailsプラグインです。 Flashのxmlsocketを使って、サーバとブラウザ間にコネクションを張り、リアルタイムにページの更新を行ったりする事ができます。

moroさんの記事で紹介されていたRails Chatでも利用されているようです。

まずはインストールしてみましょう。JuggernautはJsonライブラリに依存しているので、無ければ先にインストールします。

# gem install json
さて、続いてJuggernaut本体のインストールです。
$ ./script/plugin install \
svn://rubyforge.org/var/svn/juggernaut/trunk/juggernaut
$ rake install_juggernaut
$ ./script/plugin install \
svn://rubyforge.org/var/svn/juggernaut/trunk\
/juggernaut/vendor/plugins/juggernaut
これで完了です。毎度の事ながら、Railsのプラグイン機構は本当に便利ですね。 (注: 8月30日現在、インストール方法が上記のように変わっているようです)

さて、続いてrhtmlファイルからJuggernautのjavascriptを呼び出すようにします。

<%= javascript_include_tag "juggernaut_javascript" %>
<%= javascript_include_tag "juggernaut" %>
app/views/layouts/*.rhtmlあたりに記述しておけば大丈夫でしょう。 さらに、Juggernautが使用するFlashもbodyの最後あたりに埋め込みます。
<%= flash_plugin(session[:juggernaut_channels]) %>
最後の仕上げに、Juggernautの設定ファイルの雛形がconfig/juggernaut_config.yml に作成されているので、適宜変更してください。

これでJuggernautを使う準備は整いました。 実際に簡単なChatアプリケーションを作ってみましょう。

$ rails chat
$ cd chat
$ ./script/generate controller chat
ChatControllerとViewを記述します。
$ vim app/controllers/chat_controller.rb
class ChatController < ApplicationController
  def index
    session[:juggernaut_channels] = ["chat_channel"]
  end

  def send_data
    input_data = Juggernaut.html_and_string_escape(params[:chat_input])
    data = "new Insertion.Top('chat_data', '<li>#{ input_data }</li>');"
    Juggernaut.send(data, session[:juggernaut_channels])
    render :nothing => "true"
  end
end
続いてView
$ vim app/views/chat/index.rhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Chat</title>
  <%= stylesheet_link_tag 'default' %>
  <%= javascript_include_tag :defaults %>
  <%= javascript_include_tag "juggernaut_javascript" %>
</head>
<body>
  <%= form_remote_tag(
    :url => {:action => :send_data},
    :complete => "$('chat_input').value = ''") %>
    <%= text_field_tag('chat_input', '', {:size => 20, :id => 'chat_input'}) %>
    <%= submit_tag "Add" %>
  <%= end_form_tag %>
  <ul id="chat_data" style="list-style:none">
  </ul>
  <%= flash_plugin(session[:juggernaut_channels]) %>
</body>
</html>
これで完了です。あとは、pushサーバとWebサーバを起動すればOK。
$ ruby script/push_server &
$ ./script/server
http://localhost:3000/chat/にアクセスしてみましょう。
リアルタイムに書き込んだ内容が反映されます。

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

posted by Png genki on Sun 23 Jul 2006 at 07:56
Contents
Rails勉強会@東京#8レポート
Juggernautを使ってみる
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
ブログに数式を埋め込める数式コミュニティ