Archive for 8月, 2011

Gravity Mailが雑誌で紹介をされました。

iP! (アイピー)2011年10月号
という雑誌の、「新着ソフトウェアPickUP」というコーナーです。

どうやら、こちらのAdobe AIR Galleryのページをみて、
興味をもってもらったとのことでした。

数あるソフトウェアの中から興味をもってもらったことは非常に光栄なことです。

Macの場合に、JISコード(ISO-2022-JP)の場合には、ByteArray.readMultibyte()メソッドではキチンと、
デコードできないようです。
つまり、airxmailでも文字化けがデフォルトで起きるということです。

まあ、JISコードなぞ、現在ではほぼ、メールでしか使われないコード(少なくとも私の周りでは)ですので、
まず、通常の使われ方では問題にならないのでしょう。

GravityMailで受信したメールが文字化けしますと、Macのユーザから報告があるまで、
この問題を知りませんでした。

ということで、airxmailも、OSがWindows以外の場合にはデフォルトで、
ISO-2022-JPは自前でデコードがするように変更します。
(AndoridのK-9メールから例のごとく、実装を借りることにしました。)

本当はもうちょっと、IMAP関連をよりIMAPらしく実装してから、0.8をリリースしようとしました。
(IMAPのFetchコマンドをより柔軟に、JavaMailの実装を参考に・・・・)

0.7でのISO-2022-JP対応と、自前でIMAPのコマンドをIMAPClientクラスの継承なしにつくれるようにしたものを、
近々リリースすることにします。

Graviy Mailをv0.2.5にアップデートしました。

今回のアップデート内容は、Mac OSでの文字化け対応でそれ以外はありません。
Mac OSで受信したメールがISO-2022-JP(JIS)の場合(ほとんど日本のメールはJISです。)、
文字化けが発生してしました。

ただし、今回の修正では新たに受信したメールのみがこの対応に適用され、
既に受信したメールの一覧に表示される情報が一部、文字化けしたままとなってしまいます。
(サブジェクトだけは、メールを開いたときに文字化けを直しますが)

この辺りの修正は、今後の内部DBと内部キャッシュデータ管理の機能改善で修正していきます。

どうやら、Adobe AIR Ver3.0では、Nativeライブラリが読み込めるようになるようです。
JavaでいうJNIみないなものですね。

ASでHTMLのパーサーを作ろうかどうか、迷っていました。
以前、PHPで作ったのでそのあたりの記憶を再度呼び覚まして作ろうかと思ったのですが、
まあ、これができるようなら、試しにlibxml2の組み込みもいいかなと思い始めています。

HTMLはいい加減なタグ言語で、これの読込がlibxml2で標準であるのです。
(ただ、レベル的にどのレベルまでいけるかは知りませんが・・・)

この機能の試しに、まずはlibxml2を組み込むというのは、以前libxml2をつかって、
Apacheのモジュールを作ったこともあるので、それなりに感覚はつかめそうです。

ということで、やりたい事リスト。

1)libxml2を使ってのHTMLパーサの構築。
2 ) zlibを組み込んだ、airxzipの拡張。

ただ、もっぱら、私はWindowsが中心なので、これ(Native Extension)ができると言っても、
Visual C++とかを勉強する気にならなく、
まだ、Windows環境での構築イメージがよく想像できません。
まあ、cygwinとかつかって、gccを使うようになってしまう気がします。
これなら、多少変更すればMacでも動くようなものが作れるでしょう。

ただ、こういうのは待っていても、いつか誰かが作って出てきそうな気もしてきます。

でも、私的にはやはり、ここまでPure AS3から離れるのであれば、
Windows ServiceなりでJavaのサービスを動かしておいて、
それとAMFで通信してしまって、連携するってほうがよっぽどAIRアプリのためのような気もします。
(でも、そう思う人ってすくないのでしょうか?あまり、そういうソリューションが見受けられません。)

AIRで直接、メールのプロトコル(SMTP/POP/IMAP)などをたたくよりは、
WEB APIとしてあればいいのになーと探していたら、

Yahoo MAIL APIというものがありました。

提供しているAPIをみていると、結構IMAPと似ていて、
それなりに使えそう。IMAPを今風のWEB UIで使う上での機能強化がされていれば完璧。
(確認はしていませんが・・・・)

残念なのが、日本のYahooにはない。
私が、英語圏の人間ならば、絶対実装してみるのですが、
あいにく、使ってもらう人が周りにいなそう。

なので、同じようなAPIを提供しているWEB MAILが何かないか探してみることに・・・
唯一見つけることができたのが、Active! mail というサービスの外部公開インターフェース。
そのURLはこちら

