Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第91回「サイズが問題」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

Solaris 7の日本語版の無償配布が始まったので申し込んでみた。 「Solaris 7って何?」という方がもしかして多いかもしれないが、 要するにいわゆるフリーのUNIXの一種である。 とかいう説明ではSolaris関係の人が怒るかもしれないが、ごめんなさい。 Solarisが何であるかを詳しく説明するにはページが足りないので、 興味のある方はUNIX系の雑誌でも見て欲しいということにさせていただく。 もう一言説明するとしたら、まあLINUXみたいなものだ。 という説明だと、さらに怒られるような気もするが、 とにかく、 Solaris 7をショップで購入すればン万円もするのだが、 フリーでgetするにはWWW経由で申し込むだけである。 もっとも、手数料として、$28.95ほどかかる。 この料金はクレジットカードで払うことになるのだが、 そこでちょっとしたトラブルがあった。 Webでクレジットカードの番号を入力する画面が、 fig.1のようになっていたのだ。

 

※ Solaris は Sun Microsystems が販売しているOS。

---- fig.1 ----

Number: ____________________

---- fig.1 end ----

常識なのかもしれないが、ここにどうやって番号を入れるのが正解なのだろうか?

ちなみに、 クレジットカードの番号は、fig.2のように、 4つずつの数字が4組並んだ状態になっているはずだ。

---- fig.2 ----

0123 4567 8901 2345

---- fig.2 end ----

実際に何をやったかというと、空白まで含めて「その通り」入力したのである。 つまり、「0123 4567 8901 2345」のように入れたのだ。 ということは、19文字になるが、何の不都合もなく入力は完了した。 ところが、その後に入力確認の画面で驚いた。 カードの番号はセキュリティのために伏せて表示します (実際は英語だが)というような説明とともに実際に表示されていたのは、 fig.3のような感じなのである。

---- fig.3 ----

**************** 45

---- fig.3 end ----

これを見たら誰だって「0123456789012345」 と入れないとまずかったんじゃないか、 と思うはずだ。 実際そう思ったのだが、 ではやり直せるのかというと、 ブラウザの「戻る」で前のページに戻ってみても「既にその番号の注文は受理されている」 (そのような意味の英語だと思う)と表示されてしまったりして、 全く埒があかないのである。 最終的に、もーどーでもいいか、と思って、そのままokを押したのだが、 こんなアバウトなことでいいのか?

45 と表示されているのが不思議。

  

さて、1時間もしないうちに、注文に対する返信のメールがやってきた。 何かミスったかと思ったのだが、 単に「注文ありがとう、送るから待っててね」 (という感じの英語だと思う…)というだけ内容だったので、 こりゃ自動的に返信しているようである。 とりあえず、番号が途中で切れていたら品物を送ってこないだろ、 という程度に呑気に考えていたら、しばらく音沙汰がなかった。 そして、忘れていた頃に航空便で目的のモノが届いたのである。 忘れたといっても、実は10日で届いているのだ。 3週間程度かかるという噂だったので、意外と早いようである。 これの料金引き落としは一体どうなるだろうか。

 

※ 今なら10秒で返信メールが来るかもしれない。 当時は1時間かかったのだ。

§

これは ユーザーインターフェースの設計の問題である。 例えば、fig.4のような形式になっていたら、 間違う確率は極めて低くなると思う。

---- fig.4 ----

Number: ____ ____ ____ ____

---- fig.4 end ----
  

Windowsをインストールする時にProduct IDを入力する画面があるが、 あんな感じで桁が分けてあれば、間違うことはないはずだ。 ただし、カード番号がそのようになっているという大前提が必要となる。 もしその前提が成立しないのなら、 fig.1のようなボックス1つの方が汎用的なのかもしれない。 箱一つの場合は、入力例を表示すれば間違いを避けることができる。

 

※ 当時の Web usability がいかに未成熟だったかが分かる。

もちろん、このようなアイデアは私が今考えたものではなくて、 ユーザーインターフェースの分野では大昔から常識になっている基本技なのだ。 サンにしては難しいユーザーインターフェースを採用したものだと思う。 もっとも、日本語版Solarisの注文を全部英語で書けというのが根本的におかしいわけだが…。

§

  

個人のWebページをプロバイダに転送する時には、ftpなどを使うことになる。 大抵のプロバイダは容量の制限があるので、 今使っている容量が気になる。 それを知るにはどうすればよいか? これはFAQらしくて、よく見る質問だ。 最近この質問がある所でありまして、 その回答が「方法がない」だったがちょっと驚いた。

 

※ 当時のプロバイダが制限していたサイズは、 5MBとか、10MBとか、そのような程度だった。

UNIXの場合は、 quotaとかduなどのコマンドを使うこともあるが、 シェルからls -lRというコマンド(とオプション)を入力すれば、 とりあえず各ファイルのサイズがわかる。 カレントディレクトリからツリーをたどって ディレクトリの下にあるファイルも全部表示してくれる。

 

※ quota はユーザー毎にディスクの使用量を表示するコマンド。 du は指定したディレクトリ下のファイルに対するディスクの使用量を表示する。

とか書いたら「いや、ftpの話なんだけど」と言われそうな気がするが、 もしかすると、最近はコマンドラインからftpを使わないか。 GUI全盛期だし。 もし、ftpをコマンドラインから使っている人なら、 ftpで接続したときにls -lRというコマンドを使えば、 UNIXのシェルで実行したような結果が得られることを知っているかもしれない。 dir -Rと入力してもいい。

