フィンローダのあっぱれご意見番

第63回:3秒間応答がなければ合意

初出: C MAGAZINE 1997年7月号
Updated: 1997-08-25

[1つ前] [1つ後] [一覧] [ホームページ]


 アスキーネットがサービス終了というニュースが飛び込んで来た(*注1)。 報道では「会員が減少したため」のサービス終了で、会員が減少した理由は 「インターネットが伸びたため」とのことである。 これを見て真っ先に思い出したのは、バンダイがPippinの不振の理由として 説明した時の内容である。 「インターネットを家庭で利用する人はま だわずかで時代に先行し過ぎた」というのだが、これでは話が全然逆である。 でも、理由説明の性質としては似たものがある。要するに「インターネットだか ら」とか「使徒だからね」と言っておけば、世間はとりあえず納得してしまうの かもしれない。

 同じ報道で、パソコン通信のユーザーが一年で204万3000人も増えていると紹 介されていた。それってちょっと怪しい情報のような気がしますけど。実感とし てそんな増えたように思えないのである。もしかするとプロバイダの入会者も含 めたのべ人数とかだろうか。もう少し具体的な数字としては、ニフティサーブの 会員が、昨年から約50万人とか、その程度のオーダーで増えているのである。じ ゃあアスキーネットはどうかというと、公称で12万人とか14万人とか、いや実は2 万人もいないとか(*注2)、諸説乱れ飛んでいるが、 いずれにしても一年で50万人の新入会員がいれば大飛躍という感じだろう。 ところが現実はどうかというと、アスキーネットじゃなくて ニフティサーブを選ぶという人が50万人いたわけである。仮に 「インターネットが伸びた」というのが真実だとしても、その条件下で50万人会 員増のネットもあれば、8月で閉鎖するネットもある、というのが現実であるこ とは間違いない。

*

 さて、会員数2万人というのは、ニフティサーブの中の一フォーラムに過ぎな いFPROGでさえ、過去6か月以内にアクセスしている人は2万人程度なのだから、 もし本当に会員数がその程度しかないというのなら、毎月2,000円のミニマムチ ャージを取っているとはいえかなり厳しいということは理解できる。

 ではなぜアスキーネットは世間から見放されたのか。いろいろな理由がある。 システムの不安定性や、日中に保守のために止めてしまうというビジネスユーザ 無視のスケジュール。小さいメールボックスなど、機能の問題もあるかもしれな い。しかし、最も大きな理由は、やはり人だろう。人に尽きると思うのである。 ネットというのは何をサービスしているのだろう。一つの考え方として、メディ アをサービスするという発想がある。電子メールやホームページのサービスはこ れだ。生活の便利を売るという側面は確かにある。

 だがもう一つ重要なのは、やはり直接的なコミュニケーションそのものをサー ビスするという発想だと思うのである。単に情報を得たいというのであれば、そ れこそインターネットもあるし、テレビでも構わないのだ。そうではなく、生の 人間のダイレクトなメッセージを知りたいとか、新たな人と人との出会いの場と して使いたい、というような使い方になってくると、ネットという場はまだ先を 進んでいる。WWWも確かに一次情報を発信するという意味では活用できるし、意 外と双方向のコミュニケーションもあるものだが、それでも電子会議のやりとり に比較すると、かなり一方的なショーであると言わざるを得ない。インターネッ トの中にはnewsgroupという世界もある。これは本格的な双方向コミュニケーシ ョンの場なのだが、実際に流れている情報の量を見ると、一部のnewsgroupを除 けば、ニフティサーブの電子会議の量にはるかに及ばないのだ。

 もちろん量が多ければいいというものではない。いわゆるS/N比の問題とか(*注3)、 ゴミ問題とか、量が増えるとトラブルも増える。また、仮に全て有益な情報であ ったとしても、その中から本当に必要な情報を取り出すのが大変だということに なってくる。そうなれば全文検索サービスなどの新たなサービスの出番というこ とになるわけで、規模が大きくなると、人間の処理能力を情報量が越えてしまう という前提で設計を全て見直す必要が出てくるのである。

*

 プログラムも大きくなると訳が分らなくなるが、通信ソフト「魔王」の中の処 理で、タイムアウト時間の変更をどうするかという問題があった。NIFTY-ROAD7 を使ってニフティサーブにアクセスすると、実測値で3500バイト/秒以上の速度 が出ている。こういう高速回線を使わない手はない。というわけで、どんどん使 いたいと思うのだが、一つ問題がある。このアクセスポイント経由でNIFTY SERVE に繋ぐと、あちこち見終わって最後にbyeコマンドを実行た後、相手から自動的 に回線を切ってくれる仕様になっている。この時に、なぜか10秒程度待たされる のである。普段はともかく、携帯電話などからアクセスしているとイライラする のである。ニフティの説明では、モデムによっては回線を切ってからもしばらく 待たされる、ということであった。実は既に切れている、ということらしいのだ が…。

 だったら、byeを入力して数秒経過した所で勝手に回線を強制切断しても何も 問題なかろう、と思ったわけだ。どの程度の時間経過したら切れるか考えてみた が、そういえば「3秒間反論がなければ合意」という格言があるので、3秒何も送 って来ない状態が続いたら回線切断の合意とみなすことにした。

 ということは、3秒間待って「+++」と「ath」を送る処理を追加すればよい。 しかし、タイムアウトを設定する関数の仕様が、最初はList 1のようになってい た。

