トップ «前の日記(2008-11-11) 最新 次の日記(2008-11-13)» 編集

じじぃの日記、ツッコミ可

Twitter: @jijixi_org
Xbox Live: jijixi

初心者が書いた OCaml 入門
Spotlight tips サイト内リンク集
1970|01|02|
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|11|
2011|05|
2012|01|

2008-11-12 [長年日記]

% [Ruby][Merb] Merb 1.0 がリリースされた記念にいじってみようと思った

… ので、インストールしてみたら

% sudo gem install merb
(snip)
Successfully installed merb-1.0
40 gems installed

依存する gem が大量すぎるw

ちなみに FreeBSD 6.3R に入れるときには do_sqlite3 という gem が sqlite3.h が見付からないと言ってこけるので、

% sudo gem install merb -- --with-opt-dir=/usr/local

とかしてやらないといけなかった。 なんでやねん。

続く…… かも。

% [Merb][Ruby] merb-gen app してみただけ

とりあえず Merb Wiki の HOW TO Topics を参考にさらっといじってみようと思っているところ。 で、Generate your first app にならって

% merb-gen app my-first-app

と実行してできたものを眺めた感じ。

とりあえずテストに関しては RSpec と ZenTest (の autotest) が前提とされてる風味。 あとバージョン管理は git を想定しているらしく .gitignore なんつーファイルも出力されてた。

app ディレクトリの構成は Rails を踏襲してるみたいだけど、controllers/exceptions.rb てのがあったり、それに関する views が用意されてたりする。 Rails で failsafe 的なエラーページにいろいろ細工したい場合って結構面倒なんだけど、そこら辺を簡単にしてくれる仕組みなのかな。

あと Rails だと application_helper.rb なところが global_helpers.rb になってたりとか。 models/user.rb というのが用意されてて、ちょこっと書き換えれば merb-auth パッケージのユーザ認証がすぐに使えるようになるみたいな感じなのかな? まだ外面しか見てないから違うかもだけど。

他にも config/rack.rb とか、Rack に関するデフォルト設定なんかも入ってるみたい。 そもそも Rack って具体的に何するものなのかイマイチわかってないんだけど。 (なんか WEB サーバとアプリの間に入るミドルウェア的なものみたいなんだけどなんかよくわからん。つーかまともに調べてない。)

% [Merb] Merb Slices

How to Quickstart Merb Slice Development を斜め読みしただけだが。

要するにアプリケーションのサブセットを gem として登録しておいて、他のアプリから呼び出すことで共通して使えるということかな。 これの何が嬉しいのか考えると、おそらくはアプリケーションの粒度を小さくできることなんじゃないだろうか。

例えば何かユーザ認証が必要なサイトを作ろうとすると (ちょっと極端に書くけど)

  1. 認証が絡む部分は全部一緒のアプリケーションに含めてしまう
    • アプリケーションがでかくなって、ちょっと直すたびにサイト全体がストップ
  2. 認証部分は別のアプリに
    • やり取りは WebAPI とかそういうのでやらなきゃないので、そのための仕組みができてないなら面倒
  3. 認証に必要な DB は共通で認証部分だけコピペ
    • DRY! DRY!

こんな感じかしら。 んで、スライスを使うことでコピペをすることなく 3 番目の方法を採れるようになる。 そうすると WebAPI みたいな余計な手間をかける必要無くアプリケーションを細かく分離できるようになるので、メンテナンスが楽になったり、負荷分散がしやすくなったりする…… ような気がする。

結構好みな機能のような気がするので、いずれもう少し突っ込んで調べてみよう。

% [Merb] Parts

Parts を斜め読み。

Rails の render :partial をより一般化したようなものかな。 コントローラ部分もあるから、その分 render :partial より柔軟性がありそう。 ついでにスライスで切り出しておけば再利用も簡単、という寸法だろうか。

Merb はこういう小さく切り分けるための仕組みが充実してる感じがするね。