ただ、中身がわからないので、実際どの程度かわからない。

今後、メールもクラウドにってのが進む中で、
メールをYahoo MAIL APIのように提供してもらえると、
そこで、承認ワークフローとか簡単にくっつけられるし、
まさに、日本では望まれていると思うのだが・・・・

どこか、公開されているAPIがあるサービスや、オープンソースのWEB MAILでもいいので、
あれば、Gravity Mailに組み込みたい。

そもそも、Yahoo MAIL APIを参考に、
MAILサーバをWEB APIでラップしてしまうアプリ(サーバ)をつくってしまうというのも、
おもしろそうではある。
(でも、メールサーバの運用は面倒なのでクラウド(外部)がいいと思いますけどね・・・)

今回のバージョンアップは、WEBとのちょこっと連携機能です。

あらかじめ登録したURLに本文中の選択文字を差し込んで、
WEBにアクセスします。

こんな感じです。

使い方

1)本文中の文字を選択すると、雲マークが表示されるのでそれをクリックすると、
あらかじめ登録したURLの名称一覧が表示されます。

2)対象のURLをクリックすると、下記のような画面が表示されます。

ちなみに、上と下に赤で円をしたのは、
上の方にある、ウィンドウっぽいアイコンで、ブラウザで同じURLを表示します。
右下にある点々の三角形をドラッグすると、サイズを変更できます。

登録方法

さて、使い方と登録方法を逆にしてしまいましたが、
現在は最初のタブのメニューからのみ登録ができます。

ここで、リンクをクリックすれば一覧が表示されますので、
「新規作成」ボタンをクリックすれば、

のように登録画面が表示されます。

ちなみに、表示順というのは、選択したときに上から表示される順番です。大きい値ほど上に表示されます。
(自分なりに適当に途中登録できるようにこのような曖昧にしております。)

また、URLには、

  • http://translate.google.com/#ja|en|{target_text}
  • http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q={target_text}&ie=UTF8

のような感じで登録してください。{target_text}の部分が本文で選択した文字と差し替わります。
(上で示したURLはあくまでも一例です。このURLが問題なく動作することを保証するわけではありませんので、あしからず。)

Android AUのSkype機能を使って、12時間の時差の場所と会話をしてみました。
我ながらちょっとした冒険です。
こちらは深夜だったので、ちょっと周りに迷惑をかけたかもしれません。

恥ずかしながら、ちょっと、テレビ中継みたいな「現場まで遠いですね-」というのがあるのだと思っていました。
普通に使えるので、びっくりしました。
まあ、電話ほどのクリアさはありませんでしたが、
昔、会社でアメリカとのビデオチャットシステム(もちろん有料)と同程度の音質はあったと思います。

いやー、世の中の技術はすごいものです。
改めて感じました。

Skypeの機能とは関係がないのですが、
当然、会話は英語です。
私も、予測でしている内容での簡単な会話ならば多少は大丈夫だとおもっているのですが、

一度、???が会話に入り込んでしまうとだめです。
それで、結局、電話とgoogle chatのダブルでの会話です。

会話の目的は相手側が作っているWEBサービスのデモ環境を見せてもらうためでしたが、
その前段階で、正しくアクセスできず。それで、IPアドレスがどうだの、Firewallがどうだのとなれば、とてもじゃないですが、
英語で説明するだけの技量と、たとえ伝えられたとしても、正しく向こうが認識していることを確認するすべもありません。
なので、テクニカルなコマンドのコピーで話を続けます。
このあたりは技術者通しの会話のいいところですね。
コマンドやファイル名(/etc/hosts.allowとか)で会話ができれば、日本語の会話よりも明確にできますか・・

ただ、やはり相手と会話をしてわからないことを聞くときの定石の質問だけは用意しとけばよかったと。

1)音が聞き取れないので、もう一度お願い
2)言っている単語(brabra)の意味がよくわかりません
3)言っていることの意図がよくわかりません。
4)言っていることがよくわからないので、別の表現でお願いできますか?

こんなあたりでしょうか?
なんか、昔の英語の先生の言葉を思い出します。

後は、文字と音でチャットしているので、いわゆる電話では左手がふさがってしまって、厳しいな-と。
なので、やはり、PCの方がいいのだなと思いました。

あとは、そもそも、会話が100%は成立しない間でのコミュニケーションはどうすべきか?
ってことを考えざるを得ません。
どこまで、誤解があってもいいのか?ということも事前に話すようになります。
(こんな会話は日本人同士ではまずしないと思います。)

でも、結局は、絵が一番いいんですよね。
そうなれば、デスクトップの共有も必要になってきますし・・・
iPadとか、Android tabletの内容がPC上に共有できるようなソフトがあればいいのだが・・・

