« 2006年11月 | メイン | 2007年01月 »

2006年12月 アーカイブ

2006年12月06日

SOBA TVPhone

SOBA TVPhoneはSOBAを使った超簡単なテレビ電話ソフトです。
このソフトは、1対1通話限定で、簡単にデジカメなどの画像が共有できます。
パソコンにアイコン化して待機しておけば、相手から電話がかかってきたときに、音がなり、着信を知らせるメッセージが出てきます。応答すれば、この画面が前面に表示されます。

高機能をうたったソフトは多々ありますが、ユーザー様によってはこうゆうボタンが大きく、シンプル、スマートなものも喜ばれます。

tvphone.JPG

2006年12月15日

デッドロック

本日、デッドロックの恐れのあるコード二箇所を修正しました。
デッドロックとは、複数のスレッドがお互いにロックの解放を永久に待ち続けてしまう現象のことを言います。
デッドロックを回避するための一般的な手順は、
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により場所を特定して修正しました。

2006年12月19日

アップデートツール

本日、SOBA CITY 3.2.1を公開しました。
SOBA CITY3.2.1よりアップデート方法がアップデートツールにより自動で行えるようになりました。
具体的には、差分についての情報をSOBAのアップデートサーバーに蓄えておき、各ユーザーがSOBA CITYにログインすると、アップデートサーバーにつながり、差分を自動的にダウンロードします。
HTTPプロトコルを使用するのでブラウザが使用できる環境なら使用できます。

update.JPG

2006年12月20日

座席

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を使っています。
私はきれい好きなのですが、最近は業務に追われてほとんど席の周りを掃除しておりません。

seki.JPG

2006年12月21日

忘年会

本日は忘年会でした。
去年は関係者も含めて20名程度の参加だったのですが、今年は40名以上の参加でした。
あらためてSOBAが多くの人に支えられているのを感じます。
立食形式だったのですが、○×クイズ、O社のIさんの手品、ビンゴゲームなど楽しい会合でした。
私は1次会で食べ過ぎたのと、最近連日終電帰宅の疲れで、1次会のみで退散しました。
2次会はどうなったことやら。

2006年12月22日

クリスマスツリー

本日、ようやくクリスマスツリーを飾りました。
去年は12月の初めには飾っていたのですが、今年はみんな仕事が忙しくてクリスマスツリーまで手が回りませんでした。25日に片付けます。

tree.JPG

2006年12月27日

夜中の作業中

本日は徹夜です。この1年で徹夜をしたのは何回目だろうか。私はSOBA社内では一番自宅が遠いので通勤時間を節約できる利点がある反面、夜中の作業は眠いので効率は今ひとつです。
この1年のSOBAの開発を振り返ってみると、進歩したところ、今ひとつだったところ、開発予定だったけどできなかったことなどいろいろと思い出されます。いま手元では来年からの作業をメモしながら考えたりしています。
来年は年初からいくつかBig Projectが展開するので少し楽しみです。ただ、開発も地道にコツコツ進めていく予定です。

2006年12月28日

年内最終日

本日で年内の仕事は最終日です。私はというと周りの人が掃除をしている中、ひたすらバグを追っかけていました。特に私の席の下を掃除してくれたIさん、ありがとう。
本日、重要なバグの根本的な原因を発見して修正しました。少し満足です。ここでもeclipseでスレッドを追いかけて解析しました。これでやっと安心して年を越せそうです。
夜は、ピザとビールでみんなで乾杯しました。

About 2006年12月

2006年12月にブログ「SOBA開発日記」に投稿されたすべてのエントリーです。新しい順に並んでいます。

前のアーカイブは2006年11月です。

次のアーカイブは2007年01月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type