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というエイリアス関数も用意されています。























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

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

2010年9月8日水曜日

実数、無理数、有理数、整数、自然数、素数の違い

プログラマ、いや、発明家たるもの、当然、数学に精通していなければなりません。
数学と物理に関しては、NHK高校講座で基礎から勉強し直してるのですが、大人になって学校の勉強するのって、なんだか楽しいです。


今日は、私がよくごっちゃになってしまう、数の種類について確認します。


集合の大きさでいくと、
素数 < 自然数 < 整数 < 有理数 < 無理数 < 実数
という順番になります。


素数・・・1と自分以外の約数を持たない自然数 (例)2, 3, 5, 7, 11...)
自然数・・・1以上の整数(ゼロとマイナスを含まない) (例)1, 2, 3, 4, 5...
整数 ・・・マイナスと0とプラスを含む1, 2, 3の集合 (例)...-2, -1, 0, 1, 2, 3...
有理数・・・分数で表せる数 (例)3/5, -2/7
無理数・・・分数では表せない数 (例)円周率 3.14159…
実数 ・・・実在する全ての数


こうやって並べてみると、違いがわかりやすいですね。

2010年9月3日金曜日

Ubuntuで、DHCPサーバからIPアドレスを再取得する

ネットワークのトラブルで、DHCPからIPアドレスを再取得しなければならない場合があります。

Windowsだと、
ipconfig /renew
の1コマンドで再取得できますが、

Ubuntuの場合は、

IPアドレス解放 => 新しいIPアドレスの取得

という手順を踏まなければなりません。


IPアドレスの解放
$sudo dhclient -r
There is already a pid file /var/run/dhclient.pid with pid 2119
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/vboxnet0/00:00:00:00:00:00
Sending on   LPF/vboxnet0/00:00:00:00:00:00
Listening on LPF/eth0/11:11:11:11:11:11
Sending on   LPF/eth0/11:11:11:11:11:11
Sending on   Socket/fallback
DHCPRELEASE on eth0 to 192.168.100.1 port 67

新しいIPアドレスの取得
$sudo dhclient
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/vboxnet0/00:00:00:00:00:00
Sending on   LPF/vboxnet0/00:00:00:00:00:00
Listening on LPF/eth0/11:11:11:11:11:11
Sending on   LPF/eth0/11:11:11:11:11:11
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
DHCPOFFER of 192.168.100.50 from 192.168.100.1
DHCPREQUEST of 192.168.100.50 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.100.50 from 192.168.100.1
bound to 192.168.100.50 -- renewal in 126007 seconds.