December 15, 2009

sinatra_debug_console

Description

http://github.com/jugyo/sinatra_debug_console

Debug console for sinatra

Debug console for sinatra

Installation

gem install sinatra_debug_console

Usage

require 'sinatra_debug_console'
Sinatra::DebugConsole.config(USERNAME, PASSWORD)

Example

# % ruby app.rb
# see http://localhost:4567/debug_console

require 'sinatra'
require 'sinatra_debug_console'
Sinatra::DebugConsole.config('admin', 'password')
December 5, 2009

Growl で開発の効率をUP!

Picture 4

(この記事は Ruby Advent Calendar jp: 2009 : ATND の5日目です。前日は authorNari さんでした)

こんばんは!
g こと jugyo です!
今日は Growl を使って開発の効率をUP!させる方法について紹介したいと思います。
しばしお付き合いください。
Mac ユーザーでない方もしばしお付き合いください。
Growl については以下のページが参考になるかと思います。
Growl | Macの手書き説明書

g

まず g について。
g はデバッグ用のツールで、 p で出力されるような文字列を Growl を使って表示します。
標準出力に出すよりも目立っていい感じです。

g

インストール方法:

gem install g

Growl の設定で以下の項目にチェックが着いていることを確認してください。

growl_config

使い方:

require 'g'
g "Ruby Advent Calendar jp: 2009!"

簡単ですね♪

growl-logger

次は growl-logger について紹介したいと思います。
みなさんは Logger って使ったことありますよね?
logger.debug("foo bar") とかやるアレです。
growl-logger はそんな Logger の一種で、 Growl を使ってログを出力します。
Growl 側の設定を変えることで、以下のようにログレベルに応じて色を変えることが可能となっています。

3384656890_446c1cd6e2_o

これを思いついたときは「すごい発明だ!」と思ったのですが、現状あまり使われていないようです。
私も使っていません。

インストール方法:

gem install growl-logger

growl_sql

最後に growl_sql の紹介をしたいと思います。
growl_sql は Rails のプラグインです。
Rails アプリが発行する SQL を Growl を使って画面に表示します。

使用例:

以下のようなフォームをポストすると…

Picture 5

実行された SQL 文が表示される!

Picture 8

growl_sql が出力する SQL 文は INSERT と UPDATE と DELETE の3種類です。

はじめ、 SELECT 文を含むすべての SQL を出力するようにしていたら画面が SQL で埋め尽くされて大変なことになりました。
Growl の使いすぎに気をつけましょう。

インストール方法:

./script/plugin install git://github.com/jugyo/growl_sql.git

結論

Growl って楽しいですね!

(明日、6日目は takkanm さんです!お楽しみに!(そういえば takkanm さんにはお会いしたことないなぁ))

November 28, 2009

RubyConf に行ってきました!

SDIM1214

サンフランシスコで行われた RubyConf に参加してきました!
めちゃくちゃ楽しかったです!

SDIM1268

ライトニングトークで “g” についてしゃべりました。
死ぬかと思うくらい緊張しましたがなんとかなりました。
資料とストーリーさえちゃんと作っておけばなんとかなるもんですね。
それに信じられないくらい好評でした!
知らない外人さんからもたくさん褒めてもらってとてもとても嬉しかったです。
アメリカに住みたいっす!

“g” のプレゼン資料です。

Termtter ユーザーも増えました!

termtter user

November 11, 2009

関西Ruby会議02 に行ってきた!

関西Ruby会議02 に行ってきました!

SDIM1149

ライトニングトークにも飛び入りで参加させていただきました!
ifchangedg について話ました。

