« 2015年7月 | トップページ | 2015年9月 »

2015年8月

2015年8月25日 (火)

Ver.1.2.0-RC2 リリース

Ver.1.2.0-RC2 をリリースします。

以下からダウンロードできます。

https://github.com/funfun-dc5/qtbrynhildr/releases

rc1からの機能差分はフレームレート表示機能の追加のみです。

ソースコードレベルではタッチパネル向けの修正用ブランチ(porting-for-android)をmasterにマージしました。タッチパネルに対応するためにいろいろと内部の仕組みを変更したので、手間を省くため早めにマージしました。ソフトウェア・キーボード、ボタンを試してみることはできますがまだ正式対応ではありませんので、あくまでテスト実装という扱いです。

ドキュメントへの反映はまだ行っていませんが、サーバ接続後メニューバー上で右クリックすることで表示/非表示を変更できます。レイアウト管理が未実装なのでデスクトップのサイズによっておかしなことになることがありますが現時点での制限です。

安全のためのソースコードリファクタリング用ローカルブランチも少しですがマージしました。(まだまだ適当な実装が目立ちますので、少しずつ見直してます…)

-----------------------------------------------------------------------------------
Ver.1.2.0-rc2
-----------------------------------------------------------------------------------
[新規機能]
・リモート操作のファイル記録/再生機能を追加
メニュー項目及び起動オプションを追加
・ステータスバーへのフレームレート(FPS)表示機能を追加
メニュー項目を追加
・ソフトウェア・キーボード/ボタンのテスト実装のマージ

[その他変更]
・Windows版インストーラパッケージ作成ツールをバージョンアップ(InnoSetup 5.5.6)
・Windows 10 (x64/x86)をサポートOSに追加

Ws000018

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
7643ce868b3141922ab7bbaaeeb5a3f2ac9e6979d3fa3afb491392ff54c80da5 *qtbrynhildr-ubuntu_x64-v120-rc2.run

07d99869114ba68f94492bcb0066a35551dcce222636bdb355a9fd94e42c685e *qtbrynhildr-ubuntu_x86-v120-rc2.run

a1cca7dc484d142f4ac2afbf05e9fc3251648cb8abbb766b0a955c282b51bc53 *qtbrynhildr-windows-v120-rc2.exe

2015年8月23日 (日)

タッチパネル向けの実装 その8

その7の時点では、ソフトウェア・ボタンはすべて常に表示状態でテストしていました。動作自体は問題なさそうなので、それぞれのボタンの表示制御処理を実装してみます。

初期状態では、オプションに関するボタンの表示/非表示をトグルする「オプション」ボタン、マウスのホイール・ボタンおよび左右ボタンのみを表示しておきます。

Ws000013


まだレイアウト制御(ボタンの表示位置、サイズ)のコードを実装していないので不格好になっていますが、とりあえず放置しておきます。(背景色とかも変えたほうがいいですね…)

「オプション」ボタンを押したら「モニタ」、「音質」、「画質」ボタンを表示するようにします。QButtonのsetVisible()メンバ関数の引数にtrue/falseを渡すだけですね。

Ws000014

ここで「オプション」ボタンをまた押すと初期状態に戻すようにします。

「モニタ」ボタンを表示し、さらに「モニタ」ボタンを押したら、「モニタ番号」のボタンを表示するようにします。

Ws000015

ここで「モニタ」ボタンを押すと再び「モニタ番号」ボタンが非表示となります。

同様に、「音質」ボタン、「画質」ボタンも制御するようにします。

Ws000016


Ws000017

ボタン表示の制御はなんとなく実装できました。

KeroRemoteのようにフレームレートを表示するラベルがあったほうがいいですかね。Ver.1.2.0-RC2にフレームレートの情報をステータスバーに表示する仕組みを入れたので、この修正を取り込めば簡単に実現できそうですけど…

2015年8月21日 (金)

ソースコード販売はじまったそうですよ

Brynhildr/SiegfriedおよびiOSクライアントのソースコードが販売開始されたそうです。

「ソースコード販売はじめました」

サーバ機能の実装に興味のある方も多いかもしれませんね。

ここは今所有している BMW i8 を売り飛ばして購入しましょうかね (冗談です、そんな車買えるお金持ちではありません…)

私の方は今日も道草を食って、「フレームレートの表示機能」なんかを実装しておりました。

Framerate