% [Merb][Rails] Merb FAQ (What's the difference between Rails and Merb) 意訳

Rails と Merb って何が違うの?

(訳注: 以下カッコで囲っている部分は基本的に訳注)

Merb と Rails は違うものだけど似たところもあるよ。 例えば、両方とも MVC ベースなフレームワークだし、ルータ機構を持っているし、Ruby を使っている。 (Rails と一緒にすんなボケ、って言ってるようにも見える気が)

  • Merb は
    • Javascript ライブラリに寛容である (何を使っても良いようにできている)
    • ORM に寛容であ (ry
    • テンプレートエンジンに寛容 (ry
    • モジュール化されている (特定の部分だけを取り出して使いやすいようにできている)
    • 公開/非公開がはっきりとした API を持っている (公開 API を使っていればバージョンアップ時もハマらない)
  • Rails は
    • Javascript ライブラリや ORM、テンプレートエンジンについて不寛容である (事実上、組み込まれているものに制限される。あるいは他のを使おうとすると非常に手間がかかる)
    • 長く使ってる人がいるし、使ってる人が多い
Merb と Rails の書き方の違い
Rails Merb
script/server merb
script/console merb -i (webrat という gem が必要と言われるので入れる必要あり)
script/generate merb-gen (script/destroy の場合は -d オプションを付ける)
redirect_to article_path(@article) redirect url(:article, @article)
respond_to provides :xml, :js, :yaml (使う場所が違うから 1:1 で関連付けていいのか微妙
format content_type
render :xml => @article render @article
render :file => 'public/404.html, :status => 404 raise NotFound
logger Merb.logger (e.g. Merb.logger.info("Setting coordinates")) (むやみ名前空間汚さないのがステキ)
before_filter before
render :partial partial
RAILS_ENV Merb.environment (むやみに名前空間(ry )
flash[:notice] message[:notice]

ここまで。

ちなみに respond_to に関してだけど、Rails の場合

def an_action
  @record = Record.find(params[:id])
  respond_to do |format|
    format.html
    format.xml  { render :xml  => @record }
    format.yaml { render :text => @record.to_yaml }
  end
end

みたいな感じになるんだけど、Merb だと

provides :xml, :yaml

def an_action(id)
  @record = Record.get(id)
  display @record
end

てな風にして、Record クラスの方に

def to_xml
  # xml な文字列
end

def to_yaml
  # yaml な文字列
end

としておくような感じみたい。 display メソッドは要求された Accept-Type に応じてテンプレートを探して、あればそれをレンダリング、無ければ与えられたオブジェクトの to_#{type} メソッドを呼んで結果をレスポンスとして戻すというような動作らしい。 だからテンプレートを用意しておくならモデルクラスにメソッドを用意する必要は無いはず。

% [game] R-TYPE FINAL 日記、なんとか難易度 BABY でクリア

結局ヒドくハマったのはワープの面だけだという(疲

でもラスボスの倒し方がステキすぎたんで今までのストレスも吹っ飛んだ。 もうこのラスボス戦だけで元取れた気がするわ。 FINAL 波動砲は超燃える。 リアルで「おお〜!!」って声出ちゃったよ(笑

あとは、とりあえず DELTA の R13 エンディングの続きらしいステージ 3.5 をやっときたいんだけど、必要な機体はいつ手に入るのかねー。

% [clip] 「マジかよ……」ってなったゲームの展開:VIPPERな俺

177 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2008/11/10(月) 20:47:46.54 ID:44eec3rb0

2枚目のディスクに入ったらイキナリ振り子が揺れててエピソードが回想で進んでいった

何を言ってるかわからないと思うが俺もなにをいってるのか(ry

なんというゼノギアスw

いつになったらこの展開が終わるんだろうと思いながら、結局最後までそのままだったときの絶望感は完全にトラウマ。 「Disc 2をないことにすれば名作である」という言葉に「まあ確かにそうかもなあ」と、ついついつられてゲームアーカイブでゲットしてしまったがトラウマが邪魔をしてプレイできないという。

お名前:
E-mail:
コメント:

トップ «前の日記(2008-11-11) 最新 次の日記(2008-11-13)» 編集

日記ってのは本来、自分で読み返すためにあるもんだよなあ……
もしくは有名人になったら死後に本になったりとかか?

RSS はこちら

jijixi at azito.com