ただし、このコマンドは、それぞれのファイルのサイズしか表示してくれない。 合計サイズはどうすれば分かるのか? 目から鱗が落ちそうな回答例。 合計すればいいのだ。 というわけで、現在使っている容量の確認方法はこうなる。

1. ftpで、ページを登録するサーバに接続する。
2. 目的のディレクトリに移動する。 例えば cd homepage。あるいはホームディレクトリに移動する。
3. ls -lR を実行する。
4. 表示されたファイルサイズを合計する。

  

もっとも、ディスクをどれだけ消費しているかという話としては、多少誤差がある。 まあ誤差の範囲内ということにしておこう。 なお、lsでサイズ見ればわかるという回答は、@niftyでも見た記憶がある。

 

※ 今だと、合計でどの程度使用しているかを確認する画面がある。

「でも、私のページには400個もファイルがあるのですが。 足し算するのが大変なのですが。」 そんな人が、もしかしているような気がする。 最近のネットサーファはコンピュータ持ってないか?  コンピュータってパーソナルに使える時代になったと思ったのだが、 日本はやはり遅れていたか…。

  

とかボケるのはその程度にしておいて、 誰も暗算しろとかソロバン使えとは言ってない。 そんな計算はコンピュータにやらせればよい。 電子計算機ってくらいで、計算は得意なのだから。 それにしても、 ホームページをガンガン作れる人が実はコンピュータに簡単な足し算をさせることもできない、 というのは奇妙な状況なのだが。 とりあえず、ここでCのプログラムでもちゃちゃっと書いてみればカッコイイのかもしれないが、 残念ながらまたperlなんです、済みません。

 

※ 昔はコンピュータのことを「電子計算機」と言ったのだ。 つまり、計算する機械である。 これを使えば大量の複雑な計算を複雑に行うことができるのだが、 残念ながら、現在のpcユーザーの多くが、その方法を知らない。

list 1は、ftpのls -lRの結果を合算するperlスクリプトの例である。

  
---- list 1 ----

#! /usr/local/bin/perl
# ftpcheck.pl
while (<>) {
  if (/^total\s(\d+)/) {
    $total += $1;
    next;
  }
  if (/^[-d]rw[-x]r[-w][-x]r[-w][-x]\s+\d+\s+\S+\s+\S+\s+(\d+)/) {
    $detail += $1;
    next;
  }
  if (/^[-d]rw[-x]r[-w][-x]r[-w][-x]\s+\d+\s+\S+\s+(\d+)/) {
    $detail += $1;
    next;
  }
}
print "$total blocks, $detail bytes";
printf(" (%3.3f MB)\n", $detail / (1024 * 1024));

---- list 1 end ----
 

※ やっていることは非常に単純だが、複雑に見えるだろう。 暗号のように見えるところは、文字列のマッチングを行っているだけなのだ。

ftpでls -lRした結果をこのperlスクリプトで処理すれば、 あら不思議(なにが?)たちまちサイズの合計が出てくる。 どうせなら、 ftpで接続して、 ホームページのトップにcdとか実行して、 ls -lRもやって合計する、 という所まで全自動でできると便利ですね。 もちろん、実際そうしている。 list 2のようなバッチを用意しておくのだ。 ちなみに、これらはWindowsのDOS窓から実行している。 パスがそんな感じでしょ。

---- list 2 ----

ftp -n < ftp.tmp > ls-lR.dat
del ftp.tmp
perl d:\perl\ftpcheck.pl ls-lR.dat

---- list 2 end ----

ftp.tmp というファイルの中身はlist 3 のような感じだ。

---- list 3 ----

open mf***.*****.ne.jp ← 一部伏せておきます。
user mh****** ← これも念の為。
cd homepage
ls -lR
quit

---- list 3 end ----

実際はftp.tmpが最初からあるのではなく、 テンプレートを使ってftp.tmpを生成するプログラムを使う。 ファイルの中にパスワードを書くのは危ないから、その都度入力するのだ。 ftpを実行した後、ftp.tmpは消してしまう。これで、パスワードはバレない。 実際は屑が残っていそうでちょっとイヤだが。

これを複数のWebサイトに対して使いたい、というのも理由である。

実際にやってみた結果の一部が、 fig.4である。 ここで入力しているのは、最初のftpcという文字列と、 途中のPassword: の後のパスワードの部分だけだ。 残りは全てプログラムが勝手に表示したのだ。 なお、これで、別の手段で利用サイズを調べたら2.204MBだった。 個人ページに使う意外の細かいファイルのサイズが加わったものだと思われる。

  
---- fig.4 ----

D:\REALURA>ftpc
D:\REALURA>jperl d:\perl\ftp.pl in=ftpc.dat
Host: mf***.*****.ne.jp
User: mh******
Password: ********
cd homepage
ls -lR
quit
D:\REALURA>ftp -n < ftp.tmp > ls-lR.dat
D:\REALURA>del ftp.tmp
D:\REALURA>perl d:\perl\ftpcheck.pl ls-lR.dat
4720 blocks, 2309811 bytes (2.203 MB)

---- fig.4 end ----
 

※ REALURA というのは、ここ「本当の裏ページ」のこと。

で、これとSolarisと何の関係があるのかというと、 こういうのはSolarisからやりたいなあ、 というそれだけの話でした。情けないオチで済みません。

 

※ もちろん Solaris からだって Linux からだって、 できるに決まってます。

(C MAGAZINE 2000年1月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-14 裏ページに転載。

(C) Phinloda 1999-2006, All rights reserved.