2017年8月16日水曜日

(昔プログラマの) プログラミング奮戦記(その2)

・ブログ( ドッと混む・Knuhsの書斎 )から転載

── JPEGファイルの解剖と解析

▼JPGファイルの解読
 先の「JPEG画像から縦横のサイズを取り出す(昔プログラマのプログラミング奮戦記)」で紹介したようにデジタルカメラに記録された画像データから、付随する情報を読み取るプログラムをPerl言語で記述しようと試みてきた。この種のファイルはJPEGファイルと呼ばれているが、いろいろな形式がある。ここでは、Exifファイルフォーマットと呼ばれ規格化されているものを対象としている。

▼Perlプログラムでの処理
 先に紹介したプログラム(*1)の中で使われている GetJPGsize という関数を使うことにより、画像の横の長さと縦の長さを求めることができるようになった。

 これが使えると、手作業によらないで沢山の画像ファイルに対し一括して適用できるようになり大変な省力化になる。しかし残念ながらこの関数の記述では、複数のJPGファイルに対し繰り返し適用しようとすると2度目以降はうまく動作しないという不都合が発生してしまう。つまりこの関数では、繰り返し同じ機能を発揮してくれないのである。
 プログラミングの世界では、こういう状況を「reusableでない」と言う。reusableでない関数は、全くとは言わないまでもほとんど利用価値がない。
【注】(*1)これまで、GetJPGsize.pl というファイル名にしてきたが、関数名とファイル名を区別するため、以後ファイル名は AnalizeJPG.pl とする。
 不都合が発生する原因をいろいろと追究してきたが、原因は未だに解明されていない。文字コードを扱うのが専門のPerlという言語で、無理やり処理しているのが原因なのかもしれない。Perlでこの種のデータをただやみくもに読み込んだりすると、データの一部が壊される可能性があるからである。たとえばデータの中に改行コードがあると、Perl処理系は実行環境に合わせて変換するのが普通である。

 Perl では改行は '\n' と表現されるので,一文字から成るように見えるが、実行環境によっては1文字(CR)の場合、あるいは2文字(CR+LF)の場合と違いがある。それぞれに実行環境に合うよう自動的に置き換えられる。したがってただ無暗に読み込んだりすると、たまたま制御コードと同じパターンのデータがあれば、誤って変換され結果としてデータが壊されてしまうことになる。そういうことにならない様、ここではライブラリ関数の read ではなく sysread の方を用いることにした。更に、データ構造をしっかりと確認し、画像を構成する本来のデータ部分はできるだけ触れない(読まない)ようにすることにした。

▼JPGファイルの構造を学び直す
 ここで、JPGファイルの構造をしっかりと学び直すことにした。
 インターネット上で「JPGファイルの構造」とか「Exifファイルフォーマット」を指定して検索すれば有益な情報が得られる。

 現時点で公表されている資料では、Exifファイルフォーマットのバージョンは v2.1 と記されているものが最新のようである。残念ながら私の使っているカメラでは、Exifファイルフォーマットはv1.1であるから古い仕様であることが分かった。

 素人カメラマンの私にとって、ファイルフォーマットが古いからと言ってそう簡単にカメラを買い替える訳にはいかない。したがってここでの説明は最新の仕様に沿うものではないので、もしかすると互換性がない部分があるかもしれない。以下は考え方だけを理解してもらえばよいので簡単な説明で済ますことにしよう。

▼解剖と解析
 方針として、先ず全体の「解剖」(JPGvivisect.pm で処理)を行って、その後で個々に「解析」(AnatomyJPG.pl で処理)するという手順を取ることにした。ただし、呼び出しの手順は AnatomyJPG.pl から JPGvivisect.pm を呼び出すようになっている。
(図1:処理の手順)

 JPGファイルでは、本来の画像データの前に情報セグメントが複数個置かれている。
(図2:JPGファイルの構造)

 この「情報セグメント部」に属する「各情報セグメント」の「種類」と「位置関係」を明確にする必要がある。つまり解剖して各セグメント(内臓)の種類と位置と寸法が分かるようにする。そして全体の骨格が明確になった後で、初めて個々のセグメントの中を解析することにする。

▼解剖プログラム(JPGvivisect.pm)
 解剖プログラムは最も基本的なプログラムなのでパッケージ化し、ライブラリとして使えるようにしてある。

 この「解剖結果」を記憶する場所として %HashTBL という名のグローバルなハッシュ変数を用意する。グローバル変数なので他のモジュールからもアクセスできるようになっている。

 各セグメントは先頭にはマーカー(2バイト)があり、次に長さ情報(2バイト)が置かれている。この値がマーカーに続く情報部分(セグメントパラメータ部)の長さである。つまりこの2バイトの長さを置く場所も情報部分に含まれる。
(図3:セグメントの構造)

 %HashTBLというハッシュ変数をどのように使うかを説明しよう。
 ハッシュ変数というのは、<キー>と<値>を対にして記憶するものであるが、%HashTBLでは<キー>として JPGファイルのセグメント情報を示す「マーカー」を利用する。<値>としては、そのマーカーの<位置情報>を記憶する。

(表:代表的なマーカーの一覧)
Merker
Code
SOI(Start of Image) FFD8
APP0(JFIF) FFE0
APP1(Exif) FFE1
APP1(Exif) FFE1
DQT(Define Quantization Table)FFDB
DQT(Define Quantization Table)FFDB
SOF0(Start Of Frame 0) FFC0
DHT(Define Huffman Table) FFC4
DHT(Define Huffman Table) FFC4
DHT(Define Huffman Table) FFC4
DHT(Define Huffman Table) FFC4
SOS(Start Of Scan) FFDA
EOI(End Of Image) FFD9

 ただし、同じマーカーが繰り返し登録される可能性もあるので、<位置情報>には登録個数とそれぞれの位置情報を保存できるようにする。そのため、値はリスト形式にしてある。
  ( [0], [1], [2], [3], .... )
[0]に登録個数、[1]以降に位置情報が置かれる。  最初に

  $HashTBL{ <キー> }[0];

とするとマーカーが%HashTBLに登録され、値を置く位置の[0]はまだ空であるがPerlでは空はゼロと解釈されるので、

  $i = ++$HashTBL{ <キー> }[0];

と書いておけば [0]の値が 1 に、$i にも 1 が代入される。

次の行の

  $HashTBL{ <キー> }[$i] = <位置情報>;

で<キー>に対応する<位置情報>が[$i]つまり[1]の位置に保存される。
以下同様にして、登録のたびに[0]に個数が
それぞれの位置情報が[1],[2],[3],[4],...
に保存されていく。

▼解析プログラム(AnatomyJPG.pl)
 解析段階では、この解剖段階で得られた情報を使って一般の利用者(カメラ愛好家)が必要とするであろう各種情報を得られるようにする。得られた「解析結果」は %DataTBL という名の、これもグローバルなハッシュ変数上に保存し共用されるようにする。
 解析結果を記憶したければ、適当に識別名を付けて値を代入すればよい。

 $DataTBL{'File Name'} = "$fileString";

 例えば、SOF0('FFC0')マーカーに属するデータを得たければ

 $pos =$HashTBL{'FFC0'}[1];
 
として'FFC0'マーカーの位置情報を取り出し getByte関数を使ってセグメントパラメータ部から値を取り出す。

 $H = getByte($pos+5,2);
 $W = getByte($pos+7,2);


 これらを $DataTBLに保存するときは、数値にコンマを挿入(insCom関数)したり、数値の単位も合わせて記録しておくと利用するときに便利である。

 $DataTBL{'横幅'}=insCom($W)." Pixel\n";
 $DataTBL{'高さ'}=insCom($H)." Pixel\n";

 詳しい技法については、

  解析プログラム(AnatomyJPG.pl)
や
  解剖プログラム(JPGvivisect.pm)

を参照してください。

2017年7月20日木曜日

新【悪魔の辞典】(8) 総理の友人

●総理の友人:
(1)こまったちゃん

(2)自分の言いたいことだけ言って、相手の話は聞かず、質問には答えないで逆に個人攻撃で返す、そういう性格の持ち主と(例外的に話ができ)頼み事さえも聞いてもらえる人

(3)「総理夫人の友人」とほぼ同義

(4)罪を犯しても訴えられることはない、と当初は信じていられる人

(5)中には、借りた金百万円を返そうとしても受け取ってもらえないという幸運な人もいる


【注】「総理の友人」に相応しい“意味” を募集したところ、残念ながら応募はありませんでした。多分、官邸の方から何らかの圧力があったのではないかと思います。


2017年6月30日金曜日

マンホールの蓋が新しくなった

 家の周辺道路で、最近マンホールの蓋が新しいものに交換されつつある。今日、いよいよ我が家の前の道路上でも、その交換作業が始まったようである。

  私は直前になって、記念のため古い蓋の写真を撮っておきたくなった。家の前ではもう作業中なので、隣の家の前にあるまだ交換作業に取り掛かっていない場所にあるマンホールの写真を撮ることにした。


 すると作業主任らしき人が近づいてきて挨拶をしてくれた。いい機会だと思い、いろいろ聞いてみた。

 新しいマンホールの蓋の文様を尋ねたら「普通のものですよ」とのこと。あの「ツツジ」と「ツバキ」の川崎市の新しいバージョンを期待していたのでちょっとがっかりしたが、途中用事があり外出から帰宅すると新しいものに交換されていた。見ると、やはり「ツツジ」と「ツバキ」の新しいバージョンだった。作業主任は「カラー版ではない普通のもの」という意味で言ったらしい。



 中央にある市の花「ツツジ」を、市章と7つの市の木「ツバキ」が囲んでいる。ツバキの数は7つの区を表しているらしい。花には7つの穴があるので雨水用マンホールであることが分かる。下部に「傘のマーク」と「16-M01」の文字が入っている。

 その下にある白いものがカギらしい。古いマンホールは自由に開けられたが、これは特別な工具がないと開けないようになっている。テロ行為に利用されないよう配慮されている。大雨でマンホールの蓋が飛ぶ事故がよくあるが、そういう心配はなくなったことになる。


 最近は、地域ごとに斬新なデザインのマンホールを作り互いに競い合っている。その写真を蒐集しているマニアもいるようだ。以下に示すようにカラー版にもいろいろなバージョンがある。私も蒐集してみようかな、とふと思った。


2017年6月24日土曜日

新幹線を利用して

── 自動改札・券売機と格闘する

 名古屋での法事に出席するため新幹線で日帰り往復することになった。恥ずかしながら、私にとっては久しぶりの新幹線利用だったので自動改札や券売機と格闘することになった。その顛末を記しておこうと思う。


▼乗車ルート
 私は、新幹線で東京から関西方面に行くときは何時も新横浜駅から乗ることにしている。これが一番早くて運賃も安い。先ず、家の近くのJR南武線の駅から乗車し、武蔵小杉経由で東横線に乗り換える。そして菊名駅からはJR横浜線で1駅の新横浜駅で降り新幹線に乗車するというコースである。


 会社勤めをしていた頃は、先ず菊名までの乗車切符を買い、新横浜で乗り越し精算をしてから切符売り場の窓口で駅務員から直接新幹線切符を購入していた。手際よくやればこれで十分に間に合っていたのである。


▼切符とICカード

 その後、技術が進み切符に代わってICカードを使う時代となった。しかし頑固な私めは、それでもずっと切符を買うことに拘ってきたのである。
 消費税が上がり1円単位で運賃に付加されるようになったとき、何故か切符購入者だけは10円の単位まで切り上げられるという差別を受けることになった。その結果、ICカード利用者よりも損をする立場になってしまったのだ。頑固な私めもさすがにこの差別には耐えられず、諦めてICカード利用者へと寝返ることになった。


 さて、話が本論からそれてしまったように思われるかもしれないが、実はこのICカードと自動改札の相性の問題について私は触れたかったのである。切符を利用する場合は問題ないのだが、ICカードでこの「私の新幹線乗車ルート」を利用するとき、果たしてうまく通過できるかどうか少し心配になってきたのである。


▼自動改札という関所
 周知の通り、ICカードでは自動改札から入場したときに料金計算がスタートするが、未払い状態のまま乗車していることになる。降車駅の自動改札から退場するときに初めて料金が確定し支払い完了となる。乗り継ぎで利用する自動改札という 関所 でも同様に処理が行われている。途中の関所をいいかげんに通過することは許されない。


 一方、切符の場合は最初から前払いされているから、今までは途中の関所の通過がそれほど厳密にチェックされることはなかった。どんなルートを取ろうとも、最終的に降車駅で切符を見せれば不足分は精算されるから何となく心理的には楽であった(こちらは別に不正行為をはたらいている訳ではないのだが)。新たなICカード利用者にとって、乗り継ぎで関所を通過する際は未払い状態のチェックが必要になるから切符の場合よりも緊張を強いられるのは避けられない。自分の行為に何かミスがないか、常に注意していなければならなくなったのである。


▼不正行為の扱い

 実は、私は企業での在職中、自分の守備範囲の中に自動改札システムのソフトウェア開発を担当するグループを(一時的だが)抱えていた時期があった。私は技術的な詳しいことは知らないが、耳学問でいろいろな知識を得ていた。
 自動改札では、どんな種類の不正行為も必ず発見することができるという。ただ、不正を発見しても常にそれを指摘して乗客を捕まえる訳ではない。不正行為の回数がある程度の限界を超えたとき、初めて駅員が後ろから「もしもし」と肩を叩きながら呼び止めて事情を聴くことになるのだそうである。


 部下がそういう仕事をしていると、上司である私も自動改札を通過するときは常に「模範的な乗客」を演じる必要があった。「不正行為など以ての外」と心して通るようになったのである(もちろん普段でも不正行為はしていませんけどね)。自動改札の周辺で挙動不審者とみなされることも避けなければならない。そういう訳で、私にとって自動改札とは「模範的な態度」で、流れに乗って「素早く通り抜ける」べき場所だったのである。


▼切符を予約
 出発当日は朝の早い時間に出掛けるので、ラッシュアワーの混雑に不慣れな年寄りが新横浜の駅で新幹線切符を購入するというのは少し無理がある。そう考えて安全のため前日に切符を予約することにした。


 前日の午前中に隣り駅の「みどりの窓口」へ行くと、既に長い行列ができていて13名ほどの人達が並んでいた。やれやれと思ったがこれは私も並ぶしかない。しばらくすると、若い駅務員が回ってきて列に並んでいる人達に順に行き先を聞いてはメモしてくれている。手続きを迅速に済ませるためなのであろう。私も行き先を伝えると、ルート間に私鉄が入るので1枚の切符にはできないと言う。菊名から名古屋までの切符だけになります。それなら、あちらの自動券売機で簡単に買えますよ、と外にある切符売り場の方を指さすのであった。


▼自動券売機に挑戦
 そう言われると「できません」とは言えないので、私は外に出てタッチパネル式の券売機に挑戦してみることにした。


 やってみて驚いた。何でも指定できるようになっているではないか(当たり前だが)。色々な選択肢があるので今までは敬遠し、人の居る窓口で口頭で自分の意思を伝えていたのだが何でも指定できるようだ。座席指定では座る位置まで含めてすべて自分で指定できるようになっていた。今までは、回数券とか、観光地で利用すると便利なフリーキップとか、割引で得することが分かっているものでなければ決して手を出さなかった機器が、かなり身近なものに感じられるようになった。


 こうして無事に名古屋までの片道切符を手に入れることができた。ただ、支払いを「クレジットカードで」と指定したところ、パスワード入力を求める画面があの大きなタッチパネル画面に大写しになったときは驚いた。多くの人々が後ろから見ている前で、私は自分の「極秘!のパスワード」を入力しなければならなかった。初めての経験であった。


▼関所を通る(往路)
 さて、いよいよ当日になった。菊名までは順調であった。私が心配していたのは、東横線の菊名駅から横浜線へ通じる自動改札がどうなっているか、ということだった。ICカードと新幹線切符をどう扱えばよいのか分からなかったのである。表示を確かめながら無事に横浜線に通じる専用の自動改札の場所を見つけた。


 何やらアナウンスされているようだ。改札機へ投入する順番を教えてくれているらしい。日本語の堪能な!私めは「最初に切符を」、「次にカードを」と言っていることを素早く察知したのである。自分の予想とは逆だったが、そんなことは先刻承知と何食わぬ顔をして「先ず切符の投入」、「次にカードの接触」の順に対応することにより無事に関所の第一関門を通過することに成功したのである。


 人の流れに乗って素早く自動改札を通過しながら私は考えていた。なるほど、こうすればよいのか。帰りの関門通過も同じ要領でやればよいのだな、と。


▼関所を通る(帰路)
 法事も無事に終り、3時過ぎに帰路についた。
 名古屋駅に戻り新幹線の切符売り場で再びタッチパネル式の券売機の前に立った。今度は「名古屋から新横浜、更に横浜市内(つまり菊名)まで」という指示をして座席指定の切符を無事に手に入れることができた。いいぞ、この調子だ。こういうことをスマートにできなくなると、やがてボケが始まるのだろうなどと考えていた。


 新横浜駅には5時過ぎに到着し無事に下車。横浜線で再び菊名駅の東横線に乗り換えるための自動改札という関門前にやってきた。帰宅する人々で改札前は混んでいるが、今度は、今朝学んだばかりのことを応用すればよいのだと気楽に考えていたのである。


 先ず自動改札に新幹線切符を挿入した。すると何んとしたことか! ゲートが音を立てて強制的に閉じられてしまった!! そして切符の排出口から、私が投入したばかりの新幹線切符と、更に何故か普通の乗車切符(140円分)が1枚添えられて出て来たではないか!!! 何だ、これは?


 私は大いに動揺してしまった。排出されたばかりの新幹線切符には赤で何か印刷されているように見えた。しかし自動改札という関所は常に 素早く通り抜ける を信条としている私めは、それを確認する余裕はなく排出された切符類を掴み取ると素早く自動改札の流れから離れることにした。そして5メートル程横にある駅務員がいる窓口へ持っていくことにした。


 駅務員は心得たもので、私が何も言わないうちから素早く新幹線切符だけを回収し、140円の乗車切符の方を手近な自動改札機の挿入口に入れて、私に向かってさあ通ってくださいと合図したのである。私は、ここでICカードをタッチすればよいのですね、と確認してから通り抜けたのである。


▼私の推測
 しかし分からない。何がどう処理されたのか理解できないままであった。以後、家に着くまでの間今の出来事をどう解釈すればよいのか考え続けることになってしまった。あのとき新幹線切符に赤で何か書いてあったような気がするのだが確かではない。しっかりと確認すればよかったと思ったがもう後の祭り。後は推測するしかない。


 多分、こういうことではないかと思う。
 JR側はこの関門で新幹線切符を回収しなければならない。しかし乗客(私)に何か菊名駅通過の証明書となるものを持たせる必要がある。乗客が東横線に乗って行くのなら、到着駅で清算できるように菊名駅通過を証明できる140円切符(使用済み!)が必要になる。あるいは、東横線に乗らずにそのまま菊名駅の改札から外に出ることもできる。そのための証明書だったのではないか。


 もしこの推測が正しいとすれば、私が最初に新幹線切符を挿入したときそのまま回収し、排出口からは証明書として140円切符を排出すればよいのではないか? 何故そうしなかったのか。分からない。


 多分、その小さな切符の排出に気が付かずそのまま証明書なしで通過する乗客が出るのを恐れたのかもしれない。つまり乗客を信頼していないのであろう。どんな乗客にも対処法がすぐ分かるようなシステムであって欲しいものだ。


 そう言えば、あのときの140円切符はどうなったのだろう。全く忘れてしまっていた。私はICカードを持っていたから不用だったが、・・・。そうか、こういう不注意な乗客が多いことを考慮して作られたシステムだったのかもしれない。


 いずれにしても、これから東京五輪・八輪(ゴリン・パリン)のために来日するであろう諸外国の人々に容易に理解できるようなシステムであってほしいと思う。それが本当の「お・も・て・な・し」というものであろう。■

2017年5月13日土曜日

高齢者

── 電車で席を譲られる

 人間誰しも、何時かは経験しなければならないと覚悟を決めていることがある。それもあまり歓迎したくない事である場合が多い。そういう事態が突然我が身に訪れた。
 電車に乗っていて席を譲られることを始めて経験したのである。もちろん、これまでにも席を譲られたことはある。しかし明らかに高齢者であるという理由で譲られたことはなかったと思う。私の年齢からして何時かはそういう事態になることは当然予想されていた。それが現実のものになっただけのことで、そんなことは常に“突然”起きるに決まっていると言われるかもしれない。しかし私にとっては“突然に訪れた”と表現したくなるくらいショッキングな出来事だったのである。多分、心底では“予想したくない”出来事だったからであろう。

 そのとき私は、何時もの通り急行に乗って3つ目の駅で降りる積りだったから乗車時間は10分も掛からない。少し混んでいたので入り口から奥の方へと移動した。私が立った位置の前の席では女学生が熟睡している。その右側の席では30歳代と思われる外人の若者がイヤホーンで熱心に音楽を聴いている様子。私は吊革につかまりながら車窓から外を眺めることにした。

 電車は2つ目の駅を過ぎ、次は私の降りる駅になるがこの区間は急行が止まらない駅が続くので比較的長い区間である。突然、右の席の若者が「はっ!」と言うような声を発し突然立ち上がった。乗り越したことに気が付いたという風に見えたが「どうぞ」と言う声がした。私の右側に立っていた女性に席を譲るのだなと思ったが、そうではなく彼の視線は私に向いており私に席を譲りたいと言っていることが分かった。その瞬間、私はかなり動揺した。沢山の乗客が居る中で一番の高齢者と指摘されたような気がしたのである。「いや、結構です」といったんは断ったが、尚も勧められたのでその好意を無にするような失礼があってはいけないと思い「ありがとうございます」と言って座ることにした。すると若者は「ドウイタシマシテ」と返してきた。

 私は、海外から来た留学生が礼儀正しい日本人の中で生活するためのマナーをしっかりと学習しそれを実践している場面を(勝手に)想像していた。「次、降りますから」などと言って断り、折角の好意を無にしている人をよく見かけていたので、ここは日本人として彼の好意をしっかりと受け止めてあげなくてはいけないと思ったのである。

 実は「電車で席を譲る」という行為については以前から考えていたことがあった。以前教師をしていた頃、「情報倫理」の授業で毎年学生に課すレポートのテーマとして「自分の倫理観がどの程度のものか、自身の経験に照らして記述せよ」という課題を出していたのである。そして“自身の経験に照らして”と“手書き”でA4用紙一枚にまとめるという2つの条件を付けることにしていた。こうすると、学生が得意とする「コピペ」という行為がし難くなるのを経験的に知っていたからである。「CDの不正コピー」とか「ソフトウェアの不正使用」とか、学生の立場でも法に触れるか触れないかすれすれのテーマはいくらでもある。そういうテーマを取り上げてくれることを期待して課題設定しているのだが、案に相違して学生たちは「倫理」の意味を拡大解釈し「道徳」の分野に属するテーマばかりを取り上げてお茶を濁そうとする者が多かった。その際に、彼らが取り上げるテーマが横断歩道での「信号無視」と、この「電車で席を譲る」だったのである。

 私は、若者たちのそういうレポートをいやと言う程沢山読まされてきているので、最近の若者たちの電車で席を譲る行為についての考え方を知悉していた。要するに彼らは電車内で席を譲ることができないのである。「譲ろうか、止めようか」で迷う。迷ったら先ず実行されない。この外人の若者は直ぐ決断したのに、日本の若者はそれがなかなかできないのはなぜか。なぜ迷うのか、なぜ躊躇するのかというと、自分が周りの人から「いい子ちゃん」を演じていると思われたくないからなのだと言う。つまり「いい子ぶりっこ」と思われたくないのだそうである。周りの人の思惑ばかり気にしている若者が多い。「こうすべきだ」と思ったら断固実行する人が少ない。まず「周りがどう見るか」を気にしてしまうらしい。

 高齢者や身障者あるいは妊婦らしき人を見つけると、高齢者の私でも席を譲ろうとする。そのときのコツは「譲ろうか」という考えが頭に浮かんだら、迷わず立ち上がることだと思ってそれを実践してきた。あの若者も譲ろうと判断して即座に立ち上がったように見えた。日本の若者たちもこれを見習うべきであろう。

 ただ、あの若者の判断の内、相手が高齢者かどうか判断する能力だけはもう少し磨きをかける必要があるのではないかと思う。日本では高齢者かどうかの判断は大変に難しい。何しろ日本では、経済状況の変化によって「高齢者」の定義が恣意的に変わってしまう可能性がある珍しい国だからである。
 私自身も、高齢者とみなされないように精々努力することにしよう。

 私は、譲られた席に座ったまま尚も考えていた。席を譲ったのに直ぐ立ち上がり電車を降りてしまったのでは彼もがっかりするかもしれない。この区間が少し長かったことで少しは救われるかな、等と考えている内に電車はようやく駅に滑り込み、ホームに到着しようとしていた。丁度良い間合いだ。私は席を立つ際にその若者に向かって「ありがとうございました」と声を掛けてから電車を降りたのであった。私も、彼も(多分)お互いに少し良い気分になれたような気がした出来事であった。■

2017年4月30日日曜日

桶屋が儲かる (1999-05-01 掲示の再録です)

・1999-05-01 社内情報誌に掲載
・1999-11-15 個人ホームページ(Knuhsの書斎)に掲載
・2017-05-01 一部手直ししてブログ(ドッと混む・Knuhsの書斎)に掲載


── デバッグのやり方

 春一番の吹く季節がやってきた。
 寒い冬が過ぎて春が来るのだから、誰もが心浮き立つような気分になるはずだが、私にとっては一番耐えがたい季節の到来である。それは私が花粉アレルギー症だからである。杉花粉に悩まされているのは私だけではなかろう。毎年の春の行事の一つだと考えてしまえばそれはそれであきらめもつく。薬をのんだりマスクをするなりして自己防衛すれば、杉花粉くらいは何とか乗り切ることもできる。

 しかし五月頃に起こるアレルギー症状には何とも耐えられないものがある。私の場合のアレルゲンは“オオアワガエリ”と呼ばれる道端のどこにでもある雑草なのだ。五月頃になるともう戸外でマスクなどしている人はいないから、自分だけマスクをするのは何となくはばかられて、どうしてもやせ我慢をしてしまう。その結果、呼吸困難になって入院するはめになった年もあるほどなのだ。

 ところで、春の風が吹く季節になると私はいつもある言葉を思い出す。それは「風が吹けば桶屋が儲かる」というあれである。この言葉の意味するところは「思わぬ結果が生じる」あるいは「あてにならぬ期待をする」ことのたとえであると言われている。だが私は、これは我々が携わるソフトウェア開発という仕事、とりわけプログラミングのデバッグ作業と密接に関係している言葉のように思えてならないのである。

 そもそも、なぜに桶屋が儲かったのかというところから問題を掘り下げてみましょう。それはもちろん桶屋の商売が繁盛したからなんです。

 なぜ繁盛したんですか。

桶を買う人が増えたからでしょうね。

 なぜ増えたんですか。

無論、桶がだめになったから買い替えが必要になったんですよ。

 じゃ、なぜ桶がだめになったのか調べないといけませんね。

それは、実は鼠が桶をかじったからであることが分かっています。

 なるほど。じゃ、なぜ鼠が桶をかじったりしたのでしょうか。

それはですね、鼠が異常に増えたからなんです。

 あぁ、なるほどなるほど、そういうことですか。

 感心していてもはじまらない。今度は鼠がなぜ異常に増えたのか、その理由を調べなければいけないですね。

そうです。いろいろ調べてみると鼠が増えた理由は、実は鼠を獲る猫が減ったのが直接の原因であることが分かってきたんです。

 ほ~、それでは、今度はなぜ猫が減ったのかを追求する必要が出てきましたね。

そうなんです。ところが、意外なことにそれは猫を捕獲する人が増えたからだということが分かってきたんですよ。

 へぇ~、そいつは驚いた。なぜに猫を捕獲する人がそんなに増えたんですか。

それそれ、そこが一番調査の難しかったところなんです。実は猫の皮なんですよ、問題は。三味線に張る猫の皮が大量に必要になったんです。

 何と!三味線ねぇ、よくそこまで分かりましたねぇ~。なるほど、なるほど。
 それでは、きっと三味線が大量に売れたんでしょう。

そう、そうなんです。実は眼に障害のある人が増えたので、その結果三味線をひく人が増えたといわれています。

 どうも、昔の話なので現代では到底理解できないことですね。

 それで分かりましたよ、なぜ眼に障害のある人が増えたのか。多分風が吹いて砂ぼこりがまったんでしょう。その結果眼に障害のある人が増えたということでしょう?

ご明察! ちょっと論理に飛躍がありますがね。実はそのとおりなんですよ。

 それでやっと分かりましたよ。桶屋が儲かった原因は、風が吹いたことが本当の理由だったんですね。

 ‥‥という訳である。

 プログラム作りのテスト段階で不具合が発生した場合、一般にその原因の究明は大変に難しい(もちろんプログラムの程度にもよるが)。多くのプログラマは、日夜“デバッグ”と呼ばれる困難で孤独な作業に取り組んでいる。そういったデバッグ作業では、不具合の直接の原因Aを見つけてもそれで問題が解決する訳ではない。その直接の原因Aが予想外の現象であるならば、今度は再びそれを引き起こした原因Bを追求しなければならないのである。そして原因Bが見つかったら、今度は(多分また)原因Cを捜すことになるであろう。そのようにして原因D,E,F,‥‥を捜し続けるのである。最終的に原因X(それ以上はさかのぼるべき特別な理由がないもの。大抵は設計のし忘れなど)を見つけるまで。

 つまり、桶屋が儲かったという事象から始めて、風が吹いたという原因にまで逆に(1点の飛躍もなく)一つ一つたどっていくという、いわゆる“推理作業”を行わねばならぬのである。そして、風が吹いたという最終的な原因Xを捜し当てたら、今度は風Xから桶Aに向かってもう一度たどっていく。そして不具合のすべての兆候が、それで完璧に説明がついて初めて(デバッグ作業では特にこれが重要なのである!)その障害の原因が完全に究明されたと断ずることができるのである。

 もちろん、その障害を修復するにはまた別の努力が必要であることは論をまたない。つまり風が吹かないようにするか、あるいは風が吹いても砂ぼこりがたたないようにするか、とにかく何らかの対策が別途立てられなければならない。プログラマとは誠に難儀な商売ではある。

 現在のようにコンピュータ資源が十分でなかった時代には、自分に割り振られたコンピュータ使用時間が来るまで(それも僅かな時間しか割り振られないのだが)机上で上記のような推理を働かせたデバッグ作業を繰り返したものである(これを机上デバッグと称する)。そして時間が来ると、その限られた時間内の実機テストで確認するという手順になっていた。机上デバッグが不十分だと必ず実機テストに失敗し、また出直しとなってコンピュータ時間の確保から始めねばならぬのである。

 最近のプログラマは、コンピュータ資源を豊富に与えられているので何時でも実機テストができる。その結果、十分な推理作業を行わずに絨毯爆撃でいろいろと試しては結果を見るというデバッグ姿勢を取りがちである。桶屋が儲かったのは、多分雨が多かったためではないか、あるいはエルニーニョのせいではないか、‥‥などといろいろとやってみるのである。これだとコンピュータ使用時間がいたずらに増え、結局能率が悪くなってしまう(*)。
【注】(*) もっとも、そうやって徹夜をしているプログラマの方が管理者の目には熱心に働いているように見えるのだからソフトウェア稼業というものは実に難しいものである。
絨毯爆撃で運良く解決したように見えても、別のケースで再び問題が顕在化するかもしれない。根本的な解決をはかるには、やはり完全な推理作業に取り組むべきではなかろうか。豊富なコンピュータ資源は、推理作業を助けるデータの収集にこそ向けられるべきであろう。そしてピンポイント爆撃で一発で虫を退治したいものである。

 そういう完璧な推理作業を繰返してプログラマとしての経験を積んで行くと、いつか「桶屋が儲かった」ら即座に「風が吹いた」に違いないとピンとくるようになるのである。こういったベテランの勘は大事にすべきであろう。しかし経験を積んでいない者の勘は、単なる“カン”であって信用するに足らない。

 気象の世界では「風が吹けば桶屋が儲かる」に相当する言葉は「東京で一匹の蝶が羽ばたけば、一ヶ月後にニューヨークに雨が降る」というのだそうである。私は持ち前の好奇心から、どうして東京からニューヨークまでつながっているのか、その流れを追ってみたくなった。そこで、博識をうたわれているお天気キャスターの森田正光氏にTBSラジオ局を通じて質問のメールを送ってみた。しかし数ヶ月過ぎても何の回答も得られない。彼にも分からぬことがあるのであろう(しかし返信なしは気に入らん)。私はこの問題の解明作業を今後も続けようと思っている。ご存知の方は是非ご教示いただきたい。■
【追記】
 この拙文に対しては多くの読者から反響があった。私信なのでそのまま掲示することはできないが、「東京で一匹の蝶が羽ばたけば、一ヶ月後にニューヨークに雨が降る」(これを、一般には「バタフライ効果」というのだが)について、「北京で今日蝶が羽を動かして空気をそよがせたとすると、来月ニューヨークでの嵐の生じ方に変化がおこる」ではないかという指摘があったことだけは報告しておきたい。カオスの話では必ずと言っていいほど引き合いに出される話なのだそうである。しかし、その間のつながりがどうなっているのかは、相変わらず分かっていない。
【追記】2008-5-20
 アメリカのマサチューセッツ工科大学名誉教授のエドワード・ローレンツは、60年代の初めに天候の変化をコンピュータで再現する実験を繰り返していた。あるとき、“0.50612”と打ち込むべきところを、丸め(四捨五入)て“0.506”という数字を使ったところ打ち出されたグラフは数字を丸めなかったときとは大きく異なるものとなった。半端な数を切り捨てるかどうか。それは小さなチョウが舞うか止まるかの違いに似ている。チョウの羽ばたきが地球規模の気象を左右することもある。そんな「バタフライ効果」という言葉が広まったのはこの体験がきっかけであったという。この効果は、物事が複雑に揺れ動く「カオス」と呼ぶ現象のなかで表れる。自然界はそんな複雑さに満ちている。(朝日新聞の記事から引用)

2017年4月29日土曜日

アナログ写真の思い出


── アナログ写真の焼き付けと引き伸ばし
 
 デジタルカメラの普及にともない、写真(静止画や動画)を撮ったりそれを表示して楽しんだりすることが昔と比べて格段に容易になった。今や写真画像を誰でも簡単に取り扱うことができる時代である。もし写真画像を今のように容易に扱えなかったら、SNSの世界もそれほど広くは普及しなかったのではないかと思う。

 アナログの時代からカメラを愛用してきた私は、カメラの技術進歩を目の当たりにしてきたので、この辺りでアナログ写真に関する思い出(ほとんど静止画ばかりであるが)をまとめておこうと思う。同時に、昔からやっていた写真撮影での前準備や後処理で苦労した際の詳細を忘れないよう記録しておきたいと思う。


▼使用したカメラ
 私がアナログ写真の撮影に使用したカメラを以下に列挙する。


(1)

(2)

(3)

(4)

(5)

(6)

(1)レオタックス(Leotax):主に学生時代に使用した。
(2)キャノン(Canon Pellix):企業人になってから購入。海外出張中に頻繁に使った。
(3)キャノン(Canon A-1):望遠レンズ、ストロボ付き
(4)ペンタックス(PENTAX ESPIO 120Mi):
(5)キャノン(Canon snappy 20):
(6)富士フィルム(EPION 100):NHKで講演した時のお礼として頂いた。薄謝協会とはよくぞ言ったもの。新しいタイプのカメラだったので使ったことはない。

 

取扱説明書類


▼写真撮影とその前準備
(1)フィルムを選ぶ
 どんな場所で何を撮影するかに依存して最適のフィルムを選択する必要があった。感度(ASA/ISO 100など)、解像度、サイズ(135..24/36枚撮り)などを考慮して選ぶ。私はパトローネ入り(フィルム・カートリッジ)の35mmフィルムを使っていた。

フィルム・カートリッジ
 
(2)カメラにフィルムを装着する
 昔のカメラは、フィルムを狭い隙間から差し込むようにして装着しなければならなかった。うまく装着できずに何度も苦い思いをしたものだ。


カメラの底部を開いてフィルムを装着する
 
フィルム端の片側を切ってリーダーとし、カメラの巻上げスプールのスロットに差し込む。フィルムを送るためのパーフォレーションの穴を所定の位置にしっかりと噛み合わせないと空回りしてしまう。それに気が付かずに蓋を閉じてしまうと撮影後に取り出そうとすると、何も写っていないだけでなく装着途中のフィルムが露光してしまうことになる。その瞬間にすべてがオシャカになってしまうのである。逆に、これをうまく装着できるようになると、リーダー部分が節約できて36枚撮りのフィルムでも37枚は撮影できるようになる。

(3)撮影中の迅速なフィルム交換
 フィルムを使い切ったら新しいフィルムと交換しなければならない。野外の撮影では、交換作業は明るい太陽光の元でやることを覚悟しなければならないから、撮り終わったフィルムを外し新しいフィルムと交換する作業を手際よく行う必要がある。これがスマートにできないと、フィルムの一部が露光してしまったり運が悪いと写真撮影の努力がすべて無駄になることもある。

(4)写真撮影:必ずレンズキャプを外す!
 うまく写真を撮るにはどうすればよいか、と聞かれたプロの写真家土門拳氏は「先ず、レンズキャップを外しなさい」と答えたという有名な話が残っている。これは名言であると言われていた。

 しかし最近のカメラ事情しか知らない人にとっては“何を馬鹿なことを”と思われるかもしれない。当時のカメラは、光の入射経路がファインダーとレンズは別系統だったのでキャップをつけたままでもシャッターが切れたのである。初心者の撮影ではそういう失敗が多かった(えっ? 私はそんな失敗しませんでしたよ、私は!)。

その他、以下のことに配慮する必要がある。
(5)写真撮影:絞りとシャッター速度を決める

(6)写真撮影:“焦点深度(*1)”という概念をよく理解した上で、焦点を合わせる最適の場所を決める(まだ自動焦点などという便利な機能はなかった)
【注】(*1)焦点深度とは、ピントが合っている位置から距離があってもピントがシャープに見える(つまりピントが合っているように見える)範囲を言う。一般に絞り値が大きいと深度も深くなる
(7)写真撮影:画面の構図をよく考える

(8)写真撮影:シャッターチャンスを逃さない(*2)
 こういった事項を常に頭に入れておかないと写真撮影はうまくいかないのだが、今では(8)だけ注意していれば何とか写真らしきものは撮れる。楽なものだ。
【注】(*2)デジタル画像での撮影では、シャッターチャンスを逃さないようにするのがすべてである。特に静止画を撮るのであれば構図などあまり気にしなくてよい(プロレベルの人は、この文章を読んで眼を剥いたりしないでください。私のような素人カメラマンレベルではこの程度で良かったのです)。
 デジタルカメラでは、解像度を高く設定しておけば、撮影後の処理で適当にトリミングすることにより結構良い写真が撮れるものである。
(9)カメラの関連部品、アクセサリー類を紛失しないよう管理する


▼撮影後の処理
(1)フィルムの現像(写真屋に依頼する)
 撮影済みのフィルムは、パトローネごと写真屋に渡すと、数日後にベタ焼き(いわゆるコンタクトプリント)と簡易なケースに収められたネガフィルムを受け取れる。このケースに撮影データ等を記録して保存する。


(2)選択してプリントする(これも写真屋に依頼する)
 ベタ焼きからプリントすべきものを選ぶ。
 ケースにサイズとプリントして欲しい枚数を記入(サービスサイズ等、縁あり/なし等を指定)して再度注文を出す。


(3)自分でプリントする場合
・焼き付けと引き伸ばし作業
 私は写真の焼き付けと引き伸ばしは、普段は写真屋に頼むことにしていた。しかし写真が大量になるとプリント代がばかにならない。大学時代の山登りや、夏季の合宿山行では大量の写真を撮るのでプリント代を節約するため自分で焼き付けと引き伸ばし作業をするようになった。しかし最大の理由は、自分でトリミングなど自在に行って大きな素晴らしい山岳写真を作りたかったのである。

 引き伸ばし機は少し高価だったので兄に買ってもらい、暗室はないので夜間家の風呂場で引き伸ばし作業をしたものである。大学の写真部の暗室を借りてやったこともあった(私は部員ではなかったが)。

・印画紙を選ぶ
 サイズと感度を決め、必要なものを用意する(まとめ買いをするため、神田によく買いに行ったものだ)。

 印画紙の号数は数字が大きくなるほどコントラストが高くなる。通常は3号か2号を使用していた。  引き伸ばし機にフィルムと印画紙を装着して露光する訳であるが、もはや細かい作業は思い出せない。概略、以下のようになる。

▼前準備
 暗室内は赤色灯の下で作業を行う。ネガをネガキャリアに挟んで引き伸ばし機に設定し、印画紙を置くイーゼルは引き伸ばし機の台上に置く。拡大されたネガの像のピントを合わせる。
▼露光
 像の大きさとピントが決まったら露光する。
▼現像
 露光が終わったら印画紙を現像液のバットに入れる。像が現れてくる。
▼停止
 現像が終わったら印画紙を取り出し停止液に移す。
▼定着
 停止が終わったら、停止液をよく切って定着液に入れる。
▼水洗
 定着が終わったら水洗用バットに移す。
▼乾燥
 水洗が終わったら乾燥させる。これで完了です。
 もはや細かい作業手順は思い出せない。ただ、露光時間を決めるのが一番難しかったことだけは覚えている。写真で一番難しいところは何かと聞かれたら、今でも私は迷わず「引き伸ばし時の露光時間の選び方」と答えるだろう。


▼自分で引き伸ばした作品
(1)大学時代の北アルプス山行の記録から



前穂高岳       唐沢岳       北穂高岳
 
(2)大学時代の北海道旅行の記録から



利尻島のベースキャンプ地
 


釣り(利尻の子供達と)

2017年4月10日月曜日

日本、凄いですね

━━ 忖度と斟酌(そんたく と しんしゃく)

 「日本、凄いですね」的なテレビ番組が盛んだが、この種の愛国心を煽る自画自賛的な番組には違和感を持つ人が多いのではないかと思う。私もその内の一人なのだが、何か作業をしながらテレビを見ている「ながら族」の立場からは結構興味深い番組の一つなのである。自分の関心事だけをチラ見すれば済むからである。

 日本の製品造りで使われている各種の技術やノウハウを惜しげもなく紹介してくれる番組だから、その方面に特別な関心のない素人の立場から見ていても興味深いものがある。私が特に興味深くチラ見しているところは、外国から招かれ製造現場で実地にノウハウ紹介を受けている外国人の様子である。「凄いですねぇ~」とか、「私の国では、そんなことはしていません」などと驚きの表情で「凄いですね」を連発する“凄いですね役”の人達のことである。

 外国語だから真意の程は分からないが、少なくとも翻訳された日本語ではそう言っている。番組作成者の意図通りに動いているのは明らかである。それを見ながら私は、彼らだって愛国心とやらを持ち合わせているだろうに、と思うのである。

 こういう時、一方的に褒めるのではなく「いや、私の国ではこうやっていますよ。その方が効率的ではないですか」などと反論したら、さぞかし面白い番組になるのではないかと思ってしまう。このような場で異を唱えるのは勇気のいることだが、そこから議論が始まれば技術進歩の種が生まれてくるのではないだろうか。

 しかし“凄いですね役”の外国人は専ら場の空気を読んで期待されたようにしか動かない。どこぞの総理夫人のように能天気に、思っていることをペラペラしゃべってくれたら・・・と思うのだが、決してそうはならない。

 しかしそれは当然のことだろう、彼らは旅費持ちで招かれて日本に来たのだ。当然ギャラを貰う約束になっているのだろう。そして東京見物をさせてもらい(多分)、日本が世界に誇る日本食を楽しむことだってできる(多分)。そうなれば、どうしたって招いてくれたテレビ局側の思いを忖度して行動することになる。英語に「忖度」という単語が無くても、彼らだって“相手の心情を推し量る”行為の方はよく分かっていて、自ら進んで実行しているのである。

 先日読んだ「天声人語」に書いてあったが、忖度とは、もともとは悪いたくらみを見抜くことを指したものだという。
『「他人心有らば (たにんこころあらば)
  予之を忖度す (われこれをそんたくす)」
 とは古代中国の詩集「詩経」の一節である。
 他の人に悪い心があれば私はこれを吟味するという
 意味だと、石川忠久著『新釈漢文大系』にある。
』

 もう一つ、忖度に関わる話を紹介しよう。
 昔、私が若かった頃のことだが、しばしばギックリ腰になり苦労していた。重い物を持ったのが原因であるが、仕事で身不相応な重責を背負わされたのも原因の一つではないかと今でも疑っている。かなり長い期間、三軒茶屋駅近くにある整体院に通っていた記憶がある。

 そこで治療を受けていると、若い整体師がマッサージをしながら私に話しかけてくる。それに応えるのは礼儀だと思い、普段無口な私もマッサージの痛さに耐えながらできるだけ親しく会話するようにしていた。ある時、その若い整体師が私に向かって、最近コンピュータを使っているんですよと言う。しかもC言語でプログラミングをしているらしい。最近の整体の専門学校では一般教養としてプログラミングの授業をしているのかな、などと考えながら聞いていた。

 すると彼は「C言語って、円記号を使うんですよねぇ~」と感に堪えたように言うのであった。“これは凄いことですね”と私に同意を求めているような雰囲気である。アメリカで作られたプログラム言語の仕様書の中で、こともあろうに極東(*1)のはずれにあるちっぽけな国の通貨記号が使われている。周知のようにC言語では円マーク(¥)が言語仕様の一部として出てくる。それを知って凄いですねぇ~ という気持ちになったのであろう。

【注】(*1)西欧の世界地図では、日本は東の端の極まるところに描かれている。そのため極東(Far East)と言うのであろう。
 私は「いゃ、そうじゃないんです」と彼の誤解を解いてあげようと一瞬思ったが止めた。そして、ただ「そうですよね」と答えるだけにした。

 この瞬間に私が何を考えたか整理してみると
 (1)マッサージが痛くて余裕がない
 (2)誤解を解くには長い話
(*2)が必要になる
 (3)説明してもどうせ理解してもらえない
 (4)相手が喜んでいるのだからその気持ちを尊重しよう

ということになる。
 そして私は、賢くも(4)に重きを置くことにしたのである。

【注】(*2)コードとしての円記号について知りたければ「円記号 技術者のエゴ」を参照してください(20年程前に書いたものですが)。
 後から考えると、このときの私の行為こそが今話題になっている「忖度」というものではないか。日本は凄い国なのだと思っている彼に向って、そうではないと縷々説明しても何の意味もない。このまま彼の気持ちを壊さないようにそっとしておいてあげるのが思いやりと言うものではないか、そう考えたのである。

 これが「忖度」なら、凄いですね役の外国人と似たようなものだと思うが、よく考えると異なるところもある。単に相手の心情を推し量るだけで何もしないのが「忖度」なのに対し、推し量った上でそれを汲み取って何か処置をしてあげると、それは「斟酌」してあげたことになる。
 彼らはギャラを貰って積極的に協力している。これはまさしく斟酌に違いない。逆に私は治療費を支払った上に相手の気持ちを推し量り何もしていない。これは凄い違いだ。

 現在、国会審議等で「忖度した」とか「いや、忖度していない」と言い争っているのは、本来の意味とかけ離れているのではないか。「解釈変更」したり「拡大解釈」を繰り返している。何かおかしいと思う。

 更に言うなら、某財務省や財務局の連中がやったことは斟酌である。某森友学園に対して物凄い斟酌をしてしまったことになる。某財務省の担当者は、事後その記録が残っていないと言う。記憶もないと言う。これは誰かを救うために言っているのは明らかだが、それは「斟酌」ではなく「証拠隠滅罪」,「公文書等毀棄罪」,「偽証罪」等に当たる行為であると言えよう。


 日本には、外国からの伝来文化や技術を取り入れて日本流に消化(日本化)させ、日本独特の文化や技術に仕立て上げる特技がある。中国から伝わったという「忖度」や「斟酌」という言葉も、日本に来てからいろいろな意味が付加され変更されてきたのだろう。こういったことは日本人が最も得意とするところである。


 最近はこの“日本化”の分野に政府も積極的に乗り出してきているようだ。彼らが最も得意とする手法は「閣議決定」したと称して「解釈変更」したり「拡大解釈」してしまうことだ。あるいは「歴史認識」さえも変更してしまう始末である。
 某官房長官などは記者会見の場で「問題ない!」の一言ですべてを正当化してしまう。あるいは「使用禁止!」とか「必要なし」と断定しそれ以上の言及を許さない。恐ろしいことである。「閣議決定」など我々には何の拘束力もないと思うのだが。

 日本って、本当に凄い国ですよね。■






2017年3月28日火曜日

JPEG画像から縦横のサイズを取り出す

── 昔プログラマのプログラミング奮戦記

 “昔プログラマ”を自認する私めは、今でもプログラミングに日々取り組んでいる。プログラムを作るのは楽しいことだけれど、同時に苦しいことでもある。特に最近は苦戦している。時々、現役のプログラマの方々に助言を頂きたいと思うこともある。しかし助言を得たければ「何のために、何をしているか」を詳しく説明しておく必要があろう。これが結構面倒なことなのだが、ダメ元で兎に角やってみようと思う。


▼アナログからデジタルの時代へ
 私はアナログの時代からカメラをやっていたが、最近はすっかりデジタルカメラのお世話になっている。使い易いので、もはやアナログカメラに戻る積りはない。そこで、アナログ時代のカメラの思い出をこの辺りで総括しておこうと思い立った(興味のある方は、別途「写真の思い出(まだ未完です!)」を参照してほしい)。

 
 この過程で、私はアナログ時代の撮影データの原画、つまりネガフィルムをしっかりと保存していることを思い出した。ネガフィルムのケースを大きな箱の中に放り込んでいただけなので、「結果的に保存されていた」というのが正確なところであろう。そのため管理状態はそれ程良くはない。

 一方、デジタルカメラで撮影した原画像はどうなっているか考えてみた。電子ファイル形式だと実体が見えないので、撮影した行為そのものの記憶が薄れるのと同程度の速さで行方不明となっている例が多い。

 これから原画像を探し出しネガフィルムと同じようにしっかりと保存したいのだが、かなり難しそうである。現状は、散逸して行方不明になっているのが大部分である。
 その原因は、まず第一に補助記憶装置の容量が限られているからである。しかし最近、私は大量の原画像を「ほぼ永久に保存する方法」を考え付いたので、その手法を利用すれば、これから撮影されるデータについては大丈夫であろうと思う(「情報の永久保存」参照)。

▼ビッグサムネイル
 かさばる容量の問題が解決したので、これからはどのように見やすくするかが唯一の関心事となる。従来からやっていた圧縮保存する方法は、画像を捜すとき手間がかかるのでできれば避けたい。

 これまでの方法は、撮影の度毎に得られる大量の画像の中から残したい画像だけを選び出し、それを適度な大きさに縮小したり一部をトリミングしたりして(その時点で)良いと判断した画像だけを残してきた。プリントすることもあったが、“サムネイル”(*1)と呼ばれる“小さな見本”の一覧を作るのが普通だった。

 原画像すべてを残すという発想は(少なくとも私の場合は)なかったように思う。もし全体を残していれば、後日特定の友人の顔写真が急に必要になったような場合でも、すぐに対応することができるはずである。

【注】(*1)サムネイル(thumbnail、サムネールとも書く)とは、画像を見易くするために縮小した見本のことである。親指(thumb)の爪(nail)くらい小さいということであろう。
小さな見本写真では鑑賞用には使えないが、容量の心配がなくなれば大きなサムネイルを作っても構わなくなるに違いない。これからは“ビッグサムネイル”と呼べるような大きな見本の一覧を作り、見易くすると同時に保存もできるものにしたらどうか。

 そういう発想から作られた私の自作「ビッグサムネイル」の事例を以下に示すことにする。これを原画像のまま保存すると約172MBの大容量が必要になるが、私のビッグサムネイル版では約27KB(単位は KB ですよ!)しか占めないので閲覧にも、保存にも適していることが分かってもらえると思う。

図(ビッグサムネイル版の例)
 (原画像:172MB; ビッグサムネイル版:27KB)

 このビッグサムネイル版を簡単に作成することができるようにといろいろ努力してきたのだが、特に、各画像が縦長か横長かを見極めて美しく並べなければならない。このビッグサムネイルの(11)と(12)の画像を見て欲しい。例示するため(11)番を縦長にトリミングして作ったものが(12)である。こういう見本が自動的にできれば便利であろうと考えた。

▼画像の縦横のサイズを知る
 そのためには、プログラム上で各画像の縦横のサイズ値を正確に知る必要がある。そういう方法が紹介されているサイトがないかウェッブ上を捜してみた。いろいろな方法が紹介されてはいるが、試してみたけれど何故かどれもうまく動作しない。gif とか png ファイルならうまくいくのだが、jpg ファイルはどれも難しいらしい。

 CPAN上でも捜してみたが、大きなプログラムのインストールが必要になるらしく、そんな大事になるのでは一般的な方法としては向いていないと思い使用を断念した。

 こうなれば、自分で作成するしかない! Perl か Javascript にしようか。それとも C/C++ かな? 今更 C など持ち出したくはないのだが・・・などと、自分がやりたい手法とそれを実現するための手段(プログラム言語)を比較検討する日々が続いた。

▼プログラマの心得
 システムプログラマという人種は、自分ですべて作ろうとする性癖を持っている(昔は!ですぞ。今は知りません)。他人の作ったプログラムなど信用できないのである。それを使って もししくじったら、他人の作ったプログラムをデバッグしなければならない破目に陥ることになる。それは避けたいと思うからであろう。

 私は、そういう人達にできるだけライブラリプログラムを使うよう指導する立場であったから、“自分で作ろう”などと考えるのは言行不一致であり本来はおかしいのである。

 一方、Perlプログラミングの世界では、Perl言語だけにこだわらずその作業に最適な言語があればそれを使えと教えている。その作業に向いている言語を採用し、それとPerl とを結び付けて、連携して使えるようにすればよいのである。

▼JPEGファイルの構造
 自分で作るには、先ずJPEGファイルの構造を知る必要がある。
 いろいろな情報を集めて勉強した結果、JPEGファイルには複数の形式があることが分かった。特に写真画像のファイル形式は、Exifフォーマットと呼ばれ規格化されている。Exif形式のJPEGファイルは情報の宝庫であることも分かった。撮影時の各種のデータが画像と一緒に記録されているのである。これらを利用できれば、一般利用者にとっても大変便利になるのではないかと思う。たとえば、撮影日時と編集日時を分けて表示できるようになる。

 ただ、各種の情報が置かれている場所は固定的に決まっている訳ではない。特定のヘッダーと呼ばれるマークから始まるフレームの中に置かれている。ある程度の場所は分かるが、それを間違いなく取り出せる保証はない。全体を読み込んで、先頭からマークを頼りに順に細かく解析していく以外に方法はないように思われた。

▼プログラム言語の選択
 先ずC言語で解析プログラムを作ることを考えた。最近はC言語など使っていないので気が重い。最後にCプログラムを作ったのは何時のことだったか。大学教師をしていた時代に作った自然消滅するプログラムかもしれない。

 昔「スパイ大作戦」(*2)というテレビドラマがあり、上司から指令を受ける場面が秀逸だった。録音テープで指示が出される。「例によって、君、もしくは君のメンバーが捕えられ、あるいは殺されても、当局は一切関知しないからその積りで。なおこのテープは自動的に消滅する。成功を祈る」とのメッセージが入っており、再生が終わると自然発火して消滅するのである。
【注】(*2)『スパイ大作戦』(原題: Mission: Impossible)は、1966年から1973年まで放送されたアメリカのテレビドラマシリーズ(毎回1時間枠で全171話)である。現在評判になっている劇場版「Mission: Impossible」と比較すると、ピーター・グレイブス(Peter Graves)主演のテレビ版の方が内容的には格段に面白かった。それを毎週楽しむことができたのだから幸せだった。最新鋭のコンピュータとして東芝のラップトップ・コンピュータ(T3100)が登場したこともある。
私は、この自然消滅するプログラムを作りたくてC言語で作ったのを覚えている。それが最後のCプログラムだった。特定の日の特定の時間帯にあらかじめ定めていた暗号キー(授業の最初に伝える)を入力しない限りただのごみファイルになってしまうのである。

 私が学生に出す課題の問題と解答とが密かに後輩の学生たちへと流されていることに気付いた。授業で使うプログラムは専用のプログラムから引き出せるようにしてあるのだが、それを授業中しか引き出せないように工夫したのである。それ以外の時間帯では動作しないようにした。

 ただ、このプログラムが後々まで面倒を引き起こしてくれた。最近のウイルス駆除ソフトは、コンピュータ内に作者不詳の不審なプログラムがあると、ウイルス発見! すわ一大事!とばかりに大騒ぎを始める。これが毎日のこととなれば無視する訳にもいかない。圧縮ファイルの中に置いてあっても見逃してはくれないのである。結局、私はこの歴史的な(?)Cプログラムをすべて自ら駆除することにしたのである。その時、もう二度とCプログラムは作るまいと思ったものだ。

▼Perlプログラム
 Cプログラムで、画像データをバイト単位でチビチビと読み込んで処理するのでは効率が悪いから、全体を一括して読み込んで処理することになるであろう。もしそうなら、全体を文字列と考えて1文字ずつ取り出してくるのだからPerlのプログラムで出来るのではないか。文字列処理のプログラムなら、やはり Perl だ!

 そこで作成したのが次のPerlプログラムである。

GetJPGsize.pl
#!/usr/local/bin/perl
# (c) 2017-3-19 : Coded by shun kinoshita/knuhs

my $directory = "C:/・・・・・・・・・"; 
# 適宜書き替える
my $jpgFile1 = "・・・.JPG"; 
# 適宜書き替える
my $jpgFile2 = "・・・.JPG"; 
# 適宜書き替える

     open(JPG, "$directory/$jpgFile1") || die "ファイルを開けません。: $!";
     
# 一括読み込み
     $/ = undef();  $_ = <JPG>;  $/ = '\n';
     close(JPG);
     
# データへのリファランスを渡す
     my ($W, $H) = GetJPGsize(\$_);
     
# 結果を出力する
     print "$jpgFile1";
     print "\nWidth:=$W, Height:=$H\n";


# 2度目以上はうまく動作しない。
#    open(JPEG,"$directory/$jpgFile2")|| die "ファイルを開けません。: $!";
#    $/ = undef();  $_ = <JPEG>;  $/ = '\n';
#    close(JPEG);
#    ($W, $H) = GetJPGsize(\$_);
#
#    print "$jpgFile2";
#    print "\nWidth:=$W, Height:=$H\n";

     exit;

#################################################
# (c) 2017-3-19 : Coded by shun kinoshita/knuhs
sub GetJPGsize
{
my $mkFFD8=0xFFD8; 
# SOI : Start Of Image
my $mkFFC0=0xFFC0; 
# SOF : Segment Of Frame Header

my ($pos, $W, $H, $count) = (0, 0, 0, 0);
my $jpgRef = shift @_;

# get(n)Byte
sub getByte
{  my $n = shift @_;
   return (unpack("n", substr($$jpgRef, $pos, $n)));
}

# start here
  if( getByte(2) != $mkFFD8 )
  { print "\nJPGファイルではありません!\n"; return(0, 0); };

  $pos = 2;
  while( $pos < 50000 )
  { next if ( getByte(2) != $mkFFC0 );
    $count++; $pos += 5; $H = getByte(2); $pos += 2; $W = getByte(2);
    last if ( $count == 2 );
  } continue { $pos++; }

  return ($W, $H);
}

図( Perlプログラム : GetJPGsize.pl )
▼問題点
 さて、前置きが長くなったが、これからが本論である。
 このPerlプログラム(GetJPGsize.pl)を使って、見事に“横幅”と“高さ”の値を画像データから取り出すことができるようになった。めでたし、と言いたいところだが、問題がない訳ではない。続けて次の画像をデータをこの関数に渡すとうまく動作しないのである。つまり、この GetJPGsize という関数は reusable ではない! 1つのプロセスで1回しか動作してくれないのである。関数にする意味がほとんどないとも言える。

 この原因がどこにあるのか、いろいろ設定を変えて試して見たが分からない。現在は、処理したい画像の数だけプロセスを発生させて対処しているが、何とか原因を突き止めてこの関数を生かしたいと思っている。

 Perlに詳しい方のご教示を受けたいと思っています。

・どこに問題点があるのか、
・どのように直したらよいのか、
 あるいは
・使用しているActivePerl処理系の問題なのか、

教えていただければ幸いです。■

2017年2月21日火曜日

大統領の紋章


━━ トランプ大統領のモットーは?

 トランプ大統領が誕生して1ヶ月となる。先日、テレビで初の単独会見をやっているのを見たが、自画自賛とメディア批判、そして怒号が飛び交う75分間の会見は「独演会」と言った方がよいようなものであった。こういう内容の会見をこれから4年間ずっと続ける積りなのだろうか。本人は8年間は大統領の座に君臨する積りらしい。それを見続ける側も相当なストレスを感じているが、本人は分かっているのだろうか。本人は何のストレスも感じていないのかもしれない。実にタフな人物だと思う。

 先日の新聞に、アメリカ合衆国大統領の紋章に触れたものがあった。ラテン語で“E PLURIBUS UNUM”(エ・プルリブス・ウヌム)というモットーが、建国の理念である民主主義の原理を表すものであることを紹介し、トランプ大統領がこのモットーとは対極にある理念の持ち主であるようだ、という記事だった。

 その文中でモットーは「多くのものが集まってできた一つ」と訳されていたが、私はモットーとしては練れていない訳だなぁと思った(ラテン語の方は全く分からないけれど)。同時に、今は亡き友人の船津剛男氏が生きておられたら、当然一言あるだろうなと思ったのである。

 船津剛男氏は、コンピュータ関係の仕事の傍ら紋章学の熱心な研究者でもあり、私家版ではあるが「論考集:紋章とモットー」という大著をものされている。


(図:「論考集:紋章とモットー」)

 病気のため入院される直前に手渡された一冊を私は大切に保管している。それを取り出して調べてみると、彼は合衆国大統領の紋章のモットーを「衆を以て一と為す」と訳されていた。うむ、こちらの方がしっくりとくる。

 解説を読んでみようと思ったが、残念ながら論考集は未完であり「論考その1」から始まって「論考その5」の途中までで終わっている。目次によれば、アメリカ合衆国は、最後の章「論考その9:国家と紋章とモットー」に含まれているはずである。長い闘病生活を予想して急遽まとめられたので最後の章まで含めることができなかったのであろう。続きが読めないのは残念なことである。彼のことだから、目次に出ているものはすべて論考が完了していたものと思う。本としてまとめて公表するには、もう少し確認の時間がほしかったのであろう。それが終わらないまま未完になってしまったものと思われる。


 (図:「論考集:目次」)

 彼は生前から多くの友人に、「近況報告」とか「うたたね草子」というタイトルのメールを定期的に送ってくれていたので、そういったテーマの話をしばしば聞いていた記憶がある。幸いにして、私は過去にやりとりしたメールは(船津氏のものに限らず)すべて保存しているので探せば出てくるかもしれない。私は電子メールを始めて以来、何度も使用するメーラー(Mailer)が替わってきたが、必ず古いメール類をそのままの形で受け継いできた。今使っているメーラーにも保存されている。捜してみることにしよう。

 早速「アメリカ合衆国」というキーワードで検索した結果、それらしきものが6件出てきた。



 (図:「検索結果」)

 かなり読みでのある量の文章である。それらを本人への断りもなくここに表示するのは許されない行為ではあるが、船津氏の卓越した知識力を知るには最適の機会なので、無断で一部を紹介することにする。メールの文章なので論考集の文体とはかなり異なっています。

 (図:「アメリカ合衆国の紋章」)

『ご参考までに、アメリカ合衆国の紋章(*1)について少し解説を試みたいと思います。
 アメリカ合衆国の紋章には、色々なものが描かれております。中央にアメリカの国鳥である白頭鷲が描かれています。なお、鷲は、キリストの復活と寛大の象徴でもあり、ハプスブルグ帝国の紋章等にも用いられています。キリスト教では福音書著者の聖ヨハネ(St. Jhon)を表します。その白頭鷲の脚に注目していただくと、向かって右側の(紋章用語でsinister)脚で13本の矢を、左(dexter)脚で月桂樹の枝を掴んでいるのが分かります。鷲の頭上には、雲間に輝く13の星(star)が描かれております。鷲の胸のところには、縞(stripe)の入った旗が置かれています。さらに嘴で帯(strip)を咥えています。よくみるとこの帯には何か文字が書かれていますね。この文句こそ、アメリカのモットーです。ラテン語で次のように書かれています。E PLURIBUS UNUM(*2)(エ・プルリブス・ウヌム) Eは「・・・から」を、PLURIBUSは「多くのもの」を、UNUMは「ひとつのもの」を意味します。全体では「多くのものからひとつのものを」という意味ですが、意訳をすれば「衆を合わせ、一を為す」、すなわち「合衆為一」ということです。衆は、元々は多くの人たち大衆を意味する言葉です。明治期の日本人がアメリカのことをアメリカ合衆国と訳したのはさすがでしたね。
』
【注】(*1)アメリカ合衆国の紋章は、大統領が公式の演説をする時、国章が必ず演説台の前面や後方に掲げられている。
(*2)メールの原文では PLVRIBVS VNVM となっていたので修正した。

 アメリカ合州国ではなくアメリカ合衆国なのである。“州”が合わさった国ではなく、様々な人種から成る大“衆”が力を合わせて作った国ということであろう。トランプ大統領には是非とも知ってもらいたい事実である。彼は“本”というものを読まないらしいから理解してもらうのは無理かもしれないが。

 ところで、目次によれば、アメリカ合衆国のモットー「衆を以て一と為す」の次に
 初代アメリカ大統領ワシントンのモットーとして「行為は、結果次第」(Exitus acta provant)が掲載されている。これもメールで検索してみたところ更に興味深いエピソードが書かれているメールを発見した。しかしこれ以上の無断引用は慎むことにします。

 それより私が言いたかったことは、トランプ大統領にはワシントン大統領のモットーの方が似合うのではないかということである。

  「行為は、結果次第」

 それとも、トランプ大統領の現状に最も相応しいモットーを我々で考えてあげたらどうでしょうか。

 たとえば、

  「総ては、思い付きから」
  「目的は、成り行きのままに」
  「総て、見せかけ」
  「王様は、裸」
  「不都合は、総て偽情報」

などどうでしょうか。

 もちろんラテン語の知識はないのでラテン語表現は専門家にまかせることにします。■

2017年2月11日土曜日

歩き方について

── 転ばないためのコツ
 
 歩きながら考えている。
 私は昔から、歩きながら考えるのを習慣としていた。歩きながら、あるいはウォーキング(以前は、ジョギングだったが)をしながら色々なことを考えている。仕事のこと、趣味のこと、何でも思考の対象としてきた。歩きながら考えていると、しばしば良いアイディアが生まれてくるものなのだ。今、私が考えているのは、歩き方についてである。つまり、歩きながら“歩き方について”考えているのである。

 と言うのは、最近歩いていて非常にショッキングな事実に気が付いたからである。普段道を歩いていたり、スポーツとしてウォーキングをしている最中に、自分が女性の歩行者(あるいは女性のウォーカー)に追い越されている事実に初めて気が付いた。歩行速度はそれ程差がないのに追い越されていく。よく観察してみると追い越して行く人と自分の足運びには大きな差はない。ほんの少し私の方が遅くなっている程度である。しかしその小さな差が、長い距離を歩く内に大きな差となって現れているのであろう。
 そこで、私は考えた。齢のせいで身体の動きが鈍くなってきているのではなかろうか。意識的に少し速く歩く努力をしてみよう。

 会社勤めをしていた頃は、何かに追い立てられるようにせかせかと急ぎ足で歩いていたものだ。しかし会社勤めをやめてからは、追い立てられることもなくなり、何事にも時間的な余裕を持って行動するようになった。以来、ゆっくりとした歩調になったのだと思う。
 それからは、努めて早足で歩くよう努力することにした。しかしある時、駅への道を急ぐ途中で、路面の小さな凹凸にけつまずき転倒してしまった。前のめりの体勢で歩いていたためか、したたかに路面にたたきつけられ両手の手のひらに裂傷を負ってしまったのである。

 そこで、また私は考えた。今まで私は、ゆったりとした気持ちで歩いている積りだったが、実は歩行速度が落ちた原因は体力的な衰えによるものではなかろうか。転んだ時も、危うく顔面から倒れる可能性があったのである。危うく両手をついて身体を支えることができたが、明らかに反射神経の方も衰えているようである。これは「歩き方」を矯正する必要がありそうである。

 思い返してみると、最近つまずいて転びそうになることが多くなっているように思う。足を十分に持ち上げないで引きずるように前に出すのが原因なのだ。もっと腿の部分を持ち上げて、前へ振り出すようにして歩かなければいけない。以来、意識的に腿を上げて歩くよう努力するようになった。しかしこれが長続きしないのである。歩きながら考える癖があるので、しばらくすると直ぐ「腿上げ」のことを忘れてしまう。

 そこで、またまた私は考えた。振り出した方の足を着地させる際に、踵の部分から接地させるようにしてはどうか。常に踵の部分に意識を集中させていればよい。この“踵着地”の方が“腿上げ”よりも意識を集中しやすい。しかも、踵着地を実行していると自然に腿上げができるような気がするのである。更に、後ろの足を力強くキックする気持ちで前方に振り出すと、更に効果的であることにも気が付いた。ただ“後足キック”も“踵着地”も、考え事をしていると、つい忘れてしまうのである。困ったことだ。

 そこで、私は再び考えた。腿上げ、踵着地、後足キックも大切だが、「大股で歩く」ことの方を重視してはどうであろうか。ウォーキングの際は常に大股で歩くことが勧められている。私の経験では、考え事をしていても大股で歩くのを忘れたりすることはない。始終意識していなくても“大股歩行”なら続けられそうに思えたのである。

 以来、私の歩行習慣は、
 ・大股歩行
 ・踵着地
 ・後足キック
 ・腿上げ


を実践することとなった。しかし意識的に実行しているのは“大股歩行”だけである。これだけは、考え事をしていても決して忘れることがない。多分、歩幅を変えるという行為は、意識的に行う必要のある行為に属するのではないかと思う。

 このような歩き方を論ずる(?)場合、手の振り方も考慮に入れなければならないが、私はウォーキングの最中に両腕を大きく振るスタイルがどうしても好きになれない。いかにも「私は運動をしています」と主張しているようで、他の通行人の迷惑にもなるし、自分では決してやりたくない動作だ。さりげなく手を振っている方がよいのではないかと思う。両腕を大きく振る歩き方をしたい人は、自転車と同じ軽車両の扱いにして、車道の左側を歩くようにしてほしいものである。

 もっとも、歩き方で一番大切なのは足元をよく見ることであろう。戸外を歩くのは屋内を歩くのと違って、常に路面に障害物があると覚悟しなければならない。ほんの少しの凹凸でもつまづく危険があるから、常に足元に気を配りながら歩くのが一番大切なことである。

 それにしても、私は生まれて来てこの方「歩き方」について、特に人から教えを受けたという記憶がない。ヨチヨチ歩きから始めて、何となく歩きだし、人並みに歩けるようになり、今日に至っているような気がする。正しい「歩き方」というものは、人生の終盤になって初めて意識的に学ぶ必要が出てくる類いのものなのかもしれない。もっとも「人生の歩き方」の方は、人生のできるだけ早い時期に考えておくべきであろうが。■

2017年1月26日木曜日

東芝カレンダーと東芝病院と

 かつて、私の書斎には常に東芝カレンダーがあった。東芝在職中はもちろんのこと、東芝OBとなってからも、然るべきルートを経由して何とか東芝カレンダーを手に入れてきた。しかし段々とそのルートも細ってきて、最後の頃は東芝健保が送ってきてくれる(少し小型の)ものしか入手できなくなった。

 そして数年前、後期高齢者となり東芝健保を離れることになって以来、東芝カレンダーは入手できなくなってしまったのである。そのとき私は、これで本当に東芝とは縁が切れたのだなぁと寂しい思いをしたのを覚えている。以来、私の書斎には東芝のカレンダーはない。

 今日、東芝病院の総合検診センターで人間ドックの検査を受けてきた。東芝との関係で残ったのは、結局のところ私の“病気”だけ、ということに気付いて増々滅入るばかりである。

 検査がすべて終り食事のためセンターの3階に行くと、受付窓口の前に大きなダンボールの箱が置いてあり、中に沢山のカレンダーが入っていた(もしや!)。「ご自由にお持ち下さい」とある。東芝のカレンダーだ! 私は少し興奮していたので、一瞬「全部持ち帰りたい」という気持ちになっていた。しかしそこはそれ、何んと言いますか、・・・ それそれ「大人の良識」というものがありますから、さりげなく1本引き抜いただけでその場を離れたのであった。

 昨年末にカレンダーを配って残った分なのであろう。そのとき閃いたのである。なるほど1月末というこの時期に人間ドックを受診すれば、あの懐かしい東芝カレンダーが難なく手に入るのだと。素晴らしい方法じゃないですか。もう誰の手も煩わせることなく手に入れる方法を発見したのである。しかし同時に、昨日の夕刊で報じられていたニュース「東芝病院 売却へ」のことも思い出してしまった。あぁ・・・今年限りなんだ!

 さよなら、東芝カレンダー。さよなら、東芝病院。■

2017年1月15日日曜日

情報の永久保存

── 情報コンテンツを永久保存する方法
 
 ウェッブ上に掲載した情報をそのまま永久に保存する方法を考えた。グーグル社の無料ブログサービス“Blogger”上に画像としてアップロードすればよいことに気が付いたのである。
 この方法の実現可能性、具体的に言うと技術的な側面と道義的な側面の両方について読者のご批判を受けたいと思い紹介することにした。私の意図を正しく理解してもらうには、少し回り道になるがこれまでの経緯から始めることにする。

1.これまでの経緯 

▼ホームページの終活 
 私がウェッブ上にホームページを開設してから今年で満20年となる。構築したホームページが占める領域は時の経過とともに膨大なものになってきている。その上、世の中ではウェッブ上の表現方法がテキスト中心のものから視覚に訴える画像中心のものへと変わってきた。そのため容量不足が増々加速し、画像データの保存法の見直しが緊急の課題となってきた。

 この間、いろいろな経緯があって3つの有料サイトを利用しているので、容量の大部分を占める画像データを3つのサイト間とその他の無料のサイト間に分散して置くなどして何とか凌いでいるのが現状である。少なくとも一か所にまとめて管理したいと思っているのだが、なかなかうまい解決法が見つからない。

 私にもしもの事があった場合の事後処理については、当然のことながら考えてきた。病気などでホームページが長期に渡り更新されないでいると「更新セルフチェック機能」が動作するようになっていて、1ヶ月後、6ヶ月後、1年半後・・・と間隔を置いてお詫びのメッセージが表示され、2年が経つとお別れのメッセージが掲示されるようになっている(素歩人徒然「身辺整理」参照)。しかし有料サイトなので使用料が未納になれば、ホームページは忽ち削除され消滅してしまう運命にある。
 要するにホームページの“終活”に取り組まねばならぬ時期となったのである。

▼写真アルバムだけは残したい
 私の個人的な情報は消滅して構わないが、どうしても残さねばならないものがある。たとえば、学生時代の同期生のホームページやブログの管理を私が担当しているので、その後始末を考えなければならない。現時点で後継者は見つからない状態なのである。

 小学校、中学校、高等学校、そして大学の仲間たちとの集まりで撮影した写真がアルバム状に編集された形で多数存在する。企業人時代の昔の同僚たちとのOB会で撮った写真もある。これらをどうするか。

 私と同世代の仲間達との記録であるから、遅かれ早かれ私と前後していずれは写真アルバムも消えていくことになろう。見る人がいなくなるのだからそれで構わないと今までは考えていた。しかしホームページやブログの管理をしていると本人以外の人達が結構写真集を見ていることに気が付いた。
 見知らぬ人からいろいろな問い合わせが来る。たとえば、

・自分の父親が長年行方不明で連絡が取れない。消息が分からないか。もし分かったら教えて欲しい。
・海外に長年住んでいるが、偶然ホームページを見つけて日本の昔の級友と連絡が取りたくなった。
・偶然ホームページを見つけ主人のことが書いてあるので・・・と奥様から近況報告が届く。

 つまり当事者だけでなくその親族や関係者も参照しているのだ。私の経験でも、今は亡き自分の父親の名前や祖父の名前で検索を試みると、かなりの情報が得られるのを実際に体験し便利な世の中になったと思ったものである。インターネットの時代では、フルネームの名前(特に漢字表記がよい)さえ分かれば(インターネット時代以前の人であっても)その人に関するかなりの情報が得られる。そして一度情報をつかめれば、そこからまた別の情報が芋づる式に手繰り寄せられるようになる。私たちが作っている写真アルバムはその世代の人々だけでなく、その子孫の世代の人達にとっても将来重要な情報源となる筈である。

 写真アルバムなら Facebook 等のSNS上に置けばいいと思う人がいるかもしれない。しかしSNSでは限られた人しか見られないし、沢山の写真が登録されたアルバムには向いていないと思う。沢山の写真がある場合は、その縮小版(サムネール)の一覧を見ながら個々に参照するものを選べるようにする方式でなければならない。端から端まで順送りにすべて見なければならない方式はなじまないのである。

 そのため、私は写っている人の名前が個々に分かるようにした独自の写真アルバムを作成し公開してきた。この写真集だけは残したいと思ったのである。

2.画像ファイルの保存

さて、ここからが本論である。

▼画像ファイルはG領域に保存する
 私の利用しているブログは、グーグル社のブログ( https://www.blogger.com/ )なのだが、これを長年使っていて偶然気が付いたことがある。ブログに投稿する目的で画像をアップロードすると、グーグルブログ固有の領域(ここでは“G領域”と呼ぶことにする)にデータが保存され、適当なサイズに調整されて画面に表示できるようになる。サイズを変えたければ「小」,「中」,「大」,「特大」,「元のサイズ」から適当に選んで何時でも(極端な話、何年後でも!)変更することができる。しかも、G領域内の場所さえ分かっていれば、他人のブログからでも参照できる。いや、ブログに限らずウェッブ上のどこからでも参照できるのである。これは私にとって驚くべきことであった。

 つまりブログ上で作成した投稿の“HTML表示”の画面から場所の情報だけを抜き出してくれば、何処でも、誰でも、利用できるということである。最初にアップロードされたデータは常にG領域中に保存されている(継続的に保存される!)。他人のデータと一緒に管理されているらしい。セキュリティの面で心配する人がいるかもしれないが、種々雑多な画像データの“混沌”の中に散在する形で置かれているので盗まれる心配はない。これは、プログラミングの世界で使われている“ハッシュ(Hash)”と呼ばれる記憶方式とよく似ているように思う。

 ハッシュ領域には、どのようなデータ型のものでも置くことができる。それを取り出すには“キー”が必要で、それぞれのキーがそれぞれのデータを指し示している。このキー自身もハッシュの中に保存されているので、キーを知っていれば誰でもデータにアクセスできる。この考え方と全く同じであることに気が付いたのである。G領域は“Gハッシュ”と呼んでもよいのかもしれない。

▼画像データの利用法

 たとえば、


timelessEdition.jpg

という画像をG領域に置いたとする。そのデータは以下の文字列 「https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxK2ycYXw771EXZwrki9-3mdC5zSswucysdPIZxP_kebHkR0I8cOvm667HmSnpNUQGHIcCvn9uDEcVI1Dej-yeyAQLOHOITSMbgXMZMJCwcsQoICFZKM3XTkfJHdX-BUN6xxHe/s1600/timelessEdition.jpg」
 を用いて取り出すことができる。

 ・文字列の前半部分 「https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxK2ycYXw771EXZwrki9-3mdC5zSswucysdPIZxP_kebHkR0I8cOvm667HmSnpNUQGHIcCvn9uDEcVI1Dej-yeyAQLOHOITSMbgXMZMJCwcsQoICFZKM3XTkfJHdX-BUN6xxHe/」
がキーである。これさえ知っていれば、誰でも、何時でも、何処にいても、恒久的に取り出すことができる。
 ・文字列の最後の部分
「s1600/timelessEdition.jpg」 の「s1600」は取り出すときのサイズ(横幅)をピクセル数で指定する場所である。

  大きさ    サイズ(ピクセル数)
 「小」     200
 「中」     320
 「大」     400
 「特大」    640
 「元のサイズ」 1600

・“/”で区切られた最後の部分「timelessEdition.jpg」は、画像をアップロードしたときの名前になっているが、取り出すとき新たな名前に変更することもできる。ただし画像の種別(jpg, gif,...等)は変えられない。

つまり、

   <キー>/[s<サイズ>/<名前>] 

の順に指定する([ ] はオプションの意)。


3.ソーステキストの保存

このようにG領域に置かれた画像データは半永久的に残せるが、それを使ったソーステキスト(HTML形式のファイル)も保存しておかないと意味がない。

▼テキストはブログ上に残す
 HTML形式のソーステキストはブログ上に投稿して残すことにする。グーグルがG領域を半永久的に残す覚悟なら、当然無料ブログも残されるであろうと考えた。

 しかしブログによる投稿では、限られた機能しか使えずアルバムをそのまま保存するのは難しいことが分かった。

 ブログの投稿では、投稿欄に書き込めばその都度HTML言語に変換されていく。実はこの方式が問題なのである。実に使い難い。
 投稿内容が完成したら初めてHTML化するのではなく、その都度変換されていくので投稿画面上で修正を繰り返していると、その履歴がそのまますべてHTML画面上に残される形で変更が積み上げられていく。

 その結果HTMLプログラムは修正の上に修正が積み上げられた悲惨な状態になる。HTML部分だけを見ても何が何やら分からない混沌としたプログラムになってしまう。それでもうまく表示できれば問題ないのだが、試しにプレビューで表示してみると、投稿画面で意図したものとは似て非なるものになっている。途中に大きな空欄が出来ていたり、文字が小さかったり、大き過ぎたりするので修正しても意図通りにはならないことが多い。修正が効かないのである。仕方なくHTMLプログラム上でそれらしき所を見つけて強引に修正することになる。

 投稿画面上でいろいろ修正を重ねるのは混乱の極みであることが分かった。修正の必要がないしっかりしたものをあらかじめHTML言語で作っておいて、それをHTML画面に直接張り付けてしまう方法が一番効率的である。

 もう一つの問題は、ブログの特性からくるものでHTMLテキストが1ページ分しか投稿できないことである。私の写真アルバムは複数のディレクトリを利用して階層構造になっており複数のHTMLテキストから成り立っている。つまり複数ページなのである。

 そこで、ブログに投稿するために無理やり変換し1ページのHTMLテキストに作り変えることにした。それをHTML画面に張り付けたのだが、ブログが処理するには複雑過ぎて拒否されてしまうことが分かった。ブログ側が設定したテンプレートの枠内で動作するように収めなければならないので制約が付くのは理解できるが、簡単な記述のHTMLテキストしか受け付けてくれないようである。しかも、採用したテンプレートごとに様子が異なるのである。

 そこで、できるだけ広くHTML言語を受け入れてくれるテンプレートを選び、その範囲内で記述する簡易版のHTMLテキストを作ることにした。表示は稚拙でも無いよりはましである。私が表示したい凝った記述のHTMLテキストは、HTML欄ではなくテキスト欄に隠して保存することにした(将来これを利用できる時代が来ると信じて)。文字列は白字で見えないようにする。

 以下に例を示す。

例:「写真をネガから復元する」
 
・昔の写真をネガから復元する
 が簡易版である。

 正式版はその後ろに書き込んであるが白字で隠されている。この場所をドラッグしてコピーし、HTMLテキストにすれば私が表示したかった写真アルバム(これはサンプルですが)を見ることができる筈である。簡易版との違いを比較すると面白いかもしれません。

▼テキストを画像に埋め込む
 正式版を白字で示すという方法は、場所を取るのであまり美しくない。文字のフォントを最小にしてみたが差はなかった。そこで、どうせブログ外でしか表示できない代物だから、コンパクトにまとめて残すことができないかと考えた。

 実は、画像データがG領域で半永久的に残せると分かったとき、私は gifファイルを活用すればテキストも残せる筈だと確信した。gifファイルの設計経験のある人なら誰でも知っていることだが、gifファイルにはコメントを記入する場所が用意されている。試しにそこにテキストを記入してみたところ、半角文字で約3,300文字分くらいまでは書き込めることが分かった。テキストを分割すればいくらでも書き込む余地は残されている。

 試行したものを例示する。

例:「テキストを画像に組み込む」

butterflywithText.gif の例

興味のある方は以下を参照してください。
「テキストを画像に組み込む」

 しかしgifファイルの扱いに不慣れな人は利用できない手法だから、これでは実用にはならない。最近は、画像ファイルにウイルスを埋め込む悪い輩もいるから、それと同列と見做されるのは避けたい。

▼個人情報の扱い
 最後に、個人情報の扱いについて触れておきたい。
 前述したように、写真アルバムは将来重要な情報源となり得るから、その写真アルバムに個人名をフルネームを書き加えたい。しかし個人情報保護法に厳密に従うと、無暗に個人の名前や写真を(本人の承諾なしに)インターネット上に公開するのは憚られる世の中である。これは本人の年齢に関わりなく尊重されなければならない。これからは「名前を公開したくない人は申し出てください」という注意書きを必ず添えることで許してもらおうと思う。

 この法律のために昔の学校時代の友人と連絡を取ったり、その消息を尋ねたりする手段がなくなり困っている人が多い。そういう現状をよく知ってほしいものである。我々の年代では、むしろお節介でも名前を書き添えてあげた方が良いように思うがどうであろうか。それも、写真画像の一部として書き込むのではなく「検索可能なテキスト」として残すことが特に重要なのである。

4.最後に

まだまだ不完全ですが、この方式が広く使われるようになることを願って、テスト的に「情報保管庫」を作成したので参考にしてください。

 目立つように「永久保存」などという表現を用いてきたが、グーグル社のやり方を利用しているので、当然のことながらグーグル依存と言うべきであろう。

 これまで蓄積された大量のデータを、グーグル社は単に無料サービスだからと言って突然止めるようなことは道義的に許されないと私は考えている。グーグル社はそんなことはしないだろうと信じての提案である。

 上記ブログ上では“ほぼ永久保存”という表現にしてあります。■


2017年1月2日月曜日

「ソフトウェアと定年」(初版原稿)

── 社内掲示板に投稿した初版の原稿
 
古い資料を整理していて、以前書いた「ソフトウェアと定年」というエッセイの初版がプリントされたものを発見した。これはテーマが余りに私的なものだったので、これまで社外のインターネット環境に掲載したことはない(一部手直しして『ソフトウェアの法則』(中公新書)に掲載)。しかし当時の青梅工場のことが記述されているので懐かしく思いながら読み返してみた。
 東芝の不正会計問題を発端とする一連の騒ぎの中で東芝のコンピュータ開発の由緒ある拠点(青梅事業所)は売却されてしまった。この地で会社生活のほとんどを過ごしてきた私は、単に「さびしい」というような単純な言葉では表現できない程の無念の思いを抱いている。青梅工場への鎮魂の思いを込めて、ここに掲示することにした(テキストファイルは存在しないので画像化しました)。

(読みにくい場合は、[こちら]を参照してください)


2016年12月31日土曜日

私のボケ防止法

── 生活習慣の見直しと脳の活性化


 最近の私の最大の関心事は、如何にしてボケないようにするかということである。インターネット上には、認知症の初期症状を検知できると称するサイトが沢山存在する。私も一度試したことはあるが再びやろうとは思わない。傲慢だと言われるかもしれないが、健常者には馬鹿馬鹿しいほど他愛のない検査に見えてしまうからだ。定期的に検査して自己診断したい人には向いていないと思う。

 私が必要としているのは、毎日続けられてボケ防止に効果があり、かつ「自分はまだボケていない」という確信あるいは自信(たとえそれが誤解であったとしても)を与えてくれる類いのものでなくてはならない。つまり、検査ではなく予防効果があるもの(あるいは、ありそう見えるもの)を求めているのである。


▼アンチエイジング
 認知症は老化と密接な関係にあるからアンチエイジングの努力をすることが予防法としては一番効果があると言われている。最近の医学の教えるところによれば、歯周病、糖尿病、高血圧症などのいわゆる生活習慣病への対策が重要であるという。私は、そういう知識がまだ普及していない頃から自然にやっていたことが多いので、今は大変に助かっている。たとえば、

(1)歯のみがき方
 企業人だった頃は、会社で定期的な歯の検診を受けることが義務付けられていたので、検査と同時に「歯のみがき方」の指導を受けていた。そして何度指導されてもうまくできなかったみがき方が、やっと身に付いてきて自らできるようになるまでに数年を要したと思う。定年後の今でも、そのとき習ったみがき方を実践している。

(2)食事での習慣
 食習慣も結婚後はすっかりと変わった。甘味料の多い飲み物は避け、コーヒー類には砂糖など絶対に入れないようになった。その結果、自然に糖質制限の習慣が身に付いてきたように思う。相変わらず甘い物は好きだが、特別なときにしか食べないようにしている(ホントかよ? いや、たまには孫と一緒になって菓子のつまみ食いなどしてますけどね)。
 ただ、食習慣の内「よく噛んで食べる」という最も基本的で最も重要な習慣だけは、せっかちな私には無理で未だに身に付いていない。「空腹は最良のクスリ」と言われているように、空腹の時間帯が一番身体には良いらしいのだが、我慢できずにすぐ間食をしてしまう。困ったものである。

(3)定期的な運動
 昔から休日になると仕事のことは忘れようと思い運動をする習慣になっていた。それがストレス発散に効果があると知ったのはずっと後のことである。
 最近は朝起きる前にベッドの上で20分程ストレッチをしてからゆっくりと起き上がる。それから洗顔をして、ラジオ体操を含むストレッチ体操を更に20分程やっている。
 午後は天気がよければ多摩川の河原で1時間以上ウオーキングをする。昔はサイクリングやジョギングが中心だったのだが、今では女性にも追い越される程のゆっくりとした歩みになってしまっているのが口惜しい。

▼脳を使う
 昔から身に付いている生活習慣に関するものだけなら楽なのだが、頭を使ってのボケ防止も重要である。そのためには常にアンテナを高くし、その方面の新しい知識を仕入れることが重要になる。したがって新しいことを学ぶ意欲がなければならない。

 世間では、新しい「脳を活性化する方法」がいろいろと紹介されているが、私はそれらを試す前に、自分が継続して実践できるかどうかを主眼に評価することにしている。そして続けられそうなものだけを取りあえず実践してみる。継続してできそうもないものは最初から諦める。
 現在続けて実践しているのは、以下のようなものである。


(1)運動をしながら 1,000から 7 を引き続ける計算をする
 これを外出時に歩きながら、あるいは運動中に声を出して行う。声を出してやることが重要なので、通りすがりの人に“変な人”と思われないよう小声でやる必要がある。十の位と一の位を常に意識して計算を続けながら、同時に周囲への注意も怠らないようにする。これが結構難しい。隣人に出会って挨拶したり、見知らぬ人に道を尋ねられたりしたときなどは計算が続けられなくなってしまう。信号に気を付けたり、自転車を避けたりと計算の妨げになる出来事があとからあとから起こってくるが、計算を惑わされないよう最大限努力する。場合によっては一時計算を停止する必要に迫られることもある。再開するには直前に発した声が“耳に残っている”のでこれを活用するとよい。

 いろいろな事に細かく気を配らねばならないので自然と頭をマルチで使う能力が養われる。外出時の往路と復路で一回ずつ計算が成功裏に終了できれば「良し」としているのだが、これがなかなか難しい。最近やっとうまくできるようになってきたが、始めてから実に3年以上が経過している。


(2)2桁の加減算
 脳の前頭前野は、老化とともに最も早く機能低下する部位だと言われているから、ここを鍛える必要がある。それには1桁でよいから加減算を繰り返すとよいそうである。そこで私は、プログラムで乱数を発生させ沢山の問題を自動的に作り出すことにした(何桁でもできるように作ったが、とりあえず2桁にしてある)。このプログラムを使って50個の問題を使い古しのA4用紙の裏にプリントする。月の初めにそれを30日分作っておく。


(加減算の例)

 そして、毎朝コンピュータを立ち上げるときの待ち時間(*1)を利用して計算することにしている。右側に答が印字されているので、答の照合も含めて3分程で終了する。 

【注】(*1)Windows は、コンピュータの立ち上げ時間を節約するため標準では簡易版のシャットダウンが使われている。私はあえてそれは使わず、前の晩にコンピュータを閉じるとき[シフトキー]+[シャットダウン]で完全なシヤットダウンを実行しているので、毎朝約3分弱の再起動が必ず実行されるように設定されている。
(3)フリーハンドで円を描く
 加減算の問題が全問正解だったときは、何時の頃からか私はその用紙の余白に丸を描くようになった。漫画家の故手塚治虫氏は生前「マンガのアイディアはいくらでも出てくるが、年とともに円を綺麗に描けなくなった」と述べていたのを思い出した。それを真似て私も円をフリーハンドで描くことにしたのである。余白があったので、私は毎回3つの円を描いているが、うまく描けたときは日付けを記入し記録として残すことにしている。年とともに円が少しずつ歪んでいくのではないかと恐れている。


  (うまく描けた円の蒐集)

 毎日キーボードを使って文章を書いていると、字がうまく書けなくなってくる。図も同様である。円がいびつになってきたら、ボケの兆候が出てきたと覚悟せねばなるまい。


(4)文章を書く
 ボケ防止には日記をつけるとよいと聞いたことがある。私には日記など無理なので、その代わりに「要するに毎日文章をつづればよいのだ」と考えることにして、知人にこまめにメールを書くことで代用することにした。

 最近は Facebook 上でのメール交換や投稿に重点を置くようになった。しかしメールの文章というのは、くだけた感じのものが多くて内容も浅い。それに対しブログへの投稿なら少しは真面目に取り上げるべきテーマに対し考察を深めるようになる。全体の構成も考えて書く必要があるから、メールよりもはるかに頭を使う必要があると考えている。

 月に一度は、ホームページ(Knuhs の書斎)にエッセイを掲載することにしているのだが、最近は筆が鈍りがちである。やはり老化すると文章を書くのが面倒くさくなってくる傾向があるようだ。心して努力すべきであろう。


(5)名称忘れへの対策
 ボケは着実に我が身に迫ってきている。先ず、特定の物の名前がすぐには出てこなくなる。人の名前も出てこない。「そんなのボケではなく、年寄りなら皆同じですよ」と慰めてくれる人もいるが、そう言う相手も年寄りだから、多分心の中で「ボケだと認めたくない」と思っている人の意見なのである。真面目に信じてはいけない。

 そこで私は、名前が出てこなかったら直後に思い出す努力をし脳内の切れたネットワークの線を繋いで直ちに修復することにしている。どうやって名前を思い出すかと言うと、インターネット上で検索するのである。もちろん「あれ」とか「あれあれ」とキー入力しても答えは得られません、絶対に!(*2)。しかし思い出すヒントになるようなキーを複数個うまく組み合わせて入力すれば、リストアップされた記事の項目と説明文だけから結構思い出せるものである。
 忘れていることに気付いたら直ちに検索するのがコツであって、後でやろうと思ってはいけません。後でやろうと思った時には「何を忘れたのか」さえも思い出せないから。   

【注】(*2)試しに、本当に「あれ」で検索してみるとよい。そういう「あれあれ検索」が可能なプログラムを開発してほしいものだ。高齢者を助けるためのそういうアプリの開発に成功したら、貴方(女)は間違いなく大儲けできるはずですよ。
 要するに私は、(4)で言及したようにボケ防止の目的でこのエッセイ書いている。そのエッセイで取り上げたテーマが、たまたま「私のボケ防止法」だったという訳である。そして読者諸兄はそれを読まされている、ということになります。まだまだボケなどには無縁の方々にとっては、真に申し訳ないことだ思っております。■

2016年12月26日月曜日

クリスマスの朝

 クリスマスの日の早朝、ベッドの中で半分眠りながらラジオを聴いていた。アナウンサーが「私は何時も最後の曲にはこれをかけることにしています」と言っている。曲名紹介の後、曲が始まった(5:50頃)。クリスマスの歌だ。ちょっといい歌だな・・・ などと思いながら聴いていた。

 しかし段々と盛り上がってきた。何だこれは! 最後の方になると、男性歌手が叫んでいる。「メリー・クリスマス!」と叫んでいる。さだまさしの声のようだ。何んという曲だろう。

 最後にアナウンサーが曲名を再び言うだろうと耳を澄ませていたら、突然コマーシャルになってしまった。残念。

 何んという曲だろう。もう一度じっくりと聴いてみたいものだ。
 そうだ、radiko に「タイムフリー」という機能があると聞いている。これでもう一度聴いて曲名を確かめることにした。

 その結果、さだまさしの「遥かなるクリスマス」という曲であることが分かった。知らなかったなぁ。クリスマスの時季しか流れないからであろうか。素晴らしいクリスマスの朝であった。■