2010年10月21日木曜日

HerokuでSassを使う

Herokuのファイルシステムは、read onlyになってて、Sassが動きません。
ググってみたら、解決法はいろいろ出てきますが、ソースが古くて、Rails3環境では役に立ちません。
数時間かけて、ようやく解決法を見出すことができたので、ここにやり方を公開します。


環境
・Ruby 1.9.2
・Rails 3.0


まず、Gemfileに、hassleを追加します。
最新版がほしいので、gitリポジトリから直接取ってきます。
$ vi Gemfile

gem 'hassle', :git => 'git://github.com/koppen/hassle.git'

あとは、"bundle install"するだけ。
$ bundle install


以上おわり。
えっ、あっけなすぎるって?シンプルイズベストです。

2010年10月11日月曜日

RubyのwatirでGoogle Chromeを自動操縦

とある実験を行うため、Google Chromeを自動操縦する必要があったので、Rubyのwatirというライブラリでそれをやってみました。
ただ一つ注意すべきなのは、watirは、Ruby 1.8.6でしか動かないということです。ちょっと使いづらいですね。


環境
・Ubuntu 10.04 Desktop 64bit
・Ruby 1.8.6
・watir-webdriver 0.1.1


まずは、RVMにRuby 1.8.6をインストールします。
$ rvm install 1.8.6

RVMのインストール方法がわからないという人は、こちらを参考にしてみてください。
Ubuntu 10.04で、Ruby 1.9.2 + Rails 3.0 + DataMapper on Herokuをやってみた


次に、Google Chromeを動かすための"watir-webdriver"をインストールします。
gem install watir-webdriver


これで準備が整いました。
下記の例では、Gmailに自動ログインし、10秒おきにリロードするという処理を行っています。

require "rubygems"
require "watir-webdriver"

browser = Watir::Browser.new(:chrome)
browser.goto("http://gmail.com")
browser.text_field(:id => "Email").set "enteryourusername"
browser.text_field(:id => "Passwd").set "enteryourpassword"
browser.button(:id => "signIn").click
loop do
  browser.refresh
  sleep 10
end


このライブラリは、アイデア次第で、いろいろ活用できそうですね。

2010年10月4日月曜日

光の単位: カンデラ、ルーメン、ルクスの違い

何かと混乱しやすい光の単位について調べてみました。


カンデラ(cd)
光を1点の点光源(スポット的な光)とみなし、その点光源から発する光の強さをカンデラという。
1平方メートルあたりに照射される光量を基準とするので「cd/㎡」という単位で用いられる。屋外で視認可能であるにはおよそ300cd/㎡の光が最低限必要とされる。パソコンの液晶ディスプレイは250~300cd/㎡程度のものが多い。

ルーメン(lm)
光源が360度全立体方向に放射する全体の光の量(光束)をルーメンという。
1ルーメンは、点灯したロウソクを1メートル先に置いたときの手元の明るさのことである。
プロジェクターなどにおいては、投射する画面全体に照明をいきわたらせる必要がある。そのため、明るさを計測する際には、画面を縦3×横3に9分割して各部分の明るさを計測し、それぞれの画面の明るさを平均した値を算出する方法がとられる。このとき、画面の各部分の明るさはワット(W)で、それらの値から算出された平均値はルーメン(lm)で計測される。

ルクス(lx)
光源によって照らされている面の明るさ(照度)をルクスという。
よって、光源からの距離によって、照らされる面のルクスは変化する。
1ルクスとは、
・1ルーメン(lm)の光束が1平方メートルの面を平均に照らす時の照度
・1カンデラ(cd)の点光源を半径1 mの球の中心に置いた時、その球の内面の照度
のことである。
一般に直射日光が約10万ルクス、部屋の窓際で2000ルクス程度、明るいオフィスで400ルクス程度の照度があるとされている。


こうやって並べてみると、それぞれの単位の相関関係が見えてきます。

大雑把にまとめると、
カンデラ・・・ディスプレイの輝度を表す場合
ルーメン・・・照明、プロジェクターの明るさを表す場合
ルクス・・・センサーで明るさを計測する場合
という使い分けになります。

一般人には、ルーメン以外、ほとんど関係ないですね。

