Posted filed under Ruby on Rails.

RailsConf 1日目はTutorial/Guidebook day。

registrationをすませた後は”Scaling a Rails Application from the Bottom Up“に参加してみる。

その名の通り、下位層からRailsのスケーリング話。
スピーカーはJoyentのCTO Jason Hoffman。

前半、Guidebookの写真とか撮っててあんまり聞いてなかった


Joyentの構成とハードの話し

  • OSはLinux/FreeBSD/Solaris
  • ディスクはSunFire X4500(RAIDZ2+1 likes RAID6+1) and NetApp NAS
  • ベンチマークで10,000op/sec, 80-100Mb/s

ハードウエア

  • ベンダーはDELL > HP > Sun
  • DELLは直接色々してくれるけど、Sunはリセラーに丸投げ
  • 本体が$5,000でも電気代が3年で$1,800以上かかる
  • colocationに置くと、回線代>電気代>ラック代
  • 電気代がネック。Vritualizationでマシンを減らす?<よく分からなかった

それでもSunを選ぶ理由

  • RAS(Reliability、Availability、Serviceability)=信頼性、可用性、保守性
  • コンポーネントがホットスワップ対応 (対応ハードが必要)
  • CPU、メモリ、TCOが結構安い
  • シリアルで色々な操作ができる

仮想化大切

  • Xenとかあるけど、Solaris Zoneが良い

なんでSolaris?

  • PXEブートをサポート
  • 高負荷でも落ちない (Xenは落ちるって話し)
  • ネットワークの統合や仮想化もできる
  • 仮想化が軽い
  • ZFSがある

ZFS

  • 使いやすく強力なファイルシステム
  • Dynamic Stripingやremote replicationがある

Ruby

  • FCGI, mongrel, JRuby(Glassfish)のどれで動かす?→mongrel

joyentの構成

  • 16GM 4 AMD-CPU
  • SolarisZoneを使って、4つのコンテナーに分ける
  • コンテナーごとに10個のmogrelを起動

水平スケール

  • Railsはマシン(mongrel)を増やせばOK
  • DBはmiddlewareでやる

Mongrelは、Apacheやpoundじゃなくて、BIG-IPで振り分け

  • Layer7スイッチでやっちゃう
  • URLのノーマライズとかもここでやっちゃう
  • Railsを動かしてるマシンはmongrelだけ稼働
  • 静的ファイルは、別マシンでApacheを稼働
  • BIG-IPじゃなくフリーでやるなら*** <書き漏らしたので後で調べる

ストレージはRDBMSだけじゃないよ

  • Memcache (有名だし使うの簡単)
  • LDAP
  • J-EAI (message bus in memory, twitterでも使ってる?)
  • Fileファイルシステム

J-EAI

  • XMPP-Jabber message bus for XML
  • クラスタリングをサポート
  • Erlangで書かれてる
  • SMTP, JDBCでも接続可能
  • App < -> Bus < -> database
  • (でも私には使い方っていうか、使い道が分からない。サーバ間連携につかえってこと?)

ファイルシステムの制限

  • 1ディレクトリは40000ファイルがMAX、普通は10000まで
  • 16×256ディレクトリを作って、ハッシュして格納するキーを作って格納する /data/76/34/4534
  • crypt()だとエスケープが必要だからMD5を使え<ハッシュ
  • 37signalsのjamisが同じ事を考えてる → ID Partitioning

忘れちゃいけない

  • DNSはpowerdnsがイイ
  • backendをmysqlとかLDAPにできる
  • Webインタフェースもある

午後のセッションはGuidebookに参加。

朝から、イベントカレンダー作りを通じて、初心者向けにRailsを解説。
テストやAjax、RESTなどかなり幅広く取り扱ってる。

「テストが難しいコードは使うのも難しい」ってのに納得。

参考サイト

p.s
 昨日デジカメ壊しちゃって急に買ったから写りが悪い・・・・

Posted filed under Products, Publications, Ruby on Rails.

 私が作成の前半を手伝ったサービス、”アバウトミー – 自分発見プロフィール“がNiftyからリリースされました
aboutme

 他のSNS系サービスの様に、友達関係を中心としたサービスじゃなくて、自分を掘っていくサービスで、質問に答え始めると意外にな自分が発見できちゃうサービスです。

