April 19, 2009

Hamlr が Google App Engine で動くまで

あとで書く。

関連:
Sinatra が Google App Engine で動くまで

April 11, 2009

growl-logger – Growl を利用したロガー(ruby製)

growl-logger というライブラリを作りました。
Growl を利用したロガーです。
普通、ロガーは標準出力やファイルにログを出力しますが、growl-logger を使うとその出力先が Growl になります。

ソースコード

おなじみ GitHub で開発してます。

http://github.com/jugyo/growl-logger

インストール

sudo gem install growl-logger

必要なもの

meowruby-growlgrowlnotify が必要です。
別途インストールしてください。
ruby-growl を使うと Windows 版の Growl (Growl for Windows ver.2 Bata) でも動作しました。

使い方

使い方はとても簡単で、GrowlLogger クラスのインスタンスを作って普通のロガーのように info とか error 等のメソッドを呼び出すだけです。

require 'rubygems'
require 'growl-logger'

log = GrowlLogger.new

log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')
log.fatal('fatal')

以下のような感じで出力されます。

growl-logger screenshot

Growl の設定画面で各プライオリティごとに色を変えておくとわかりやすくてよいです。

growl setting for growl-logger

Meow モード時だけの特別機能

Meow は RubyCocoa を利用した ruby の growl ライブラリで、growl のポップアップをクリックしたときの動作が指定できたりして便利です。
ruby-growl ではそういうことはできません。

growl-logger では、Meow がインストールされていれば優先的に Meow を使用します(Meow モードと呼んでます)。
Meow モード時、Growl のポップアップをクリックするとログが出力された位置をエディタで開きます。
エディタはデフォルトで TextMate に設定されています。
この機能もなかなか便利だと思いますよ。

April 7, 2009

ruby で OAuth を使ってみる実験

ruby で OAuth を使ってみる実験です。

twitter にアプリケーションを登録

まず twitter に自分の作ったアプリケーションを登録します。
自分のアプリケーションが無い場合でも適当なのでいけるんじゃないんでしょうか。
設定画面(Settings)の以下のリンク(丸で囲んだところ)からアプリケーションの登録画面に辿り着けるはずです。

registration

登録画面はこんな感じです。

registration2

登録すると以下のような画面が見れて、「Consumer key」と「Consumer secret」というのが発行されているのがわかります。

registration3

この「Consumer key」と「Consumer secret」を使って認証処理を行います。

oauth をインストール

oauth ライブラリを gem でインストールします。

sudo gem install oauth

irb で実験

irb で実験してみます。

% irb

まず、irb 上で以下を実行してください。

require 'rubygems'
require 'oauth'

consumer = OAuth::Consumer.new(
  "< Consumer key >",
  "< Consumer secret >",
  :site => "http://twitter.com"
)
request_token = consumer.get_request_token
puts request_token.authorize_url

処理に少し時間がかかるかもしれませんが、最後に URL が出力されるはずです。
この irb はまた後で使うので、終了せずにそのまま置いといてください。
出力された URL にアクセスすると以下のような画面が出てくると思います。

registration4

深く考えずに「Allow」をクリックしましょう。
その後、irb に戻り、以下を実行してください。

access_token = request_token.get_access_token

以上で twitter.com での OAuth による認証は完了です。
内部的には「Consumer key」と「Access token」の交換みたいなことが行われています。
取得した「Access token」の情報(token と token_secret の二つ)をアプリケーション側で保持しておけばいつでも認証を通してのアクセスができます。

試しに twitter に何かメッセージをポストしてみましょう。
以下を実行してみてください。

access_token.post('/statuses/update.json', :status => 'test for oauth')

うまく行きましたか?
http://twitter.com/ にアクセスしてみて、ちゃんとメッセージが投稿されていれば実験成功です。

rubytter の OAuth 対応の話

ちなみに、rubytter の OAuth 対応を昨日行いました。
上記で取得した「access_token」を OAuthRubytter というクラスに渡して new すると Rubytter と同じインターフェイスで OAuth な rubytter が楽しめます。

例:

r = OAuthRubytter.new(access_token)
r.update('Hello OAuth!!')
April 2, 2009

Hamlr

Ruby でブログツールを作ってます。
Hamlr っていいます。
よろしく願いします。
発音は「ハムラー」ですかね。
はじめ、Hamblr にするか迷いました。

ソース

おなじみ GitHub で開発してます。

http://github.com/jugyo/hamlr/tree/master

特徴

特徴をざっと並べてみました。

  • Haml
  • Sass
  • Textile
  • Sinatra
  • DataMapper
  • SQLite
  • プラグインシステム
  • テーマの切り替え

まあ、そんな感じです。
簡単に動かせて簡単に変更できるブログツールを目指してます。

僕 Haml 大好きなんですね。Sass も好きです。
みんなも HTML やめて Haml を使うといいと思います。

「プラグインシステム」と「テーマの切り替え」に関してはまだいろいろ思考錯誤しながら作ってる段階です。

依存関係

以下のライブラリが必要です。

  • sinatra
  • haml
  • dm-core
  • do_sqlite3
  • RedCloth

すべて gem でインストールできます。

sudo gem install sinatra haml dm-core do_sqlite3 RedCloth

動かし方

スタンドアロンで動かす

WEBrick とか mongrel なんかで動かすには以下を実行します。

./app.rb

デフォルトのポートが 4567 だと思うので、以下からアクセスできるはずです。

http://localhost:4567/

mod_rails で動かす

mod_rails で動かすには以下のような設定を apache の設定ファイル(httpd.conf 等)に書きます。

<VirtualHost *:80>
  ServerName your.domain.com
  DocumentRoot /xxx/xxx/hamlr/public
