2017年9月1日金曜日
2017年8月21日月曜日
今こそ、プログラマの時代
小学生への「プログラミング教育」必修化が検討されているという。 私が育ったアナログ世代とは異なり、デジタルネイティブ世代を相手にする教育だから、教え方にもそれなりの創意・工夫が必要になるのではないかと思う。どのような教え方をするのか興味のあるところだが、そう簡単にベストの方法が確立されるとは思えない。失敗を繰り返しながら少しずつ良い教育方法が築かれていくことになるのだろう。 どの世代が相手であろうと「プログラム作りに必須の技能」としてプログラマなら身に付けなければならないものがある。そういうものは適当な時期を選んでしっかりと教え込んで欲しいものだ。 ▼分かりやすい文章 たとえば「分かりやすい文章」を書く能力が求められる。プログラム作りに限らず最も基本的で必須の能力であるが、小学生が直ぐ身に付けられる類いのものとは思えない。 どんな言語でも構わないが、日本語、英語、あるいはコンピュータ言語、何でも良いから「自分の考えを抜かりなく、誤解の余地なくしっかりと相手に伝える」ことができるようになってほしい。それができなければ、相手が人であろうとコンピュータであろうと思い通りに動かすことなどできる筈がない。 ▼誤解を与える 政治家はよく「誤解を与えた」という表現を使って弁解しようとするが、これは「相手が間違って解釈したのだ」と主張し責任の大半を相手側に押し付けようとするものである。 しかしそんな身勝手な言い分けはプログラミングの世界では通用しない。プログラムの記述で「誤解を与えた」としたら、それは自分の表現方法が間違っていた、あるいは自分の説明が足りなかったということを意味している。全責任は自分の側にあると知るべきであろう。 ▼定年という壁 ところで、私が定年を迎えて技術者としての職を辞さねばならなくなったとき、自分ではまだまだ技術者として生きていけるのに、と悔しい思いをしたことを覚えている。しかし今の社会はそういう制度になっているのだから仕方がない。更に続けたければ自分で会社を興すしかないのだろう。そういう才覚のない私めは、定年がなく長く続けられる仕事として芸術家の道を選べばよかったと思ったものだ。あるいは小説家になるという手もあった。たとえ売れない作家であっても、定年がなければ自分の気の済むまで仕事を続けられる。 私はこれまでの経験から「プログラミングというのは文章を書くのと同じことだ」と思うようになっていた。「自分の考えを抜かりなく、誤解の余地なくしっかりと相手に伝える」ことができればよいのだと。それなら私にも続けられる。小説家になろう。いや、小説家にならなくても、プログラミングの道があるじゃないか。 ▼昔プログラマ これ以後、私は大学教師としての職についたのだが、同時に「昔プログラマ」を自称するようになった。昔はプログラマだったが、今はもうプログラマではありませんよ、という意を込めた積りだった。しかし本当のところは「プログラマ」という肩書に執着していたのかもしれない。 大学教師というのは実は世を忍ぶ仮りの姿であって、本当のところはこっそりとプログラマの積りになって、プログラム作りを続けてきたのである。教師としての自分の身辺で発生するいろいろな問題の解決にコンピュータを利用してきた。しかし誤解の無いように記しておくが、自分の身辺に係わる問題だけが対象であって、他人のための仕事をしてきた訳ではない。 教材として使うテキストの作成、課題提出システムの構築、その他自分の趣味に関係するゲームプログラム(!)の作成も含まれている。金儲けが目的ではないから、自分に関心のあることだけを、誰の許可を得るまでもなく自分だけの判断でできるのだ。これほど自由な仕事はない! その間、いろいろなプログラム言語を勉強し活用してきた。C/C++, Perl, Javascript, VBA, ...。 ▼ソフトウェア危機 昔「ソフトウェア危機」という言葉が叫ばれるようになった時代があった。コンピュータが強力になり、大きなソフトウェアの開発が必要になってきたのである。この調子で進むと沢山のプログラマを養成しなければならない。いや、日本の全国民をプログラマにしてもまだ人数が足りなくなると予想される事態になったのである。全国民であるから当然、赤ん坊も人数に含まれていた。 赤ん坊プログラマをどうやって教育しようと考えていたのか、そこのところは明らかでないが、この問題提起のお蔭で「ソフトウェア工学」という分野が切り開かれ、当面の危機を免れることができたのである。 このときは赤ん坊プログラマが話題になったが、流石に高齢者をプログラマにするという発想は出てこなかったと記憶している。何となれば、当時コンピュータの世界では「38歳定年説」というのがあって、ソフトウェア技術者が40歳以上でも務まると思っている人はいなかったからであろう。 ▼高齢者プログラマ しかし今や、高齢者の雇用促進が求められている時代である。定年後も年金受給が可能になるまでの期間、どのように生活していったらよいかも問われている。たとえ雇用されなくても、有意義に過ごすテーマが必要ではないかと思う。 私は、高齢者もプログラマを目指したらよいのではないかと提案したい。 定年後もプログラミングをしたいというような酔狂な人は少ないかもしれないがゼロではなかろう。昔、ソフトウェア技術者だった高齢者にもプログラマとして復活する道があっていいのではないか。 高齢になっても小説を書き続けている作家は沢山いる。評判になるのはほんの一部の作家だけで、その陰には売れない作家も沢山いるに違いない。 昔のプログラマにもプログラミングの道があるじゃないか。小説家に劣らず、プログラマになれる人材は沢山いるに違いない。売れない小説家がいるのなら、売れないプログラマがいてもいいじゃないか! しかも、プログラミングはボケ防止に最適なんですよ。 ▼高齢者プログラマの心構え 高齢者プログラマを目指すなら、次のような注意が必要である。 (1)金儲けは考えない 高齢者は電話詐欺の餌食になりやすい。自分が作ったプログラムが他人に評価されるのはうれしいことではあるが、他人からの「いいプログラムですね。売れますよ!」とか「買ってくれる人を紹介しますよ」などという甘言に乗ってはならない。したがって金儲けをしたいという考えがあったら止めておくことです。 【注】私は公開するプログラムはすべて無料で使ってもらうことを前提としています。すべてのプログラムには「Copyleft」のマークを付けることにしています。 (2)短編小説をねらう 企業でソフトウェア開発の経験があったからと言って同じような大型物件の開発に挑戦したりはしない方がよい。あれは大河ドラマのような大長編小説であって、一人で作るのなら短編小説、あるいはショートショート程度にしておくことである。 (3)手頃なプログラム言語を用いる 使用するプログラム言語は、若い時代に使用した言語が馴染み易くていいかもしれない。しかしできるだけ無料で手に入るものに限定すべきである。 【注】私は60歳代になってからPerlを勉強しました。文法規則を守り厳密に記述しないと受け付けないモードと、いい加減に書いて「良きに計らへ」とシステムに任せられる怠け者向きのモードがあって、私のような怠惰な男には最高の言語なんです。お奨めしますよ。 ▼作品の公開 私の作品は、以下の場所に公開されています。参考にしてください。 「Perl Program集」 「昔プログラマ」改め「昔も今もプログラマ」 ■ |
2017年8月16日水曜日
(昔プログラマの) プログラミング奮戦記(その2)
|
2017年7月20日木曜日
新【悪魔の辞典】(8) 総理の友人
●総理の友人:
(1)こまったちゃん
(2)自分の言いたいことだけ言って、相手の話は聞かず、質問には答えないで逆に個人攻撃で返す、そういう性格の持ち主と(例外的に話ができ)頼み事さえも聞いてもらえる人
(3)「総理夫人の友人」とほぼ同義
(4)罪を犯しても訴えられることはない、と当初は信じていられる人
(5)中には、借りた金百万円を返そうとしても受け取ってもらえないという幸運な人もいる
(1)こまったちゃん
(2)自分の言いたいことだけ言って、相手の話は聞かず、質問には答えないで逆に個人攻撃で返す、そういう性格の持ち主と(例外的に話ができ)頼み事さえも聞いてもらえる人
(3)「総理夫人の友人」とほぼ同義
(4)罪を犯しても訴えられることはない、と当初は信じていられる人
(5)中には、借りた金百万円を返そうとしても受け取ってもらえないという幸運な人もいる
【注】「総理の友人」に相応しい“意味” を募集したところ、残念ながら応募はありませんでした。多分、官邸の方から何らかの圧力があったのではないかと思います。
2017年6月30日金曜日
マンホールの蓋が新しくなった
家の周辺道路で、最近マンホールの蓋が新しいものに交換されつつある。今日、いよいよ我が家の前の道路上でも、その交換作業が始まったようである。
私は直前になって、記念のため古い蓋の写真を撮っておきたくなった。家の前ではもう作業中なので、隣の家の前にあるまだ交換作業に取り掛かっていない場所にあるマンホールの写真を撮ることにした。
すると作業主任らしき人が近づいてきて挨拶をしてくれた。いい機会だと思い、いろいろ聞いてみた。
新しいマンホールの蓋の文様を尋ねたら「普通のものですよ」とのこと。あの「ツツジ」と「ツバキ」の川崎市の新しいバージョンを期待していたのでちょっとがっかりしたが、途中用事があり外出から帰宅すると新しいものに交換されていた。見ると、やはり「ツツジ」と「ツバキ」の新しいバージョンだった。作業主任は「カラー版ではない普通のもの」という意味で言ったらしい。
中央にある市の花「ツツジ」を、市章と7つの市の木「ツバキ」が囲んでいる。ツバキの数は7つの区を表しているらしい。花には7つの穴があるので雨水用マンホールであることが分かる。下部に「傘のマーク」と「16-M01」の文字が入っている。
その下にある白いものがカギらしい。古いマンホールは自由に開けられたが、これは特別な工具がないと開けないようになっている。テロ行為に利用されないよう配慮されている。大雨でマンホールの蓋が飛ぶ事故がよくあるが、そういう心配はなくなったことになる。
最近は、地域ごとに斬新なデザインのマンホールを作り互いに競い合っている。その写真を蒐集しているマニアもいるようだ。以下に示すようにカラー版にもいろいろなバージョンがある。私も蒐集してみようかな、とふと思った。
私は直前になって、記念のため古い蓋の写真を撮っておきたくなった。家の前ではもう作業中なので、隣の家の前にあるまだ交換作業に取り掛かっていない場所にあるマンホールの写真を撮ることにした。
すると作業主任らしき人が近づいてきて挨拶をしてくれた。いい機会だと思い、いろいろ聞いてみた。
新しいマンホールの蓋の文様を尋ねたら「普通のものですよ」とのこと。あの「ツツジ」と「ツバキ」の川崎市の新しいバージョンを期待していたのでちょっとがっかりしたが、途中用事があり外出から帰宅すると新しいものに交換されていた。見ると、やはり「ツツジ」と「ツバキ」の新しいバージョンだった。作業主任は「カラー版ではない普通のもの」という意味で言ったらしい。
中央にある市の花「ツツジ」を、市章と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日土曜日
高齢者
|
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ラジオ局を通じて質問のメールを送ってみた。しかし数ヶ月過ぎても何の回答も得られない。彼にも分からぬことがあるのであろう(しかし返信なしは気に入らん)。私はこの問題の解明作業を今後も続けようと思っている。ご存知の方は是非ご教示いただきたい。■
|
2017年4月29日土曜日
アナログ写真の思い出
アナログの時代からカメラを愛用してきた私は、カメラの技術進歩を目の当たりにしてきたので、この辺りでアナログ写真に関する思い出(ほとんど静止画ばかりであるが)をまとめておこうと思う。同時に、昔からやっていた写真撮影での前準備や後処理で苦労した際の詳細を忘れないよう記録しておきたいと思う。
▼使用したカメラ
私がアナログ写真の撮影に使用したカメラを以下に列挙する。
![]() (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フィルムを使っていた。

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

カメラの底部を開いてフィルムを装着する
(3)撮影中の迅速なフィルム交換
フィルムを使い切ったら新しいフィルムと交換しなければならない。野外の撮影では、交換作業は明るい太陽光の元でやることを覚悟しなければならないから、撮り終わったフィルムを外し新しいフィルムと交換する作業を手際よく行う必要がある。これがスマートにできないと、フィルムの一部が露光してしまったり運が悪いと写真撮影の努力がすべて無駄になることもある。
(4)写真撮影:必ずレンズキャプを外す!
うまく写真を撮るにはどうすればよいか、と聞かれたプロの写真家土門拳氏は「先ず、レンズキャップを外しなさい」と答えたという有名な話が残っている。これは名言であると言われていた。
しかし最近のカメラ事情しか知らない人にとっては“何を馬鹿なことを”と思われるかもしれない。当時のカメラは、光の入射経路がファインダーとレンズは別系統だったのでキャップをつけたままでもシャッターが切れたのである。初心者の撮影ではそういう失敗が多かった(えっ? 私はそんな失敗しませんでしたよ、私は!)。
その他、以下のことに配慮する必要がある。
(5)写真撮影:絞りとシャッター速度を決める
(6)写真撮影:“焦点深度(*1)”という概念をよく理解した上で、焦点を合わせる最適の場所を決める(まだ自動焦点などという便利な機能はなかった)
【注】(*1)焦点深度とは、ピントが合っている位置から距離があってもピントがシャープに見える(つまりピントが合っているように見える)範囲を言う。一般に絞り値が大きいと深度も深くなる(7)写真撮影:画面の構図をよく考える
(8)写真撮影:シャッターチャンスを逃さない(*2)
こういった事項を常に頭に入れておかないと写真撮影はうまくいかないのだが、今では(8)だけ注意していれば何とか写真らしきものは撮れる。楽なものだ。
【注】(*2)デジタル画像での撮影では、シャッターチャンスを逃さないようにするのがすべてである。特に静止画を撮るのであれば構図などあまり気にしなくてよい(プロレベルの人は、この文章を読んで眼を剥いたりしないでください。私のような素人カメラマンレベルではこの程度で良かったのです)。(9)カメラの関連部品、アクセサリー類を紛失しないよう管理する
デジタルカメラでは、解像度を高く設定しておけば、撮影後の処理で適当にトリミングすることにより結構良い写真が撮れるものである。
▼撮影後の処理
(1)フィルムの現像(写真屋に依頼する)
撮影済みのフィルムは、パトローネごと写真屋に渡すと、数日後にベタ焼き(いわゆるコンタクトプリント)と簡易なケースに収められたネガフィルムを受け取れる。このケースに撮影データ等を記録して保存する。

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

(3)自分でプリントする場合
・焼き付けと引き伸ばし作業
私は写真の焼き付けと引き伸ばしは、普段は写真屋に頼むことにしていた。しかし写真が大量になるとプリント代がばかにならない。大学時代の山登りや、夏季の合宿山行では大量の写真を撮るのでプリント代を節約するため自分で焼き付けと引き伸ばし作業をするようになった。しかし最大の理由は、自分でトリミングなど自在に行って大きな素晴らしい山岳写真を作りたかったのである。
引き伸ばし機は少し高価だったので兄に買ってもらい、暗室はないので夜間家の風呂場で引き伸ばし作業をしたものである。大学の写真部の暗室を借りてやったこともあった(私は部員ではなかったが)。
・印画紙を選ぶ
サイズと感度を決め、必要なものを用意する(まとめ買いをするため、神田によく買いに行ったものだ)。
印画紙の号数は数字が大きくなるほどコントラストが高くなる。通常は3号か2号を使用していた。 引き伸ばし機にフィルムと印画紙を装着して露光する訳であるが、もはや細かい作業は思い出せない。概略、以下のようになる。
▼前準備
暗室内は赤色灯の下で作業を行う。ネガをネガキャリアに挟んで引き伸ばし機に設定し、印画紙を置くイーゼルは引き伸ばし機の台上に置く。拡大されたネガの像のピントを合わせる。
▼露光
像の大きさとピントが決まったら露光する。
▼現像
露光が終わったら印画紙を現像液のバットに入れる。像が現れてくる。
▼停止
現像が終わったら印画紙を取り出し停止液に移す。
▼定着
停止が終わったら、停止液をよく切って定着液に入れる。
▼水洗
定着が終わったら水洗用バットに移す。
▼乾燥
水洗が終わったら乾燥させる。これで完了です。
もはや細かい作業手順は思い出せない。ただ、露光時間を決めるのが一番難しかったことだけは覚えている。写真で一番難しいところは何かと聞かれたら、今でも私は迷わず「引き伸ばし時の露光時間の選び方」と答えるだろう。
▼自分で引き伸ばした作品
(1)大学時代の北アルプス山行の記録から

前穂高岳 唐沢岳 北穂高岳

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

釣り(利尻の子供達と)
2017年4月14日金曜日
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プログラムである。
|
#!/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処理系の問題なのか、
教えていただければ幸いです。■
登録:
投稿 (Atom)






































