opossum のコンセプト
会計画面(メインウィンドウ)操作はキーボードで、かつシンプルに
GUI を採用してはいますが、会計処理は迅速に行われるべきです。よって
会計画面の操作はキーボードで行えるようにしています。
売上げ/在庫管理は Out of 眼中
売上の統計・在庫管理については、特にopossum 上では扱いません。
データベースから統計を抽出するには、CGI なり、ODBC 経由で Excel に
読み込むなり、別のアプローチを取ってください。この辺りになってく
ると、業種や経営方針がモロに絡んでくるので、汎用的なものを作る
のは難しいですし、作ろうと思えば、そんなに難しいものでもありません。
posmaster.rb の役割
posmaster.rb は次のことを受け持ちます。
- opossum (クライアント) から新規商品の
登録を受けつけ、posmaster データベースに格納。接続されている全 opposum
に、新規商品データを通知。
- opossum から商品データ同期依頼通知を受け、全商品データを渡す。
通信は 1 本の TCP ソケットに "\n"(空行) で終了する XML を流すことで
行われます。つまり、posmaster.rb との双方向の通信を するために、
opossum 側で port を開けません。これは、NAT な F/W 内部
の opossum からも グローバルアドレスを bind している posmaster.rb と相互
通信するためです。(下図参照)

また、通信内容に XML を使ってはいますが、実装は独自のもので、SOAP
とは違います。(というか、SOAP をよく理解していない...。 ^^;)
そもそも、なんでこんなややこしい構成にしているかというと、
もちろん支店があった場合を考えているのです。A 店では 200 円だった商品が
B 店では 250 円だった、なんて事態は避けたいですよね。
#実際はよくあることなんです、これが...(--;;;。
まあ、売上げデータも posmaster.rb に渡して一元管理する、という
ことも考えられるわけですが、今のところ通信は暗号化されていません
ので、ちと問題があります。盗聴されることなんてまずないでしょうけどね。
Ruby の SSL モジュールはあるので、これを利用して全通信を暗号化する
ことも(今後 ^^;)やる予定です。
文字コード
内部文字コードは EUC で統一しています。が、上記 posmaster.rb の通信
内容の XML は UTF-8 を使用しています。だってそれが REXML の仕様
なんだもん、しようがないじゃないですか。(^^;