トップ 最新 追記

Route 477



2006-11-01

[Plagger] PlaggerでCVSのコミットログをIRCに通知する

さて、SVNが出来たらCVSもやりたくなるのが人の常。というか、サークル内のプロジェクトでまだCVS使ってるものも結構あるので。

ところが、CustomFeed::CVSLogってのは今のところ存在しないようだ。CPANならCVSを扱うライブラリくらいあるんじゃないの? と思ったが、なんと $cvs->log() だけ実装されていない。がーん。

仕方が無いので、cvs rlog の出力結果からフィードを生成することにする。 PlaggerのプラグインはPerlで書く人が圧倒的だったけど、Rubyで書かせてもらいます。サイレントマジョリティ(ry

リポジトリのアドレスを渡すと、コミットログをyaml形式(utf-8)で標準出力に出力します。 Plaggerから使うときは以下のような感じで。

plugins:
 - module: Subscription::Config
   config:
     feed:
       - url: "script:/somewhere/customfeed-cvslog.rb /cvs/yhara proj -t 'cvs log of proj'"
 - module: CustomFeed::Script
...

詳細

usage: ./customfeed-cvslog.rb cvsroot repository [options]

cvsrootにはCVSROOTのあるディレクトリを、repositoryにはモジュールを指定します。

オプション:

-r, --reverse
コミットを新しい順に表示します。
-t "hoge", --title "hoge"
フィードのタイトルを指定します。
-d 7, --days 7
何日前のコミットまで表示するかを指定します。デフォルトは2です。2より小さい値は指定できません。

例:

./customfeed-cvslog.rb /cvs/yhara proj -t 'cvs log of proj' -r
./customfeed-cvslog.rb :pserver:anonymous@rubyforge.org:/var/cvs/rrb rrb -d 1000

仕様

基本的にはcvs rlogして、ファイルごとに切って、さらにリビジョンごとに切って、それらをコミットごとに分類している だけです(CVSは複数ファイルのコミットに対して同じログが各ファイルごとに表示されるので、ユーザー名・時刻・メッセージが 同じものを一つにまとめる)。Perlへの移植も別に難しくないと思われます。

(11/3 追記:yamlの例に「url:」が抜けていたのを修正)

[ruby] いやあ

こんなこと(customfeed-cvslog.rb)してるうちに、OptionParserにえらい詳しくなってしまったw usageの表示をカスタマイズできるとか知らなかったよ。

webには載ってないんだけど、 optparse.rbのソースにはもっと長い使用例が書いてあります。OpenStructの便利さに目覚めてしまいそう。


2006-11-03

[book] Perlベストプラクティス借りてきた

大学の図書館(一般の方)に置いてあったので思わず。

Perl使ったことないのにいきなりベストプラクティスかよwwwという気もしたが、 コードのレイアウトとかはRubyにも当てはまる話だし面白い。


2006-11-05

[ruby] p strってやると日本語が読めなくてうぜえ!という時に

class String
  def inspect
    '"' + self + '"'
  end
end

p(:message => "ほげほげ")

before:

{:message=>"\202\331\202\260\202\331\202\260"}

after:

{:message=>"ほげほげ"}

(11/7追記:$KCODEを設定しておけば同等の効果があるらしい! 知らんかった!)

yhara@meteor:~ % ruby -Ke -e 'p(:message => "ほげほげ")'
{:message=>"ほげほげ"}
本日のツッコミ(全1件) [ツッコミを入れる]

ohai [-K or $KCODE で]


2006-11-06

[event] echizenおめでとう

外部トップこっそり更新しといた。

[junk] 右左が分からない

僕は逆に東西南北が分かりません。たまに東のことを「右」って言ってしまったり(笑)。*1

個人的には「左右」がビルトインで「東西南北」が後付けな感じがします。「自分固定」に出来ているんだろうか。

さらに英語のeast・westになるともう一段ややこしいし、今作ってるゲームはクオータービューなのでもう二段ややこしい。 「えっと右上は…左上が北だから東で…東はwest…じゃねえやeast…」みたいな。

*1 用例:「秋田と岩手ってどっちが右だっけ?」

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

hanya [ぎゃー 未完成Webサイトはずかしい^^;]

yhara [頑張って更新してくださいという圧力です(嘘)]


2006-11-08

[softs] 暇だからPuTTYを256色にしてみる

いや暇じゃないけど。

参考:

準備

Debianの場合はとりあえずncurses-termを入れれば良いらしい。

PuTTYの設定

3.putty の xterm-256 を使うのチェックを入れる

4. putty の端末タイプの文字列を xterm-256color に

[ピンク ブロッサム ダイアリーより引用]

試してみる

ktkr

なんという256色… 画面を見ただけで感動してしまった

screenの設定

aptで入れると256色がONになってないらしいので、上の記事に従ってdebuildするか、ソースを取ってきてコンパイルする。 僕は後者で。

% ./configure --prefix=/home/yhara/bin/screen --enable-colors256
% make
% make install

で、.screenrcに追記。

## http://frexx.de/xterm-256-notes/

# erase background with current bg color

defbce "on"

# do not use 'screen-bce'

term xterm-256color

[qootas.org/blogより引用]

screen内で256colors2.plを実行して綺麗に見えればOK。

ちなみに失敗するとこうなるw

16色

[misc] 朝がしんどいのだが

「予定の1時間前に目が覚めてしまった」ときは、二度寝するより起きてしまった方が (多少、睡眠時間が減るとしても)楽らしい。

人間の睡眠は90分周期なので、二度寝すると深い眠りのときに起こされることになって云々。

確かにそうかもなぁ。

[softs] ファイラ

GUI(ツリー&リストビュー)とCUI(コマンドライン)が合体したようなファイラーとか作れないかな。

いつもはまめFileを愛用してるのだが、たまに cd / とか rm *~ とかやりたくなる。

[web] ただのにっき - MySpaceに(いちおう)登録

↓取られとるがな(´・ω・`)

http://www.myspace.com/yhara

原さんではなさそうに見えるが…。何て発音するのか聞いてみたい。


2006-11-09

[kmc] KMC部員のオープンソース貢献度

こういうので分かると田畑さんに教えてもらった。

もうちょっと昔のはこちら。

もっとyhara@..を増やしたい…と思ったが、ソースはどっから取ってきてるのかな。sourceforge、CPANあたりは 確実そうだが。

[memo] シューティングゲームの歴史 (Histoire Du Shooting Game)

http://harmless.exblog.jp/4429439/


2006-11-10

[ruby] RedGreenでTest::Unitを色つきにする

RedGreenは、RubyのTest::Unitの出力に色をつけるソフトウェアです。

ruby test_hoge.rb とする代わりに、 rg test_hoge.rb とします。

rg

画像はエラーのときの例です。テストが全て通ると、最後の7 tests, 6 assertions...の行が緑色になります。

インストールはRubyGemsで。

gem install redgreen --source require.errtheblog.com

公式サイトは… http://errtheblog.com/post/15 でいいのかな。

(参考:http://subtech.g.hatena.ne.jp/secondlife/20061106/1162823696)

[ruby] ZenTestまとめ

最近あちこちで名前を目にするZenTestについてちょっと調べてみた。

一言でいうと、「Test::Unitをもっと楽に使うためのソフトウェア」。

Rails用のソフトなのかと思ってたが、どうもRails以外でも便利に使えるらしい。

[続きを読む]


2006-11-14

[softs] Livedoor Reader を使い始めました

はてなRSSからLivedoor Readerに乗り換え。前者は「お気に入りのフィードだけ読む」のに適してて、 後者は「とりあえず突っ込んどいて流し読みする」のに適していると思う。

本当に数十分で1000未読捌けるのか挑戦しようと思ったんだけど、頻繁に「更新」ボタン押すので1000件も溜まらない罠。 この暇人め!>俺

[web] 「更新は毎日した方がいい」のか

よく「毎日見に来てくれる人のために、ブログは毎日更新した方がいい」とか言うけど、 RSSリーダー経由で見るならそうでもないよね。むしろどうでもいい更新が続くとunsubscribeされてしまう危険が。

読者がRSSリーダー使ってそうな層なら、「量より質」を目指した方が良いのかも。

まぁ自分が書きたいことを書くのが一番ですけど(ありがちなまとめ)


2006-11-20

[ruby] Ruby関係のMLまとめ

まとめてみた。

[Ruby/SDL] Ruby/SDLで枠がないウィンドウを作る

ピンク ブロッサム ダイアリーより:

■ Ruby/SDL

でウィンドウ枠がない描画ってできるのかなぁ。できたら偽 IRCV も作れる気がする気がする。

大林さんに聞いてみたら、SDL::NOFRAMEという定数を使うと ウィンドウ枠なしが指定できるそうで。

 require 'sdl'

 module SDL; NOFRAME = 0x20; end
 # 注:現バージョンのRuby/SDL 1.2.0ではSDL::NOFRAMEが定義されてないというバグが
 # あるので、自分で0x20と置いています^^; 次のリリースでは直るそうです。

 SDL.init( SDL::INIT_VIDEO )
 screen = SDL.set_video_mode( 300, 200, 16, SDL::NOFRAME )

 loop do
   while event = SDL::Event2.poll
     exit if event.is_a? SDL::Event2::KeyDown
   end

   10.times do |i|
     col = (i%2==0) ? [0,255,255] : [255,255,0]
     screen.fill_rect(0,i*20,300,200/10, col)
   end
   screen.flip
 end

実行結果はこんな感じになります。

noframe

が、ウィンドウの表示位置を指定することができないし、ウィンドウの透過とかもできないので *1、結論は「Ruby/SDLでウィンドウ枠がない描画はできるが、偽IRCVは難しそう」ということで。

*1 そもそもSDL(libsdl.org)のターゲットはフルスクリーンで表示するようなアプリケーションなので

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

znz [http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name..]


2006-11-21

[Ruby/SDL] Test::UnitでFPSTimerのバグを調査してみた

1秒間のフレーム数を一定にするために Ruby/SDLのチュートリアルにあるfpstimer.rbを使っていたのだが、 なんか描画が重いときに実FPS(描画FPSじゃなく)が60切ってる気がしたので、Test::Unitを使って調べてみた。

 require 'test/unit'
 require 'fpstimer.rb'

 class TestDebugMessage < Test::Unit::TestCase

   #描画が十分軽いときに、実FPS = 描画FPS = 60 となることを確認
   def test_fpstimer
     @timer = FPSTimer.new(60)
     fr, dfr = do_task_1sec()
     assert_equal 60, dfr
     assert_equal 60, fr
   end

   #描画が重いときも、実FPSは60くらいになることを確認
   def test_fpstimer_heavy
     @timer = FPSTimer.new(60)
     fr, dfr = do_task_1sec(proc{sleep 0.02})
     skipped = @timer.total_skip

     puts "drawed #{dfr} frames of #{fr} (#{skipped} skipped)"
     assert_equal fr, dfr+skipped
     assert_in_delta 60, fr, 2 #58〜62
   end

   #1秒間の実フレーム数と描画フレーム数を計測する
   def do_task_1sec(draw = proc{})
     @timer.reset

     frames = 0
     drawed_frames = 0
     start = Time.now
     while (Time.now - start < 1)
       frames += 1

       @timer.wait_frame do
         draw.call
         drawed_frames += 1
       end
     end

     [frames, drawed_frames]
   end

 end

実行してみると「60 wanted but was 47」となったので、やっぱり実FPSが落ちているらしい。sleep 0.7とかで試してみて、 どうも「1回描画をスキップしただけでは足らない」というケースにバグがあるらしいことが分かった。

とIRCで報告したところで、大林さんが何か気付いた模様。現在チュートリアル|[[Ruby/SDLのチュートリアルに 上がっているバージョンでは上のバグは直っています。

何が言いたいかって?えーと……、ゲーム開発でもテストが役立つことはあるよってことで。

[memo] プライベートなリファラ

メモ。

ブクマ

%r<\Ahttp://b.hatena.ne.jp/add\?>,
%r<\Ahttp://b.hatena.ne.jp/[^/]+/add\?>,
%r<\Ahttp://bookmark.fc2.com/user/post\?>,
%r<\Ahttp://clip.livedoor.com/clip/add\?>
%r<\Ahttp://del.icio.us/[^\?]+\?(.*)url=>,

RSSリーダ

%r<(freshreader|fr)(.*)feedshow(cat|all)?.php\?>,
%r<\Ahttp://feedbringer.net/feed>,
%r<\Ahttp://feedpath.jp/feedreader/>,
%r<\Ahttp://reader.livedoor.com/subscribe/>,
%r<\Ahttp://www.bloglines.com/myblogs_display\?>,
%r<\Ahttp://www.google.com/reader/view/>,

プライベートアドレス

%r<\Ahttp://localhost>,
%r<\Ahttp://[^\./]+/>,    # http://マシン名/ みたいな

「.」をエスケープしてないのは仕様。


2006-11-22

[kmc] NF2006

明日(つーか、今日)から京大の学園祭が始まります。週末京都にお越しの方はぜひお立ち寄りください。 KMCはローソンのある建物の3Fでやってます。 只今絶賛修羅場中☆

Ruby/SDLなゲームが遊べる学園祭は京大だけ!*1

※期間中は部室の掃除につき、この日記や部員のページが読めなくなる場合があります。トップページはなんとかする予定。

*1 違ったらぜひ教えてください


2006-11-23

[ruby] Enumerable#mapの致命的な欠点

地図関係のプログラムを書くと非常にややこしい

map = Map.maps.map{|map| map.move_to(x,y)}.find{|map| map.valid?}

[vim] grep.vim超便利

GrepBuffer hoge とかすると、開いてるファイルの中からhogeを含む行を洗い出してくれる。便利。

[Ruby/SDL] デバッグ情報を画面に描画できるようにしておくと

便利。超便利。デバッグ時間が30分は縮まるね(当社比)。

DebugMessage

DebugMessage.puts("x = #{@x}, y = #{@y}")
DebugMessage.puts(event.inspect)

みたいな感じで。

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

znz [そういうときはmapの代わりにcollectで。]

yhara [ええ、そうなんですが… map派としてはあくまでmapに拘りたいところです(^^;]


2006-11-24

[Ruby/SDL] 普通のオブジェクトへの特異メソッド定義とか

いつ使うんだよwと思ってたが、簡単なMockを作るときに使えそうだ。

Ruby/SDLでジョイスティックを扱うときは SDl::Joystick のインスタンスを使う。

  if SDL::Joystick.num > 0
     @joystick = SDL::Joystick.open(0)  #1つめのパッド(1コン)を初期化
  end

で、@joystick.axisや@joystick.hatで十字キーの情報が得られる*1

が、上のコードだとパッドが刺さってないときに@joystickがnilになり、@joystick.axisが呼ばれた瞬間にNameErrorで落ちてしまう。

そこで下のようなコードを書くと、「axisとhatというメソッドを持つオブジェクト」を3行で簡単に作れる。

   if SDL::Joystick.num > 0
     @joystick = SDL::Joystick.open(0)
   else
     @joystick = nil    #ダミーのジョイスティックをつくる
     def @joystick.axis(i)  ; 0    ; end
     def @joystick.hat(i)   ; nil  ; end
     def @joystick.button(i); false; end
   end

なんとなく気持ち悪い気がしないでもないが(笑)

*1 axisとhatのどっちを使うかはパッドによるが、axisを使うものが多いようだ

[Ruby/SDL] DEBUG/RELEASE

「リリースビルドにすると落ちる」とか言ってる先輩を見て「C++は大変だなぁ」と思ってたら、 自分のプロジェクトでもDEBUG_MODE=falseにすると画面がちらつくというバグが出て焦った。 *1

*1 ちなみに原因は、デバッグメッセージの表示をオフにすると描画順序が変わって云々。

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

ohai [nilに定義するのは気持ち悪いなあ。]

yhara [ああ、Object.new の方が良かったですね。]


2006-11-28

[kmc] NFお疲れ様でした

NFというよりコーディング合宿だったんだが…w

個人的には打ち上げで新勧の話が出ていたのが嬉しかった。 KMCの新勧がまだまだヘボいのは事実なので*1、 若い人から改善案が出るのは非常に良いことだと思う。

まぁ、酒の席で終わらせずに、実際に頑張ってくださいということで(^^; 期待しています。 一年で一番盛り上がるイベントはNFだけど、一番重要なイベントは新勧なので。 *2 声かけが苦手な人でも、外部ページを更新するとか、魅力的なビラを描くとか、他人に催促して働かせるとかw、 それぞれの得意なやり方で新勧に貢献してくれればと思います。

そろそろ僕もOBになるんかなぁ。

*1 特定の代の話ではなく、ここ5年間を通して

*2 NFがコケてもしょんぼりするだけだけど、新勧をサボるとサークルが傾く

[kmc][Ruby/SDL] Rubyのプロジェクトやってる人は

Rubyコーディング規約に一度目を通しておくと良いと思います。 「文法上はどっちでも書ける」ようなことを「こっちにしましょう」というのが羅列してあります。

あくまでも一例なんでどっちでもいいものまで定義されていますが、「ふつうのRubyプログラム」が どんな風に書かれているのかを知るには手っ取り早いんじゃないでしょうか。

あとは青木さんスタイルとか。

[softs] 後輩に薦めるべきエディタが分からない

Unixならとりあえずemacsっつーか、emacs使えるならWindowsでもxyzzy薦めときゃいいんだけど。*1 普段gvim使ってるから自分のエディタが薦められない。(^^; *2

最低条件としては

  • euc-jpおよび改行LFに対応している
  • シンタックスハイライト(予約語とかを色付けしてくれる)
  • オートインデント(自分でスペース連打しなくて良い)
  • それらがRubyに対応している

くらいで。(C++/C#の人はVisualStudio使うよね)

まぁオートインデントにもいろいろあって、強いやつなら

  • if のあとに改行すると自動的にスペース2個分下げてくれる
  • end[ENTER]って打つと自動的にスペース2個分左にやってくれる
  • 指定範囲を一気にインデントしてくれる

とかあるんだけど、「改行したら自動的に前の行とインデントをあわせてくれる」くらいあればまずまず快適でしょう。

ていうか指定範囲をインデントってWindows系のエディタでできるやつあるんかなぁ。

*1 重さが気にならなければMeadowでも可

*2 いや、vimは非常に好みが分かれるエディタなので。押し付けるんじゃなく自分から試すんでないと使うようにならなさそう。使う気があるんなら懇切丁寧に教えるよ!