答えを友達と比較したり、自分のマイナー度合いを見つけてみると面白げです。自分のプロフィールを人に説明するは難しいですが、このサービスを使えば、「ここ見ておいて」って言えばOK! (w

 と、珍しくサイトの宣伝っぽい事をしていますが、実は私はこのサイトの構築に関わったのですが、公開前のα版と、この公開版の基礎作り的な部分だけ作り、NaCLさんと富士通ソフトウエアテクノロジーズがそれを引き継いで完成させ公開になりました。

時間の関係で最後まで関われなかったのは残念ですが、こんな楽しいサービスに仕上げた2社の実力に感謝です。

また、Niftyの方々とは、このサイト構築を通じて、非常に楽しく仕事をさせて貰え、非常に感謝しています。

このサイトが流行ってくれるよう、陰ながら応援しています。

と言うわけで、いまならMOO MiniCards プレゼントキャンペーン開催中!なので、ぜひ登録してください!

■追記 名前が載ったメディア

Posted filed under Ruby on Rails.

15日出発、21日帰国でRailsConf2007参加してきます。
たぶん、みなさんNW航空で行くとおもうんですが、ぜひ良ければ出発日を教えてください。
あとは、masui(あっと)masuidrive.jpにメールいただけると嬉しいです。

My買い物リスト:

  • LUMIX DMC-FX7電池(あれば)
  • USB-SDカードリーダ
  • プレゼント用Tシャツ (なんか用)
  • サインペン (今年はなににサイン貰おう)
  • メモ帳 (TAXIで行き先書いて見せたり)
  • 電子辞書

持ち物

  • 着替え
  • MB+MB用電池x3+AC+延長ケーブル
  • iPod+QC3+充電
  • ひげそり
  • NDS+充電
  • MiniCard
  • ポートランドのマップ印刷
  • ホテル情報・会場情報の印刷
  • クレジットカード・パスポート・航空券
  • デジカメ

Posted filed under Ruby on Rails.

 dRubyは専用のプロトコルを使って、リモートアクセス用のクライアントとサーバを構築しますが、NetworkFacadeを使うことで、HTTPを使ってRubyのオブジェクトのやりとりをすることが出来るようになります。
 dRubyを使ったことがある人なら、ほとんど同じように使うことができます。簡単なサンプルが、プロジェクトのページに記載されているので、ぜひ参考にしてみてください。
 こちらでも簡単なオブジェクトは試しましたが、まだ出たばかりなので、エラー処理などが正しく行われているかに不安が残ります。

 同時に既存のXML/RPCやRESTをオブジェクトにバインドすることもできます。
Wikipediaを呼び出すのは下記の様なコードになります。

#!/usr/bin/env ruby
require 'rubygems'
require 'network-facade'

class Wikipedia < NetworkFacade::REST::Client 'http://wikipedia.simpleapi.net/'
  mapping :keyword, '/api'
end

wikipedia = Wikipedia.new
wikipedia.keyword(:keyword => 'Ruby on Rails').root.elements.each("*/body") do |e|
  puts e
end

 ファイアウォールなどの都合で、HTTPを使って外部のRubyサーバと手軽に通信したいときにどうぞ。

Posted filed under Ruby on Rails.

 Atlanta Ruby Users Groupのミーティングで、Slingshotの話しが出たらしく、The Armchair Politician :: Joyent Slingshot a Disappointmentにまとめられていました。

 そこで、下記のような利点と欠点がリストアップされていて、ほとんど同じ事を感じたので、ちょっと約してみました。(一部意訳、括弧内は私のコメント)

利点:

  • オブラインモードの時に、ローカルキャッシュにデータを残せる
  • Qt/GTK/Win32/Cocoaではなく、HTMLとrailsだけでローカルアプリケーションを作ることができる

欠点:

  • 同期に関する問題
  • パッケージ(ruby + rails + gems + アプリケーション + slingshot)で100Mを超える
  • ブラウザのコントロールができない (戻るとか更新の事だと思う)
  • PostgreSQL, MySQLなどを使うことができない

心配、見つけた潜在的問題、そして現実:

  • 同時に複数のSlingshotアプリケーションを起動できない (全部3000番ポートで起動されるから これはすぐ直るはず)
  • OSネイティブの機能をサポートしていない (Multi-platformを目指してるなら難しいのでは?)
  • script/serverをホントに起動してる所やデータベースのコピーをローカルに持ってることに失望した (ほんとにそう思うw はじめはJRubyで仮想化っぽいことをしてるのかと思ってた)

 これ以外に、利点としてドラッグアンドドロップのサポートが上げられると思う。これをブラウザでやるのは結構面倒だから。
 特に一番最後のscript/serverを呼んでるところは、ほんとがっかりした。実物を見るまではJRubyで動いてて、サーバまでを全部Slingshot内で処理してるんだと思ってた。この方式だとRailsプロセスと、フロントエンドのプロセスが別々なので、Slingshotがそのプロセス管理をちゃんとできないと、本体は終了したのにRailsプロセスがゾンビで残ってる、っていう事になりかねないな。

 ここから、プロダクトレベルまで仕上げるには、まだまだ道のりが長そうだけど、こういう製品はぜひ欲しいので、Joyentにはがんばって欲しい。

Posted filed under Ruby on Rails.

 色々試行錯誤した結果、Slingboxでアプリケーションを作ることができました。

ActiveScaffold (旧AjaxScaffold)で作った簡単なアドレス帳をサンプルアプリケーションにSlingshotの使い方を見てみましょう。

作業その0 元となるRailsアプリケーションを作る

 今回は元となるアプリケーションはActiveScaffoldで、さくっと作ってみます。

$ rails slingshot1 -d sqlite3
$ cd slingshot1
./script/plugin install http://activescaffold.googlecode.com/svn/tags/active_scaffold
$ ./script/generate model address name:string address:string mail:string
$ rake db:migrate
$ ./script/generate controller address
$ echo “class AddressController < ApplicationController;active_scaffold :address;end" > app/controllers/address_controller.rb
$ echo ‘ < %= javascript_include_tag :defaults %>< %= active_scaffold_includes %>
< %= yield %>‘ > app/views/layouts/application.rhtml
$ rm public/index.html
$ echo “ActionController::Routing::Routes.draw { |map| map.connect ”, :controller => ‘address'; map.connect ‘:controller/:action/:id’ } ” > config/routes.rb

 これでサンプルアプリケーション構築完了。

Slingshot サンプルアプリケーション1
 これをSlignshotを使ってブラウザ無しでうごかしてみましょう。

作業その1 データベースはSQLite3にする

 今回はサンプルアプリケーションのDBがSQLite3だったので問題ありませんが、既存のアプリケーションでMySQL等を使っている場合には、SQLite3にコンバートしてください。
たぶん、MySQLでも動くんですが、それだと別にMySQLサーバのセットアップが必要になるので、インストールの要らないSQLite3を推奨しているようです。

作業その2 Slingshotをダウンロード

 現在はSubversionでしか提供されていないので、svnでダウンロードします。

$ svn export http://svn.joyent.com/slingshot/osx

作業その3 VirtualMachine(VM)にアプリをセット

 先に作ったRailsアプリをVMにセット。

$ cp ~/slingshot1/* osx/VM/trunk/

作業その3 VMをSlingshot.appに移動

 アプリをセットした、VMをSlingshotの中に移動

$ mv osx/VM osx/Slingshot.app/

完成

Slingshot サンプルアプリケーション2

 これで完成。Slingshotアイコンをダブルクリックするとアプリケーションが起動します。

 今回ファーストリリースだけあって、起動したり、しなかったりと、かなり不安定な所があります。
とりあえず、内部で3000番ポートでmongrelを起動しているので、他で3000番ポートを使ってると、起動できません。

 とりあえず、安定さえすれば、簡単にデスクトップアプリが作ることができそうです。
Slignshotの特徴は、サーバとのデータ連係とドラックアンドドロップサポートなので、次はこれを試してみたいです。まだドキュメントされていませんが、アプリケーションの最新版のチェックと自動アップデートの仕組みもあるみたいなので、これからが楽しみです。

おまけ

 できあがったファイルは、これです。Intel OSX専用です。そのうちWin版も作ります。

Posted filed under Ruby on Rails.

 先日、このblogでも紹介した、Railsでデスクトップアプリケーションを作るための環境、Joyeur Slingshotが初めてリリースされました。
 Railsをデスクトップで実行する環境と、サーバとデータを同期させるプラグインがリリースされている模様。

 早速、試してみましょう。と思ったらどうにも動かない・・・。と思ったら動いた・・・・。謎だ。

 色々と試してみるので、続報をお待ち下さい。

Posted filed under Blog.

最近、あまりにSpamがひどいので、ブログをWordPressに乗り換えました。

Typoだとアンチスパムが弱かったり、コメントを消す動作が結構めんどうだったので、さっくりと乗り換えることに。

なお、過去のコンテンツは、そのまま残してあります。

前のトップページは、ここにありますので、古い情報を探しに来た方はそちらからどうぞ。