コンピューターって何だろう?
◎電王戦に思う
 下記の「◎バグ取りの思い出」にあるように、バグの原因がなかなか分らず、行き詰まってしまった後、全く無関係のタイミングでその答えが浮かんでくることがよくあります。私も知るひとぞ知る、同一RAMをメインと割込みの両側で扱うことによるバグ(「ピックマイコンによるシーケンス制御」拙著CQ出版、に詳述)を、3日ほど考え抜いても分らず、朝起きて体を起こす瞬間に分ったことがあります。

 バグ取りと学問の真理探求を同列に比較するのは、少しオコがましいとは思いますが、数学の世界にもおなじようなことがあるらしく、位相幾何学の創始者である数学者ポアンカレーがなかなか解けなかった難問の解法が、馬車から降りるとき突然に浮かんだという話しは数学史上で有名な事件の一つとして伝えられています。
 数学者で文化勲章受賞者の岡潔氏の「春宵十話」にこのポアンカレーの体験と似たようなことが書かれていて、ある難問を何ヶ月に渡って一心に考えているときには解法が浮かんでこないで、学会か何かで、北海道行きの船に乗っていた時に突然、その解法が分ったと思ったということです。しかし、札幌での学会中も帰途の旅行中も、その分ったと思った解法について、頭の中で確認しようとはせず、京都に帰ってようやく、鉛筆とノートを取って、それを確認したということです。
 岡はポアンカレ-の言葉を借りて、「数学の目標は真の中における調和であり,芸術の目標は美の中における調和である」と言っていますが、この時彼の心の中に、ある調和への直感がひらめいたと思われます。その調和の確信が強いため、あらためて直ぐに、論理体系として組み立てて、確認し直す必要を感じなかったということになります。
 彼はその調和の確信がある理論は、いくつかの論理上の誤りが指摘されても、全体が崩れることははないが、いくら大掛かりな理論でも、その調和の裏付けがないものは、一つの間違いの指摘で全体系が駄目になってしまうことがあると言っています。

 (つづく)
◎心のやすらぎ
 下の写真は「インドまで7000キロ歩いてしまった」(権二郎著、彩流社)にある、バングラディッシュの道路の写真です。

 『翌朝、気合いを入れて早起きした。6時ごろ宿を出てCNG(小型三輪自動車)でムシュラバスに戻り、空が明るくなりはじめるのを待って歩いた。歩きはじめてしばらくすると深い朝霧がかかった。乾季の天気のいい朝はそうなるようで、霧の中からリキシャーが現われ消えていくようすは一幅の絵を見ているようだった。
(中略)
 ところで、グーグルの地図に道路が載っていなかった(印刷すると消えていた)のはカッラとノライルの間である。たしかにその部分は少し道幅が狭く舗装も荒れていた。しかし、並木が道路を完全に覆って涼しく、道理で航空写真ではわからないはずだった。まるで森林浴でもしているような清々しい道だった。
 翌日、ドラガスタから歩きはじめて、お昼ごろからジョショールに着いた。ジョショールは大きな旧都で、数日ぶりのにぎやかな町だった。
 ジョショールの町外れまでくると並木の印象的な道があった。太いものは目通し2mもあろうか。そんな巨木が両側に植わり、行き交う人びとや車がずいぶん小さく見えた。それがインドに通じるメインルートで「ベナポール35km」の標石があった』(p365)
 
 グーグル地図の欠点はこういうところに限らず、市街地でも道路がはっきりしないことだそうです。グーグル地図は万能ではありません。学生には学生用の地図が必要だし、犬には犬用の地図が必要なのだと思います。
 それはさておき、この写真を見て、グーグルにあまり縁のないバングラディッシュが貧しくて、それに振り回されている日本が本当に豊かなのか考え直して見たいものです。

◎ここでクイズです。
彼が、ミャンマーの街道を歩いていたとき、道端の路程標が、例えば1K,1.1K,1.2Kとススんで1.7Kまでは見つかるのですが、どうしても、1.8Kと1.9Kがみつからないで、次に2Kと表示されて、また2.7Kまで行って、次は3Kが見つかるそうですが、その原因は何でしょうか? ’K’はミャンマー文字で表示されていて、外人には読めない文字になっています。
《答え》 路程の単位がマイル(1.6K)のため、その下の単位がハロンで、8ハロンが1マイルになるからだそうです。
 そんなのあるんだ。(ハロンは現在、日本の競馬の距離の呼称に使用されています)。
