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

第66回:フロッピーの逆襲

初出: C MAGAZINE 1997年10月号
Updated: 1998-03-20

[一覧] [ホームページ]


 NIFTY SERVEのFPROGORGを読んでいる人は御存じかもしれないが、最近またデ ジタルカメラを買ってしまった。買ったのはSONYのデジタルマビカ、MVC-FD7で ある。実はこの製品のスペックがWWWで紹介された時から注目していたのだ。ま ず使ってみて気になったのは重さだ。かなり重い。最近のデジタルカメラは軽量 化、小型化の進歩が著しいのにMVC-FD7は本体だけで約600g、バッテリーの重量 が約95gだから、700g程度になる。しかも大きい。厚さもある。解像度はいわゆ るVGAサイズ、38万画素という能力だが、今では中程度といった所か。おまけに 値段が高い。MVC-FD7の8月初期の実売価格は8万円前後だが、実はこのデジタル マビカは本体だけでは使えない。専用のバッテリーも買わないと、一枚も撮れな いのである。このバッテリーが実売価格で1万円ちょっとだから、結局9万円を超 える値段になってしまうのだ。

 実はこのバッテリーが結構凝っていて、残量表示機能付きのリチウムイオン電 池になっている。撮影時と再生時でバッテリーの負荷が違う。マニュアルには、 フル充電時で、連続撮影時に約90分、連続再生時に約120分と書いてあるのだが、 残量表示はどちらを基準にしているのだろうか? 実はカメラのスイッチを切り 換えると計算し直すので、撮影時と再生時でそれぞれ適正な数値を表示するよう になっている。芸が細かい。ただ、たった今、手元で確認した所、撮影モードに なっているのだが、残り時間は109分と表示されているのがちょっと気になる。 ということは、カタログスペックの「連続撮影の90分」って…?

 さて、そのような平凡なスペックで高いカメラをなぜ買ったのか。このデジタ ルカメラは、記録媒体がフロッピーディスクなのである。それもMS-DOSの標準フ ォーマットにJPEG形式のファイルが作成されるから、撮影したデータは、pcでそ のまま読むことができる。撮影後どんどん新しいフロッピーを使えば、カメラの フィルムを使うような感覚でフロッピーを使うこともできる。MS-DOSフォーマッ トのフロッピーの実売価格は、10枚で500円程度。1枚50円のフィルムに、標準の 画像モードで30〜40枚、高画質モードで15〜20枚記録できるというのは、意外と 安いような気もするが、ただしフロッピーは所詮磁気媒体だから長期保存できる かどうか怪しいのでご注意。ちゃんとハードディスクにコピーするとか、CD-Rに 焼いた方がよさそうだ。

 フロッピーに保存できるのがそんなによいことか? よいのである。QV-10を今 まで使っていたのだが、何が面倒かといってQV-10のデータをpcに転送する面倒 さといったら抜群なものだ。QV-10の場合はRS232Cを経由して画像を転送するの だが、それしかないと覚悟を決めたらぎりぎり我慢できる限度内という感じで、 フロッピーの使い勝手を知ったら、もはや「やってられない」レベルである。

 撮影したその時点でフロッピーでJPEG形式で画像データが入る。これをpcに入 れてcopyするだけ。かかる手間が劇的に違うのである。実際にどんなに手間が違 うというのはよく分らないのだが、気分が違うのだ。すごく楽できるというか、 その手間がかからないというだけで、数万円の差があっても納得できるんじゃな いかという程違うのである。もしpcと接続するのなら10base-TでLAN接続できる ようなデジタルカメラがそのうち出てくるかもしれない。10Mbpsの速度でデータ 転送でき、しかもカメラをLAN接続したらURLを指定してブラウザから画像一覧が 見える、という程度まで完成して来れば、これは結構売れるんじゃないかと思う のだが…。

 さて、世間はどうかというと、パソコン販売店で売っている人に聞いてみたら、 入る品物がどんどん出ていくらしい。実は私はこれを帰省前に買おうとして失敗 している。自然の風景をいろいろ撮影して来るつもりだったのだが、帰省当日、 どのショップに行っても完売状態だったのだ。ある量販店での噂だが、どうもソ ニーが予想した売れ方を上回る人気で、かなり品薄状態だというのである。デジ タルマビカには、10倍ズームが付いた機種と、ズームなしの機種があるのだが、 よく売れているのはズームが付いた方だ。私の場合、シャッターチャンスですか さず撮影して、そのままpcに転送、あるいは直接ftpでホームページに転送してWWW で公開、というような使い方を狙っているのだが、同様な使い方を想定する人に はgoodなデジカメではないだろうか。この目的なら、ズームがあった方が断然よ いことは間違いない。

 あえて弱点は何かといえば、先に紹介したような重さや価格はともかくとして、 ファインダーとなる液晶画面が固定しているということかもしれない。QV-10は レンズが360度回転する。つまり、いわゆるカメラ撮影のポーズではなく、少し カメラを見下ろすような感じだとか、高い所に差し上げた状態で撮影するという 技が使えたのだが、デジタルマビカだとその技が使えない。デジタルビデオカメ ラで、液晶ディスプレイが回転するというものがあるようだが、そのような設計 になっているとよかったと思う。もちろん、もっと薄形、軽量になればさらによ いことは間違いないのだが、ポイントはフロッピー。MDでもメモリカードでもな くて、今どきあえてフロッピーというあたりが、いかにも渋いのではないか。


 この文章を皆さんが読んでいる頃には消滅しているアスキーネットで見かけた ソースの話題。List 1のような書き方である。

