SOBA TVPhone
SOBA TVPhoneはSOBAを使った超簡単なテレビ電話ソフトです。
このソフトは、1対1通話限定で、簡単にデジカメなどの画像が共有できます。
パソコンにアイコン化して待機しておけば、相手から電話がかかってきたときに、音がなり、着信を知らせるメッセージが出てきます。応答すれば、この画面が前面に表示されます。
高機能をうたったソフトは多々ありますが、ユーザー様によってはこうゆうボタンが大きく、シンプル、スマートなものも喜ばれます。
« 2006年11月 | メイン | 2007年01月 »
SOBA TVPhoneはSOBAを使った超簡単なテレビ電話ソフトです。
このソフトは、1対1通話限定で、簡単にデジカメなどの画像が共有できます。
パソコンにアイコン化して待機しておけば、相手から電話がかかってきたときに、音がなり、着信を知らせるメッセージが出てきます。応答すれば、この画面が前面に表示されます。
高機能をうたったソフトは多々ありますが、ユーザー様によってはこうゆうボタンが大きく、シンプル、スマートなものも喜ばれます。
本日、デッドロックの恐れのあるコード二箇所を修正しました。
デッドロックとは、複数のスレッドがお互いにロックの解放を永久に待ち続けてしまう現象のことを言います。
デッドロックを回避するための一般的な手順は、
1. 複数のオブジェクトに対して同期制御を行う場合がある場合は、ロックの順序をあらかじめ決定しておく
2. 各スレッドはその順序でロックを獲得する。
(Sun Educational Services STUDENT GUIDE JavaプログラミングⅡより)
実は教科書に書いてあるような絵に描いたようなデッドロックはSOBAでは見かけません。
もっと難しくて根の深いものです。本日、SOBA Project,Inc.のD氏と解いたのおよそ以下のようなデッドロックです。
public class DeadLock {
private static Logger logger = Logger.getLogger("lock");
private Hashtable hash = new Hashtable();
public DeadLock() {
final ValueObject obj = new ValueObject();
new Thread(new Runnable() {
public void run() {
while (true) {
logger.entering("", "", hash);
System.out.println("a");
}
}
}).start();
while (true) {
hash.put(obj, "value");
System.out.println("b");
}
}
public static void main(String[] args) {
try {
FileHandler fh = new FileHandler("deadlock.log");
fh.setFormatter(new SimpleFormatter());
logger.addHandler(fh);
logger.setLevel(Level.FINER);
new DeadLock();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public class ValueObject {
public boolean equals(Object obj) {
System.out.println("put()中から呼ばれます。");
logger.entering("ValueObject", "equals", obj);
return super.equals(obj);
}
}
}
(コード提供:D氏)
mainスレッドでHashtable.put()のロックしてから、ログ出力用のFileHandlerのロックします。
また、別スレッドでは、ログ出力用のFileHandlerのロックしてから、Hashtable.toString()のロックします。
このサンプルはかなり簡易に書いてあるので容易ですが、SOBAのような大規模なフレームワークではなかなか不具合も発生せず、発生したとしても原因の特定は容易ではありません。今回は、JProfilerとEclipseにより場所を特定して修正しました。
本日、SOBA CITY 3.2.1を公開しました。
SOBA CITY3.2.1よりアップデート方法がアップデートツールにより自動で行えるようになりました。
具体的には、差分についての情報をSOBAのアップデートサーバーに蓄えておき、各ユーザーがSOBA CITYにログインすると、アップデートサーバーにつながり、差分を自動的にダウンロードします。
HTTPプロトコルを使用するのでブラウザが使用できる環境なら使用できます。
SOBA Project,Inc.での私の席です。
左からFUJITSU FMV DESKPOWER、SONY VAIO、IBM ThinkPad T43、IBM ThinkPad X30です。
カメラはCREATIVE、Logitech、BUFFALO、APFAを使っています。
開発が中心の私の席では、PCは常に3台は稼動しています。SOBAはネットワークで使うソフトなので一台では実質作業ができないからです。
SOBA Projectでは、さまざまなPC、カメラをお客様が使うことを想定して、なるべく多くの種類のPCを使っています。
私はきれい好きなのですが、最近は業務に追われてほとんど席の周りを掃除しておりません。
本日は忘年会でした。
去年は関係者も含めて20名程度の参加だったのですが、今年は40名以上の参加でした。
あらためてSOBAが多くの人に支えられているのを感じます。
立食形式だったのですが、○×クイズ、O社のIさんの手品、ビンゴゲームなど楽しい会合でした。
私は1次会で食べ過ぎたのと、最近連日終電帰宅の疲れで、1次会のみで退散しました。
2次会はどうなったことやら。
本日、ようやくクリスマスツリーを飾りました。
去年は12月の初めには飾っていたのですが、今年はみんな仕事が忙しくてクリスマスツリーまで手が回りませんでした。25日に片付けます。
本日は徹夜です。この1年で徹夜をしたのは何回目だろうか。私はSOBA社内では一番自宅が遠いので通勤時間を節約できる利点がある反面、夜中の作業は眠いので効率は今ひとつです。
この1年のSOBAの開発を振り返ってみると、進歩したところ、今ひとつだったところ、開発予定だったけどできなかったことなどいろいろと思い出されます。いま手元では来年からの作業をメモしながら考えたりしています。
来年は年初からいくつかBig Projectが展開するので少し楽しみです。ただ、開発も地道にコツコツ進めていく予定です。
本日で年内の仕事は最終日です。私はというと周りの人が掃除をしている中、ひたすらバグを追っかけていました。特に私の席の下を掃除してくれたIさん、ありがとう。
本日、重要なバグの根本的な原因を発見して修正しました。少し満足です。ここでもeclipseでスレッドを追いかけて解析しました。これでやっと安心して年を越せそうです。
夜は、ピザとビールでみんなで乾杯しました。