◎コンピュータの勉強の今

 半年前くらいから、アンドロイド端末に図形を描きたいと思って勉強を始めました。
 まず、この解説本を捜すのが大変で、この話しの最後の頃になっての話しですが、OPENGL(オープンジーエル)についての書籍を捜す必要が生じ、現在技術書については最も充実している秋葉原の「書泉」に行って、店員に’OPENGLの本はどこにありますか?’と聞きました。もう技術書の種類が多くなりすぎて、それがどこにあるか捜すのさえ面倒になってきて店員に聞くのが一番早いことになってしまっています。その場所から自分の希望する本を捜すのがまた大変です。
 苦労して捜し回り、次の3冊を勉強することになりました。

 「Andorodプログラミング入門」(清水美樹著 工学社)
 「Andorod・NDK入門」(清水美樹著 工学社)
 「Andorod・NDK演習」(清水美樹著 工学社)

 もちろんこの間、インターネットで記事を探し回り、他の何冊かの本を買いましたが、Cを基本言語にしてアンドロイドにプログラムを書くというので「NDK」をマスターしなくてはということになった結果これらの本を選びました。
 各々を繰返し2回以上読み、分らないことは、出版社にメールして聞きました。幸いなことに、いつも著者自らが即返答してくれるので大変助かりました。
 そして、さんざん苦労して1ヶ月弱でようやく、1万円くらいの中華PADに三角形が1個表示されました。
 そこで、著者にメールで
”ようやくご著書の指示に従って3角形を表示することができました。これから4角や円を表示するのには、どうしたら良いのでしょうか”
と聞いたところ、なんと次のような返事メールがきました。

NDKで円とのこと、ちょうど今AndroidのJavaのほうでグラフィックを勉強しておりまして、OpenGLもあるのですが、円の書き方はまだつかめておりません。
まことに恐縮ながら、降参は早いほうがよいかと思ってお返事差し上げました。
なにかわかり次第御報告いたします。
よい方法が見つかりますようにお祈り申し上げます。

 これにはさすがにトホホとなりました。本3冊で3角形一個で終りかよと思いました。
 OpenGLでは、3角形の組み合わせで4角も円もかくのですが、ベクトル(方向性)があって、点の順序が違うと3次元の裏側になってしまって表示されないのです。そんなことも分らないで、トライ&エラーの結果ようやく分ったりして、無事円や四角を任意位置に描くことができるようになり、著者にお礼の報告することができました。
 この3冊の本は説明が懇切丁寧で、コマンドラインからの指示の方法や、その理由を克明に説明してくれています。Cのポインターのポインターについてなどを丁寧に説明しています。
 Cの一応専門家である私に結局わからない部分も多いのですが、とにもかくにも最後まで到達させてくれて大変ありがたい本でした。

 「1時間でマスターするアンドロイド」という本があるくらいですから、もっと簡単に3角形を端末上へ描くことができる本があるはずです。
 しかしそれらは、全てと言ってよいほど、「このソフトを立上げ、ここをクリックすればこうなり、さらにそこで表示される画面のここをクリックし、出てくるダイアログボックスにこう書いて「OK」を押して云々・・・・・」、とういう具合で、途中で指示された通りにしても、画面がそうならない、そしてどうやってもそうならないで’お終い’のことが本当に多いのです。
 「アンドロイドプログラミング入門」という種類の本は一杯出ていますが、どれを見ても、私のパソコンに(説明書とおりにすると必ず順番で)出てくるある画面についての説明がなく、どっかにこの画面の説明がないかと、川崎、神田の本屋をめぐり歩いたものです(その原因は結局、Ver.違いでした)。
 特にアンドロイドは、グーグル社を始めとする数社の提供するソフトの組み合わせで成立し、フリーであるため統一が取れていなくて、各ソフトのVer.違いは重大な問題を生じてしまうことが多いのです。

 話しは違いますが、マイコン本体の話しです。
 PICを始め、各解説書の多くが、Cのテンプレートを提供し、そのテンプレートのソースをこのワークスペースのここに置いて、こう操作すればこう動作するという説明だけになってしまっています。ソースについての解析や説明は全く無しです。
 この場合も、こうなるはずだと書いてあるのに、そうならないで’挫折’ということが多いと思いますが、それ以前に、希望通り動作しても、何か得ることはあるのだろうかと思います。
(ネットに「ところで結局、俺は何をしたのだろうか?」というような感想を時々みかけます)。
 また、自由な応用や発展につながるのだろうか?と思います。
 本当に、こんなことでよいのでしょうか

 その点、アセンブラの仕事は誰でも分りやすく、楽しい作業だと思うのは私だけでしょか。
 マイクロチップ社もCでなく、アセンブラのサンプルを多く提供してもらいたいものです。
 USBのサンプルの場合、
    f (!usbDeviceInfo.pEndpoint0->status.bfTransferComplete)
     return USBHostIssueDeviceRequest ( device->address, USB_SETUP_HOST_TO_DEVICE,
                     (WORD)stringType,stringLength,(BYTE*)string,,
                     USB_DEVICE_REQUEST_SET,device->clientDriverID );
 これでも随分簡単な方ですが、こんな、符牒みたいな物の複雑な組み合わせなんて、本人(グループ)以外理解できるのだろうかと疑問に思います。
 (繰返しになりますが私は15年間、CでWINDOWS上を走るソフトを書いてきた誰が見てもCのプロ?だと思うのですが)。

PS)ここで、上記3冊の本を紹介したことを、著者にメールしたところ、次のような返事が来ました。
 
清水です。ご紹介いただきまことにありがとうございます。
あのあとJavaでOpenGLを勉強しなおしました。
Androidのサンプルプログラムのみで勉強しました。
難しくて難しくて頭の毛が総立ちになりそうでしたが、解説できるくらいに飲み
込むことができました。
でも三角形です。
回る三角形です。テクスチャも貼れます。
でもやはり三角形です。