2010年9月28日火曜日

「長崎に行ってやることメーカー」作りました

去年に引き続き、今年も長崎ITキャンプにお呼ばれしたので、行ってきました。
2泊3日の楽しいイベントなので、長崎近辺のIT関係者の方は、ぜひ参加されることをおすすめします。

今回のお題は、「ITで長崎の魅力を伝える」・・・みたいな内容だったと思います。

私達も、ゲストチームとして、クールなサービスを作っちゃいました。


その名も、
長崎に行ってやることメーカー

あなたのツイッターアカウントを入力すると、長崎に行ってやることを提案してくれる画期的なサービスです。生成された文章は、そのままツイートできます。


今回は、大量のアクセスがあることを想定していたので、Google App Engineで構築しました。

サービス内容はシンプルですが、バックエンドの処理は、大変複雑です。

処理の流れとしては、以下のようになります。
1. 様々なWebサイトをクロールし、ページキャッシュをBigTableに保存していく
2. ページ内の形態素解析を行い、キーワードを抽出
3. キーワードのクラスター分析を行い、長崎と関連性の高いものだけを再抽出

また、memcachedの活用により、高速なレスポンスを実現しています。
よくこれだけのものを1日で作れたなぁと、自分達でもビックリです!

このサービス、デプロイして2時間足らずで、3,000PVを超えるという人気っぷり。
バナーリンクしてたサイトのアクセス数も2倍に伸びたそうです。

エコシステムって、こうやって出来上がっていくんだなぁという、まさにその瞬間を垣間見ることができました。

2010年9月22日水曜日

Ruby 1.9.2 + Rails 3.0 + DataMapper on HerokuをUbuntuでやってみた

このドキュメントは、Rails界隈の最新技術を集めて、サンプルアプリを作り、Herokuにデプロイするまでの手順をまとめたものです。開発環境は、Ubuntu 10.04。


環境
・Ubuntu 10.04 Desktop 64bit
・RVM 1.0.11
・Ruby 1.9.2
・Rails 3.0.0
・DataMapper 1.0.2
・jQuery 1.4.2
・RSpec 2.0.0


RVMのインストール
いろんなバージョンのRubyを切り替えて使いたいので、RVMを使って、Rubyをインストールします。
まずは、rvmのインストールに必要なものをインストールします。
$ sudo apt-get install curl git-core libreadline-dev

準備が整ったら、rvmのインストールを実行します。
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

環境変数に、rvmのパスを追加します。
$ vi ~/.bashrc

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # 末尾に追加
$ source ~/.bashrc


Rubyのインストール
rubyをインストールする前に、下記のライブラリをインストールしておきます。
これを入れておかないと、Rails動かすときにエラーが出ます。
$ rvm package install zlib
$ rvm package install readline
$ rvm package install openssl

zlibのパスだけ上記でインストールしたものに変更して、Ruby 1.9.2をインストール
$ rvm install 1.9.2 -C --with-zlib-dir=$HOME/.rvm/usr,--with-readline-dir=$HOME/.rvm/usr,--with-openssl-dir=$HOME/.rvm/usr

デフォルトで使うRubyのバージョンを指定します。
$ rvm use 1.9.2 --default


PostgreSQLのインストール
今回は、DBにPostgreSQLを使います。
$ sudo apt-get -y install postgresql postgresql-server-dev-8.4 pgadmin3

インストール完了後、管理者アカウント"postgres"のパスワードを設定します。
$ sudo passwd postgres

設定ファイルを書き換えます。
$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf

# Railsから接続するための設定(postgresユーザーで接続する場合)
# local all postgres ident コメントアウト
local all postgres trust # 追加

# pgAdmin3から接続するための設定
# host all all 127.0.0.1/32 md5 コメントアウト
host all all 127.0.0.1/32 trust # 追加

PostgreSQLを再起動。
$ sudo service postgresql-8.4 restart

PostgreSQLのアダプタをインストール。
$ gem install pg


Railsのインストール
$ gem install rails


サンプルアプリの作成
Railsプロジェクトの作成
"rails new"コマンドを実行して、プロジェクトを作成します。
"-m"でテンプレートを指定することにより、DataMapper用の初期設定まで自動的に行われます。
$ rails new testapp -d postgresql -m http://datamapper.org/templates/rails.rb
$ cd testapp

