2013年8月21日水曜日

HAM LOG 改定 / SQLiteへの挑戦

大分長いこと使用してきたMySQLによるHAM LOGも移動運用などで
使用した時、使い勝手が悪いので変更することにした。

使い勝手が悪いのはMySQLのせいではないのですが、
通常、QSO結果の処理は、ホームにあるデスクトップで行い、
移動運用時はノートPCで行っています。移動運用に出かける前に
デスクトップのDBの中身をCSVに落とし、ノートPCのDBに
CSVから書き込み、移動運用から帰ってきたら逆のことを行い整合性を
保つようにしています。
MySQLはサーバー型のDBMなのでどちらのPCからもアクセスで
きるようにすればこのような面倒なことは必要ないのですが、
移動運用場所によってはアクセスできないことも考えられるので、
このような方法で行っていました。
(MySQLがいくら無償とはいえ私のような使い方ではもったいない
ということです)

このようなDBMでなくもっと簡便なDBはないものかと探してみると
SQLiteというDBMがありこれは便利ということで、別のDBMの
勉強も兼ねて使用してみることにしました。

このSQLiteというのはクライアント内だけのDBということで
ポータビリティーが良い。というよりDBを自分で認識でき、
DB(単なるファイル)を別PCにコピーするだけでよいので楽である。
もっともDBMというよりSQLが使用出来るデータシステム
といったような物のようである。
しかし、以前にも書いたがこのようなデータシステムを自分で作るとなると
結構な労力が必要になるので無償で簡単にSQLが使用できるのは
ありがたいことです。

ただし、MySQLのようなセキュリティーについては期待は出来ないが
もともとオープンなQSOデータで自分のPC内だけ使用するので、
必要性を感じていないのでよしとしました。。

ということで、HAM LOGのSQLite化に着手するわけですが、
まったくプログラムの書き直し(ロジック)は予定していないので、
出来ればちょこっと手を入れるだけで良ければ助かると思い、
テスト プログラムを作成し実行してみると
思っていた以上に互換性があるので早速取り掛かりました。
(SQLが標準化されているのでSQLの文法あたりは変更しなくてすみそう)

実際に変更を始めてみるとSQLの文法は互換性が高いが、
機能上の互換性がないものがあり、情報も少なく意外と時間が
掛かってしまった。

主な相違は:
1.起動などはPC DOSの世界と同じでコマンドプロンプトで実行
  
   MySQLはタスクとして実行させておく必要があったが、
   SQLiteは必要がない。
   このあたりも大分違いを感じるがなんとなく軽さを感じる
2.CSVデータの取り込み、吐き出しのSQLコマンドが無い
   MySQLではSelect文で簡単にCSVデータを取り込んだり、
   吐き出したりすることが出来るがSQLIteにはこのような
   
   SQL文が存在しないのでちょっと工夫が必要となる。
   コマンドラインではImportコマンドが使用できるのですが、
   今までと同じようにプログラムから実行したかったので
   機能の追加をしました。
3.マニュアル(Web上の初心者よう説明など)では、大文字小文字
   の扱いが違うようでこの点も変更したが、使い方なのかバグなのか
    いまいち思ったようにならずロジックで対応した部分もあった。
4.実行結果をコマンドラインで確認するとSjis(全角)が化けてしまう
   たぶんコマンドがあるのだろうが見当たらないので今はあきらめて
   使用している。
5その他ちまちまとあったような気がするが何とか移植は完了し
   しばらく使用してみることにした。

移植に当たり、折角なので使用していない機能の削除やロジックを
見直し冗長性の高いロジックなどを変更などして大分スリムになった。

移動運用で使用してみるとMySQLとほぼ同じ感覚で使用できた。が、
なぜか(?)少し入力が途絶えた後入力するとDBが接続できなくなる
トラブルが発生した。再度起動するとOKなのだが、調査してみても
原因が不明、しばらく使用してみて同じトラブルがでるようであれば
元に戻す必要があるかもしれない。
また、入力したデータが一部消滅していたのでこちも原因が不明で
不安がある。
QSOが途切れ、PCを使用しないとき、スタンバイ状態にしたりしているので
そのせいかもしれないがいずれにしても困るので調査をしてみる。