</VirtualHost>

設定を書いたら apache を再起動する必要があると思います。
あと、動かしてる最中に変更を加えた場合は tmp/restart.txt というファイルを touch することで、mod_rails がアプリケーションを起動し直してくれるみたいです。
つまり apache を再起動する必要がない!
See Also: Phusion Passenger users guide #4.4. Redeploying (restarting the Rack application)

設定

動かす前に設定ファイルを編集して基本的な設定しておく必要があります。
「setting.yml」という YAML ファイルが設定ファイルになります。
内容は以下のような感じになっています。

environment:  production
user_id:      test
password:     test
blog_title:   blog title
par_page:     10
theme:        default
plugins:
  - sample

だいたいわかりますよね。

ディレクトリ構成

以下のようなディレクトリ構成になっています。

hamlr
  |-- README.rdoc
  |-- app.rb
  |-- config.ru
  |-- models.rb
  |-- plugins               # プラグインを置くところ
  |   `-- sample.rb
  |-- public
  |-- setting.yml
  `-- themes               # テーマを置くところ
      `-- default

plugins ディレクトリにプラグインファイルを設置して setting.yml の plugins: のところにプラグイン名(ファイル名から .rb を取り除いたもの)を追加することでプラグインが読み込めるようになっています。
ただ、今のところプラグインでどういうことをやるか(どういうことができればいいか)が全く想定できていません。
とりあえずプラグイン機能を付けてみたといった感じです。

themes ディレクトリには現在 default という名前のテーマだけが置かれています。
setting.yml の theme: の所に使用するテーマの名前(ディレクトリ名)を書いておくとそれが使われます。
デフォルトのテーマをコピーしていろいろいじれば独自のテーマが作れると思います。
テーマの中身は以下のようになっています。

hamlr/themes
`-- default
    |-- entries.haml
    |-- entry
    |   |-- entry.haml
    |   |-- form.haml
    |   `-- new.haml
    |-- layout.haml
    |-- login.haml
    |-- search.haml
    `-- styles.sass

デモ

以下で実際に動かしてます。

http://hamlr.oyguj.org/

mod_rails 上で動いてます。

課題

  • テストを書く
  • タグ付け機能を実装する
  • コメント機能を実装する
March 27, 2009

Growl ネットワークプロトコルの話

Growl は UDP を使ってデータを送ることでポップアップを出したりできて便利。
いろんな言語で簡単にバインディングが書ける。

growl

Ruby だと ruby-growl というライブラリがあって、これを使って簡単に Growl のアレを出せる。
でも問題があって、僕の Mac(Intel)だと priority の指定が効かない。
Growl は5段階の priority を指定できて、それによってポップアップの色を変えたりできる。
古い Mac(PowerPC)だと問題ないみたい。
指定した priority のポップアップがちゃんと出る。
おそらくマシンアーキテクチャによって挙動が変わるんだと思う。
それが ruby-growl 側の問題なのか Growl 側の問題なのかがよくわからない。
さっき言ってた priority は flags と呼ばれるデータとして Growl に渡される。
flags は 16bit のデータで priority はこのうちの 3bit を使って表される。

growl_udp

この flags を big endian のバイト列として渡すか little endian のバイト列として渡すかで Growl の挙動が変わってくる。
僕の Mac で意図した通りに動作させるには flags を little endian としてセットして Growl に渡す必要があった。
しかしそうすると今度は PowerPC のほうで正しく動かなくなってしまう。
そもそも Growl のネットワークプロトコルのほうで flags のエンディアンをどっちかに決めておくべきなんだと思う。
ネットワークプロトコルがマシンのエンディアンに依存するってどうなの。

参考:
Network Protocol Format

追記:

Peter Hosey 氏曰く、

> * are the two-byte fields (flags and the various lengths) in network
> byte order?

Yes.

is it possible to send Growl message from pure C daemon program? – Growl Discuss | Google Groups

やっぱバグですね。

March 22, 2009

読書: Amazon EC2/S3クラウド入門

Amazon EC2/S3クラウド入門 Amazon EC2/S3クラウド入門
学びing

秀和システム 2008-12
売り上げランキング : 1837

Amazonで詳しく見る by G-Tools

わかりやすくて良かったです。

EC2 や S3 なんかについては、なんとなくしか知らなかったのですが、これ読んで知った気になれた。文字通り「知った気になれた」だけで、実際に使う段になってまたいろいろ苦労するんだろうけど、知った気になれていると不安がかなり減るので良い。「ああいうふうにやって、あそこに気をつければいいんだな」みたいに、自分が実際に作業をしているところをイメージできるようになった。

僕を含め多くの人は、よくわからないものをデフォルトで怖がる(または敬遠する)ように初期設定されているんだと思う。

March 17, 2009

Termtter 合宿 and Ruby 温泉 in 滋賀

3月14日・15日に Termtter 合宿 and Ruby 温泉 を滋賀県の琵琶湖のほとりで行いました。
Ruby 温泉 2009 March in 滋賀

非常に充実した二日間でした。
頑張った甲斐あって、初のメジャーバージョンである Termtter ver.1.0 をなんとかリリースすることができました(ちなみに現在の最新バージョンは ver.1.0.1 です)。
参加者の皆さんお疲れさまでした。
特に、幹事としていろいろやってくれた hitode さん、ありがとうございましたー。

以下は当日 Termtter の現状を説明するために作った資料です。

合宿で撮った写真をいくつか載せておきますね。

photo photo photo photo photo photo photo photo photo photo photo photo photo photo photo photo

あとでいろいろ思い出して書くと時間かかるから合宿中にブログ書くべきだったかもなぁ。