まだまだです。デハデハ。

 原点にこだわっている著者に原理人間と仇名をつけました。
 上記中に”難しくて難しくて頭の毛が総立ちになりそう”とありますが,今のマイコンの勉強はそんな感じです。

◎グーグル情報とは

 アップル社のスティーブ・ジョブズは、Whole Earth Catalogueに多大なる影響を受けたうちの一人である。名スピーチとして有名な、スタンフォード大学の卒業式のスピーチの中で、Whole Earth Catalogueについて触れている。
(Whole Earth Catalogueとは、直訳通り、全地球カタログ(世界カタログ)とでもいうべきものでした)。

それはまるで、Googleが出る35年前に遡って出されたGoogleのペーパーバック版とも言うべきもので、理想に輝き、使えるツールと偉大な概念が、それこそページの端から溢れ返っている、そんな印刷物でした。

スチュアートと彼のチームはこのWhole Earth Catalogueの発行を何度か重ね、コースを一通り走り切ってしまうと最終号を出しました。それが70年代半ば、私はちょうど今の君たちと同じ年頃でした。
最終号の背表紙には、まだ朝早い田舎道の写真がありました。君が冒険の好きなタイプならヒッチハイクの途上で一度は出会う、そんな田舎道の写真です。写真の上にはこんな言葉が書かれていました。

Stay hungry. Stay foolish.
(ハングリーであれ。馬鹿であれ。)

 それが断筆する彼らが最後に残した、お別れのメッセージでした。
それからというもの、私は常に自分自身そうありたいと願い続けてきました。そして今、卒業して新たな人生に踏み出す君たちに、それを願って止みません。

 そしてジョブスの一生は、Whole Earth Catalogueの精神に真っ直ぐに従い、
「誰もがパソコンを通じて情報にアクセスできる、公正な社会をつくりたい」という理想を追求し続けたものでした。

 このことについて言いたいことは一杯ありますが、
 まずジョブスの一生は自分の我がままを徹すことができ、あまり手本にすることができないほど極めて稀有な強運に満ちたものだったということです。

 次に、この有名な”Stay hungry. Stay foolish.”を、括弧内のようにハングリーであれ。馬鹿であれ)と直訳するのはおかしいという意見が多数を占めていることについてです。この”Stay foolish”.を、”訳知り顔をするな”という程度の意味で、バカであれとは言っていないとか、”Stay hungry”を”好奇心を失うな”ということを言っていて、ハングリー感を持てとは言っていないとかの意見があります。
 しかし、”Stay hungry”.は”ハングリーであれ”、” Stay foolish”は”バカであれ”という意味でそれ以外の言外の意味などは決して持っていないものだと思います。一人一人の人間なんてバカな存在だと思いませんか、万有引力で月の動きを捉えたニュートンは、「私は砂浜で小さな貝をひろったようなものだ」と言っています。
 また人間がハングリーな存在であることも間違いありません。自分は生活に余裕があってハングリーでは無いと思っている人も、明日にはアッというまに、ハングリーになってしまうことは、歴史上繰り返されてきたことです。そのことを決してわすれてはいけません。

 人間は自分が hungryであることも foolishであることも、日常の生活の中で、くり返し自覚し直さなければならないものだと思います。

 パソコンは、庶民的な知恵や情報を無数に集めれば、いわゆる賢人の知恵を越えられるというアメリカ的な大衆思想によっています。そして、現状のような情報の氾濫時代を到来させていますが、次のことを忘れていないでしょうか。

  @いくらたくさんの情報を集めても、バカはいつまでたってもバカである。
  A人間は、自分の周囲の膨大な情報をまとめ、簡単には自らを適確にコントロールできない存在である。
 
 私は携帯を持っていませんが、電車の中で携帯に夢中になっている大人達をみるたびに、(携帯やパソコンなんて大の大人が凝るようなことではないのに)と思います。

PS)当社にはアメリカの広告集アメリカン・アドバタイジングの30年版〜60年版が揃っています。あまりWhole Earth Catalogueとは比較にならず、自慢にもなりませんが。

◎マイコン・マスターの事はじめ

◎トランジスタ技術誌2010年6月号、「匠たちに学べ」(川原強電子研究所篇)より抜粋

 工業高校から基督教系の大学を出て,考えるところあって一般企業に就職することなく父と兄の経営する会社に就職し,11年後に独立しました.
 勤め先が最初からほとんど個人企業だったため、独立に際して、いわゆる清水の舞台を飛び降りるような決心の必要はありませんでした.人間が文系で,たいへん不器用(2.54ピッチがはんだ付けの限度)なうえ,大のパソコン嫌いのため,すべて食べるための独学とわりきってフーフー言いながら技術を身につけました.それは好き嫌いにかかわらず,ゼロからコツコツと知識を積み重ねていかなければならないという最初からの覚悟を生むことになり,かえって良かったと思います.「他人にあまり頭を下げたくなかったら独自技術を身につけるしかない」というのが当時の座右の銘でした.


