素振りカウンター仕様書

上村聡文

注意: この仕様書の完成までには、数回の改変が予定されており、まだ未完成です。



* 素振り回数の表示アプリ
----------------------------------------------------------------------
このアプリケーションは、木刀の素振り回数をデスクトップに表示し、
素振りの動機付けを行うためのジョークソフトです。

表示には GUI フォームを持ち、

Today:      130 [times]
Average:     92 [times]
Total:  121,190 [times]

という情報を表示します。

これにより、運動不足の私が「昔はもっと体力があったのになぁ...」とつぶやく回数を
削減することができる。

また、フォーム上にカーソルを乗せた状態で Ctrl-q を押すと、
アプリケーションが終了する。



* 素振り回数のグラフ表示
----------------------------------------------------------------------
また、素振りの情報を Web サーバに登録する機能を持ち、
素振り回数を Web 上でグラフ表示することが可能です。

この機能により、グラフを見ながら「あぁ、あの日は Fuckin な XXX と話をしたなぁ」
などと、思いを馳せることが可能になります。

グラフ表示できるのは

- 過去30日間の素振りグラフ

です。

素振り回数のそこまでのトータル回数は、Web ページの左上の表示され、
視力が悪くなった私にも、簡単に探し出すことができます。

そして、グラフはそのトータル回数の下に配置され、グラフ表示については、

X 軸には、何日か、の数値が振られ、
Y 軸には、素振り回数の最大値に従って、グラフツールの範囲に従って数値が
振られます。

また、平日の背景色は白色、日曜日は赤色、土曜日は青色で色分けされており、
このグラフをカレンダー代わりに使うことができます。

グラフの軸には、その日の素振り回数、平均素振り回数の２本が表示され、
そのグラフを見て、うっとりと悦に浸ることが可能です。



* GUI フォームと Web グラフとの連携について
----------------------------------------------------------------------
基本的に、GUI フォーム上に貯めたデータを Web に送信して、
グラフ表示を行わせます。
更新は以下の手順で行い、プログラムに興味のない一般人にも簡単に利用できる。
イヤッホー！

- (接続先の Web サーバ情報は、GUI フォームにあらかじめ登録してある)

- 起動時に、登録されている Web サーバへのアクセスを試み、
  通信できることを確認する

- データ登録のある最後の年月日を last_date.php から取得する。
  このページでは、"2008-10-11" という内容のみを出力している。

- GUI フォームは、最後の年月日よりも新しいデータを保持していたら、
  それを POST フォームに乗せて register_times.php に送信する。
  送信情報は、"date_2008_10_12" をキーにして、"134" を送信するといった具合。

- Web フォームは送信された情報をデータベースに登録し、
  次回からの表示情報に反映させる。



* 起動中の GUI フォームの処理について
----------------------------------------------------------------------
素振りの計測は、木刀に取り付けられた Wii リモコンで行います。

GUI フォームは常時起動しており、Wii リモコンからの接続が行われるかを
監視するために、
未接続の場合には、２秒間隔で接続シーケンスを走らせます。

これにより、木刀を握りしめてから任意のタイミングで素振りが開始でき、
短気な私にもぴったりです。

Wii リモコンの操作により接続ができたことを確認するために、
接続が完了したら、Wii リモコンを ２秒間ほど振動させます。ウィーン。

また、Wii リモコンに無駄な電気を使わせないために、加速度の変化が
10秒以上なければ、
接続を Off にします。

素振り中は、10 回の素振り毎に Wii リモコンを１秒間振動させ、
素振り回数を数えることの手助けをします。
この機能は、素振り回数が PC に記録されていることも示します。
なんてスマートな機能！



* 素振りデータの PC での記録について
----------------------------------------------------------------------
素振りデータは swing_times.txt というファイルに

2008-10-10, 22
2008-10-11, 134

とい形式で保存されている。
このデータは、GUI フォームの起動時に読み込まれ、
素振りが終了したタイミングで更新される。