---- List 1 ----
    if ((fp = fopen(filename, mode)) == NULL) {
        exit(1);
    }

 これは別に間違っていないのだが、書いた人がCのプログラムは殆ど書いたこ とがないというのである。そこでちょっと頭が痛いというか、なぜList 2のよう に書かないのかというのが心配という話。

---- List 2 ----
    fp = fopen(filename, mode);
    if (fp == NULL) {
        exit(1);
    }

 機会がある毎に、List 1ではなくList 2のように分けて書くようにアドバイス するのだが、なぜかList 1のような書き方は後を絶たないし、それが初心者の書 くソースというのがどうもおかしい。元ネタがどこかにあるということになる。

 確かにList 1のような書き方は正しい。C言語の「式」が値を持っているとい う性質をうまく使っているかもしれない。しかし、それだけの話である。少なく とも、ぱっと見た時の分りやすさはList 2の方が断然優れている。修正する時は どうか? fpという変数名をfpxに変更する時に、List 2のように2個所に分れて いると、片方変更し忘れるかもしれない? 確かにそれはそうだ。だが、実際に そのような変更をする時はどうするのだろうか? 私ならエディタのリプレース 機能を使うから、変更し忘れるということはまずない。ただ、ちょっと変更しす ぎちゃったということは希にある。

 もしかすると、非常に有名な定石、List 3の書き方を引きずってしまって、List 1のような書き方を使ってしまうのかもしれない。List 3の場合は、確かにうま いやり方である。これをc = getchar()だけ分けて書こうとすると、List 4のよ うに二個所にgetcharが出るようにするか、それともList 5のように、forの無限 ループの中でbreakさせるか、どちらにしてもあまり面白くない書き方になって しまう。この場合はList 3の書き方が光っているのである。

---- List 3 ----
    while ((c = getchar()) != EOF) {
        ...
    }

---- List 4 ----
    c = getchar();
    while (c != EOF) {
        ...
        c = getchar();
    }

---- List 5 ----
    for (;;) {
        c = getchar();
        if (c == EOF)
            break;
        ...
    }

 それはともかく、List 2の書き方というのは、渋い味があるというか、いかに も玄人好みの書き方のような気がするのだ。囲碁で言えば、少し腕を上げた人が、 ツギを打つ時にカケツギにしたりケイマに飛んでみたりするのが、プロになると しっかりとツギを打つ、というのに似ていると思う。この当たり前の書き方が初 心者が出来ないというのであれば、それはそれで面白いのかもしれないが、しか しどうも気になる現象がいつまでも残っているというのは不気味な感じである。


(1998-03-20)
注.最初、List 1、List 2はそれぞれ次のようになっていた。

---- List 1 ----
    if ((fp = fopen(filename, mode)) != NULL) {
        exit(1);
    }

---- List 2 ----
    fp = fopen(filename, mode);
    if (fp != NULL) {
        exit(1);
    }

FPROGORGで、NULLではない時にexitするのは実用的ではないという指摘があって、判定が逆になっていることに初めて気付いたのである。fopenの処理のような定石に対してこのような単純ミスをした理由が最初分らなかったのだが、次のperlの表現、

---- List ----
  open(FILE, $file) || die "can't open $file\n";

これに引きずられたのではないかと思う。つまり、openの処理が非0の時に終了させるという考え方を、無意識のうちにfpが非NULLの時に終了させるという手順に拡張してしまったのではないか。

(フィンローダ ニフティサーブ FPROG SYSOP)


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