2008-02-03
■ [event][javascript] Kanasan.JS prototype.jsコードリーディング#3に行ってきた
ログはあとで書くかも.
とりあえず今日は大変なライフハックを身につけてきましたのでここに記しておきますね.
「ホワイトボードに油性マジックで書いてしまったときは ホワイトボード用のペンで文字をぬりつぶしてから消せばなんとかなる」
あと消しゴムも有効.
手伝ってくださった方ありがとうございました.次回からは気をつけます….orz
余談
Kanasan.JSの公式サイトはGoogleグループのページ なのですが,こいつが全然検索に引っかからないので,みんなもっとリンクしてください(笑).
「Kanasan.JS」みたいな感じでリンクを張ると良いと思います.
■ [scheme] Re:メソッドチェイン風マクロ - MEMO:はてな支店
(chain '(1 2 3) (reverse) (append '(4 5)))
ふむふむ.
「it」とか書かせるようにすれば,consやmapにも対応できそう.
(chain '(1 2 3) (reverse it) (append it '(4 5)))
cutマクロみたいに「<>」でもいいかも.
(chain '(1 2 3) (reverse <>) (map (pa$ + 1) <>))
■ [prog][ruby] ユニットテストの実行結果を利用するというアプローチ
20080122#p01について.
_ 変数に型のない Ruby でのツールの補助
http://mono.kmc.gr.jp/~yhara/d/?date=20080122#p01
ユニットテスト実行時にメソッドの引数の型を記録しておいてそれをツールの補完なんかに使えば良いのではと思った。
[羊堂本舗 脳ざらし紀行 より引用]
実は今日の懇親会でもそんな話が出てた(ような気がする)のですが,ユニットテストを利用して コードを解析するっていうアプローチはなかなか面白そうです.
2008-02-07
■ [scheme] R6RSの誤植?
3.5 Infinities and NaNs より.
Positive infinity (中略) than the numbers represented by all rational number objects. Negative infinity (中略) than the numbers represented by all rational numbers.
負の無限大の方も,〜all rational number objects. でしょうか.数で表される数ってなんかおかしいような.
■ [ruby] Re: Windows で Ruby をコンパイルしてみる (完結編) - 星一の日記
RubyをVCでコンパイルするにはbisonが必要……そう思っていた時期が俺にもありました.
各リリース版のアーカイブにはちゃんとbisonの出力結果が同梱されてるんで,Visual C++ (Express Edition) だけでいけるんですね. id:hajimehoshiさんの手順どおりに1.9.0-0をコンパイルしてみたら,一発で通って感動.簡単すぎる!
というかwin32\README.win32にちゃんといろいろ書いてあったんですね.^^;
ただ,DESTDIRを指定するより,configureで--prefixを指定するほうが良さそうです. ということで
C:\ruby-1.8.6-p110>"C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd" /XP32 /RETAIL C:\ruby-1.8.6-p110>"C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat" C:\ruby-1.8.6-p110>win32\configure.bat --prefix=/prog/rubys/ruby-1.8.6-p110 ... C:\ruby-1.8.6-p110>nmake ... C:\ruby-1.8.6-p110>nmake test ... C:\ruby-1.8.6-p110>nmake install
でファイナルアンサー (c:\prog\rubys\ruby-1.8.6-p110\ 以下にインストールするとき)。
ちなみに,この手順で作るとrbconfigが微妙におかしいんですが….
TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/1.9/i386-mswin32_80")
これだとTOPDIRがnilになってしまいます.
TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/1.9.0/i386-mswin32_80")
が正しそう.
2008-02-08
■ [ruby] Fiber#transferについて調べてみた
- Fiber::Core は callcc 並の黒魔術である、とレッテルを貼って使わせない
[[ruby-dev:31596] Re: Fiber reviesedより引用]
黒魔術と聞いてやってきました。
rubyのソースコードのtest/ruby/test_fiber.rbに例があるんですが、これが難しい…。
def test_transfer ary = [] f2 = nil f1 = Fiber.new{ ary << f2.transfer(:foo) :ok } f2 = Fiber.new{ ary << f1.transfer(:baz) :ng } assert_equal(:ok, f1.transfer) assert_equal([:baz], ary) end
とりあえず、Fiberについてのポイントを3つ。
- Fiber.newしただけではまだ実行されない。
- Fiber#resumeで実行。実行が終わるか例外が発生すると実行元に戻る。
- Fiber#transferというのもあって、こっちは実行が終わるか例外が発生するとroot fiber(メインスレッドみたいなもの?)に戻る。
んで、resumeは普通だがtransferは黒魔術らしいw
では、上のソースを読んでみるよ。test_transferを実行すると、
- ary = [], f1 = Fiber, f2 = Fiber のように代入される
- f1.transfer()が呼ばれ、f1に制御が移る
- f2.transfer(:foo)が呼ばれ、f2に制御が移る (このとき、f1の表す仕事は「値をaryに突っ込み、:okを返す」)
- f1.transfer(:baz)が呼ばれ、f1に制御が移る (このとき、f2の表す仕事は「値をaryに突っ込み、:ngを返す」)
- f1が再開される。渡された値 :baz がaryに突っ込まれ、:ok が返り値になる
- f1の実行が終わる。resumeならここでf2に戻るはずだが、transferを使ってるので、root fiberに戻る
- assert_equal(:ok, :ok) => テスト成功。やったね
ふむふむ。なんつーか、この実行順序、無茶だよね(笑)。強制的に親元に連れ戻される家出少女のような(意味不明)。
しかし、まだtransferが黒魔術な理由はよくわかってない。 なんとなく、ヤバそうな雰囲気は感じるんだけど。 処理系のスタックの知識があればきっと瞬時に「これがこうなって、こうなったときに危ない」とかイメージできるんだろうなー。
2008-02-10
■ [event][Ruby/SDL] Ruby1.9のFiberはゲームにも使えるのか?
結論から言うと、余裕で使える。
今使ってるノートPC (PenM 1.2GHz, メモリ1GB) だと300キャラくらいまで大丈夫な感じです。 大丈夫というのは「描画フレーム数が50/秒以上」とかそんな。
ていうかFiberってなによ
いわゆるコルーチンです。
ふつーのゲームプログラミングでは、敵を「右→下→左→上」という順に動かすために「いま動作のどこまでやったかフラグ」 を用意したりして頑張るんですが、コルーチンがあればこんなに簡単に。
def act_move1(i) @x = rand(640) @y = rand(480) 40.times{ @x += 8; Fiber.yield } # 40回右に動く 40.times{ @y += 8; Fiber.yield } # 40回下に動く 40.times{ @x -= 8; Fiber.yield } # 40回左に動く 40.times{ @y -= 8; Fiber.yield } # 40回上に動く @alive = false end
よかったですね!
かんそう
よいところ
- インスタンス変数が減る
- フラグが減る
- 他の処理と共有しない変数が減る (敵の移動速度 @dx @dy とか。これらは描画に影響しないんで共有不要。)
- 初期化をいろんなところに書ける
- 各Fiber関数(act_*) の冒頭は一度しか実行されないので、ここに初期化処理が書けます。
- たとえば上のdx, dyとか。
- あと描画もFiberにするなら、render関数の冒頭で画像を読み込むとか。
わるいところ
- フラグを消しきれなくてストレスがたまる
- 上のソースでは@aliveとかいうフラグがありますが、これは移動が終わったら描画をオフにするためのものです。ダサい。
- これはしかしまだ工夫の余地がありそう。
- ふつーのゲームプログラミングとなんか違う
- 良くも悪くもなんか違います。慣れたらコルーチンの方が書きやすそうですが。
その他のコルーチン
LuaとかPythonとかTonyuとかに実装されてるという噂。
Pythonのやつ(ジェネレータ)は主にループ用に用意されてるらしいんですが、 裏技的にコルーチンにも使えちゃうとか。へーへー。
ダウンロード
- windows用 Ruby1.9+SDL(最新版)バイナリ
- 最新版はCVSのbranchの方らしいので、自分で落とす人は注意(笑)
- ソースとか
- ごちゃまぜですがfoo.rbがFiber版です(ひどいファイル名だな)。foo2.rbはcallcc版(謎)です。
ていうかなんで突然Fiberなの
お察しください。
普段、単一言語オフしか顔を出してないので、DとかC++とかRubyとかPythonとかさまざまな言語が飛び交うSDLオフは新鮮でした。 あと年齢層バラバラなのに共通の話題で盛り上がれるのは素晴らしいなあとか。
あとはnihaさんがとても若くて年寄りでした(ひどい) 誰かにはさんに体を酷使しないアルバイトを!
2008-02-11
■ [biwascheme] JSONPを実装した
動機
twitterクライアントを書きたいので、クライアントのみで行うならJSONPが必要。
JSONP?
普通のAjaxはhtmlと同じドメインにしか接続できないため、twitter.comを見に行けない。
そこで、以下のようなscriptタグを動的に生成する。
<script src="http://twitter.com/statuses/friend_timeline.json?callback=recieve_json"></script>
さらに、受け側となる関数を用意する。
function recieve_json(data){ //dataを利用した処理 }
twitterのサーバは、callback=(関数名)のような引数があると通常のJSONの代わりに以下のようなデータを返す。
recieve_json([{user: "yhara", ...}]);
これはJavaScriptの関数呼び出しになっている。
さてどうするか
Scheme側のAPIを考える。
(print (recieve-jsonp url))
とかやりたいよねw
receive-jsonpが2つ同時に呼ばれなけば、WebScheme.receive_jsonp みたいな受け皿を用意するだけで良さそう。
じゃあ2つ同時に呼ばれたらどうするか。 例えば、イベントハンドラの中にreceive_jsonpがあって、 ボタンが押されるたびに違うURLのJSONPを取りに行くとか。
(add-handler! ($ "run") "click" (print (receive_jsonp (get-content ($ "url")))))
;; ↑ちなみにこれはjquery風に書くとこういう意味だよ ;; $("run").click(function(){ ;; receive_jsonp($("url").text, ;; function(data){ print(data); }); ;; }
これだと、WebScheme.receive_jsonpがどっちの継続を実行したらいいのか分からんくて困る。
案1
関数名を動的に増やす。WebScheme.receive_jsonp_1, WebScheme.receive_jsonp_2 ... みたいに。
いや、WebScheme.jsonp_receiver[0], WebScheme.jsonp_receiver[1], ... でもいいのか。 twitterのJSONPの関数名って記号使えるのかな。
試してみた
「.」も「[」もOK。というわけで案1を採用。うまく動いているようだ。
あとjsonはScheme側から見るとVector+Objectとかで使いにくいので、これをリスト+alistに変換する関数json->sexpを書いた。
■ [biwascheme] BiwaSchemeでtwitterビューアを実装しました
twitter にログイン中であることを確認して、以下のページを開いてみてください。
ソースはこんなかんじ。結構、短くね?
<script src="../lib/biwascheme.js"> ;; access twitter (define (get-timeline type) (json->sexp (receive-jsonp (string-append "http://twitter.com/statuses/" type "_timeline.json")))) ;; class user (define (screen-name-of user) (cadr (assoc "screen_name" user))) ;; class post (define (text-of post) (cadr (assoc "text" post))) (define (date-of post) (parse-date (cadr (assoc "created_at" post)))) (define (user-of post) (cadr (assoc "user" post))) (define (screen-name post) (screen-name-of (user-of post))) (define (describe-post post) (print (date->string (date-of post) "~T") ": " "<" (screen-name post) "> " (text-of post))) (define (reload-timeline) (element-update! ($ "bs-console") "loading...") (let1 timeline (get-timeline "friends") (element-empty! ($ "bs-console")) (for-each describe-post timeline))) (add-handler! ($ "reload") "click" reload-timeline) (reload-timeline) </script>
JSONPなんで、全てクライアント側(BiwaScheme)のみで実装してます。twitter.com以外のサーバには接続してませんよ。
めんどさを軽減するために、srfi-19の時間関係の関数とか、prototype.jsのElement.* の一部を実装した。
IEだけ日付がバグるのは、Date.parse("Mon Feb 11 02:50:33 +0000 2008") が失敗するせい。 そのうち直す。(date->stringは実装したけどstring->dateはまだ^^;)
2008-02-12
■ [rails] Railsで緯度経度(というか小数)を扱うときのTips
なんか find_by_lat_and_lng(lat, lng) とかしても1件も見つからないという現象が発生して、 チャットで聞いてみたら、どうも:floatではなく:decimalを使えばいいらしい。
なんでかというと:floatでは誤差が発生するから。:decimalだと、小数を文字列化して保存するので誤差が発生しないらしい。
- floatは「小数の近似値を保存する」と思った方がいいのかな。
■ [scheme] クロージャだけでオブジェクト指向が実現できるらしいよ
- Gauche のオブジェクトのなかみ - 言語ゲーム
- Gauche で bank-account
- Scheme:制約の拡散
- YASOS (Yet Another Scheme Object System)
クロージャを基本にしたメソッドディスパッチシステム
[Scheme:制約の拡散より引用]
なにそれ?と思ってコードを見てみると…
(define (MAKE-POINT the-x the-y) (lambda (message) (case message ((x) (lambda () the-x)) ;; return a function which returns the answer ((y) (lambda () the-y)) ((set-x!) (lambda (new-value) (set! the-x new-value) ;; do the assignment the-x)) ;; return the new value ((set-y!) (lambda (new-value) (set! the-y new-value) the-y)) (else (error "POINT: Unknown message ->" message)) ) ) ) (define p1 (make-point 132 75)) (define p2 (make-point 132 57)) ((p1 'x)) -> 132 ((p1 'set-x!) 5) -> 5
おおお、これすげー(笑)。make-point関数を呼ぶと何かクロージャが返ってきて、 それに'xとか'yとかのメソッド名を渡して実行するとメソッド本体が返ってくると。
λすごいよλ
2008-02-13
■ [ruby][rspec] 「ANSI Common Lisp」9章のレイトレーサを移植した
わーい動いたよー。
感想
- ソースコードを理解するのに、移植はかなり有効。(全ての行の動作を把握しないと移植できないから)
- CLのletは、初期値がnilでよければ値を省略できるらしい。 (let (a b c) body..) とか
一応ソース。
あと、最初はRspecでテスト書いてたんだけど、途中からやめてしまった。 こっちもせっかくなので貼っておく。
require 'raytra.rb' describe "Fixnum#sq" do it "は、二乗を計算する" do 2.sq.should == 4 -10.sq.should == 100 end end context "Vector" do describe "#mag" do it "は、ベクタの長さを返す" do Vector[1,1,1].mag.should == Math.sqrt(3) end end describe "#unit_vector" do it "は、単位ベクタを返す" do Vector[23,12,47].unit_vector.mag.should == 1 end end end context "Raytra" do describe ".distance" do it "は、二点間の距離を返す" do dist = Raytra.distance(Vector[3,3,3], Vector[2,2,2]) dist.should == Vector[1,1,1].mag end end describe ".minroot" do it "は、二次方程式の小さいほうの実数解を返す" do # xx + 2x + 1 = 0 Raytra.minroot(1, 2, 1).should == -1 end end end
日本語でRSpecを使うときは、「クラス名」「メソッド名」「は、〜する」という書き方が良いみたい。
2008-02-15
■ [ruby] shooting_starを動かしたりとか
まずgemではまり、
sqliteではまり、
結局mysqlを入れた^^;;
さらには "InvalidAuthenticityToken" まで…
ブラウザを2つ立ち上げてchatを開くと(Rails2.0の場合)すぐに「ActionController::InvalidAuthenticityToken in ChatController#show」と表示されて止まってしまう。
がしかし、基本的には以下の手順通りにやったらチャットが動いた。(scaffoldだけ、Rails2.xなので ./script/generate scaffold chat name:string message:string にしたけど。)
2008-02-16
■ [junk] スライド終わらん
- 「今度の勉強会、微妙に時間が空くんだけど誰か発表しませんか」
- →勢いで立候補
- →まああと2週間もあるし余裕だろwwwwww
- →調べものしたりとか
- →なぜか気付いたら前日
- →さぁスライド作るかー
- →でももうこんな時間……明らかに徹夜コースだお……
- →異常にテンションが下がる
- →スライドのデザインだけ決める
- →ニコ動でも見るか
- →(3時間経過)
- →…しまった、とりあえず風呂入ってくる(この辺で既に深夜)
- →ようやくスライドを作り始める
- →だんだん楽しくなってくるwwww
- →しかし6時くらいに肉体の限界が来て、壁にもたれて数十分寝る
- →おきた
- →スライド続行
- →これ20分で喋れるのかなぁ
- →ていうか腹減った ←いまここ
スライドが出来てきたら楽しくなるんだから、残り1週間の時点でPowerPointをとりあえず立ち上げれば良いのかも。
2008-02-19
■ [web] Opera+LDRでもgキーで全文表示できるようになった,が….
- 3/15追記:以下で紹介されてるスクリプトの方がちゃんとしてます.こっちを使った方が良いでしょう.
がうらやましかったので,Operaに移植してみた.
手順
まず,「OperaのユーザスクリプトでGM_xmlhttpRequestを使う - kaz::hatena」 の指示に従って,以下のjsファイルをuser.js置き場 (詳細設定→コンテンツ→JavaScriptオプション で設定したディレクトリ) に置く.
- Cross-domain XMLHttpRequest - User JavaScript - Opera Community
- a-lib-stacktrace.js
- a-lib-xmlhttp-cd.js
- GreaseMonkey Script on Opera 9.00 < 21 < June < 2006 < nulog, NULL::something : out of the headphone
- 000.js
次に,以下のjsを置く.
オリジナルからの変更点は2点.
- 余分なカンマを修正 (Operaだと文法エラーらしい)
- w.Keybindがundefinedだったので適当に修正 (もっとましな方法がありそう)
316,318c341,349 < w.Keybind.add(KEY, function(){ < launchFullFeed(SITE_INFO); < }); --- > (function(){ > if(w.Keybind){ > w.Keybind.add(KEY, function(){ > launchFullFeed(SITE_INFO); > }); > } > else > setTimeout(arguments.callee, 100); > })();
これで,一応,「g」キーで全文を表示できるようになった.
でも,取ってくるサイトによってはそのあと表示がえらいことになってしまう.
例:
どうしよう.
□ Yuya [iframeにしちゃう、とか?]
2008-02-22
■ [junk] ねむい
書きたいなぁと思うことはいろいろ溜まっているのだが,最近元気がなくてあんまり書けない. twitterもIRCもめんどい.Lingrはブラウザからひらくだけだからその点楽だな (あれ,twitterってwebから見れるんだっけ)
いやちょっとしたネタを全部Lingrに書いてしまうから日記が更新されなくなるというだけの話か. とりあえず夜が明けてから眠る生活をなんとかしないと….
今日は2回も足切り突破できたので(561, 549)ちょっと幸せ.通算4回目か.
■ [softs] Windowsでも*shとかgrepみたいな快適CUI生活を送りたい
という場合真っ先に挙げられるのがcygwin (とかmingwとかvmwareとか) なんですが (WindowsでRubyを使うときの不便さ - Jewel-mmo 開発日記(2008-02-22)), 僕は nyacus + rak で結構快適に生活してます.
nyacus はDOS窓のようなCUIシェルですが,
- Emacs風キーバインド
- タブ補完
- ヒストリ
と,Unixのシェルのような機能がいろいろ搭載されています.
とりあえずlsが使えるDOS窓ってだけでも嬉しい人は多いんじゃないでしょうか(笑).
rak はRubyで書かれたgrepで,「ファイル名を指定しなくてもいい*1」 「検索結果に色が付く」などの機能があります.
例えば「あれ,この関数ってどこで使ってるんだっけ?」と思ったら,
$ rak 関数名
とするだけで,
のような感じで見やすく一覧表示してくれます.
インストールはrubygemsを使って簡単に.
gem install rak gem install win32console #windowsのみ,色付け用
*1 デフォルトでサブディレクトリも含む全てのファイルを検索
□ サイロス [ああ、NYACUS懐かしいな。 一時期使ってましたよ。]
2008-02-25
■ [rails] Railsの気になるところ
script/generateが遅い.
- あーこれカラム増やさないと
- script/generate migration HogeHoge
- …時間かかるな
- なんとなくウィンドウを切り替える
- LDRを読み始める
- (10分後)…あれ,俺なにやってたんだっけ
■ [event][javascript] kanasan-sai-3
あとで書きたい.
■ [javascript] JSBench (JavaScriptの簡易ベンチマーク)
Kanasan.JSで,しばしば「○○と××ってどっちが速いの?」という質問が出るので,実行時間を簡単に計測できるような ページを作ってみた.
JavaScriptのコードを書いて「run」ボタンを押すと,実行時間をミリ秒単位で計測してくれます.
とりあえず,for文でlengthプロパティを保存しとくと本当に速くなるのだなーと分かって感動した.
■ [biwascheme] BiwaScheme-0.4をリリースしました
関西に来ているhayamizuから「biwascheme-0.3.tar.gzを解凍したらファイルがカレントディレクトリに爆発した」という 報告を受けたので,0.4をリリースしました.
変更点はあとで書く.
■ [event] ホソ
ujihisa,hayamizたちとホソを食うなどした.
ホソって何?と言われそうだが,事前に聞いていたとおり,ホソはホソとしか言いようがない(笑). 行くときは予約を入れておくと良いそうです(待ち時間が長い).
■ [misc] ブログの書き惜しみはやめましょう〜(^^)
先週は春休みだというのにずっとバイトのためのコードを書いていて,ブログもあまり更新できなかった.
しかし忙しいからといってブログの更新を自重するのは間違っていた.
- いくら忙しいとはいえ,ゲームする時間や二度寝する程度の時間はあるのだから,ブログを書けないはずはない.
- ブログを書かないことで,「自分はブログも書けないほどバイトに忙殺されているのだ」という被害妄想に陥り,精神衛生上良くない.
とかとか.
■ [ruby] Windowsで,diffの出力に色を付けるRubyスクリプト
Windowsでもdiff結果に色を付けたい!!と思ったので,znzさんのdiffcolorをWindows用に移植してみた.
つかいかた
- gem install win32console
- 以下のRubyスクリプトをdiffcolor.rbなどとして保存
- svk di | ruby c:/somewhere/diffcolor.rb
- わーい色がついたよー(^−^)
本体は以下.コメントアウトしているところは良くわかんなかったところなので,あとで何とかするといいよ.
require 'rubygems' require "Term/ANSIColor" include Term::ANSIColor require "Win32/Console/ANSI" ARGF.each do |line| col = 0 case line # when /^[\-+]{3}/, /^\w/ # col = 32 when /^@/ col = yellow when /^-/ col = red when /^\+/ col = cyan else col = reset end print col #line.gsub!(/\r/) { "\e[34;4m\\r\e[0m" } #line.gsub!(/[^\n\S]+/) { "\e[34;4m#{$&}\e[0;#{color}m" } puts line end print reset
さっそくReposhで di[Enter] とすると di|ruby diffcolor.rbを実行するように設定を書いた.
global: pathext: [".bat", ".cmd"] custom_commands: - pattern: \Adi rule: "{system} di | ruby c:/proj/misc/diffcolor.rb" for: svn, svk, hg
(この機能を使うにはSVN HEADが必要です.リポジトリからチェックアウトしてください.)
2008-02-27
■ [web] companulaを外しました
付けてみたらどんなものか分かるかと思ったけど,結局よく分からなかったので外した.
疑問:
- ゲームの参加者は誰なのか?ブログの読者?ブログの作者?
- 「キープしていた記事が見ているページに関連づけられます」って,どういうこと?
- そもそも,これは何を競うゲームなの?どうなったら勝ちなの?
- 勝つためには何をすればいいの?
とまあ,他人に遊ばせたいならこのへんを明確にしてほしいなあと思いました.
■ [rails] FirefoxだけでRailsアプリが作れるHerokuが凄すぎる件
Herokuについてはこちら:
- 公式サイト Heroku
- 紹介記事 TechCrunch Japanese アーカイブ » Herokuが、ブラウザー内でRuby on Railsの開発を可能に
- チュートリアル ブラウザで Ruby on Rails 開発! Heroku を使ってみよう - WebOS Goodies
herokuのここが凄い:
ゼロインストール
ガチでFirefox2さえあればいい.サーバも,Rubyも,エディタすら必要ない.
エディタが凄い
JavaScriptで書かれてる(と思う)んだけど,シンタックスハイライトがあり,オートインデントもある. *1
Emacs, Vim, Eclipseのような高度な機能はないけれど,「メモ帳」のように耐えられないほど低機能でもない. *2
migrationが凄い
「まだ実行されてないmigration」にはボタンが表示され,それをクリックするだけでmigrationを実行できる.
プラグイン管理が凄い
利用可能なgemやプラグインを一覧表示し,ボタン一つでインストールできる.
すぐに動作確認できる
Railsなので,サーバの再起動が必要なく,書いたそばからアプリの動作が変わる.
感想
単なるネタやアイデア実証レベルではなく,実用可能な域に達してることに感動した.「始まったな感」が強い.
サインインしてから使えるようになるまで2日待ちらしいけど,一度体験してみる価値はあると思うよ.
蛇足
でも自鯖で開発できる人ならまだそっちの方が快適だろうなやっぱ. import/export機能があるんで,ローカルで開発して公開用にのみ使うっていうアプローチも可能だけど, それじゃちょっとつまんないよなw
初中級者のためのプラットホームとしては強力だと思う.
□ かくたに [rcodetools http://d.hatena.ne.jp/rubikitch/20070623/118604..]
□ yhara [おー,既にRuby用の実装があったとは! ありがとうございます.]