ソード社(旧)の椎名社長ご来訪
-------------------------------------------
抵抗やコンデンサを知らない商社営業マンからのスタート
-------------------------------------------
 電気部品販売の営業マンとして社会人のスタートをきりましたが、そのうち兄が自動制御盤の製造を始め,その営業をしながら自分でも何か技術を身につけようと思い,当時開発され登場したサイリスタの勉強をはじめ,トランジスタ回路を見よう見まねで組み始めました.本当に電子回路については何も知らず,工業高校の友人を喫茶店に呼んで抵抗やコンデンサてどんな物で何処で売っているのかと聞いたものでした.
 そのころはリレー配線の回路によるシーケンス制御が全盛の高度成長期で,その優秀な職人たちやそれを扱う工場の活気ある雰囲気に接したことは良い経験になりました。

 ある日、兄の会社から、マイコンの仕事があるんだけどという電話があり、当時話題になり始めていたマイコンの勉強を始めることになりました。
 そこで、秋葉原の日立のパソコンショップのゲイン(ちなみにNECは有名だったビットイン)に勤めていた工高の友達に電話で、マイコンって何なのかと質問し、適当な解説書を教えてくれるよう頼みました。そしたら、何か曖昧なことを言って、ハッキリと教えてくれませんでした。「チャンと教えてくれれば良いのに」と少し恨みに思いましたが、その後、勉強することによって一応マイコンとは何かが分ってきて、悟ったことは、「マイコンというものは、簡単に一言で説明できるものでもないし、一冊や二冊の解説書で理解できるものではない」ということです。

 一昔まえまでは、東大とか一流大学の権威は相当なものでしたが、今はその人格に後光がさすような権威はなくなっていると思います。それは、彼らがタレントその他でテレビに盛んに露出し、案外に平凡な言動に接することが多くなったことと、もう一つ、現在、時代のスターであり技術の頂点とされているマイコンやパソコンの勉強が、少しの解説書を一通り読むことによってマスターできることではなくなってきたことによると思います。例えば電気機器にしても、昔はその種の参考書をよく読めば、周囲にその電気機器の問題点など一応のことが言えたのですが、コンピュータはそうは行きません。C言語をマスターするには、少なくとも数冊の本と、1年間の習熟期間が必要です。さらにWINDOWS上で走るソフトについて知りたいと思ったら、その何倍もの参考書と期間がそれぞれ必要になると思います。そういう期間を経ることができるのは、本人の努力と周囲からのチャンスが必要で、それがなければマイコンのマスターという目的は、もしそれを目指したとしても必ずしも達成することができません。ですからマイコンの世界は殆ど学歴に関係ない世界なのです。
 マイコンの本の著者に東大出身者を見つけることは殆どありませんし、東大を出たからと言って、大概の場合、パソコンのプログラムを自由にあつかうことはもちろん、プログラム製作に関して適切な指示もできないのが現状だと思います。

 とにもかくにも頑張ってマイコンなるものをマスターしたときの結論は、以下のようなものでした。
 「マイコンはシーケンス回路を抜くことができない。何故なら、シーケンス回路のマスターに比較して、マイコンは余りに難し過ぎるから」

 このことが後の「連枝」(れんり)の開発に繋がっていったわけですが、現在でもほとんどの工場のラインの制御はシーケンサの組み合わせによっていることを考えれば、この時の結論は決して間違っていなかったと思っています。

 ◎よく、パソコンやマイコンなんて簡単だという態度を取る人がいますが、そういう人は、よほどの馬鹿だと思います。現に知れば知るほど、こんなに難しい(面倒くさい)ものはないのにと思います。
◎コンピュータの頭の中
 草分け時代のインテル社に仕事を下請け依頼していた日本の電卓メーカーのビジコン社を中心に発明された現在のマイコンは、他の大型コンピュータと同じ0と1の組み合わせですべてのプログラムを書いていきます。
 If A then B else C(もしAならばBをする、そうでないならCをする)
という文章のみの連続で書いていくわけです。
もちろんその変形のfor( ; ;  ) とかwhile(){ } とかの文章もありますが、その要素となるものは、

 もしそこが1ならばここは0
 もしそこが1ならばここは1
 もしそこが0ならばここは0
 もしそこが0ならばここは1

 この4つの論理のみによってすべてのプログラムが成立しています。
