A Django site.
5月 3, 2008
» TechCrunch Japanese » Twitter、Ruby on Railsを放棄か

複数の情報筋からの情報:2年近くの間、高い頻度で発生していたスケーリング関連のトラブルで、TwitterはRuby on Railsのフレームワークを捨て、PHPないしJava(Rubyは使い続け、Railsのフレームワークのみを放棄する案もあるようだ)を使ってゼロから作り直すことにしたようだ。

TechCrunch Japanese アーカイブ » Twitter、Ruby on Railsを放棄か

実際のところどういう問題があったのか知りたいな。
おそらく、Twitter のような膨大なトラフィックを集めるサイト特有の問題だと思われる。
以下のような話も関連してるんだろうな。

TwitterのスケーリングについてはCookがその任に当たっていたが、彼はこの作業をうまくこなすことに失敗した。
[略]
Twitterは今年になって、少なくとも3つ、キーとなる技術面での雇用を行っている。Lee MighdollはVPエンジニアおよび運用担当として1月から参加している。そして今週になってJohn Kaluckiと(「BloggerおよびBlogspotのスケーリング分野での働きでその名を知られる」)Steve Jensenという、2名のスケーリング分野のエキスパートを採用した。

TechCrunch Japanese アーカイブ » Twitterにおける素人の前座は終わり?

というか、アレですよ。
Web アプリケーションをいかにスケールさせるか、という話になってくると、どのフレームワークが良いとかそういう話の重要度はきわめて低くなってくるんだろうな。
例えば、Java もしくは PHP に置き換えることによってシステムの負荷がほんのちょっと下がるだけでハードウェアにかかるコストがものすごく減る、なんてこともあるだろうし。
ごくごく一般の Web アプリケーションにおいてはこういう問題はそうそう起こらないと思う。

つまりは、「開発コスト」と「運用コスト」の二種類のコストがあって、サイトの規模や種類によってどちらの負担が大きくなるかが変わってくる、ということですね。
そういったことを考慮した上でシステムに採用する技術(言語やフレームワーク等)を決める必要があると。
なので、 Rails がダメだったから、とか早急に結論づけるのは問題の本質をとらえ損ねてるわけですよ。

いや、でも、Rails もしくは Ruby に致命的な問題があったとかだったらまた話は変わってくるけど。

4月 10, 2008
» twitter っぽいのを Rails で作りました

twitter っぽいのを Rails で作りました。
名前考えるの面倒くさかったので twitter です。

ソース

twitter.zip

デモ

http://test.oyguj.org/twitter/

スクリーンショット

twitter.png

もうちょっと改良して、もっと面白いものにしていこうという気持ちはあります。

そういえば IE で動作確認してない。

追記:
ちなみに、follow とか reply とかいった機能は全く実装されておりません。

4月 1, 2008
» My_Memo

Web で個人的なメモを書くためのツールを作った。

デモ

My_Memo

作った動機

Wiki とか Google ノートブックみたいなのって、まあそれなりに使いやすくはあるんだけど、検索する際に画面遷移するのがちょっとウザイなと思ったので、画面遷移しなくてすむようなものを作りたかったという、ただそれだけ。
というか、編集と検索の機能を同一画面に置きつつ、操作的には完全に分離したようなものを作りたかった。
一つの画面でいろんなことができたらいいじゃん、みたいな発想。
いろいろできすぎるのも良くないと思うけど。

画面遷移によるストレスって以外と無視できない。
0.1 秒くらいで次の画面が表示されるんだったあまり気にならないかも知れないけど。

とか。

スクリーンショット

my_memo1.png
見た目こんな。

my_memo2.png
編集時。

my_memo3.png
検索時。

Rails で作った。
Haml も活用。

あとでソースとか公開する予定。
大したアレじゃないけど。

まだいろいろ足したい機能とか修正したいところとかがある。

追記:

ソース

my_memo.zip

ていうか、Haml 便利っすね Haml。

例えばこんな感じで View が書ける。

!!! XML
!!!
%html
  %head
    %title My_Memo
    = stylesheet_link_tag 'common'
    = javascript_include_tag :defaults
  %body
    #wrap
      #header
      #main
        #add_area
          - remote_form_for :new_memo, :url => {:action => :add}, :loading => "$('new_memo_text').value = ''" do |memo|
            = memo.text_area :text, :rows => 6
            = memo.submit 'Add'
        #memos_header
          = link_to_remote 'Reload', :url => {:action => :reload}, :loading => 'Element.update("memos", "")'
        #memos
          = render :partial => 'memos'
        #memos_footer
      #side
        #search_area
          Search
          = text_field_tag :search_text
          = observe_field(:search_text, :frequency => 1, :url => {:action => :search}, :with => "'search_text=' + value", :success => 'Element.update("search_results", "")')
        #search_results
        #search_area_footer
      #footer

ネストで HTML の階層構造を表現できる。
閉じタグとか意識する必要ない。
HTML の構造を作り替えたりする際に非常に楽。
上記のソースを普通に HTML (erb) で書くとするとソースコードの分量が 1.5 〜 2 倍近くになると思う。

11月 29, 2007
» DreameHost で Rails を動かす

環境:
Rails 1.2.3

  1. FastCGI を有効にする
  2. dreamhost.png

  3. シンボリックリンクをはる
  4. ln -s ~/[railsプロジェクトディレクトリ]/public ~/[公開用ディレクトリ]
  5. .htaccess に以下を記述
  6. RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  7. パーミッションの設定
  8. chmod 755 dispatch.fcgi

11月 8, 2007
» Rails を使うと Ajax がとっても簡単ですよ、というお話

Rails を使うと Ajax がとっても簡単ですよ、というお話。

普通のリンク

例えば、以下のコードを Rails の MVC パターンにおける View の部分に相当する *.rhtml ファイルに書きます。

<%= link_to "link to hoge", :action => 'hoge' %>

すると以下の HTML が出力されます。

<a href="/chapter3/hoge">link to hoge</a>

これだけでもまあ便利です。

Ajax 版のリンク - 1

Ajax 版のリンクを作ってみましょう。
そのためには上のコードを少し変えるだけです。
以下のように link_to のところを link_to_remote に変えて、後ろの :action のところも少し変えます。

<%= link_to_remote 'link to hoge', :url => { :action => 'hoge' } %>

出力される HTML(と JavaScript)は以下のようになります。

<a href="#" onclick="new Ajax.Request('/chapter3/hoge', {asynchronous:true, evalScripts:true}); return false;">link to hoge</a>

「Ajax.Request…」とかそれっぽいコードが生成されているのがわかりますね。

Ajax 版のリンク - 2

上の例だとリンクをクリックしても(リクエストは送信されるけど画面上は)何も変化がないのでちょっとさみしいですよね。
例えば以下のようにすれば、レスポンスの内容を画面に挿入することができます。

<%= link_to_remote 'link to hoge',
  :update => 'content',
  :url => { :action => 'hoge' } %>
<div id="content"><div>

出力される HTML(と JavaScript)は以下ようになります。

<a href="#" onclick="new Ajax.Updater('content', '/chapter3/hoge', {asynchronous:true, evalScripts:true}); return false;">link to hoge</a>

これで胸を張って Ajax と言えますね。
めでたしめでたし。

参考:

Ajax on Rails Ajax on Rails
Scott Raymond 牧野 聡

オライリー・ジャパン 2007-07-24
売り上げランキング : 17962

Amazonで詳しく見る by G-Tools