Tuesday 29 May 2012

アジア諸国の町並みが電線むき出しなのは社会の知恵?

今日の雷で家のインターネットと電話が使えなくなりました。WIMAX のおかげで仕事はできていますが…。今はケーブルテレビ会社の人が電話とインターネット線の修理をしています。

ヨーロッパでは電線は余り外では見えず、町並みはその影響もあってきれいです。自然による雷、地震、大雨などといった要素が多いアジアの国々では電線が丸出しになっている状態で美しい町並みとはほど遠いですが、こういう修理をしやすい状態を維持できている、社会の知恵なのかもしれません。(単純に計画性が無いだけかもしれないですが…)

Monday 28 May 2012

Is it freaky to be a vegetarian in Japan or anywhere else in East Asia?


It has been quite bit of challenge to be a vegetarian in Japan. When I travel to Hong Kong, Philippines, Vietnam, China, Korea and so on, same issue recur. Apart from financial reasons, being vegetarians is the reason why my family rarely eat out.

A friend of mine said that there are bunches of reasons to be a vegetarian. However, in places where social tie is most crucial, such reasonings are no use. Eating meat is a must because it is embarrassing for your hosts to see you refuse what they cooked.

Well, still having a good social life makes no sense if I cheat myself.

Sunday 27 May 2012

東欧音楽ライブを聴いてきました

熊澤洋子さんのユニットの東欧音楽ライブを阪急岡本駅の近くで聴いてきました。この辺りの私の好きな音楽はバルカンの2ビートの音楽など、聴くというより体験するですが。

http://www.geocities.jp/gypsykuma/live.html

今日のライブでは15拍子や7拍子の全然考えたことのない拍子の曲も多く、とても面白かったです。トリッキーなリズムの音楽はとても好きですが、いろんなリズムの曲だといろいろなダンスの楽しみ方ができそうですね。

音楽はこんな感じです。--> http://bit.ly/LTAGaG

ドイツやポーランドにいた頃に初めてバルカン半島などの音楽に触れ、とても好きになりました。ドイツでは学生とライブハウスで音楽を聴いていると、彼らはジャンプし始めるので、さすがにそのノリにはついていけませんでしたが…

日本で東欧の辺りの音楽の良いライブに巡り会えるとは思わなかったので、とても嬉しいです。次回も神戸周辺でライブがある際は是非お邪魔したいです。

Friday 25 May 2012

私は何も信じない

クリシュナムルティというインドで学校をいくつか作った人の本を読みました。



ざくっと言えば生き方や精神・宗教的な話なのですが、彼の著作の一つは「私は何も信じない」でした。彼の言うことに従って何も信じないとすると、まず第一に彼の言うことも信じないということですね。言葉の上では完全に矛盾しているようですが…私は彼の本はとても興味深く読ませてもらいました。



ちなみに彼が設立した学校はインドに3校ぐらい(?)とイギリスに1校。バンガロールにある学校に娘としばらく行こうかと真面目に考えたのですが、小学生の年齢以上でないと現在は受け付けていないそうで断念しました。残念です…。

Thursday 24 May 2012

SinatraとHerokuでフレキシブルな静的ファイルサーバ構築

SinatraとHerokuでフレキシブルな静的ファイルサーバ構築をしてみました。実際役に立つかどうか?というのは、用途によります。

SinatraもRailsもgemなどを使ってインストールさせ、サーバを起動すれば /public以下のフォルダをかってに拾ってくれるので、単純なhtmlのサイトであればお手軽に無料でサイトが作成できます。(無料でサイトを作成するという意味であればWordpressやFacebook, Google Pageなどいくらでも便利なつーるはあり、そちらの方が断然便利だと思います。)

Sinatraならではのフレキシブルな点としてはアプリケーションに

get "/folder_name/*"
  protect!
  File.read("/public/index.html")
end

などとすれば特定のフォルダを簡単にBasic認証で保護できます。

また、Amazon S3の上にファイルを置いて、下のようにすれば特定の(この場合は東北アジアのサーバに置いた)バスケットに見せたいファイルをアップロードすれば普通の静的ファイルサーバの様に見せてくれます。jpgでもhtmlでもpdfでも問題無いはずです。


require 'rubygems'
require 'sinatra'
require 'aws/s3'
include AWS::S3

helpers do
  def connect_aws_s3
    DEFAULT_HOST.replace "s3-ap-northeast-1.amazonaws.com"
    connection = Base.establish_connection!(
      :access_key_id     => 'YOUR-KEY-ID',
      :secret_access_key => 'YOUR-SECRET-ACCESS-KEY'
    )
    @bucket = Bucket.find('sinatra-aws-s3-test')
  end

  def protect!(user_name, passwd)
    unless authorized?(user_name, passwd)
      response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
      throw(:halt, [401, "Not authorized\n"])
    end
  end

  def authorized?(user_name, passwd)
    @auth ||=  Rack::Auth::Basic::Request.new(request.env)
    username = user_name
    password = passwd
    @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == [username, password]
  end