例えば、もし34876ならば9876、でなければ1432 という論理も、上4つの論理を数十回組み合わせれば構成することができます。

 これによって、ある統一された世界、例えばブログ作成ソフト、閲覧ソフトを形成します。
 それを成し遂げるには、大変な根気と過去の蓄積が必要になります。その中には多少の間違いがどうしてもあり、それをバグとして、今ではユーザーはそれに目をつむって使用するのが大体の常識になっています。

 考えて見れば、すべての人間の思考が0と1に分析できるとすれば、何でもマイコンでできるという仮定がなりたち、現にそれに向かって世界が動いているように見えます。
 当然、各自が勝手に考えて0と1の組み合わせを考えるので、ソフトの世界は多岐にわたり、複雑化していくことになります。
 それで、アセンブラが生まれ、ベーシックが生まれ、O/Sが生まれ、C等の高級言語が生まれ、数々のソフトが生まれました。その生まれたものは必ず何かの装置に使用されるので、実績として残ります。生まれたすべてのものが残ってしまうと言っても過言ではありません。
 現在、私はウィンドウズ上で走るソフトをVISUALL−Cというソフトで書いていますが、問題が起きてもその参考書はありません。本屋に行っても、ゲームはオフィス用のソフトの解説ばかりで、私とは違う手法で書かれたものばかりです。それはゲームソフトを作る人にとっても同じで、本屋に行っても、自分のゲームを作るソフトの解説書を見つけるのは非常に困難になっていると思われます。それほど多岐にわたっているということです。
 自分自身の蓄積や、そのことに関わった先輩に聞く方法のみになります。
 VISUALL−C(本体、数万円のもの)の場合、マイクロソフト社に質問すると、1問あたり、¥33,200なりが取られます。私の現在持っている旧Ver.6.0(註)であればその有料のサポートさえしてくれないのです。

 一昔前は、MS/DOSの中身をプロは大体知っていて、自分のプログラムはもちろんOSの一時的改造までやって、縦横にパソコンを利用したのですが、今のWINDOWSは何をやっているか、中身が誰もわからない状態になって、ただその提供されている関数(API)を利用するのみになりました。
 O/Sの奴隷状態といっても過言ではありません。
 マイコンやパソコンが便利だと言っても、それは何の問題もなく自由に使っている間の話で、少し違った問題に関わると、またその0と1の多様な組み合わせにはじめから取り組まなくてはなりません。

 マイコンやその応用装置であるパソコンが、今後、徐々に統一されて使い方も段々、簡単になっていくのでしょうか。
 私は決してそういうことはないと思います。
 これからいよいよ複雑になって、決して統一されることはないはずです。
 マイコンが発明されて、40年近くたって30年以上関わってきましたが、この間、決して簡単になることはなく、確実に複雑になって来ていて勉強することがますます増えてきています。呆れるばかりのことです。
 あと2、3年で携帯を含むパソコンの世界も話題性が尽きてしまい、あと10年でその有用性に疑問が投げかけられ、20年で、こんな非効率なものは駄目だ(少なくとも限定的なツールに過ぎない)ということになると思います。

●マイクロソフト社のWINDOWSを支えたのは、ワードでもエクセルでもなくこのVISUALLC 6.0だというのはプロのソフト屋の間の定説です。
 それを支えたのは一人一人の(大概の場合貧しい)ソフト屋の頑張りなのに、高額なサポート費用をとり、さらにそのサポートさえもやめてしまうというのは、何て横暴なんだと思います。私の場合、質問の答えが「WIN32 API リファランスマニュアルの何ページに出ている」という数秒の答えだけで、上記金額を取られました。それとは別に、VISUALL C上のバグを発見した時は、未解決のままで終り、返答も保留のままでした。
 やがて、一般のパソコンのO/Sが無料のアンドロイドに統一されてしまう見通しが出てきた時、「ざまあ見ろ!」と心からの快哉を叫びました。
◎MS/DOSの頃の話
 まだパソコンがMS/DOSで、メモリーが(64Kのセグメントが16枚)=1メガの壁があったころの話です。
 先輩が、ある大手企業に自分のソフトを納入にいったときに、与えられたパソコンのメモリー容量が足りなくなってしまいました。内蔵プログラムを見るといろいろ余計なソフトが入っているので、それを’削除して良いか?’と同室の社員に聞いたところ、’困ります’ということでした。メモリーが足りなければ全く仕事にならないのです。
 そこで、無断でディレクトリーを整理して、あまり意味にないソフトをどんどん削除してしまい、自作ソフトを納入して帰って来たと言っていました。

 一応、社員としては、どんな内蔵ソフトも削除されたら、悪い結果は有っても、良いことはないので’ノー!’というでしょうが、それではこちらが困ってしまうので、独断で処置したわけですが、別にその後、何の苦情もありませんでした。本当に使いもしないソフトのみ削除したからです。
 どんな仕事にも政治的判断が入りますが、この場合完全にノーと言われたことを実行したわけなので、とても印象に残りました。

 現在は、パソコンもメモリーもギガ単位になり、メモリー不足になることが殆ど無くなりましたし、もしメモリー不足という同じ状況が生じたとしても、パソコン内部が複雑になりすぎているので、独断で不要のソフトを削除してしまうということは不可能でしょう。
 自分のパソコンでさえ、目の前の使いそうもないソフトを削除するのは相当な思考と勇気が必要なのですから、他人のパソコンのソフトを整理するなどということは、考えることさえ出来なくなりました。

