1

Windows8なX220tでRawInputControlTestを動かす

Windows8にしてから動かなくなっている事に気づいていましたが、
小型BlueToothキーボードの活躍により利用する事がなくなっていたため調査せずスルーしていました。

しかし小型とはいえちょっとした作業をする場合にも持ち歩くのはちょっと面倒ですね。
よってRawInputControlTestにもまだ活躍の機会はありそうです。
という訳で腰痛を労わりつつ調査し、どうにか動くようになったので成果をここに上げておきます。

前回の記事ではタッチ座標の取得がうまくいっていなかったので修正しましたが、
今回はタッチされたかどうかの値の取得が上手くいっていませんでした。
そこで以下の部分を修正しています。

433行目
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 1, "UChar") – 127

変更後
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 3, "UChar")

少々やっつけな対応です。
タッチされていた場合0より大きな値が返り、
タッチされていない場合0が返ります。

元々どんなデータを受け取る前提なのかいまいち分かっていないので、
この対応は多分あまりいい方法じゃないと思います。

さらに、このままでは取得する値の結果が想定と違うので、
この修正に次いで以下の二か所も修正する必要があります。


455行目
ProcRawInput(wParam, lParam, msg, hwnd)

変更後
ProcRawInput(0, lParam, msg, hwnd)

463行目
ProcRawInput(wParam, lParam, msg, hwnd)

変更後
ProcRawInput(1, lParam, msg, hwnd)

本来は可変値ですが定数に置き換えます。
ProcRawInput関数内でタッチ番号などの判定に使われており、
この修正ではタッチ番号は常に1になります。
ただ、指一本でタッチする分にはなんら問題はないと思われるのでその辺はスルーしました。

※追記
ちょっと問題があったのでこっちの修正に変更です。
この場合一行だけの修正で済むので健全でもあります。

433行目
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 1, "UChar") – 127

修正後
raw_stat := NumGet(RawInputData, RAWINPUTHEADER_Size + 8 + 3, "UChar") == 0

以上で動作するはずです。
タッチ位置の修正に関しては別記事を参照してください。

phpでXML-RPCを使う場合のライブラリの選択

会社で調べる機会があったのでここにも載せておきます。

OpenPNE2系で使用してるライブラリ

pear::XML_RPCを利用している。
XML_RPCはPHP4系に対応しているのに対し、
XML_RPC2はPHP5に限定されているためPHP4系で動作するOpenPNE2系ではXML_RPCを利用している。

=== その他のライブラリの検討 ===
PHPの拡張モジュールで XML_RPCを扱う事もできるがこちらはPHP側で有効になっていない場合動作しない。
この関数群と互換性のあるライブラリとしてphpxmlrpcがあるが、
こちらは日本語が文字化けする問題があり実用的ではない。

どちらを使用するべきか

OpenPNE3系はPHP5系のみで動作するのでXML_RPC2の利用も検討できる。
XML_RPC2はサーバからのレスポンスをキャッシュする事が容易にできるようなっている。
ただ、この利点に関しては今回の場合レスポンスされる内容は毎回変わるため恩恵はないと思われる。
そのため機能面に関してはどちらを利用しても問題ない。

実装面では、
XML_RPCはいままで使用した実績があるため、実装の敷居は低い。
ただ、OpenPNE3系はクラスで組まれているので今回の場合もメソッドはできればクラスメソッドにしたい。
その点ではXML_RPCは関数で記述されていたのに大してXML_RPC2はクラスで記述されているので相性は良いと思われる。

XML_RPCの場合でもクラスメソッドで実装することはできるが、一般的には関数で実装するようなので問題が起こる可能性がある。
XML_RPC2ではメソッドをクラスメソッドで実装する機構になっている
ため実装は容易に行なえると思われる。

サーバ側の実装をする場合、
XML_RPCの場合レスポンスコードへの変換が複雑になり面倒である。
XML_RPC2の場合はどうなのかというと公式ページのサンプルを見る限り・・・まだ書かれていない。
参考にできるサイトを探してみたがクライアント側の実装例は見つかるが、
サーバ側の実装例が見つからないため、学習コストは高そうである。

速度面では、
こちらのサイトを見る限り、XML_RPCの方が若干速いようである。

Atom Publishing Protcol

仕事でGData APIを使う必要が出てきたので調べた内容をメモ代わりにここに書いておきます。

Atom Publishing Protcolとは

AtomPubと一般的に呼ばれている。

XML-RPC との違い

XML-RPCについてはこのブログを作る際に外部ブログツールからの投稿に対応させるために

調べたのである程度知識はある、のでそれぞれの規格の違いを調べる。

 

  • 操作

XML-RPCの場合、一つのURLに対してパラメータにメソッド名を指定してやる形で

操作内容を変更していた。

AtomPubの場合、URLが複数存在し、操作対象のリソースごとに分かれている。

各リソースのURLに対して、リクエストパラメータで

取得(GET)/追加(POST)/削除(DELETE)/変更(PUT)を指定しそれぞれの操作を行なう。

 

  • 拡張性が高い 

XML-RPCではメソッドに対して拡張を行なうことができる機構になっていない?

AtomPubでは名前空間を利用して拡張を加えることが可能っぽい。

いまいち理解しきれてないので間違った解釈をしているかも。

参考サイト

http://mattn.kaoriya.net/web/20071106124750.htm
1

フィード

キーワード検索

最近の記事

最近のコメント

最近のトラックバック

カテゴリ

アーカイブ

ランキング