end

get %r{.+} do

  protect!("username", "password") if request.path.match(/^\/folder_name/)

  connect_aws_s3

  file_path = request.path
  file_path += "index.html" if file_path.match(/\/$/)
  file = @bucket[file_path.gsub(/^\//,"")] rescue throw(:halt, [404, "Page not found\n"])

  content_type file.content_type
  file.value
end

get %r{.+} do で全てのgetメソッドリクエストに対してアプリケーションが対応する様にしています。

ここで、確かに見せるだけは問題無いのですが、少し大きな動画などのファイルを見せると、S3 Bucketの読み込みに時間がかかるらしくレスポンスがかなり遅くなります。S3のBucketをアメリカのサーバに移しても同じでした。

なのでキャッシングを有効にするためにRack Middlewareを使います。http://rtomayko.github.com/rack-cache/
私の場合は 'rack-cache'と'dalli'のgem をインストールしてconfig.ruに

require 'rack/cache'
require 'dalli'


use Rack::Cache,
  :verbose     => true,
  :metastore   => Dalli::Client.new,
  :entitystore => 'file:tmp/cache/rack/body'


を加えると読み込みが断然改善されました。でもこうするとHerokuサーバ上に大きなキャッシュのファイルを置くことになるので、直接/publicの下にファイルを置くのと大差ありませんね。実験としては面白いと思いますが、実用的ではないかもしれませんね。

また、Herokuのアプリケーションを動かしているサーバからのレスポンスはサーバがアメリカにあるためこれ以上改善できなさそうです。この点はHerokuが日本のサーバでサーバを提供してくれるのを期待するしかなさそうです。

Wednesday 23 May 2012

日本円でActiveMerchantの金額の指定は*100が必要

Ruby on Rails と ActiveMerchantでショッピングカートを作りました。

https://www.sasayamavegbox.me/

ActiveMerchant本家のサイトやhttp://www.codyfauser.com/2008/1/17/paypal-express-payments-with-activemerchantを参考にして特に問題無く実装はできましたが、日本円に関わる記事はテストまでで、本番環境の実装例はネット上に情報が見つかりませんでした。
上記のサイトでは


def checkout
  setup_response = gateway.setup_purchase(5000,
    :ip                => request.remote_ip,
    :return_url        => url_for(:action => 'confirm', :only_path => false),
    :cancel_return_url => url_for(:action => 'index', :only_path => false)
  )
  redirect_to gateway.redirect_url_for(setup_response.token)
end


としているのですが、この2行目の"5000"が購入者に支払いを請求する金額です。ここを日本円の場合は5000*100にしないと¥50で請求になります。ので、5000*10にすると¥5,000の請求にできます。

Monday 21 May 2012

RoR new と create アクションをちゃんと繋ぐ

newとcreateに限った話ではないのですが、今回はこの二つが繋がらずにかなりおばかな時間を費やしてしまったので忘備録です。

Railsのscaffoldデフォルトでは、パラメータをメソッドに渡す際に、例えば postというモデルを使用している時、newアクションで

def new
  @post = Post.new
end

としてフォームなどを表示させて、ユーザがフォームに入力をしてsubmitを押すとcreateアクションにpostでフォームのデータを渡します。そこでcreateアクションがデータベースに保存するなどの処理をします。

def create
  @post = Post.new(params[:post])

  respond_to do |format|
    if @post.save

      Do something here...

    end
end

この params([:post]) で newからcreateアクションにフォームのデータを渡しているのですが、私はここをparams[:id]としてしまい、newフォームのデータがcreateアクションに渡らなかったので初歩的なことでずいぶん時間を費やしてしまいました…。他の人はこんなミスはしないのでしょうか…。

Wednesday 2 May 2012

MongoDBをRailsで使ってみました

HerokuでPostgreSQLを使用してアプリケーションを開発していたのですが、その柔軟性が少ないことでこれからPostgresSQLを用いて開発していくことに疑問を持ち、最近もっとも頻繁に耳にするKVSであるMongoDBの導入をしようとしています。

@masatomon さんのブログ記事を参考にしてRailsでMongoDBを使ってみました。

mongo_mapperの代わりにmongoidを使用したので、Gemfileなど書き換えたのですが、とても簡単にRailsとMongoDBを使用してアプリケーションが構築できる環境が作れました。

MongoDBのローカルマシンへのインストールもソースをダウンロードしてきて適当な場所にフォルダを移しパスを通して、あとはdb用のフォルダ(デフォルトで/data/db)を作成すれば使える簡単な操作です。

MongoDBサーバの起動は

$ mongod

インタラクティブコンソールの起動は

$ mongo

です。

MongoDBでスケーリングやアプリケーションの柔軟性はできそうですが、クエリを構築したりトランザクションを管理するなどはまた学び直しなので、面倒ですね…。

最近はひたすらビジネスモデルの構築、設計や技術の調査などをしていますが、早くプロダクションに取りかかりたいです…。