2011年11月01日
calender機能があるのだが、今いち使い道がないと思っていたが、google calendarに登録したイベントが 読み込む方法がわかったので、俄然使える機能になった。
ブラウザを起動せず、emacsを終了しなくても、スケジュール確認、登録・削除ができる。
これはすばらしい。
設定方法は、以下を元ネタにしている。
http://code.google.com/p/emacs-google/wiki/googlecalendar
2 インストール方法
-
iCalendar.elは、emacsのelispディレクトリに置く
$ cp icalendar.el ~/.emacs.d/
-
google-emacsもemacsのelispディレクトリに置く
$ cp -r google ~/.emacs.d/
-
gdataは、pythonでインストール
展開したディレクトリで、
$ sudo python setup.py install
3 設定ファイル
~/.emacsに以下を追記する
|
GOOGLE USER IDは、@gmail.comの@マーク前の単語を書いておく。
code-directoryとcalendar directoryは、適宜書き換える。~/tmpとしたら、忘れずに~/tmpを作っていくこと。
google-calendar-urlは、対象のgoogleカレンダーの設定画面で、以下の限定icalのURLを貼り付ける。
.emacsに以下を書いておくと、emacsの起動のたびにカレンダーイベント情報がダウンロードされる。 そのため起動は遅くなる。
|
4 使い方
主たるキーは以下のとおり。
M-x calender | カレンダーバッファを作成しカレンダー表示 |
M-x google-calendar-download | カレンダーイベントのダウンロード |
C-c C-g d | 同上 |
C-c C-g q | quick event add |
C-c C-g a | detail event add |
M-x google-calendar-delete-event | event delete |
d | その日の予定を表示 |
m | 予定の入っている日を色付けする |
2011年02月17日
google app engine上でEvernote連携のwebサービスを作るには、OAuthでの認証が必要になる。
このエントリーでは、OAuthをGoogle AppEngine上でpythonを使って認証するサンプルプログラムcunsumer_oauth.pyを提供する。
OAuthの直接的な部分は、google codeで提供されているoauth.pyを使い、それの呼び出し方を記述しているのが、consumer_oauth.pyである。
このプログラムは、oauth.pyのライブラリの使い方の参考とすることを目的としているので、元のoauth.pyライブラリに則り、MITライセンスとする。
oauth.pyを使ったサンプルプログラムは、webで調べるとtwitter向きのものが多い。
しかし、Evernoteをproviderとしたとき、同じOAuthでも、twitterとevernoteではパラメータの扱いが若干違うため、そのままは使えない。 そのあたりを修正して、ここにあげておく。
1. OAuthの仕組み
まずは、OAuthの基本的な動きを理解する。
- ゆろよろ日記:OAuthプロトコルの中身をざっくり解説してみるよ
- EvernoteのOAuth仕様を 公式ページで勉強する
2.ライブラリの入手
google codeでは、pythonのOAuthライブラリが ここ で公開されている。
ここでは、exampleとしてoauth.pyを使った client.py というのもあるのだが、これがどうもわかりづらい。
いろいろ探っているうちに、わかりやすいexampleをみつけた。
このexampleは、いろいろミスがあり、動かすためにはかなりの修正が必要となるが、oauth.pyの使い方はとても参考になった。おかげで、oauth.pyを使えたといっても過言ではない。
3.EvernoteからAPI keyの取得
実際に、以下のプログラムを動かすには、Evernoteからconsumer用API keyを入手しなくてはならない。
以下のフォームからEvernoteにAPI keyを申請する。https://www.evernote.com/about/developer/api/
application typeは"web application"とすること。
1,2日でメールで届くはずである。
4.Evernote OAuthの特徴
Twitterなど、あちこちで公開されているOAuthの使用例と比べて、Evernoteでは、以下の2点を注意する必要がある。
- twitter OAuthなどでは、request tokenからaccess tokenに交換するために、承諾されたoauth_okenを送るが、evernoteの場合は、同時にverifierも送らないといけない。
verifierは、エンドユーザが承諾ボタンを押した後のcallback urlで戻ってくるhttp getリクエストの中に、パラーメータとして格納されている。 - 承諾画面より後はevernoteではoauth_secretを使わないので、url encodeされたパラメータ部分で&oauth_secret=&、と値部分がnullになるリクエストが一度だけくる。
1.については、verifierパラメータを抜き出して、リクエストURLを生成時する関数にパラメータを渡すことで対処できる。oauth.pyのライブラリは、verifierをリクエストに加える機能を持っている。
2.については、secretパラメータがnullになるとoauth.pyの中でエラーとなる。ouath.pyの以下の行でエラーを補足し、secretにダミーの文字列をセットすることで対処する。
5.oauth.py変更箇所
137行目から
|
|
6.Access Tokenの保存
consumer webサービスを使うたびに、毎回evernoteで承諾をするのが面倒なので、承諾済みであることをどこかに記録しておきたい。
クッキーを使ってブラウザに保存する方法と、consumerサーバ上に保存する方法がある。
今回作成したconsumer_oauth.pyでは、google app engineのデータストアに保存することにする。 そのため、consumerサービスを使うときは、googleアカウントでのログインを必須とし、GAE上のデータストアにgookeアカウントにひもづくEvernote access tokenを保存することにした。
本当のwebサービスでは、プライバシー保護としてaccess tokenを保存しないオプションを用意する予定である。
7.consumer_oauth.pyの実行
変更済みのoauth.pyとapp.yamlもセットにして、consumer_oauth.pyをgithubで公開したので、以下からダウンロードする。
GAE開発キットが動作する環境であれば、githubからダウンロードした3つのファイルを同一ディレクトリにおいて、開発サーバを起動すれば、ブラウザからアクセスできる。
注意点は、以下の2点である。
- evernote開発環境のアカウント Evernoteでの承諾は、evernoteログインが必要である。(当然だが) このプログラムでは、URLをEvernoteの開発サーバ(sandbox.evernote.com)に指定しているので、本番サーバ(www.evernote.com)のアカウントとは別に、開発サーバ用にユーザ登録をしないとEvernoteにログインはできない。
- Callback URL callback URLは、GAE開発環境(localhost:8080)をデフォルトとしている。GAE上にアップロードする前には、.appspot.com名のホスト名に修正してからアップロードする必要がある。
正常に動作すれば、以下のような画面がブラウザでみれるはず。
1.googleにもEvernoteで承認されていない状態
2.Googleにログインし、Evernoteで承認されていない状態
3.Evernoteで承認する画面
4.Evernoteに承認された状態
これ以降、このoauth_keyをEdamに格納し、Edam_userIdのディレクトリに向かってAPI を呼び出す部分を作ることで、consumerからノートの操作が可能となる。
|
2010年07月21日
GUIクライアントを作りたいで愚痴ったように、Evernote関係のGUIツールを作りたいと思っている。自分の素人なプログラミングの実力を考えると、あまり複雑なアーキテクチャにはできない。
そこそこ使い勝手のいいGUIを備えて、簡易に作るにはどういうアーキテクチャがいいかを考えていたのだが、以下のような構成にしようと心が決まった。
- 容易で効果的なGUIということでは、ブラウザでJavascript(AJAX)を使う。
- WEBアプリケーションとし、サーバ基盤はGoogle App Engineを使う。
- サーバサイドプログラムはrubyとする。
サーバを必要としない伝統的なクライアントプログラムでいくのをやめてwebアプリにしたのは、実行環境の問題もあるが、一番の理由は流行っているから。
流行っていることで、ライブラリやドキュメントが充実していくので、プログラムを作る労力もだいぶ違う。 一ヶ月ほど、20世紀末ごろ流行のクライアントサーバモデルでのアーキテクチャで、gtkなどを使って作ろうともがいてみた結果の結論である。
また、ブラウザのアドオンやextensionで、クライアントを作ってしまうことも考えたが、JavascriptオンリーでEvernoteにアクセスできない(困難)ことがわかって、やっぱりあきらめた。
プログラムに使う言語については、以下の条件により決めた。
- EvernoteのAPIアクセスをするライブラリで言語が限られる。現在、C#,JAVA,php,python,rubyしかない。
- Google App Engineは、JAVAかpythonしか動かない。
- ぼくはrubyしかわからない。
rubyを捨てて、pythonを勉強するのが、GAEとEvernote的には最もわかりやすいのであるが。
ただでさえクライアントサイドのJavascriptを勉強しないといけないのに、サーバサイドの言語まで勉強しなくてはならないとなると、どこから手をつけていいかわからない。激しくモチベーション低下するので、なんとかrubyは残したいとしばらく葛藤していた。
GAE上のJAVA内でrubyを動かす方法があることはわかっていたが、コンパイルやら何やら、JAVA環境の知識がいるので、敷居が高い。
ところが数日前、「あきらめなくていいよ」という声が聞こえてきた。
10分ではじめる GAE/JRuby (OAuth + Sinatraのサンプル)
rubyライブラリで、Google App Engineを使うことができるgemがあるとのこと。すごい!
使えるかどうか(自分の実力に対して)、注意深く読んでいくと、すごく簡単そう!
ということで、上記のアーキテクチャでいけるめどがついたのである。
早速、期待のgemをインストールして、jrubyで"hello world"をやってみる。
googleへの開発者登録などGAEを使う環境は、以前、pythonで"Hello world"をやったことあるので、既に用意してある。
とはいえ、google-appengine gemは、まだ発展途上にあるgem。一筋縄でいかない。
webにある記事のやり方から変わっていたり、環境が悪かったり、なんだかんだでエラーが出る。
以下のサイトを参考にしつつ、しばし試行錯誤。
なんとか、hello worldの表示ができるようになった。
以下は、手順の自分メモ。
1. appengine-jruby gemのインストール
|
使ったバージョンは、以下である。
|
2. "hello world"プログラムの設定とソースを作成
最初に、プログラムを作るディレクトリを、どこかに作る。このディレクトリ名がアプリケーション名になる。
|
|
3. 設定ファイルapp.yamlの作成
|
ここで、application名は、ディレクトリ名と同じにしておく。
4. ローカル内のサーバを起動
appengine-jruby gemのすごいところは、サーバ起動前に、jrubyを起動するための設定ファイルや必要gemのインストールなど、全てをやってくれる。
|
いろいろメッセージやらエラーやらが出るが、そこは無視して、"The server is running at http://localhost:8080/"というメッセージが出るまで待つ。
ブラウザでhttp://localhost:8080/にアクセスし、動作テスト。
5. GAEへアップロード
事前に、GAEのDashboardでアプリケーション名と同名のアプリケーションを作成しておかないとアップロードエラーが出る。
|
6. 動作確認
URLは、http://<アプリケーション名>.appspot.com/となる。
helloを見たい暇な方は、下記URLをアクセスしてみて。
|
画面が表示されるのに、数秒かかるのは、GAE内のJAVA仮想マシンでjrubyが起動するためだと思われる。この際、いたしかたあるまい。
さぁ、次は、sinatraに挑戦だ。
- ブログネタ:
- Rubyプログラミング に参加中!
2010年05月20日
Googleが発表したFont API。フォントは、ローカルPCにあるものだ、という既成概念をうち崩し、ネットワークからフォントを提供するというもの。 Google Font APIのGetting Startedを見ながら、まさに見よう見まねでやってみた。
ブログのカスタマイズの画面から、「トップページ」と「個別記事ページ」のテンプレートに以下を追加。Tangerineのところを変えれば、いろいろなフォントが選べる。Font名は、Font Directoryから選べる。
|
スタイルシートに以下を追加。影付きの効果も入っている。
|
そして、ブログ記事のHTMLで以下のように書く。
|
すると、こうなる。
Google Font Sample
早く日本語フォントもでてほしいな。