« タッチパネル向けの実装 その7 | トップページ | たまには気分転換を その2 »

2015年8月 4日 (火)

たまには気分転換を その1

1つのことをやってるとやはり時々飽きてきます。そうなると大体よいアイデアは浮かばず、停滞気味になることが多く、そのまま続けても酷いコードを書いてしまうことがままあります、私の場合。

なので、気分転換に別の機能に手を出してみました。

随分昔に書いたネタなのですが、サーバに接続してリモートで操作したすべての手順をファイルに保存して、後から再現できるようにしてみます。起動してサーバに接続後以前行ったある処理を自動で行って、すぐ終了するということができるようになるはずですが、それが役に立つか否かはまぁ気にしません(*^-^)
(プライベート機能にすればいいかな、と)

まず、なにを保存しておけば操作を再現できるかですが、Qt BrynhildrではCOM_DATAという構造体にキーボードの情報やマウスの情報などを設定してサーバに送信しています。サーバはこの情報を受け取って、実際にサーバのキーボードを押したり、マウスを移動させたりしています。

この256バイトの構造体の内容はBrynhildrのパブリックモードとして公開されたもので、変更してはいけません。

最初思いついたのは、キーボードやマウスに関する最低限の情報だけを抜き出して、新規のフォーマットで保存するという方法です。余計な情報があるとデータ量が大きくなるからというのが理由だったのですが、結局データコンバートしてもそんなにサイズ的に小さくはならないということで結局この256バイトのCOM_DATAをそのままバイナリで保存することにしました。可搬性を考えるとテキストでの保存もありかと思いますが、それはまた後で検討しましょう。

1秒間におよそ20回のCOM_DATAを送信しているとすれば、1秒間分保存するために5KBほど必要で、単純に1分だと300KBになります。10分だと3MB弱で結構な量のような気がしますね。

で、実際に送っているCOM_DATAの内容を眺めてみました。時系列でテスト用のログを採ってみました。


Found different com_data!
Found different com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found same com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found different com_data!
Found same com_data!
Found same com_data!
Found different com_data!
Found different com_data!
Found different com_data!

さすがにPCから見れば人間の操作スピードは激遅で、なんにも操作しない時間が結構あります。その操作しない間は同じ情報が繰り返し送られているだけなのですね。このような冗長なデータを馬鹿正直に保存していたらキリがありません。

というわけで、このような情報なら

繰り返し回数、COM_DATAの内容
繰り返し回数、COM_DATAの内容

というふうに保存したほうが効率が良さそうです。

通常の操作情報は、

1, COM_DATAの内容

と少し(数バイト)大きくなりますが、なにも操作していない時の操作情報は、

10, COM_DATAの内容

と回数の情報が変わるだけなのでかなり圧縮できますね。
(究極的にいうと、何もしていない時の操作情報を保存しないという方法もありますが、まずは可逆な方向ですすめてみます)

次にこのデータ列に付けるヘッダーの内容について考えてみます。

« タッチパネル向けの実装 その7 | トップページ | たまには気分転換を その2 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: たまには気分転換を その1:

« タッチパネル向けの実装 その7 | トップページ | たまには気分転換を その2 »