あとで書く。
growl-logger – Growl を利用したロガー(ruby製)
growl-logger というライブラリを作りました。
Growl を利用したロガーです。
普通、ロガーは標準出力やファイルにログを出力しますが、growl-logger を使うとその出力先が Growl になります。
ソースコード
おなじみ GitHub で開発してます。
http://github.com/jugyo/growl-logger
インストール
sudo gem install growl-logger
必要なもの
meow か ruby-growl か growlnotify が必要です。
別途インストールしてください。
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 の設定画面で各プライオリティごとに色を変えておくとわかりやすくてよいです。
Meow モード時だけの特別機能
Meow は RubyCocoa を利用した ruby の growl ライブラリで、growl のポップアップをクリックしたときの動作が指定できたりして便利です。
ruby-growl ではそういうことはできません。
growl-logger では、Meow がインストールされていれば優先的に Meow を使用します(Meow モードと呼んでます)。
Meow モード時、Growl のポップアップをクリックするとログが出力された位置をエディタで開きます。
エディタはデフォルトで TextMate に設定されています。
この機能もなかなか便利だと思いますよ。
ruby で OAuth を使ってみる実験
ruby で OAuth を使ってみる実験です。
twitter にアプリケーションを登録
まず twitter に自分の作ったアプリケーションを登録します。
自分のアプリケーションが無い場合でも適当なのでいけるんじゃないんでしょうか。
設定画面(Settings)の以下のリンク(丸で囲んだところ)からアプリケーションの登録画面に辿り着けるはずです。

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

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

この「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 にアクセスすると以下のような画面が出てくると思います。

深く考えずに「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!!')
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 だと思うので、以下からアクセスできるはずです。
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
デモ
以下で実際に動かしてます。
mod_rails 上で動いてます。
課題
- テストを書く
- タグ付け機能を実装する
- コメント機能を実装する
Growl ネットワークプロトコルの話
Growl は UDP を使ってデータを送ることでポップアップを出したりできて便利。
いろんな言語で簡単にバインディングが書ける。

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

この flags を big endian のバイト列として渡すか little endian のバイト列として渡すかで Growl の挙動が変わってくる。
僕の Mac で意図した通りに動作させるには flags を little endian としてセットして Growl に渡す必要があった。
しかしそうすると今度は PowerPC のほうで正しく動かなくなってしまう。
そもそも Growl のネットワークプロトコルのほうで flags のエンディアンをどっちかに決めておくべきなんだと思う。
ネットワークプロトコルがマシンのエンディアンに依存するってどうなの。
追記:
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
やっぱバグですね。
読書: Amazon EC2/S3クラウド入門
![]() |
Amazon EC2/S3クラウド入門 学びing 秀和システム 2008-12 |
わかりやすくて良かったです。
EC2 や S3 なんかについては、なんとなくしか知らなかったのですが、これ読んで知った気になれた。文字通り「知った気になれた」だけで、実際に使う段になってまたいろいろ苦労するんだろうけど、知った気になれていると不安がかなり減るので良い。「ああいうふうにやって、あそこに気をつければいいんだな」みたいに、自分が実際に作業をしているところをイメージできるようになった。
僕を含め多くの人は、よくわからないものをデフォルトで怖がる(または敬遠する)ように初期設定されているんだと思う。
Termtter 合宿 and Ruby 温泉 in 滋賀
3月14日・15日に Termtter 合宿 and Ruby 温泉 を滋賀県の琵琶湖のほとりで行いました。
Ruby 温泉 2009 March in 滋賀
非常に充実した二日間でした。
頑張った甲斐あって、初のメジャーバージョンである Termtter ver.1.0 をなんとかリリースすることができました(ちなみに現在の最新バージョンは ver.1.0.1 です)。
参加者の皆さんお疲れさまでした。
特に、幹事としていろいろやってくれた hitode さん、ありがとうございましたー。
以下は当日 Termtter の現状を説明するために作った資料です。
合宿で撮った写真をいくつか載せておきますね。
あとでいろいろ思い出して書くと時間かかるから合宿中にブログ書くべきだったかもなぁ。



