◎コンピュータは万能か
 現在の知恵の代表選手はコンピュータです。さてコンピュータの知恵とは一体何でしょうか。ゼロから考えて見ましょう。

 コンピュータは何も考えません。自分はソフト屋ですが、コンピュータはただプログラムされたように正確に動くだけで、それがどんなに馬鹿げた、無意味な行動であっても、只その通り動作するだけで、暴走しても全く我関せずです(暴走先のプログラムを淡々とやっていて、周囲の人間があわてているだけです)。
 このことはいくら言っても言い足りないくらいで、すぐ人間は、コンピュータはすごい、こんなこともできる、あんなこともできると言って、何かコンピュータ自身が考えているように考え勝ちです。
 プログラマーが人間の知恵らしいものを書き込んで、あたかもコンピュータが考えている風にしているのですが、そうだとしても書き込める人間の知恵というのに明確な限界というものがあって、簡単に言えば単純なことしか書き込めません。

 私の身近な例では最近、病院の受付がコンピュータ化されて、受付から支払いまで、すべて1枚のカードでできるようになっていて、とてもすごい事をやっている印象を受けます。しかし、これもとても単純なことの積み重ねで、例えば病院のある科の医者にかかるか、かからないかは、0か100%です。55%かかるというようなことは一切ありません。
 ものごとの価値が0〜100%の間のどの値いでもとるとなると、そのことに関するプログラムが俄然、困難になってきます。
 たとえば冷蔵庫の中の整理に関するプログラムを作ることはできません。この種のプログラムは単なるソフトで、何をつくるわけのものではなく、画面上の処理で済むことなのに、それでも不可能です(この発言はコンピューターを万能と思っているマニアな人の思考に挑戦しているつもりです)。
 腐っているかいないかも食物によって全然日数が違いますし、たとえ腐りかけていても料理の種類によっては使用した方が良いことだってあります。それを利用する人のスケジュールや好みによっても変化してくるでしょうし、人間が複数であればもっと複雑になります。
 個人の冷蔵庫に対するプログラムができないのですから、誰がどう使用するかわからない汎用の市販冷蔵庫に対するプログラムは全く不可能で、その種のソフトを冷蔵庫1台1台に付録としてつけることはできません。

 プログラムというものは’if then * else *’と書いていくわけですが、その場合々々を誠実にやっていけば、10回目に1000通り(2の10乗)になりますし、20回目には1,000,000通りになりますので、ある価値観に従って、途中の何通りかを省略しなくてはならないのです。
 その価値観は、人間の何億(?)通りかの経験から生まれたもので、コンピュータの思考とは無関係のものです。

 コンピュータは便利なものですが、単なる便利な(&かなり使いづらい)ツールに過ぎないものだと思います。


◎バグ取りの思い出
 いわゆる’悟り’に到る方法について、禅の問題集の「無門関」の第一則・趙州狗子で

”妙悟ハ心路ヲ窮メテ絶センコトヲ要す、(中略)従前ノ悪知悪覚ヲ蕩尽シ、久々ニ純熟シテ、自然ニ内外打成一片ナラン”

この部分を、中国文学者魚返善雄の訳では

”悟るためには行きづまらねばならぬ、(中略)これまでの無分別をとろかし、だんだん練れてくると、しぜんに内もそとも一つになる”

としています。

 私はソフト製作を正業(なりわい)としていますが、いつも思うのは、ソフトのプログラマムのバグ取りは、この公案を解決して悟りに至る過程によく似ているのではないかということです。ウンウンと考えて、重い扉を押し続けているといつか、やっと答えが分かってその扉がスーッと開いて仕事が次に進むわけですが、それが何だか公案に取り組む過程に似ているような気がするのです。

 とんでもない話で、「坐禅は無念無想を目指すもので、公案だって頭で考えて解かる問題ではない」と御師家さんに怒られそうですし、こんなことを書くと、坐禅愛好家によるブログ炎上が起こる可能性だってあります。
 しかし、そうでもない、ソフトのバグ取りは公案解読の過程と大変似ていると思わせる文章にでくわしました。
 詳しくはhttp://www.alles.or.jp/~thisida/picusb89.html
を見てもらいたいのですが、この人は自作の装置が、あるマイコンでは動作するのに、それと同種のピン数の少ないマイコンでは動作しない原因を2,3ヶ月かけてエンエンと追求するのです。あるサンプルプログラムでは動作するのですが、他人の借り物ではしょうがない、それは敗北主義だといって頑張るのです。

aaa  人には不思議な力が備わっているようです。
ある種のパワーのようなもので、それは普段は隠れていて表には出てこないのですが、ここ一番、という場面で突如として力を発揮する、ということがあるようです。
火事場の馬鹿力とか、コケの一念などと言います。
人の一念岩をも通す、という言葉もありますですね。

前にも何回か書いたことがあります。
考えて考えて考え抜いて、もう駄目だ、これ以上はどうすることもできない、というぎりぎりのところまでいったときに、そこからもう1歩先に踏み込みますと、突然、霧が一気に晴れて、急転直下全て解決してしまう、ということを何回も経験しております。
そのぎりぎりのところまで、問い詰めていく、考え抜く、ということが大切なことなのだと思います。
もう駄目だ、とあきらめてしまう、そのもう1歩先にこそ、解決の道が用意されているのだと思います。

なんだかだんだん神がかって、まいりますですねえ。
やっぱり、あれだ。
ぼちぼち、お迎えが近いかもしれんぞお。

これもいやというほど何回も書いたことなのですが。
こと記憶力については保証付きで絶対に誰にも負けてしまう、という?おかしな自信があります。
神経衰弱というゲームがありますが、あれが全然、まったく、からっきし駄目なのですねえ。
たった今めくったばかりのカードなのに、伏せてしまうと、もうわかりません。