AIR2.7からLinux版がないとのことです。

んー、困った。何がこまったって、
cronと、Antを使ってbuildするのができなくなってしまった・・・・
別にLinux上で動かす訳じゃないけど、Windowsではちょっとパッケージ管理みたいなものはやりにくい。

ちょっと、本格的にmacがほしいなーと思い始めてきました。
これ以外にもいろいろあるし。
(ただそれだけで、macを買うほど余裕もない。なんかいい方法はないものか・・・)

もっといい方があるかはわかりませんが、とりあえずすぐに忘れそうなので、
記録しておくことにしました。
こんな感じにGravityMailでのコード抜粋(とくに自分でも忘れそうなところ)を乗せていきます。

やっていることは、GravityMailというアプリでやっていることで、以下のこんな感じで、
テキストを選択されたときに、その選択された文字列を取得する方法です。

var textFlow:TextFlow = this.textBody.textFlow;
if(textFlow){
	if(textBody.selectionActivePosition > -1 && textBody.selectionAnchorPosition > -1){
		var start_pos:int = -1;
		var end_pos:int = -1;
		if(textBody.selectionActivePosition > textBody.selectionAnchorPosition){
			start_pos = textBody.selectionAnchorPosition;
			end_pos = textBody.selectionActivePosition;
		}
		else if(textBody.selectionActivePosition < textBody.selectionAnchorPosition){
			start_pos = textBody.selectionActivePosition;
			end_pos  = textBody.selectionAnchorPosition;
		}

		if(start_pos > -1 && end_pos > -1){

			var line_num1:int = textFlow.flowComposer.findLineIndexAtPosition(start_pos);
			var line_num2:int = textFlow.flowComposer.findLineIndexAtPosition(end_pos);

			if(line_num1 == line_num2){

				var select_text:String = "";

				for(var i:int = start_pos; i<end_pos; i++){
					var line:TextFlowLine = textFlow.flowComposer.findLineAtPosition(i);
					var ele_pos:int = i - line.absoluteStart;
					var ch:String = line.paragraph.getCharAtPosition(i);
					select_text += ch;
				}
				select_text = StringUtil.trim(select_text);
			}
		}
	}
}

結構簡単なので、非常に助かる。
でもって、
簡単なコードの説明。

6-13行目:確か、選択された場所が後ろ(後方)から選択されたのかと、
前から選択されたかで、値がちがったような記憶がある。
そのために、ここで最初の文字の場所と、最後の文字の場所を調べている。

17-20行目:ここでは複数行を選択していないことを確認している。
逆に言えば、複数選択するにはここを外せばOK

24-29行目:選択されている場所を1文字ずつ取得。
ここがもうちょっといい方法があるのかと思える場所(ただし、その根拠はないが、何となくやっつけっぽく感じるので・・)
27行目で、全体の文字の位置から場所を、指定の1文字を探す。
そのパラグラフでの位置ではないみたい。
ここで、全体の位置なのだからどこのパラグラフでもいいのかと思ったら、そうではないみたい。(ちょっとこのあたりが不思議)

とこんな感じで、上の画像では、「ITベンチャー」という文字が取得できる。
ちなみに、これが動くようにしたのは、MouseUpのイベントが発行された時にした。

Gravity Mailを Adobe AIR Galleryに登録してみました。
ちょっと、時間がたってしまいましたが・・・・

ちなみに、近いうちに本文選択から、Google Mapなどを表示できるようにしようかと思います。
具体的には、本文選択から指定したURLをたたけるようにしようと思います。

たとえば、Google翻訳なら

http://translate.google.com/#ja|en|{target_text}

Google Mapなら、住所からの地図表示の場合には・・・

http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q={target_text}&ie=UTF8

と・・・

みたいな、URLを登録しておけば、{target_text}に選択した文字を差し込み、そのURLにアクセスするって感じです。
これだけでも、自分としては結構つかえるなーと。

これで、Google MapとGoolge翻訳はいけることを確認しました。
(ただし、あっているかは知りません。それでたまたま今はいけただけかもしれません。)

具体的な何かと直接結びつけるよりは、こうした方がエンジニアとしてはおもしろいかなと。

たとえば、Web上でのTODO管理とか、Trac/redmineとかある場合には、
そちらにメール本文を流し込めるような感じにできるまでの、
拡張性(もしくはAPI)を作りたいなと思います。

ソフトウェア&ライブラリ



ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2011年8月
« 7月   9月 »
1234567
891011121314
15161718192021
22232425262728
293031  

カスタム検索
RSS
Add to Google
カテゴリ
にほんブログ村 IT技術ブログへ