AMEE仕様・API概要
AMEEがどんなAPIを提供しているのかについてのページを読みました。こういったAPIを今まで使ったことがなかったので、良い勉強なりそうです。
http://my.amee.com/developers/
- システム全体像
- 概要
- Getting Started
- 初期設定
- 次のURLからAMEEにSignupする : http://my.amee.com/signup/
- username/password/URLがemailで送られてくる
- 送られてきたURLにアクセスすると、ビルドインされたUIからAMEEをブラウズすることができる
- このURLは、コードの中に書くURLと全く同じなので、中身を知るのに役立つだろう
- APIでできること
- 様々なエネルギーデータを保管することができる
- 厳格に測定された電気の使用量から、一般的な計算方法で算出されたビル全体の排出量まで
- AMEEにデータを保管するためには、Profileにデータを追加する必要がある
- APIは、それぞれのProfileItemを計算し、ビルドインされている排出量ファクターと提供されたデータから二酸化炭素の排出量を算出する
- (ProfileItemについては要調査、ここに説明がありそう -> http://my.amee.com/developers/wiki/ProfileItem)
- APIの説明
- このページに下部にあるドキュメントで、AMEEのAPIを説明している
- (サンプルコードとかもある)
- 初期設定
- Act On CO2
- 英国政府によるキャンペーン
- AMEEのプラットフォームを使っている
- http://actonco2.direct.gov.uk/index.html
- この活動と似たようなことをやりたいのなら、下記URLに書いてあることが良い取っ掛かりとなるだろう
- 英国政府によるキャンペーン
- 以下、今後の調査のためのメモ
AMEE仕様・Overview
AMEEの仕組みについての調査結果を、しばらく書いていこうと思っています。AMEEについては、こちらをご覧ください。
http://wiki.amee.com/index.php/Overview
- AMEEは何をやるのか
- なぜAMEEを使うのか
- AMEEに保管されたデータの特質
- 研究や開発に費やされた数多くの努力の結果を示している
- それは、AMEEの考えやドキュメントの背後にある仮定の正しさを証明するものでもある
- その他の特質
- データが時間・時期情報と結びついている
- ガスや電気の価格のようなデータは、月毎に変わる可能性がある
- パソコンや車などは、技術が進歩すれば値段が変わる
- もし値段情報をアプリケーションの中にハードコーディングしてしまったら、値段の変動を常にチェックして、定期的にアプリケーションを変更しなければならななくなる
- AMEEを使うことで、これらの変更を自動的に行なうことができる
- AMEEに保管されたデータの特質
- Profile items
- Data items
- Algorithms
- これは何か
- profile itemの二酸化炭素排出量を、関連するdata itemを使って算出するために利用される
- 例えば
- 計算ロジック
- これは何か
調査メモ2
下記のエントリー経由。
Cometについて調べたことのメモを書き残しておきます。
- Comet
- HTTPのセッションをつなぎっ放しで、疑似的にサーバ・プッシュを実装する手法
- Dojo作者のAlexRussell氏が命名
- Cometに代表されるサーバ・プッシュ技術の復権:安藤幸央のランダウン(38) - @IT
- Jetty6
- Continuations(継続)機構
- 「サーバ・プッシュ型のサービスを提供するためのアプリケーション・サーバ/コンテナ技術」の一つ
- http://recompile.net/2006/09/cometjetty_6_continuation.html
- http://recompile.net/2006/09/cometjetty_6_continuation_1.html
- http://recompile.net/2006/09/cometjetty_6_continuation_2.html
- Tomcat6
- BlazeDS
『Release It!』からの引用
- What if I can't make the initial connection?
- What if it takes ten minutes to make the connection?
- What if I can make the connection and then it gets disconnected?
- What if I can make the connection and I just can't get any response from the other end?
- What if it takes two minutes to respond to my query?
- What if 10000 requests come in at the same time?
- What if my disk is full when I try to log the error message about the SQLException that happened because the network was bogged down with a worm?
- What if you actually have to deliver in this decade?
調査メモ1
わけあって、BlazeDSについて調査をしています。こちらのサンプルを動かしてみたら、かなり衝撃を受けてしまい、一気に興味が沸いてきました。RailsやFacebookAppとからめながら、こちらの方も触っていきたいと思っています。
こちらの記事のプレゼン資料が非常にわかりやすいと思いました。
- Message
- クライアント間でメッセージのやり取りができる
- シリアライズしたActionScriptのオブジェクトをメッセージとして扱う
- クライアント間のメッセージ交換はXMLだけで作れる
- メッセージの接続先(クライアント側のコード)
- http://IP:PORT/コンテキスト/messagebroker/チャンネル
- チャンネルは接続方式/プロトコル(streamingamf/amfpolling)
- JRuby
- Servlets in JRuby on Tomcat
- http://www.okisoft.co.jp/esc/ruby/jservlet
また、Adobeのマニュアルも参考にしながら、BlazeDSのサーバー側の実装を追っているところです。コードの方も非常にわかりやすく、しかも読めばとても勉強になるような感触を受けました。AIRとかFlexとか触ったことがないので、クライアント側のコードはよくわかりませんでしたが、いずれはやってみたいと思います。
- Endpoints
- MessageBroker
- メッセージをservicesへ振り分ける
- エンドポイントがメッセージを受け取ったら、それをMessageBrokerへ渡す
- メッセージの中に書かれているDistinationを見て、適当なServiceへ渡す
- TODO
- ServicesとDistinationsについては、後で調べる
- EC2上でセットアップして接続してみる(shell操作の練習も兼ねて)
以下のサイトを参考にしました。全てを読み切っていないので、今後も勉強のタネにしていくつもりです。
- http://opensource.adobe.com/wiki/display/blazeds/BlazeDS
- http://livedocs.adobe.com/blazeds/1/blazeds_devguide/
- [予告編 30分]AIRとBlazeDSとRubyでメッセンジャーを作る[129ページ] – @masuidrive blog
- http://www.adobe.com/jp/devnet/livecycle/articles/shared_whiteboard_with_blazeds.html
- http://www.adobe.com/jp/devnet/livecycle/articles/s2blazeds_rssreader.html
- BlazeDSとAMFでWebとデスクトップのアプリケーションを構築する
- Blaze Data ServicesかLiveCycle Data Servicesか
- JavaとFlex/AIRをつなぐ「炎」のオープンソース(1/3) ─ @IT
config/routes.rbの役割
前回の続き。FacebookApp本で、config/routes.rbを以下のように編集せよと書いてありました。
ActionController::Routing::Routes.draw do |map| map.root :controller=>"invitations", :action=>"new" map.resources :invitations end
これがどういうことなのか、ということを今回は追って行きたいと思います。「RailsによるアジャイルWebアプリケーション開発」を参考にしました。今後も参考にしていくと思います。
config/routes.rbに書かれた内容(アプリケーションのルーティング定義)は、ActionController::RoutingモジュールのRouteSetオブジェクトに読み込まれます。下記のようにすると、そのオブジェクトにアクセスすることができます。定義されているルートを確認するためには、このオブジェクトのroutesメソッドを呼び出せばよさそうです。
script/console ↓ rs = ActionController::Routing::Routes puts rs.routes
map.rootを使うと、以下のようなルートが定義されます。URLがルート指定された時に使われるコントローラなりアクションなりを指定してやるわけですね。
ANY / {:controller=>"invitations", :action=>"new"}
また、map.resourcesを使うと、以下のようなルートが定義されます。
GET /invitations(.:format)? {:controller=>"invitations", :action=>"index"} POST /invitations(.:format)? {:controller=>"invitations", :action=>"create"} GET /invitations/new(.:format)? {:controller=>"invitations", :action=>"new"} GET /invitations/:id/edit(.:format)? {:controller=>"invitations", :action=>"edit"} GET /invitations/:id(.:format)? {:controller=>"invitations", :action=>"show"} PUT /invitations/:id(.:format)? {:controller=>"invitations", :action=>"update"} DELETE /invitations/:id(.:format)? {:controller=>"invitations", :action=>"destroy"}
このmap.resoursesについては、Rails本の「リソースベースのルーティング(日本語版:P378)」に詳しく掲載されているので、後ほど掘り下げてみたいと思っています。
先ほどのRouteSetオブジェクトを使うことによって、ルーティングの動きを確認することも可能です。
rs.recognize_path "/" => {:controller=>"invitations", :action=>"new"} rs.generate :controller => :invitations, :action => :new => "/invitations/new"
外部サーバーからローカルへリダイレクトさせる方法
「Developing Facebook Platform Applications with Rails」に掲載されている事例を参考にしながら、気づいた点を随時メモしていきたいと思います。
ローカルマシンでFacebookアプリをRailsで構築して、それをFacebook上で動かすためには、ローカルマシンをInternetに接続する必要がある(FacebookからのCallbackRequestを受け取る必要ある)のですが、それができない場合は、sshを使ってInternetにつなげるサーバーにローカルから接続して、そのサーバーにローカルとFacebookを中継させます。例えば、InternetにつなげるサーバーとしてAmazonEC2を選んだ場合、以下のようにローカルから実行すると、
ssh app@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com -R :3001:localhost:3000 sleep 99999
FacebookからEC2の3001ポートへCallbackされれば、それがローカルの3000ポートへリダイレクトされるようです。
- 上記を実行する前に、appユーザーのパスワードを指定しておく(passwd app)
- EC2のインスタンスを起動する時に、ポート3001を開放しておく
- Facebook側の設定箇所もけっこうたくさんある(それぞれの役割については調査中)
- Canvas Callback URL
- Post-Remove URL
- Post-Authorize URL
- それぞれのCallback URLには、「http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:3001」のように記入
その他、FacebookerをRailsアプリケーションにインストールすると、
script/plugin install git://github.com/mmangino/facebooker.git
config/facebooker.ymlというファイルが生成されるので、そこにFacebook側の情報(API KeyやSecret)を記入する必要があります。また、tunnelにEC2のホスト名や開放しているポートを記入します。
development: api_key: <<api_key>> secret_key: <<secret_key>> canvas_page_name: <<canvas_path>> callback_url: http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:3001 pretty_errors: true set_asset_host_to_callback_url: true tunnel: public_host_username: app public_host: ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com public_port: 3001 local_port: 3000 server_alive_interval: 0
これで、ローカルでscript/serverを実行して、http://apps.facebook.com/<
- 次回までのTODO
- Railsの仕組みそのものの勉強
- 特に、config/routes.rb