さて、さらに脇道に逸れて、Mac OS X版を作ってみます…
(ま、特にリクエストもないので気の向くままにやってます(◎´∀`)ノ)

2015年8月17日 (月)

Ver.1.2.0-RC1 リリース

Ver.1.2.0-RC1 をリリースします。

以下からダウンロードできます。

https://github.com/funfun-dc5/qtbrynhildr/releases

リモートサーバで操作したキーボード、マウス操作を記録/再生する機能をテスト的に追加しました。

現在の仕様では、記録したサーバと再生するサーバは同一であることを想定していますが、再生する情報をフィルタする機能を追加すれば複数のサーバに対して適用可能かも、と思っています。

ただし、デスクトップ上の絶対座標でマウス位置を記録しているため操作するウィンドウの位置・サイズに依存するような操作は正しく再生できません。例えば、起動の度にウインドウ位置が変わったりすると押したいボタンが押せずにその後の操作が意味のない操作になる可能性があります。また、サーバの負荷によってウィンドウの表示タイミングなどがずれることで同様の現象となる可能性があります。

-----------------------------------------------------------------------------------
Ver.1.2.0-rc1
-----------------------------------------------------------------------------------
[新規機能]
・リモート操作のファイル記録/再生機能を追加
メニュー項目及び起動オプションを追加

[その他変更]
・Windows版インストーラパッケージ作成ツールをバージョンアップ(InnoSetup 5.5.6)
・Windows 10 (x64/x86)をサポートOSに追加

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
1e422d928f5716ac5480b29ee8f67cdc6df5463af927e6aaa1eb9804005cc048 *qtbrynhildr-ubuntu_x64-v120-rc1.run

eed3cb4c945075124a4de450eb45986005ac00e7a500a9374fe588adab3af71f *qtbrynhildr-ubuntu_x86-v120-rc1.run

029446de0bcaa16e0decb9a7a8797fe44223c63f08a4544ce5643d974b99f588 *qtbrynhildr-windows-v120-rc1.exe

2015年8月12日 (水)

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

ローカルブランチをmasterブランチにマージし、ドキュメントの修正/推敲を数回繰り返したところで基本的な問題に気づきました。

ウィンドウの表示位置・サイズも問題ですが、さらに問題なのはタイミングでした…

サーバから送られてくる情報はおおまかに言うとデスクトップの画像データとPCMデータの2つであり、タイミングに関する情報は基本的にありません。例えばウインドウが表示されたよというようなイベント情報は送られません。ですので、同期を取る手段がなく、結局操作情報を垂れ流し的に送信するしか手がないのです。ここで、サーバが重い処理をしていて、ウィンドウの表示が遅れた場合、まだ表示されていないウィンドウに対するマウス操作を送ってしまう可能性があるわけです。こうなると壁紙上でダブルクリックしているというようなことになります。

ここまで作業したものの、ちょっとこの機能は使いにくいかもしれないと思い出しました。これはどうしたものか…、お蔵入りでしょうかね…機能自体はマクロ1つの変更で無効化できるのですが、ドキュメントは戻さないといけない…

2015年8月 9日 (日)

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

ヘッダーの内容の検討はそこそこに、取り敢えず操作情報の保存と再生を試しに実装してみました。
保存するファイル名を決め打ちにして、ヘッダーなしの生のデータを出力する処理とそのデータを読み込んで、サーバに送信する処理を追加しました。

で、試した所、忘れていた重大なことを思い出しました。

Windowsのウィンドウ表示位置に関するポリシーの件です。ウィンドウを新規に表示する時、特に指定がない時はWindowsさんが「この辺りに表示したら便利かなぁ」とそのとき時のデスクトップの状況をみて判断してくれるので、ウィンドウ表示位置が一定にならないのです…

保存したデータにはマウスカーソルの位置がデスクトップの絶対座標で記録されているので、ウィンドウの位置がその時々で変わってしまうと結局以前の操作が正しく再現できないのです。

ウィンドウの表示位置が終了時に保存、起動時に再現されるようなアプリケーションでは、問題無いのですがそうではないアプリケーションもありますよね…

テストで使ったTeraPadでは「オプション」で、起動時のウィンドウ表示位置およびサイズに関する設定が可能なのでこれを設定すれば問題ないのです。が、操作するすべてのアプリケーションにこのような指定ができないと困りますね。

昔起動するウィンドウの表示位置などを指定できるフリーソフトがあったような、なかったような気がしますけど…

とりあえず上記のウィンドウ表示位置、サイズが再現できれば仕組み的には操作のリプレイが可能なことは確認しました。

http://youtu.be/izQtn3xzkSg

ちょっと分かりにくいかもしれませんが、コマンドラインから起動してサーバに接続した後以前記録した操作を再現しています。再現が終わった後に自動終了するようにしていないので、今は手動で終了していますけど(◎´∀`)ノ

# やはり動画で見られると分かりやすいですよね…(*^-^)
# 昔のテスト動画は著作権の問題で指摘があったので今は観られません…

ローカルブランチが増えてきたので、少し整理しないと…

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の内容

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

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

« 2015年7月 | トップページ | 2015年9月 »