2017年4月30日日曜日

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

・1999-05-01 社内情報誌に掲載
・1999-11-15 個人ホームページ(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処理系の問題なのか、

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

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日土曜日

歩き方について

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

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

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

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

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

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

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

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


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

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

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

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