---- List 1 ----

int set_wait_timer(int i)
{
    if (i < 0)
        i = default_wait_time;
    wait_limit = i;
    return i;
}

---- List 1 end ----
変数wait_limitはタイムアウトの時間として比較する値を保持していて、1文 字受信の関数などで参照されるのである。これはモジュール内のstatic変数なの で外からは直接変更できず、こうやって関数を呼んでやらなければならない。設 計方針としては外部変数にしてしまう方法もあるのだが、今回はこのままstatic で使うものとした。なお、負の値を指定した時には、デフォルトの値に戻すとい う仕様である。

 さて、この関数を使って、タイムアウトを3秒に設定するのは、引数を3で呼べ ばいい。問題はその後だ。設定前のタイムアウト時間に復旧するにはどうすれば いい? できないのである。

 安易な発想としては、現在設定されているタイムアウト時間を得る関数を追加 して、変更前にその関数を呼び出して値をキープしておき、処理が終わったら再 びその値をセットして元に戻す、という方法がある。これは明快だが、今回は実 はList 2のような変更をしてしまった。つまり、セットした時に、その直前の値 を戻り値とするように仕様変更したのである。関数の数が増えるのが何となくイ ヤだったので、機能を増やして対応したわけだ。

---- List 2 ----

int set_wait_timer(int i)
{
    int last = wait_limit;

    if (i < 0)
        i = default_wait_time;
    wait_limit = i;
    return last;
}

void foo(void)
{
    int hold;

    ....

    hold = set_wait_timer(3);
    /* ログアウトの後処理 */
    set_wait_timel(hold);

    ....
}

---- List 2 end ----
 これでログアウト処理はどうなるか。タイムアウトを3秒に設定して、何でも いいからとにかくシリアルポートからの文字列を待つ関数を呼ぶ。偶然その文字 列が来てしまったら困るのだが、一応「NO CARRIER」という文字列を待って、こ の文字列が来た場合には何だか分らないけど回線が切れたのだから結果オーライ ということにすればいい。普通は3秒程度ではNO CARRIERにならないのである。

 さて、これで実験してみたら全然ダメ。なぜかというと、考えてみればこの通 信ソフトには、タイムアウトになるとモデムに「+++」と「ath」を送って勝手に 回線を切ってしまうという強烈な機能が最初からあったのだ。従って、これが干 渉して訳のわからないことになっていたのである。

 じゃあどうするのかというと、結局、強制切断処理の前に、athを自動的に送 信しないような状態に変更しておき、切断処理の後に状態を復旧させることにし た。ところが、現在のモードがathを自動送信するかしないか、どうすれば分る か。こうやって問題は再帰的に発生するのである。

 で、結局どうなったかというとList 3である。この程度の変数名にしておけば 解説は不要だろう。一つ気に入らないのは-257というマジックナンバーで、これ はタイムアウトを意味するということだが、ヘッダーにでもマクロで書かないと 心構えとして失格かもしれない。

---- List 3 ----

    } else if (i == 2) { /* NIFTY-ROAD7 only */
        int limit;
        int old_ath_option;

        old_ath_option = ath_when_timeout(0);
        limit = set_wait_timer(3);

        if (com_wait("NO CARRIER") == -257) {
            r_printf(1, "ROAD7 強制終了します .. sending +++");
            com_ssend("+++");
            com_wait("OK");
            com_puts("ath");
            com_wait("OK");
        }
        set_wait_timer(limit);
        ath_when_timeout(old_ath_option);
    } else ..

---- List 3 end ----


(*注1) 1997-08-25、午前1時頃、サービスをほぼ停止した。

(*注2) グループステージ「メディア国勢調査」の SigOp が独自調査していた。それによれば、会員は1万9千人しかいない。なお、これは活動している会員ではなく、IDを持っている会員という意味である。

(*注3) S/N比というのは本来Signal/Noiseという意味で、fj等では投稿中のゴミの比率を問題にしているようだが、最近はSpam/Nobody率とかいうjokeも…。


(C) 1997 Phinloda, All rights reserved
無断でこのページへのリンクを貼ることを承諾します。問い合わせは不要です。
内容は予告なく変更することがあります。