そういう私なのですけれど、今回の、もう駄目だ。どーしようもない、というところまできましたときに、不思議な力が突然出現したのでありますよ。 (中略)

そのとき、突然、頭の隅で、声がした…。
ような気がいたしました。

どこかで、たしかどこかで。
「PIC18F14K50に限り…」
という文章の断片を見たような…。

とあります。
 サンプルプログラムを有料ソフトで逆アセンブラをし、その再構成までやってその原因を追究するのですが、このことの分かった解答が、同じPIC*というマイコンに関わってきた私にはまことに深く同感できるものでした。
 それはともかく、このバグ解決に関する過程が、禅の公案の「悟るためには行きづまらねばならぬ」で始まる文章の示すものに、大変似ているとは思いませんか。

◎アセンブラでPICにUSBを
 あくまでアセンブラにこだわってPICにUSB通信をさせようと勉強を開始したのが、昨年2012年12月の初頭でした。
 写真上がPIC24FJ64GB002の載ったホスト基板で、下がPIC18F2550の載ったデバイス基板です。
 上の基板の上部の押し釦を押すとUSB通信で、下の基板の対応LEDが点灯し、下の基板の空色のボリウムを回すと、その10ビットのアナログ値が、上部のLCDに表示されるようにしました。現在6月12日ですから、たったこれだけのために実に休み無しで6ヶ月以上の時間を費やしたことになります。
 まずUSBについては、マイクロチップ社ではCのサンプルのコードしか出しておらず、メールで問い合わせたところ、今後ともサンプルはCのみということでした。それではCで書けばよいではないかと思われるかも知れませんが、全く何をやっているかわからないままCのライブラリーを唯利用するだけでは、面白くありません。この辺の何故アセンブラーなのかについては、「PICでUSBを!(知識ゼロからのスタートです)に詳しいのでそちらを参照してください。このサイトは、USBをどう考えるかについての試行錯誤の過程がくわしく書かれていて大変参考になり、長文を繰返し熟読させていただきました。
(この文の一番下にUSBの開発の過程についてまとめてみました)

 エニュメレーション(初対面のやり取り)を始めとするUSBの通信プロトコルは、大変に複雑でCQのサイト「USBの基礎知識」の展開図を何百回と穴のあくほど眺めました(右図)。この3ページにいわゆる2線の上げ下げの詳細図が載っているのですが、これが大変参考になります(右裏図)。
 右図の転送トランズアクション(プロトコルの一まとめ)も大きく5種類しかないのだし、これと各部分の全てに’上げ下げ’を対応させて書けば、相当解りやすくなると思うのですが。あと残りは、エンドポイント番号とDATA0とDATA1のピンポン・バッファーの問題だけになります(要は上げ下げのはずです)。
 とにかく適切な説明がなく、エニュメレーションなるものが何をやっているかよくわからないので、最後まで参照させてもらったのが、USBを内蔵せず、CPUのピンをアセンブラによる上げ下げでロースピード通信を実現しているホスト側のサンプルでした。上げ下げをシーケンシャルに書いているので、とに角なにをやっているかは理解できるので助かりました。一番有名なのは石川kyousuke氏の「USBホスト倶楽部」でAT90S2313(AVR)をCPUに使用しています。スロベニア人のサイトがもとになっているということですが、お二人ともこの難解なUSBをロースピードとは言え、上げ下げだけでよくも実現したものです。ノーベル賞とまでいかなくても、何かソフト功労大賞でも差し上げたくなります。
 この他、これを元にしたPIC18F2550による上げ下げだけの「マウス用USBホスト」(ソースは’ここ’とある)も随分参考にさせていただきました。
 この3人の他、下記(2)のiruka氏や、(5)の「楽々PIC」氏など、難解なUSBを適切に再構成していて、一体どんな頭の構造をしているのかと不思議に思うほどでした。
 皆様、ありがとうございましたm(_)m

 最初のホスト通信まで5ヶ月かかりました。下記(4)の「組み込み機器へにUSBホスト実装技法」(CQ出版)によって、PIC24Fのプログラムを開始したわけですが、この本に出会うまでまでの4ヶ月余、何をしていたのか。ひたすら、ネット上の解説を読みまわり、購入した本を読解しながら、下記にまとめたサンプル群を解読していていました。しかし殆どぼんやりとしか分らず、まるで2m四方くらいの石を一本のノミで彫って、一体の銅像を彫ろうとしているようでした。彫り始めると(つまり解読しようとすると)すぐ飽きて疲れてしまい、継続すると只ひたすら疲れ、’痛いほど疲れる’という形容を思いついたほどです。石には多少、彫る径路があらかじめついているのですが、それがなかなか分らず、ほんの少しずつ分ってくるというような感じでした。しかし、それがなければ(4)の本との出会いでPIC24Fのプログラムを開始することは出来なかったでしょう。
 これからある仕事のためにLINUXのマスターをしなくてはならず、何冊か本を買ってきましたが、このUSBのマスターに比較してどれだけ、簡単で楽しい仕事だろうかと思うくらいです。

 手旗信号をRS232CやI2CやCANとすれば、USBは、ホストの手旗士が、@相手を見つけたら、A手旗の速度を確認し、B相手の通信方法を聞き、C通信番号(アドレス)を送り、Dそのアドレスに対する通信を開始します。
 単なる手旗信号では決まっているのは手旗の文字コードだけです。それに対しUSBの手旗信号はA〜Cまでの過程が加わるだけです。つまり何種類かの通信の約束事を選択できるようにし、不特定の相手に対しての通信が簡単にできるようにしたわけですが。それだけで、こんなに複雑でややこしくなるのです。
 もちろんRS232CでもプログラムすればA〜Cの過程を加えることはできるわけですから、その標準化の大変さということになります。
 これがセキュアリティーの問題で、特定の合言葉で選別することをその仕様に入れたり、相手側を記憶して通信方法やデータを途中で変えたりすることができるようにしたら、もっと複雑になりとても、自社製品として採用し、汎用に応用できるような通信方法ではなくなることでしょう。このUSBについてだけ考えて見ても、コンピュータは仕様を少し複雑にしただけで、メッチャ複雑になるという好例と思います。
 電子制御によるただの通信用ツールが、作る側にとってとは言え、こんなに難解、複雑になって良いのでしょうか。
       ◎開発過程のまとめ
