Archive for the ‘AIR’ Category
airxmailを使っていただいている方からのご協力もあり、いくつか修正することにしました。
http://code.google.com/p/airxmail/downloads/listの
r44が最新になっています。
1.送信が成功したときにSMTPEvent.SMTP_SENT_OKのイベントを発行するようにしました。
これを使えば、現在、x/n送信中なんて感じのだせるようになると思います。
2.Socket周りのエラーイベントはもともとあったイベントを使用するようにしました。
これは、おもに原因の切り分けのためです。SMTPやPOP3で通信していると、TCP/IPレベルでのエラーなのか、
SMTP/POP3のプロトコルレベルのエラーなのか、エラーイベントで揺れがありましたが、これらを統一するようにしました。
3.TLS/SSLが必要にも関わらず、Plainな通信を使ってしまうと固まってしまう問題の修正。
これは、ステータスがかえってくるのをずーとまってしまうという問題がありましたが、接続時にTCP/IPで接続ができた後に、
プロトコル上でのサービスの準備完了になるまでのタイムアウト値(現在5秒)を設けました。
4.接続のときに何か間違い(ID・パスワードの間違いとか・・・)、再接続したときに、以前のコマンドがクリアされずにいたために、
再度、処理が進まなかった問題を修正しました。
とこんな感じで、修正しました。
エラー周りなどは、もともと、あるアプリケーションのためにライブラリ化したので、その使い方をこえると、
考慮されていなかったり、ポリシーがぶれていたりするのですが、やはり、第三者の目が入るのはいいです。
airxmailを使って、gmailの「接続エラー」と「正常」のテストを何度かしていた。
そしたら、何度か、なぜか正しくやっているはずなのに、接続できないことが発生してきた・・・・
きちんと、airxmailでその時のメッセージを取得し、表示してみると
[PASSWORD]:535-5.7.1 Username and Password not accepted. Learn more at [PASSWORD]:535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257
で、http://mail.google.com/support/bin/answer.py?answer=14257を見てみると、
「メール クライアントで新着メールのチェック間隔が短すぎないことを確認します。 メール クライアントで新着メールをチェックする間隔を 10 分以内に設定している場合は、ユーザー名とパスワードを入力するよう何回も要求されます。」
とのことでした。
ちょっと、びっくりしてしまいました。
flex(AIR)で使えるFelicaのライブラリがずいぶんと前ではあるが、リリースされた。
以下のURLからライブラリは取得できます。
http://www.sony.co.jp/Products/felica/pdt/adb.html
ここで、Basicバージョン(無償)を使って、Suicaの履歴をエクセルデータに書きだそうかなと思ったが、
よくよく調べてみたら、そのようなことをやるには、Standardバージョンが必要らしい。
(せっかく、AIRからエクセルデータの作成ぐらいはできるのようになったのだが・・・・)
ちょっと、個人で調査のためだけに約60,000円はつらいので、あきらめた。
可能なら、Suicaの履歴から情報を取り出して、エクセルのデータに書き出すようなものをつくろうかなと思ったのだが、それはちょっとできないようだ。
(ちょっと、知人が電車の交通費を出すのに面倒だと言っていたが、ここで60,000円だせば、まあできるというわけだが、それは遊びにはちと高い。)
まあ、IDmやらを取り出すことはできた。
ただ、これだと、ブラウザのFelicaエクステンション機能でもできる。
なので、ちょっと、FelicaのIDをかざしたら、事前に登録されたところにメールを出すってな感じがいいかなと。
これだったら、ブラウザができないことも含んでいるし。
サーバーもいらないし。
こんなのができれば、
・塾についたらFelicaをかざすと親に連絡が自動的にいく
なんてのが、できる。まあ、メールが飛ばなくても、Flex(AIR)はすごくWEBと親和性も高いので、
・簡単なポイントカード
・ある場所について、かざしたら、次の問題が表示されるような、宝探しのようなゲーム
・出退勤(入出)管理
のなんてのは、すでにサービスがあるようだが、まあ、すぐに安く構築できるようになってしまったという事なのだろう。
ただ、FelicaをかざすためにPCを置いておくことができるのか?という問題がのこっている。
あのコンビニとかに置いてある、決済端末を使えれば、いろいろとFelicaのコンシューマソリューションも広がりをみせることができると思うのだが・・・・
AIRのいいところは、標準にあるWindowをカスタマイズできるところです。
しかしながら、なかなか、手を出すのが面倒でやっていなかったのですが、ちょっと試してみました。
作ってみた画面は以下の通りです。
このような画面を作るのに、Javaなどで作るのは非常に面倒なのですが、AIRの場合には慣れてしまえば、HTMLを組んでいるように簡単に作れます。
このような画面も、なれないデザイン込みでまあ、一晩もあればなんとかなるというレベルです。
さて、まず、カスタマイズをするために、いくつかの準備が必要です。
- アプリケーションのXMLでsystemChromeをnoneに設定します。
- アプリケーションのXMLで同じくtransparentをtrueに設定します。
- WindowedApplicaitonのshowFlexChromeをfalseに設定します。
これで、完全にデフォルトのコントロールが外れましたので、後は自分で部品を作っていきそれらを並べればいいというわけです。
でも、このようにカスタマイズすることで、自由に配置できるのはいいのですが、このために以下のようなことは自分で処理を書かなくてはいけません。
- ウィンドウの最小化・戻す・最大化・閉じる(右はじのボタンたち)
- ウィンドウの移動
- ウィンドウのリサイズ
ただ、メソッドを呼ぶだけでこれらの機能が実現できるので、あまり心配はいりません。
ウィンドウの最小化、戻す、最大化、閉じるは、
NativeWindowの
minimize(); restore(); maximize(); close();
で実現できますし、ウィンドウの移動は、startMove() でできますが、もともと、上部のバーを消してしまったので、私はロゴマークか、もしくは、濃い青い部分でmouseDownしたら移動ができるようにしてみました。
<mx :HBox top="10" left="15">
<mx :Image source="@Embed('assets/logo.png')" mouseDown="nativeWindow.startMove()" useHandCursor="true" />
</mx>
あと、リサイズは小さくて見えずらいのですが、左下に△のしるしを置き、そこでmouseDownしたときにstartResize()が動かせばリサイズができるようになります。
startResize();
airのHTMLコンポーネント(mx.controls.HTML)で、ローカルにあるHTMLファイルを読みたい。
この場合、には、
var file:File = File.desktopDirectory.resolvePath("index.html");
var browser:HTML = new HTML();
browser.location = "file:///" + escapeMultiByte(file.nativePath);
のように、頭にfile:/// をつけるのと、パスに日本語が含まれることを考え、escapeMultibyte()関数を使ってあげればよい。
ただ、これを使うと、そこまでエンコードしなくてもというところまでエンコード(エスケープ)されるが、見えるので問題はない。
それと、ローカルにあるファイルゆえに発生する問題がある。
文字コードがHTTPのヘッダで指定できるわけではないので、HTMLファイル自体にキチンと文字コードをmetaタグに書いてあれば問題ないが、
記述がない場合にはたいていの場合には文字化けを起こすだろう。
この場合には、ブラウザ側で文字コードを指定しなければならないが、残念ながらHTMLのクラスを見ていても直接の設定はない。
この場合には、内部のプロパティである、htmlLoaderオブジェクトを通して設定する必要がある。
browser.htmlLoader.textEncodingOverride = "Shift_JIS";
とこんな感じだ。


