まぁるいしっぽ:programingクリップピクスリスログウィキプロフまぁるいしっぽ元オタクだけど、いまや三姉妹のパパが、iPhone・ubuntu・カメラ・科学・SFなどなど雑多な興味ごとを書いていく連絡はこちらprograming2010年07月21日RubyをGAEで使うGUIクライアントを作りたいで愚痴ったように、Evernote関係のGUIツールを作りたいと思っている。自分の素人なプログラミングの実力を考えると、あまり複雑なアーキテクチャにはできない。使い勝手のいいGUIを備えて、簡易に作るにはどういうアーキテクチャがいいかを考えていたのだが、以下のような構成にしようと心が決まった。容易で効果的なGUIということでは、ブラウザでJavascript(AJAX)を使う。サーバサイドプログラムはrubyとする。サーバを必要としない伝統的なクライアントプログラムでいくのをやめてwebアプリにしたのは、実行環境の問題もあるが、一番の理由は流行っているから。流行っていることで、ライブラリやドキュメントが充実していくので、プログラムを作る労力もだいぶ違う。一ヶ月ほど、20世紀末ごろ流行のクライアントサーバモデルでのアーキテクチャで、gtkなどを使って作ろうともがいてみた結果の結論である。ブラウザのアドオンやextensionで、クライアントを作ってしまうことも考えたが、JavascriptオンリーでEvernoteにアクセスできない(困難)ことがわかって、やっぱりあきらめた。プログラムに使う言語については、以下の条件により決めた。EvernoteのAPIアクセスをするライブラリで言語が限られる。現在、C#,JAVA,php,python,rubyしかない。Engineは、JAVAかpythonしか動かない。ぼくはrubyしかわからない。rubyを捨てて、pythonを勉強するのが、GAEとEvernote的には最もわかりやすいのであるが。ただでさえクライアントサイドのJavascriptを勉強しないといけないのに、サーバサイドの言語まで勉強しなくてはならないとなると、どこから手をつけていいかわからない。激しくモチベーション低下するので、なんとかrubyは残したいとしばらく葛藤していた。GAE上のJAVA内でrubyを動かす方法があることはわかっていたが、コンパイルやら何やら、JAVA環境の知識がいるので、敷居が高い。ところが数日前、「あきらめなくていいよ」という声が聞こえてきた。Engineを使うことができるgemがあるとのこと。すごい!使えるかどうか(自分の実力に対して)、注意深く読んでいくと、すごく簡単そう!ということで、上記のアーキテクチャでいけるめどがついたのである。world"をやってみる。world"をやったことあるので、既に用意してある。gemは、まだ発展途上にあるgem。webにある記事のやり方から変わっていたり、環境が悪かったり、なんだかんだでエラーが出る。以下のサイトを参考にしつつ、しばし試行錯誤。worldの表示ができるようになった。以下は、手順の自分メモ。google-appengine使ったバージョンは、以下である。最初に、プログラムを作るディレクトリを、どこかに作る。このディレクトリ名がアプリケーション名になる。jrubyここで、application名は、ディレクトリ名と同じにしておく。gemのすごいところは、サーバ起動前に、jrubyを起動するための設定ファイルや必要gemのインストールなど、全てをやってくれる。http://localhost:8080/"というメッセージが出るまで待つ。ブラウザでhttp://localhost:8080/にアクセスし、動作テスト。GAEへアップロード事前に、GAEのDashboardでアプリケーション名と同名のアプリケーションを作成しておかないとアップロードエラーが出る。動作確認URLは、http://<アプリケーション名>.appspot.com/となる。helloを見たい暇な方は、下記URLをアクセスしてみて。http://jruby-hello-maarui.appspot.com/画面が表示されるのに、数秒かかるのは、GAE内のJAVA仮想マシンでjrubyが起動するためだと思われる。この際、いたしかたあるまい。さぁ、次は、sinatraに挑戦だ。その2Evernoteから簡単にノートを取り出すスクリプトをバージョンアップした。動作環境の準備については、前のエントリを参照していただくとして。使い方は、以下のとおり。キーワードを1つ引数で指定し、そのキーワードにマッチするノートのリストを得る。最初にヒットしたノートの本文を表示する。キーワードと工夫し、よく参照するノート固有のキーワードをタグなどでつけておけば、webやクライアントを起動することなくノートの内容を簡単に参照できる。KEYWORD以下のオプションを追加した。ノートの識別子GUIDを直接してしてノートを取り出す。GUIDは、キーワードサーチしたときのノートリストにタイトルと共に表示している。ノートを表示するときに、タグを外したり、アンパサンドや不等号マークなどを変換して表示しているが、このオプションを付けると、そうした変換をせず、そのまま表示する。-gオプションをつけて、GUIDを直接指定する場合は、以下のようになる。KEYが届いたので、サンプルプログラムをまねして、APIをいじってみた。KEYは、申請から7時間後に届いた。以下のフォームに必要事項を記入して申し込む。secretが送られてくるので、それをプログラムに埋め込む。最初の段階では、実験用システム(sandbox)にしか登録されないので、デバッグ等をそのシステムで行う。KEYをもらうには、再度申請が必要。その場合も、同じフォームでよい、と思う。案内のメールには、本番用の申請方法は書いてなかった。IDとパスワードを再登録しないといけない。ノートも空っぽなので、実験用のノートも新たに作っておかなければならない。APIのライブラリをダウンロードする。evernote-api-1.15.zip(3)展開したライブラリにPATHを通すふたつのパスを設定することに注意。RUBYLIB=$RUBYLIB:~ruby/evernote-api-1.15/lib/ruby:~/ruby/evernote-api-1.15/lib/ruby/Evernote/EDAM2.サンプルプログラムサンプルプログラムは、以下を使った。いうか、rubyはこれしかない。認証系は、ほぼサンプルのまま。~/ruby/evernote-api-1.15/sample/ruby/EDAMTest.rb3.作成するプログラム機能キーワードを1つ引数で指定し、そのキーワードにマッチするノートのリストを得る。最初にヒットしたノートの本文を表示する。キーワードと工夫し、よく参照するノート固有のキーワードをタグなどでつけておけば、webやクライアントを起動することなくノートの内容を簡単に参照できる。KEYWORD4.ソースコード最新バージョンはこちら。Ver.1.4前に公開した「Jpegファイルを撮影日時で一括renameするスクリプト」を、RAW撮影したJPEGではない画像ファイルでも対象にできるように修正した。CanonのRAWデータ.CR2という拡張子のファイルは、メタデータをTIFFと同じ構造で持っているらしい。rubyのexifrライブラリは、TIFFとJPEGの両方に対応している。RAW(CR2)ファイルを開くことで、メタ情報を読み込むことができた。使い方も、以前のバージョンでは、対象とする画像ファイルの拡張子をプログラム内に手で埋め込んでいたが、今回、JPGとCR2の両方に対応するために、自動識別にした。整理したいファイルがあるディレクトリをカレントとして、下記のプログラムを動かすだけで、対象ファイル全てをrenameする。22:27│コメント(2)│トラックバック(0)2010年03月12日RMagickを使った画像をトリミングするプログラムRMagickを使った画像処理プログラムシリーズ第3弾。画像を指定した長さで切り取るプログラムを作った。長さの指定は、ピクセル指定、原画像からの百分率(%)、得たい画像のアスペクト比(縦横比)の三種類が使える。切り取りの基準となる場所は、中心か、四つ角のいずれかしか指定できない。厳密に調整したいときは、画像処理ソフトを使うこと。(笑)切り取る画像のピクセル長を指定する場合は、基点からの長さになる。切り取る画像を原画像の縦横それぞれの辺の長さの比率を指示する場合は、以下のような指定となる。縦と横の整数比を指定した場合、指定した整数比での長方形が原画像に内接し、かつ最大となる大きさを基点から算出する。わかりにくいので、以下の図を見ていただきたい。原画像が3:2であり、そこから4:3の画像を得たい場合、4:3のほうが正方形に近いため横幅が小い。そのため、横を一部削除することとなる。最大の大きさの長方形を取るため、どのような比率を入力しても、縦か横のいずれかの辺は保持され、その辺を基準に得たいもう一方の辺の長さが決まる。アスペクト比を気にするのは、印刷する場合が多い。紙と画像のアスペクト比が違うと、空白ができたり、思わぬところが切れたりする。代表的な紙のサイズのアスペクト比を、ソースの末尾につけてあるので参照して欲しい。範囲指定の起点となる座標を示す。省略時は0(=中央)。切り抜く長方形の中心が、元画像の中心と一致する。-x,-yで指定した値がピクセル数であることを示す。-x,-yで指定した値がオリジナル画像の辺に対する百分率であることを示す。x=yであれば、アスペクト比はオリジナル画像と同じになる。-x,-yで指定した値が整数比であることを示す。(省略時は-a)指定したアスペクト比の長方形が、オリジナル画像に内接する最大の大きさで切り抜かれる。x=yであれば、アスペクト比は1:1となり、正方形の画像を得る。切り取りたい範囲の水平方向の長さを入力する。単位は、上記オプション(-a,-p,-r)のいずれかで指定する。切り取りたい範囲の垂直方向の長さを入力する。単位は、上記オプション(-a,-p,-r)のいずれかで指定する。23:44│コメント(0)│トラックバック(0)2010年03月11日RMagickを使った画像に文字を描くプログラムRMagickを使った画像処理プログラムシリーズ第2弾。画像に文字を描くrubyプログラムを作った。一週間くらいかかってしまった。(rubyを勉強しながら、一週間でできたのは、RMagickがよくできている証拠か・・・)描くことのできる文字列は、画像のタイトルを想定したものと、作者のサインを想定したシグニチャの二種類。タイトルについては、コマンドオプションで、フォントサイズ、色、縁取り色を指定できる。シグニチャについては、毎回換えるものではないので、プログラムの初期値に埋め込む。どちらも飾り付けとして、透明文字や影付き文字の指定もできる。公開用画像を想定しているので、EXIF情報は消去している。詳しい使い方は、以下のオプションの組み合わせを試してほしい。例として、以下のコマンドを発行した結果。登録してあるシグニチャを付与する。