"bundle install"で、DataMapper関係のライブラリをインストールします。
$ bundle install


Hamlの導入
テンプレート記述言語を、Hamlに入れ替えます。

Gemfileに、下記の一行を加えて、"bundle install"でインストール。
$ vi Gemfile

gem 'haml-rails'

$ bundle install


jQueryの導入
JavaScriptライブラリを、jQueryに入れ替えます。

Gemfileに、下記の一行を加えて、"bundle install"でインストール。
$ vi Gemfile

gem 'jquery-rails'

$ bundle install

インストール後、下記のコマンドを実行すると、prototype.jsがjQueryに置換されます。
$ rails g jquery:install


Rspecの導入
テスティングフレームワークを、RSpecに入れ替えます。

Gemfileに、下記の一行を加えて、"bundle install"でインストール。
$ vi Gemfile

group(:development, :test) do
  gem 'rspec-rails' # ここに追加する
end

$ bundle install

あとは、設定ファイルをジェネレートして、準備完了です。
$ rails g rspec:install


database.ymlのユーザー名とパスワードを変更します。
$ vi config/database.yml

defaults: &defaults
adapter: postgres
username: enteryourusername
password: enteryourpassword

development:
testapp_development
<<: *defaults

test:
database: testapp_test
<<: *defaults   

production:
database: testapp_production
<<: *defaults

scaffoldで、ファイルを一式作成します。
$ rails g scaffold hoge title:string body:text

DBとテーブルを作成します。DataMapperの場合は、"rake db:migrate"ではなく、"rake db:automigrate"だということに気をつけてください。
$ rake db:create
$ rake db:automigrate

Webサーバを起動します。
$ rails s

ブラウザで、http://localhost:3000/hogesにアクセスし、きちんと表示されれば、成功です。


Herokuにデプロイ
Herokuにデプロイするまでの手順は、本家のドキュメントを参考にしてください。
Heroku | Heroku Quickstart Guide

注意点
1. マイグレーション
ローカルでの実行時同様、DataMapperの場合は、"heroku rake db:migrate"ではなく、"heroku rake db:automigrate"になります。
2. Rubyのバージョン
Herokuのデフォルトは、1.8.7です。下記のドキュメントを参考に、1.9.2への切り替えを行ってください。
Heroku | Platform Stacks (Beta)

その他
production.logを見たい場合はこちら。
Heroku | Logs and exceptions

2010年9月21日火曜日

Rails 2.3.9 on GAE with DataMapper

GAE上でアプリを作る必要が出てきたので、実験的にRails 2.3をデプロイしてみました。

環境
・Ubuntu 10.04 Desktop 64bit
・Ruby 1.8.7
・Rails 2.3.9

ほぼ、下記のサイトの手順通りにやれば、問題ないのですが、一箇所だけ注意が必要です。
Rails 2.3.9 on App Engine with DataMapper

rails_dm_datastoreをインストールしようとすると、こんなエラーが出てきます。
$ sudo gem install rails_dm_datastore
ERROR:  Error installing rails_dm_datastore:
 dm-appengine requires dm-core (~> 1.0, runtime)

なので、rails_dm_datastoreの前に、まずdm-coreの最新版をインストールしておきましょう。
$ sudo gem install dm-ar-finders dm-core dm-timestamps dm-validations

2010年9月17日金曜日

Googleの電卓機能で三角関数の計算



今さらですが、Googleの電卓機能で三角関数の計算ができることに気づきました。
お手軽に計算できて便利だったので、まだご存知ない方のために、ご紹介しておきます。

今回は、sin3°の計算をしてみます。

試しに、sin(3)と入力してみると

























当然ですが、おかしな値になってしまいます。

今度は、角度の代わりにラジアンを入れてみます。
360°=2πなので、3°だと、π/60になりますね。

























ちゃんと計算できました。

πの代わりに、piを使ってもOKです。























sineというエイリアス関数も用意されています。























もちろん、計算結果は同じ。

他にもいろいろ計算できるみたいなので、皆さんもちょっとした計算に使ってみてはいかがでしょうか?