トップ 最新 追記

Route 477



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

ユニットテスト実行時にメソッドの引数の型を記録しておいてそれをツールの補完なんかに使えば良いのではと思った。

[羊堂本舗 脳ざらし紀行 より引用]

実は今日の懇親会でもそんな話が出てた(ような気がする)のですが,ユニットテストを利用して コードを解析するっていうアプローチはなかなか面白そうです.

本日のツッコミ(全2件) [ツッコミを入れる]

かくたに [rcodetools http://d.hatena.ne.jp/rubikitch/20070623/118604..]

yhara [おー,既にRuby用の実装があったとは! ありがとうございます.]


2008-02-06

[softs] Power Pointで編集中のスライドからプレゼンを開始する方法

Shift-F5らしい.これ,意外と知られてないんじゃないかな….特に学生の間では.仕事で使う人なら常識なのかも知れないが.

ツールバーに「このスライドを実行 (Shift+F5)」みたいのがあるべきだと思った.

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

shamoshamo [というか、手元にあったPower Point 2000は、メニューにも無く、左下のボタンにon mouseしても表示..]

yhara [バージョンによるのですね.2003では使えてます.]

takano32 [仕事で使うのに知らなかったオレがやってきましたよ。ありがとうございます。]


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. でしょうか.数で表される数ってなんかおかしいような.

[misc] 修論おわた

発表もつつがなく?終了.

研究室のみなさまに感謝.

[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")

が正しそう.

本日のツッコミ(全2件) [ツッコミを入れる]

星一 [言及ありがとうございます。たしかに --prefix でやるのが素直ですね。 全然関係ないが Twitter の件..]

yhara [お,Rakefile版ですか.とりあえずgem install mkrfしました. http://rubyforge..]


2008-02-08

[ruby] irbコマンドを経由せずにIRBを起動する方法

ruby -rirb -e 'IRB.start'

これでいけるらしい。

[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を実行すると、

  1. ary = [], f1 = Fiber, f2 = Fiber のように代入される
  2. f1.transfer()が呼ばれ、f1に制御が移る
  3. f2.transfer(:foo)が呼ばれ、f2に制御が移る (このとき、f1の表す仕事は「値をaryに突っ込み、:okを返す」)
  4. f1.transfer(:baz)が呼ばれ、f1に制御が移る (このとき、f2の表す仕事は「値をaryに突っ込み、:ngを返す」)
  5. f1が再開される。渡された値 :baz がaryに突っ込まれ、:ok が返り値になる
  6. f1の実行が終わる。resumeならここでf2に戻るはずだが、transferを使ってるので、root fiberに戻る
  7. assert_equal(:ok, :ok) => テスト成功。やったね

ふむふむ。なんつーか、この実行順序、無茶だよね(笑)。強制的に親元に連れ戻される家出少女のような(意味不明)。

しかし、まだtransferが黒魔術な理由はよくわかってない。 なんとなく、ヤバそうな雰囲気は感じるんだけど。 処理系のスタックの知識があればきっと瞬時に「これがこうなって、こうなったときに危ない」とかイメージできるんだろうなー。

本日のツッコミ(全3件) [ツッコミを入れる]

ku-ma-me [resume でも transfer でも片方だけ使うのはそれほど問題ないんですが、両方同時に使うとカオスになるんで..]

ささだ [状態遷移とかになんか使えないのかなあとかは考えた。 あと、transfer の状態で例外あがったらどうするのん、と..]

yhara [> 両方同時に使うとカオスになるんです。 なるほど、了解です。 僕もまだ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のやつ(ジェネレータ)は主にループ用に用意されてるらしいんですが、 裏技的にコルーチンにも使えちゃうとか。へーへー。

ダウンロード

ていうかなんで突然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] クロージャだけでオブジェクト指向が実現できるらしいよ

クロージャを基本にしたメソッドディスパッチシステム

[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とかのメソッド名を渡して実行するとメソッド本体が返ってくると。

λすごいよλ

本日のツッコミ(全3件) [ツッコミを入れる]

ひげぽん [そういえばSICPにそんなのがありましたね。引数でメソッドを返すとか。]

yhara [おお、そうなんですか(SICPを積んでいることがバレてしまった^^;) 調べてみます。]

ひげぽん [いやいや yharaさんにはもうSICPは不要かと思われますw]


2008-02-13

[ruby][rspec] 「ANSI Common Lisp」9章のレイトレーサを移植した

raytra

わーい動いたよー。

感想

  • ソースコードを理解するのに、移植はかなり有効。(全ての行の動作を把握しないと移植できないから)
  • 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を使うときは、「クラス名」「メソッド名」「は、〜する」という書き方が良いみたい。

本日のツッコミ(全2件) [ツッコミを入れる]

takkanm [itを"それ"にしてしまうと、さらに日本語っぽくよめますね。 ttp://d.hatena.ne.jp/darash..]

yhara [そうそう、書いてるとだんだんとitとかdescribeとかの英語が気になってくるんですよね…。]


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オプション で設定したディレクトリ) に置く.

次に,以下の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」キーで全文を表示できるようになった.

でも,取ってくるサイトによってはそのあと表示がえらいことになってしまう.

例: 例

どうしよう.

本日のツッコミ(全1件) [ツッコミを入れる]

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 関数名

とするだけで,

rak

のような感じで見やすく一覧表示してくれます.

インストールはrubygemsを使って簡単に.

gem install rak
gem install win32console   #windowsのみ,色付け用

*1 デフォルトでサブディレクトリも含む全てのファイルを検索

本日のツッコミ(全1件) [ツッコミを入れる]

サイロス [ああ、NYACUS懐かしいな。 一時期使ってましたよ。]


2008-02-25

[rails] Railsの気になるところ

script/generateが遅い.

  1. あーこれカラム増やさないと
  2. script/generate migration HogeHoge
  3. …時間かかるな
  4. なんとなくウィンドウを切り替える
  5. LDRを読み始める
  6. (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用に移植してみた.

つかいかた

  1. gem install win32console
  2. 以下のRubyスクリプトをdiffcolor.rbなどとして保存
  3. svk di | ruby c:/somewhere/diffcolor.rb
  4. わーい色がついたよー(^−^)

diffcolor

本体は以下.コメントアウトしているところは良くわかんなかったところなので,あとで何とかするといいよ.

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が必要です.リポジトリからチェックアウトしてください.)

本日のツッコミ(全2件) [ツッコミを入れる]

Tight ShiRt [&#12371;&#12435;&#12395;&#12385;&#12399;,&#31169;&#12399;&..]

yhara ["こんにちは,私はポルトガルの学生だった 私の愛あなたのブログ,私の日本のクラスメートは賛美私: 人を呪わば穴二つ ..]


2008-02-27

[web] companulaを外しました

付けてみたらどんなものか分かるかと思ったけど,結局よく分からなかったので外した.

疑問:

  • ゲームの参加者は誰なのか?ブログの読者?ブログの作者?
  • 「キープしていた記事が見ているページに関連づけられます」って,どういうこと?
  • そもそも,これは何を競うゲームなの?どうなったら勝ちなの?
  • 勝つためには何をすればいいの?

とまあ,他人に遊ばせたいならこのへんを明確にしてほしいなあと思いました.

[rails] FirefoxだけでRailsアプリが作れるHerokuが凄すぎる件

Herokuについてはこちら:

herokuのここが凄い:

ゼロインストール

ガチでFirefox2さえあればいい.サーバも,Rubyも,エディタすら必要ない.

エディタが凄い

JavaScriptで書かれてる(と思う)んだけど,シンタックスハイライトがあり,オートインデントもある. *1

Emacs, Vim, Eclipseのような高度な機能はないけれど,「メモ帳」のように耐えられないほど低機能でもない. *2

migrationが凄い

「まだ実行されてないmigration」にはボタンが表示され,それをクリックするだけでmigrationを実行できる.

プラグイン管理が凄い

利用可能なgemやプラグインを一覧表示し,ボタン一つでインストールできる.

すぐに動作確認できる

Railsなので,サーバの再起動が必要なく,書いたそばからアプリの動作が変わる.

感想

単なるネタやアイデア実証レベルではなく,実用可能な域に達してることに感動した.「始まったな感」が強い.

サインインしてから使えるようになるまで2日待ちらしいけど,一度体験してみる価値はあると思うよ.

蛇足

でも自鯖で開発できる人ならまだそっちの方が快適だろうなやっぱ. import/export機能があるんで,ローカルで開発して公開用にのみ使うっていうアプローチも可能だけど, それじゃちょっとつまんないよなw

初中級者のためのプラットホームとしては強力だと思う.

*1 まだ日本語が書けないのが困るけど(コピー&ペーストすればOK).

*2 VimperatorとかFiremacsと組み合わせると良さそう