2009-11-07-DSC_9791
(http://www.flickr.com/photos/koichiroo/ / CC BY 2.0)

Termtter ハッカソンもやりました!
ujihisa さん協力のもと、 hashtag プラグイン が完成しました。

SDIM1126

Ruby関西はとっても良い感じのコミュニティでした!
ていうか僕のことを知ってる人が多くてうれしかったです!

SDIM1117

行きの夜行バスがつらくて死ぬかと思ったけど、行って良かった!
帰りは新幹線で快適でした。

SDIM1167

関連記事

以下の記事がすごくよくまとまってます。
関西Ruby会議02にいってきました – toyosystem

November 6, 2009

delayed_job の使い方(中途半端)

delayed_job の使い方をちょっとだけ調べた(プロジェクトの wiki 読んだだけだけど)。
調べた結果、今回やりたいこととは若干合わない感じだったので結局使わないことにした。

delayed_job
http://github.com/tobi/delayed_job

プライオリティを指定してジョブを登録する

“1″ がプライオリティ。
デフォルトは “0″。

Delayed::Job.enqueue(NewsletterJob.new('text', User.find(:all).collect(&:email)), 1)

時間を指定してジョブを登録する

“5.minutes.from_now” とすることで 5 分後にジョブを実行するように指定できる
“0″ はデフォルトのプライオリティ。

Delayed::Job.enqueue(NewsletterJob.new('text', User.find(:all).collect(&:email)), 0, 5.minutes.from_now)

設定

最大試行回数(MAX_ATTEMPTS)等を指定することができる。

# config/initializers/delayed_job_config.rb

Delayed::Job.destroy_failed_jobs = false
silence_warnings do
  Delayed::Job.const_set("MAX_ATTEMPTS", 3)
  Delayed::Job.const_set("MAX_RUN_TIME", 5.minutes)
end

Google App Engine (Python) でテストを書くには

Google App Engine (Python) でテストを書くにはどうしたらいいんだろう、と思ってちょろっと調べた。

Google で検索してまずここを見た。
http://blog.appenginefan.com/2008/06/unit-tests-for-google-app-engine-apps.html

ここも見た。
http://coreblog.org/ats/3-tips-to-perform-test-driven-development-with-google-app-engine

nose-gae

nose-gae
http://code.google.com/p/nose-gae/
使い方
http://farmdev.com/projects/nosegae/

python に nose というテスティングフレームワークがあるっぽくて、それを GAE アプリで使えるようにしているもののよう。
簡単に使えそうな印象。

nose
http://somethingaboutorange.com/mrl/projects/nose/0.11.1/

webtest という WSGI アプリをテストするためのライブラリと組み合わせて使うとよさそう。

webtest
http://pypi.python.org/pypi/WebTest/

October 1, 2009

Grit の調査のつづき

grit

Grit の調査のつづき。
フィルをコミットする方法とか調べた。

まず、リポジトリを指定して Repo を new

> require 'grit'
> include Grit
> repo = Repo.new('.')

test というファイルを作成して、

> system 'touch test'
=> true

インデックスに add

> repo.add('test')
=> ""

そしてそれを commit

> repo.commit_index('add test')
=> "[master (root-commit) 90de066] add test\n 0 files changed, 0 insertions(+), 0 deletions(-)\n create mode 100644 test\n"

ちゃんとコミットされたか確認

> system 'git log'
commit 90de0663fc7d0f15ef685a9106580c7a389122d8
Author: jugyo <jugyo.org@gmail.com>
Date:   Thu Oct 1 23:13:29 2009 +0900

    add test
=> true

ファイルの内容を取得してみる

> repo.commits.first.tree.contents.first.data
=> ""

うん。できてる。

Grit::Index を使うやりかた

Grit::Index を使うと、ファイルをいちいち作らなくてもインデックスにコンテンツを直接 add して commit してしまえる。

インデックスオブジェクトを取得

> index = repo.index
=> #<Grit::Index:0x130bf8c @tree={}, @current_tree=nil, @repo=#<Grit::Repo "/xxx/grit_test/.git">>

インデックスに foo という名前のファイル(中身は ‘this is foo’)を add

> index.add('foo', 'this is foo')
=> "this is foo"

それをコミット

> index.commit('add foo', [repo.commits.first.id])
=> "bd8fb763d7c7fc5db067b1c5348dfa6bfe2acbc4"

コミットする際、親となるコミットを指定しないと親のいないコミットを作ってしまうことになる

コミットできてるか確認

> system 'git log'
commit bd8fb763d7c7fc5db067b1c5348dfa6bfe2acbc4
Author: jugyo <jugyo.org@gmail.com>
Date:   Thu Oct 1 08:06:16 2009 -0700

    add foo

commit 7e72c5fe12e03bbf25e9dcbe315b7f8fa63e6e79
Author: jugyo <jugyo.org@gmail.com>
Date:   Fri Oct 2 00:04:51 2009 +0900

    add test
=> true

できてるできてる。