!!! GUI フォームが終了するタイミングでも更新するべきかを検討する。
!!! その場合、halt 直前に終了するかもしれないので、
!!! バックアップファイルが必要かもしれない。



* 素振りデータの Web サーバでの記録について
----------------------------------------------------------------------
SQLite を用い記録される。
SQL のテーブルは、

table swing
date register_date, -- 登録日
int swing_times -- 素振り回数

という名前のレコードから構成されている。なんてシンプル！
登録用の Web ページは、POST 送信された全ての情報を信頼し、
このデータベースにデータを登録する。

データの登録には、ログイン名とパスワード文字列を必要とし、
POST 送信において "user_name", "user_password" というキーで送信される。

!!! マルチユーザでの運用を考える場合、認証機能について検討すること
!!! ユーザの登録フォーム作成を行うこと



* GUI フォームの設定について
----------------------------------------------------------------------
GUI フォームでは、右クリックからメニューを表示させることができる。
そのメニューには、

- 設定
- 終了

の２項目があり、設定の項目で、設定フォームを起動できる。
その設定フォームでは、以下の情報を登録できる。

- データ登録先の Web ページアドレス
- Web ページ上の ユーザ名、パスワード
- 素振り回数ファイルのフォルダ名

パスワード情報は、実際の入力文字が ***** となるようにし、パスワードの秘密が
守られるようにする。
これで、パスワードに Nekomimi_love などの恥ずかしい名前を使っても平気になる。

ユーザ名の最大長は 12 文字とし、
パスワードの最大長は 16 文字とする。パスワードには、isprint() な文字のみ
利用可能とする。

素振り回数ファイルのフォルダ名は、"..." というボタンを押して、
実際のパス構成から、配置場所を GUI で選択できるようにする。



* GUI フォームの配置について
----------------------------------------------------------------------
Qt を用いて GUI フォームを作成する。
私の Linux 環境だと、ウィンドウマネージャの枠があると、
配置場所が保存されないので、この枠は削除してしまう。やれやれ。

GUI フォームの配置については、こんな感じ

- 表示位置はマウスの左クリックのドラッグで移動させることができる。
- 前回の起動位置と同じ場所、同じ大きさで配置される



* GUI フォームの Wii リモコンとの接続について
----------------------------------------------------------------------
接続してないときは、数秒おきに接続処理を起動し、
接続しているときは、加速度に変化がないかどうかで、
切断されたかを判断する必要がある。

もう少し具体的に書く。

接続してないときは、数秒おきに...
Wii リモコンとの接続関数を呼び出し、失敗したら再度トライし、
成功したら、状態を示すフラグを "接続" に変更する。

接続しているときは...
判定する時間分の全てのデータについて、
変化分が 0.4 (!!! この判定値は変わるかも) 以内に収まっているかの判定を行う。

!!! 多分、スレッドにするほどではない



* 表示する素振り回数の計算について
----------------------------------------------------------------------
保存されたデータから、今日、平均、トータルの素振り回数を計算して表示する。
平均回数には、本日分の素振り回数は含めない。

素振り状態が切断した段階で、ファイルの更新を行う。

ファイルの各行を全て読み出し、トータル回数を計算する。
平均回数は、もっとも古い年月日から、今日の年月日を引くことで計算する。



* Wii リモコンの接続処理のスレッド化について
----------------------------------------------------------------------
Qt のスレッドクラスを継承し、Wii リモコンの接続処理を行う。
接続できたら、シグナルを送信してからスレッドを終了する。



* インストール時のファイル配置について
----------------------------------------------------------------------
必要なファイルは、

- 実行ファイル
- 必要な DLL ファイルなど
- 素振り回数ログファイル
- Lua スクリプト

とする。

Lua スクリプトの探索は、

1. 実行ファイルのあるディレクトリ
2. 素振り回数ログファイルのあるディレクトリ

の順に行う。



* 設定フォームについて
----------------------------------------------------------------------
設定フォームでは、

- 終了ボタン
- 保存ディレクトリのディレクトリ位置

を設定可能とする。