1)、diolan社の、アセンブラーによるブートプログラム(デバイス側)のサンプルをダウンロードして解読を試みました。あるトークンを受けたら、すべて同じルーチンから各動作に、フラグで内側から分岐させていく方法のCソースが元で、そこからアセンブラに落としたものらしく、正直ゲロみたいです(一つ一つが細かい上に、Cコンパイラ特有の無駄が多く、何を構成しているか全く良くわからないので、この表現は適切と思い、気にいっています。下記参照)。
 分からないなりに、分析し、各セットアップごとにまとめていきましたが、やはり分からないままでした。
(2)、上記サンプルのゲロようなプログラムをきれいに整理し、オジヤ程度にして、バグ取りもしたコードを見つけました。iruka氏のサイトの中のpic18boot-2010-0406.zipをダウンロードして解凍します。フラグ方式が変わったわけではないので、分かり憎いことには変わりありませんが、特にここで使用しているコンフィグ設定を利用すると、PICkit3のデバッグモードが動作するのには大変助かりました(USBの場合、デバッガは絶対に必須です)。現存するPICによるUSBの唯一の完全なアセンブラ・サンプルであることは確かです。
 しかし、内側からフラグによって全トークンを同一ルーチンで展開していく方法では全体的な動きを、漠然とした理解しか出来ず、さて自分ではどこから手をつけて良いのか分りませんでした。
(3)、最初はUSBのホスト側プログラムを目指していたので、小山工業高専の学生による「PIC24FJ64GB002によるUSBメモリの読み書き」もダウンロードしました。これもやはりCのライブラリーを利用していて、プログラムの解読も試みましたが、同様な理由で手がつかない状況が続きました。
(4)、「組み込み機器へにUSBホスト実装技法」(CQ出版)に、言語はCで、USB素子のSL811HSを使用する方法ながら、超難解なエニュメレーションを初めて順序立ってシーケンシャルに実行するプログラムを見つけ、ここでようやくPIC24FによるUSBホストプログラムを書き始める手掛かりを得ました。回路は(3)の論文を参考にして、写真上のようになりました。
 これによりUSB通信に成功し、、メモリーカード゙を差して、その情報(ID等)を得ることができるようになりましたが、これまで開始より5ヶ月を要しました。
 ●PIC24Fシリーズの16ビット素子のアセンブラが、PIC18Fの8ビット素子に比較してとんでもないイモなのには苦労させられました。マイクロチップ社はPICの’単純こそ命’の精神を捨ててしまったのでしょうか。私の嫌いなH8のアセンブラの悪い面だけ取ったように見えます。


(5)、デバイス側のプログラムも是非必要なのですが、PICもAVRもすべてCによる参考書しかなく、ネット上にもアセンブラによる方法の説明は殆どありません。
 そこで、パソコンをホストとし、パソコンからのUSB通信をアセンブラで受けるプログラムを書いているサイトを参照することになります。
 「楽々PIC」というサイトがアセンブラによるデバイス通信について書いています。サンプルコードは一部しか載っていませんが、コメントを必至に読んで大変参考になりました。PIC特有のACKの自動生成の手順など、これが無ければ理解不能でした。
 あとは、完成しているホスト側のエニュメレーション・ソフトに合わせるようにして、ソフトを書いていきました。パソコンに、既存のホストプログラムを置いて、パソコン上に表示されるいわゆる’ミエちゃん’(無料のSnoopy)で通信プログラムを解析していく方法もありましたが、私はパソコンが苦手(で面倒)なので、自分ですでに書いたPIC24Fと接続し、そのプログラムと突き合わせていきました。
 右図の回路は「PICで動かすUSB」(鈴木哲也著、ラトルズ&秋月)の付録基板を使用しました。

投稿を歓迎します。一緒に考えましょう!            

                                  表紙に戻る