February 6, 2010

twitter-auth を使って Rails で簡単 Twitter 認証♪

twitter-auth という Rails プラグインを使うと簡単に Twitter を使った認証が行えるようになります。

http://github.com/mbleigh/twitter-auth

ですが、普通に使おうとすると request_token を取得するところで 以下のようなエラーが出てしまいました。

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
...

サーバー証明書がないためにエラーになっているようなのですが、調べてみたところ twitter-auth には証明書を指定する方法が用意されていませんでした。
なので github で fork して証明書を指定できるようにしてこの問題を回避することにしました。

http://github.com/jugyo/twitter-auth

インストール

./script/plugin install git://github.com/jugyo/twitter-auth.git

使い方

generator が用意されていて、以下を実行すると必要なファイルを作ってくれます。

 script/generate twitter_auth 

migration も作られるので必要に応じてスキーマを編集して rake db:migrate してください。

証明書ファイルの取得

以下のページを参考に、 Twitter の CA 証明書ファイルを取得し、適当な場所に保存します。

http://d.hatena.ne.jp/vividcode/20091031/1256967931

コンシューマーキーとシークレットキーの取得

以下のページからアプリケーションを登録し、コンシューマーキーとシークレットキーを取得してください。

https://twitter.com/apps

設定

config/twitter_auth.yml を編集します。

development:
  strategy: oauth
  oauth_consumer_key: "コンシューマーキー"
  oauth_consumer_secret: "シークレットキー"
  base_url: "https://twitter.com"
  authorize_path: "/oauth/authenticate"
  api_timeout: 10
  remember_for: 14 # days
  oauth_callback: "http://localhost:3000/oauth_callback"
  ca_file: "証明書ファイルのパス"
...

確認

./script/server でアプリケーションを起動し http://localhost:3000/session/new にアクセスすると、リダイレクトされて以下のようなページが表示されると思います。

twitter_oauth

承認を求めているアプリケーションの名前が正しいことを確認し「Allow」ボタンを押してください。
リダイレクトされて http://localhost:3000/ に帰ってきたら成功です。
おめでとうございます。

February 4, 2010

MongoDB 体験記

環境: Mac OSX 10.5.8

インストール 〜 起動

wget で tgz を取ってきて解凍して DB 用の適当なディレクトリ作って bin/mongod コマンドを叩けばすぐに起動できる。

wget http://downloads.mongodb.org/osx/mongodb-osx-i386-1.2.2.tgz
tar xvzf mongodb-osx-i386-1.2.2.tgz
cd mongodb-osx-i386-1.2.2
mkdir ~/tmp/db
bin/mongod --dbpath ~/tmp/db

Ruby から使う

ライブラリのインストール

gem install mongo_ext

簡単な使い方

“foo” というデータベースの “test” というコレクション(テーブルみたいなもの?)に {’a’ => 10} というような Hash オブジェクトを突っ込む。

# mongodb example
require 'rubygems'
require 'mongo'

db = Mongo::Connection.new.db('foo')
coll = db.collection('test')

coll.remove

coll.insert({'a' => 10})
coll.insert({'b' => 20})
coll.insert({'c' => 30})

coll.find().each { |doc| puts doc.inspect }

たぶん、デフォルトで localhost の MongoDB に接続しにいってるんだろうな。

GridFS

GridFS (MongoDB で動作するファイルシステムみたいなもの?)を使ってみる。

“test.txt” というファイルに “Hello, world!” という文字列を書き込んだあとにファイルの内容を読み込んで画面に出力する。

# mongodb GridFS example
require 'rubygems'
require 'mongo'
require 'mongo/gridfs'

include GridFS

db = Mongo::Connection.new.db('grid')

GridStore.open(db, 'test.txt', 'w') do |f|
  f.puts "Hello, world!"
end

GridStore.open(db, 'test.txt', 'r') do |f|
  puts f.read
end

画像とかも保存できるんかな。

次回

次はアクセス制御とかのところを調べたい。

January 31, 2010

notify.gem : クロスプラットフォームなデスクトップ通知ライブラリ

Picture 1

クロスプラットフォームなデスクトップ通知ライブラリを作りました。
これを使うと統一されたインターフェイスで growl や notify-send を使った通知が行えます。

インストール

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

gem install notify

これに加え、以下のライブラリもしくはコマンドのいずれかがインストールされている必要があります。

  • ruby-growl (ライブラリ)
  • notify-send (コマンド)
  • growlnotify (コマンド)

今のところ上記のライブラリおよびコマンドしかサポートしていません。

使い方

ライブラリを読み込んで Notify.notify メソッドを呼び出すだけです。

require 'rubygems'
require 'notify'

Notify.notify("タイトル", "メッセージ")

growl だとこんな感じで通知がでます。

Picture 1

notify-send だとこんな感じ。

Screenshot-1

使用するライブラリを指定したい場合は環境変数 “NOTIFY” にあらかじめ値をセットしておきます。

ENV["NOTIFY"] = 'growlnotify'
require 'rubygems'
require 'notify'

Notify.notify("タイトル", "メッセージ")

ソースコード

http://github.com/jugyo/notify

その他

growl と notify-send の他にも対応して欲しいライブラリがあったりしたら pull request ください〜。

December 18, 2009

GAE で Sinatra を使って “foo” を表示する最速の方法

appengine_lowres

あなたは急に、 Google App Engine で Sinatra を使って “foo” を表示したくなりました。

以下は、現時点で僕が知ってるその最速の方法です。
参考にしてください。
ちなみに環境は Mac OSX です。

google-appengine というライブラリを gem でインストールします。

% gem install google-appengine

プロジェクトのディレクトリを作成します。

% mkdir foo
% cd foo

config.ru というファイルを作成します。
以下を記述します。

require 'appengine-rack'
AppEngine::Rack.configure_app(
  :application => "application_id",
  :version => 1
)
require 'foo.rb'
run Sinatra::Application

Gemfile というファイルを作成します。

# Critical default settings:
disable_system_gems
disable_rubygems
bundle_path ".gems/bundler_gems"
# List gems to bundle here:
gem "appengine-rack"
gem "sinatra"

foo.rb というファイルを作成します。

require 'sinatra'

get '/' do
  'foo'
end

試しにローカルで起動してみます。

% dev_appserver.rb .

(僕の環境だと一回目はなぜか起動に失敗します)

そしていよいよデプロイです。

% appcfg.rb update .

デプロイが完了したら http://<application_id>.appspot.com/ にアクセスしてみましょう。
立ち上がりはお世辞にも早いとは言えませんが、そのうち foo が表示されるはずです。

Picture 13

enjoy foo!

See also: http://code.google.com/p/appengine-jruby/

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