« C#の絵本を読んで | メイン | JavaによるGyazoクローン「Jyazo」 »

iPhoneアプリ不要 iPhone/iPod touchからブラウザ経由でマウスをエミュレートする「Ajax Mouse」

iPhoneアプリの「Air Mouse Pro」の値下げに伴い、人気が再加熱している模様。
でも、これってiPhoneのMobile Safariのtouchイベントで、簡易的なものが可能なんじゃないのかなと思ったので作ってみた。後述の注意事項に書かれているような問題があるため、現時点では開発者以外は手を出さないほうが懸命です。
経緯
ここは読みとばしてもらって構わない。経緯をざっくり説明。上記の通り、Air Mouse Proと同等の機能が、Mobile SafariのtouchイベントとAjaxとWebサービスで作れるのではないかと考えたのが最初。以前プロキシを作った時に、Rubyの標準添付ライブラリのWebrickというサーバが簡単だったのでこれを使おうと思っていた。Macでマウス操作をする方法を探していて、CoreGraphicsのCGEventCreateMouseEventというものを使えば良いことまで調べた。CoreGraphicsをRubyCocoaから操作できるのであれば、この方法で行こうと思ったのだけれども、CoreGraphicsの資料があまり見つからない。特にイベントまわりの資料が少ないようだった。「JavaのRobotなら資料があったのになぁ」と思った時に、「じゃあJavaで実装すれば良い」と思いつきJRubyでの実装に走りかけたが、そもそのサーバもJavaにすればJavaだけでいけると気付いた。でも、tomcatはちょっと大袈裟すぎないかなとTwitterにpostしたら、JettyとWinstoneというものを教えてもらった(thx! @keisuke_n @nanki)。どちらも軽量なWebサーバで、使い勝手もよさそう。Winstoneは、サンプルと一緒に配布するようなスタイルに向いているとのことだっtので、Winstoneを使う事に決めた。
注意事項
とりあえず、動作する事を目標としたのでエラー処理やセキュリティについては全く考慮していない。JSPを使っていないため、JSPに関連したライブラリはimportしていない。領域外の判定が面倒だったため、マルチディスプレイには対応していない。また、アクセスする度にRobotオブジェクトを生成しているため多分効率が悪い。ロボットをインスタンス変数にしてコンストラクタで初期化したかったのだけどやり方がわからなかった。WebサーバのWinstoneと相性が悪いのか、そもそもServletじゃインスタンス変数やコンストラクタが使えないのか、とにかく解決策が見つからなかったので、Ajaxでアクセスする度にインスタンス化している。反応が悪いのはこのせいかもしれない。あと、jar化してもwar化も動作しなかった(そもそも動かし方を理解していない可能性も...)ので、ソースそのものを公開しておく。使用しているWinstoneのライセンスが複雑でよくわからないが、LGPLも選択可能なようなので、Ajax Mouseは一応MITライセンスとしておく。等々、とりあえず問題は山積しているけど、これらを解決するスキルがないため、開発の継続は今のところ考えていない。実証コードというか、コンセプトのコードというか、とりあえずそんな位置付け。これを見てもっと良いやつを誰かが開発してくれたらなぁってところ。
実行方法
ソースはgithubにEclipseのプロジェクトを公開しているので、そちらから入手して下さい。Winstoneはライセンスが不明瞭だったので同梱していません。別途、Winstoneのjarを入手し、ビルドパスのライブラリに追加して下さい。ポートはソース固定で8080になっています。コンパイル後、AjaxMouseクラスを実行して下さい。iPhone/iPod touchのSafariで「http://[サーバのアドレス]:8080/」にアクセス。アクセスと同時にAjaxMouseが起動します(何故、AjaxMouseを実行した時点で起動しないのかは不明)。画面上部にトラックパッド、画面下部の左右にマウスボタン、画面下部の中央にホイールが表示されます。後は、操作するだけです。
ソース
ソースは以下から入手可能です。
Winstone
Winstoneのjarを以下から入手し、ビルドパスのライブラリに追加して下さい。
参考にしたページ

トラックバック

このエントリーのトラックバックURL:
http://www.kanasansoft.com/cgi/mt/mt-tb.cgi/258

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド