2017年9月1日金曜日

私の本棚(1):手塚治虫


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

── 手塚治虫ワールドのすべて


私の本棚を紹介します。
   

 第一回は、手塚治虫関連の本を取りあげることにします。先ず、好き勝手に覗いてみてください。4つの書棚の各ブロック上にカーソルを置くと内容の概略が表示されます。クリックで画像の拡大表示ができます。最後に解説欄があります。興味のある方は読んでください。

書棚A(クリックで拡大表示されます)
(6)
(5)
(4)
(3)
(2)
(1)

書棚Aの内容:手塚治虫漫画全集(講談社)#1 ... #90
 (1)ジャングル大帝(#1)~スリル博士(#20)
 (2)0マン(#21)~きりひと賛歌(#34)
 (3)アポロの歌(#35)~ハトよ天まで③(#49)
 (4)夜明け城(#50)~ふしぎ旅行記(#59)
 (5)ファウスト(#60)~アリと巨人(#72)
 (6)化石島(#73)~アラバスター②(#90)


書棚B
(11)
(10)
(9) 
(8) 
(7)

書棚Bの内容:手塚治虫漫画全集(講談社)#91 ... #174
 (7)ダスト8(#91)~三つ目がとおる⑧(#108)
 (8)三つ目がとおる⑨(#109)~タイガーマスク⑤(#125)
 (9)タイガーマスク⑥(#126)~バンパイヤ③(#144)
 (10)ぼるぼら①(#135)~ブラック・ジャック⑦(#157)
 (11)ブラック・ジャック⑧(#158)~鬼丸大将①(#174)


書棚C
(16)
 (15)
(14) 
(13)
(12)

書棚Cの内容:手塚治虫漫画全集(講談社)#175 ... #258
 (12)鬼丸大将②(#175)~ミクロイドS③(#185)
 (13)マグマ大使①(#186)~ナンバー7③(#195)
 (14)ナンバー7④(#196)~ザ・クレーター③(#220)
 (15)鉄腕アトム①(#221)~鉄腕アトム⑱(#238)
 (16)ショート・アラベスク(#239)~雑巾と宝石(#258)


書棚D
(20)
(19)
(18)
(17)

書棚Dの内容:手塚治虫漫画全集(講談社)#259 ... #300, 絶筆、その他
 (17)地球をのむ①(#259)~ふしぎなメルモ(#280)
 (18)新宝島(#281)~ブッダ⑭(#300)
 (19)陽だまりの樹(一)~(七)(小学館)、
   ネオ・ファウスト(絶筆)(朝日新聞社)、
   手塚治虫はどこにいる(筑摩書房)
 (20)手塚治虫物語(オサムシ登場)、
   手塚治虫物語(漫画の夢、アニメの夢)(朝日新聞社)、
   その他:少年クラブ、冒険王、少年画報



【解説欄】
▼はじめに
 最初に、なぜ「私の本棚」という欄を作ることになったのか を説明することにしよう。

 全国で書店の数が激減しているというニュースが流れている。紙の本を読まない世代が増えたからだろうが、それだけではなく雑誌や週刊誌などは駅売りやコンビニ店で買うのが普通で、わざわざ書店まで行くまでもなくなった。あるいは、通販を利用して購入する世代が増えたのも一因であろう。そういった生活基盤の変化が、結局は多くの昔ながらの書店経営を続けられない状態にしてしまったのだと思う。

 書店の書棚から本を取り出すときの、あの“未知の本との出会い”を期待する「トキメキ感」を経験してきた世代の私めには、甚だ残念なことである。私は電子書籍も利用しているが、やはり紙の本の方が圧倒的に多く、かつ思い出して再読する機会も多いような気がする。

 私は、誰でもよいが自分の書籍棚の前に座って撮影された写真などを見つけると、その人物が普段どんな本を読んでいるのか興味を持ち、背後に写る書棚の本を観察するのが好きである。その中に私が読んだことのある本を見つけたりすると、途端にその人物に親近感を持つようになったりする。

 そういう訳で、私は「自分が他人の書棚の中身を見たいのだから、他人も私の書棚を見たいに違いない」と勝手に思い込んでしまった。そして「私の本棚」をここに紹介することにしたのである。もし私の勘違いだったら、・・・許されよ。

▼手塚漫画の思い出
 私が手塚治虫の漫画(*1)に初めて接したのは、小学生の頃に読んだ少年向けの雑誌が最初ではなかったかと思う。しかし私の記憶に残っているのは「新宝島」を買って読んだときのことである。斬新な表現と内容に圧倒されてしまった。
【注】(*1)最近は「漫画」のことを「マンガ」、「アニメ」などと表現することの方が圧倒的に多い。
お小遣いをためて、やっと本屋で購入した新宝島を、私は家に帰るまで待ち切れずに歩きながら読んでいた。そのとき突然、大声で叫んでいる声が私の耳に飛び込んできたのだ。何んと! 私は小田急線の駅の近くの遮断機の降りた踏切の真ん中にいたのである。そして遮断機を操作する踏切警手が旗を振りながら、必死に早く踏切の外に出るよう叫んでいるのに気が付いたのであった。それほど子供を夢中にさせるものがあったのだ。この私の失敗を今まで誰にも(親にすら、いや親だからこそ!)話していない。歩きスマホを注意する資格は私にはないのである。

 そして、そうです! 私はあの新宝島初版本の持ち主となったのです(過去形なのが悲しい)。今なら数万円はすると思うが、残念ながら学友の兄に盗られてしまった。「貸して欲しい」と私の家にまで押しかけて来たので いやな予感がしたのだが、年上の子に言われるといやとは言えなかった。その後、返却を求めると「無くしてしまった」と言って返してくれない。結局そのままになってしまった。当時からいじめはあったのだ。今でも思い出すと悔しい。

 大人になってから手塚治虫漫画全集が刊行されると知って、私は再び新宝島を読みたくて買うことに決めたのである。最初の配本は、ジャングル大帝(#1)で 1977年6月15日発行だった。そして最後の配本が、その新宝島(#281)で 1984年10月3日発行となっていたから、購入申込みをしてから実に7年間も待たされたことになる。この一冊を手に入れるために7年間に渡って300冊を買い続けてきたのである。

全300巻完結!!


パンフレット:手塚治虫漫画全集 全3期 1977年6月 - 1984年10月


パンフレット:第1期 1977年6月 - 1979年8月


パンフレット:第2期 1979年10月 - 1981年11月


パンフレット:第3期 1982年2月 - 1984年10月
 

手塚治虫の死後、第4期として1993年1月から1997年12月までの間に新たに100冊が刊行され全400巻となったが、私は新宝島を手に入れてしまったのでもう買うことはなかった。

▼書棚について
 300冊の手塚本を大切に保管するために今まで大変な苦労をしてきた。私の書斎(あるいは私が常時居る場所と言った方がよいかもしれない)の移動、家の改築、引っ越し、家の建て替え・・・ などで何度も移動を繰り返してきた。

 その経験から、最も保管し易い書棚を造ることにした。B6判(高さ約18センチ)なので棚の高さを21センチ~22センチにして空間を無駄にしないよう設計した。棚の奥行は十分とってあるので本を前と後ろに二重に置くこともできたが、手塚本だけは取り出しやすいよう二重にはせず、4個の書棚を手塚治虫本の専用にした。
 書庫の入り口から見て左右の最上段2段をこれに当て、書庫A、Bと書庫C、Dとを作った。台の上に乗って手を伸ばせば、手塚本の取り出しと収納は難なくできるようになっている。

 しかし今回写真を撮る際には、カメラを両手で支えながら頭の上まで持ってゆき、更に腕を伸ばさないと最上段の撮影ができないことが分かった。出来上がった写真でピントが甘かったり、画面が歪んでいたりで良いできとは言えない。許されよ。

 なお、この文中では書棚A、B、C、Dで表示して本物らしく表現してあるが、実際は別物であり縦の区切りはない。

▼過去の遺物
 書棚Dの(20)には、古い 少年クラブ、冒険王、少年画報等が一緒に置いてある。これは私の投稿作品が掲載されているので捨てられず、今に至るまで保存されているのだ。
 手塚治虫氏の影響を強く受け漫画家になりたいと思っていた頃の遺物であるから、私にとっては手塚治虫と密接に関係のある物、としてここに置かれている。■

2017年8月21日月曜日

今こそ、プログラマの時代


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

── プログラミングの勧め

▼小学生へのプログラミング教育
 小学生への「プログラミング教育」必修化が検討されているという。
 私が育ったアナログ世代とは異なり、デジタルネイティブ世代を相手にする教育だから、教え方にもそれなりの創意・工夫が必要になるのではないかと思う。どのような教え方をするのか興味のあるところだが、そう簡単にベストの方法が確立されるとは思えない。失敗を繰り返しながら少しずつ良い教育方法が築かれていくことになるのだろう。

 どの世代が相手であろうと「プログラム作りに必須の技能」としてプログラマなら身に付けなければならないものがある。そういうものは適当な時期を選んでしっかりと教え込んで欲しいものだ。

▼分かりやすい文章
 たとえば「分かりやすい文章」を書く能力が求められる。プログラム作りに限らず最も基本的で必須の能力であるが、小学生が直ぐ身に付けられる類いのものとは思えない。

 どんな言語でも構わないが、日本語、英語、あるいはコンピュータ言語、何でも良いから「自分の考えを抜かりなく、誤解の余地なくしっかりと相手に伝える」ことができるようになってほしい。それができなければ、相手がであろうとコンピュータであろうと思い通りに動かすことなどできる筈がない。

▼誤解を与える
 政治家はよく「誤解を与えた」という表現を使って弁解しようとするが、これは「相手が間違って解釈したのだ」と主張し責任の大半を相手側に押し付けようとするものである。

 しかしそんな身勝手な言い分けはプログラミングの世界では通用しない。プログラムの記述で「誤解を与えた」としたら、それは自分の表現方法が間違っていた、あるいは自分の説明が足りなかったということを意味している。全責任は自分の側にあると知るべきであろう。

▼定年という壁
 ところで、私が定年を迎えて技術者としての職を辞さねばならなくなったとき、自分ではまだまだ技術者として生きていけるのに、と悔しい思いをしたことを覚えている。しかし今の社会はそういう制度になっているのだから仕方がない。更に続けたければ自分で会社を興すしかないのだろう。そういう才覚のない私めは、定年がなく長く続けられる仕事として芸術家の道を選べばよかったと思ったものだ。あるいは小説家になるという手もあった。たとえ売れない作家であっても、定年がなければ自分の気の済むまで仕事を続けられる。

 私はこれまでの経験から「プログラミングというのは文章を書くのと同じことだ」と思うようになっていた。「自分の考えを抜かりなく、誤解の余地なくしっかりと相手に伝える」ことができればよいのだと。それなら私にも続けられる。小説家になろう。いや、小説家にならなくても、プログラミングの道があるじゃないか。

▼昔プログラマ
 これ以後、私は大学教師としての職についたのだが、同時に「昔プログラマ」を自称するようになった。昔はプログラマだったが、今はもうプログラマではありませんよ、という意を込めた積りだった。しかし本当のところは「プログラマ」という肩書に執着していたのかもしれない。

(図:名刺)

 大学教師というのは実は世を忍ぶ仮りの姿であって、本当のところはこっそりとプログラマの積りになって、プログラム作りを続けてきたのである。教師としての自分の身辺で発生するいろいろな問題の解決にコンピュータを利用してきた。しかし誤解の無いように記しておくが、自分の身辺に係わる問題だけが対象であって、他人のための仕事をしてきた訳ではない。

 教材として使うテキストの作成、課題提出システムの構築、その他自分の趣味に関係するゲームプログラム(!)の作成も含まれている。金儲けが目的ではないから、自分に関心のあることだけを、誰の許可を得るまでもなく自分だけの判断でできるのだ。これほど自由な仕事はない!
 その間、いろいろなプログラム言語を勉強し活用してきた。C/C++, Perl, Javascript, VBA, ...

▼ソフトウェア危機
 昔「ソフトウェア危機」という言葉が叫ばれるようになった時代があった。コンピュータが強力になり、大きなソフトウェアの開発が必要になってきたのである。この調子で進むと沢山のプログラマを養成しなければならない。いや、日本の全国民をプログラマにしてもまだ人数が足りなくなると予想される事態になったのである。全国民であるから当然、赤ん坊も人数に含まれていた。

 赤ん坊プログラマをどうやって教育しようと考えていたのか、そこのところは明らかでないが、この問題提起のお蔭で「ソフトウェア工学」という分野が切り開かれ、当面の危機を免れることができたのである。

 このときは赤ん坊プログラマが話題になったが、流石に高齢者をプログラマにするという発想は出てこなかったと記憶している。何となれば、当時コンピュータの世界では「38歳定年説」というのがあって、ソフトウェア技術者が40歳以上でも務まると思っている人はいなかったからであろう。

▼高齢者プログラマ
 しかし今や、高齢者の雇用促進が求められている時代である。定年後も年金受給が可能になるまでの期間、どのように生活していったらよいかも問われている。たとえ雇用されなくても、有意義に過ごすテーマが必要ではないかと思う。

 私は、高齢者もプログラマを目指したらよいのではないかと提案したい
 定年後もプログラミングをしたいというような酔狂な人は少ないかもしれないがゼロではなかろう。昔、ソフトウェア技術者だった高齢者にもプログラマとして復活する道があっていいのではないか。

 高齢になっても小説を書き続けている作家は沢山いる。評判になるのはほんの一部の作家だけで、その陰には売れない作家も沢山いるに違いない。
 昔のプログラマにもプログラミングの道があるじゃないか。小説家に劣らず、プログラマになれる人材は沢山いるに違いない。売れない小説家がいるのなら、売れないプログラマがいてもいいじゃないか!
 しかも、プログラミングはボケ防止に最適なんですよ。

▼高齢者プログラマの心構え
 高齢者プログラマを目指すなら、次のような注意が必要である。

(1)金儲けは考えない
 高齢者は電話詐欺の餌食になりやすい。自分が作ったプログラムが他人に評価されるのはうれしいことではあるが、他人からの「いいプログラムですね。売れますよ!」とか「買ってくれる人を紹介しますよ」などという甘言に乗ってはならない。したがって金儲けをしたいという考えがあったら止めておくことです。

【注】私は公開するプログラムはすべて無料で使ってもらうことを前提としています。すべてのプログラムには「Copyleft」のマークを付けることにしています。

(2)短編小説をねらう
 企業でソフトウェア開発の経験があったからと言って同じような大型物件の開発に挑戦したりはしない方がよい。あれは大河ドラマのような大長編小説であって、一人で作るのなら短編小説、あるいはショートショート程度にしておくことである。

(3)手頃なプログラム言語を用いる
 使用するプログラム言語は、若い時代に使用した言語が馴染み易くていいかもしれない。しかしできるだけ無料で手に入るものに限定すべきである。

【注】私は60歳代になってからPerlを勉強しました。文法規則を守り厳密に記述しないと受け付けないモードと、いい加減に書いて「良きに計らへ」とシステムに任せられる怠け者向きのモードがあって、私のような怠惰な男には最高の言語なんです。お奨めしますよ。

▼作品の公開
 私の作品は、以下の場所に公開されています。参考にしてください。

 「Perl Program集

「昔プログラマ」改め「昔も今もプログラマ


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

 こうなれば、自分で作成するしかない! PerlJavascript にしようか。それとも 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処理系の問題なのか、

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