RoomMaster's Voice

「Visual C++の勉強部屋」筆者の独り言




「Visual C++の勉強部屋」に戻る
「石立 喬のホームページ」に戻る


「未定」はいつまで未定なの?とのご質問に答えて(2009.11.5)

 「Visual C++の勉強部屋」は、2000年にVersion 6.0ではじめました。当時はMFCが主流でしたが、無料版の2005 Express Editionの頒布とともに、.NET Frameworkが使われるようになり、全面的な書き直しに迫られました。しかし、Version 6.0で作成した時代には興味を持たれたテーマも、その後の情勢で重要度が失われ、改版に戸惑いがあって、一部がそのまま「未定」になっているのです。
 「使い方(17)」は、「ニューロンをシミュレーションして排他的論理和を実現する」でした。一時期は、家電製品にもニューロンが使われているとうたわれたりしましたが、認識効率が悪く、「理屈が無い」ことが嫌気されて?流行らなくなりました。Javaで書かれた「ニューラルネットワークを用いたパターン認識」はCodeZine上にありますので、ご参照下さい。
 「使い方(22)」は、「Hex Viewer(データ解析ソフト)を作成し、DICOMデータを調べる」でした。かなりDICOMデータに特化している内容なので、後述の理由で、そのままになっています。
 「画像処理(9)」は、「Bitmapファイルや医用画像DICOMファイルを画面に表示する」でした。これも、同様の理由からです。
 「画像処理(11)」は、「現画像を離散コサイン変換し、画像復元を試みる」でした。本文にも書いてあったのですが、この方法はなかなか難しく、良い結果が得られなかったので、改版する気になれませんでした。
 「画像処理(16)」は、「医用画像DICOMの表示を、やや本格的に取り上げる」でした。DICOMは、現在もますます普及している医用画像の標準フォーマットですが、圧縮技術が高度になり、多機能のフリーソフトが標準的に出回り、素人が手を出す分野ではなくなっています。


誰が見に来てくれているのかな(続き)(2008.3.7.)

 このつまらない独り言、「RoomMaster's Voice」は、この表題で5年前に始めました。Googleが提供している解析機能を付加して、一ヶ月以上が経ちました。私のサイトへの訪問者の94%は、「Visual C++の勉強部屋」に来ます。この「RoomMaster's Voice」へも約1%の方が来てくれます。「Visual C++の勉強部屋」にあるカウンタの数字はセッション数で、ページビューは、その約2.5倍になっています。
 来訪の原因は、Googleを主とする検索エンジンが68%、「お気に入り」からが23%、他のサイトからのリンクが9%です。初めての来訪者は51%で、リピーターは49%です。
 これらの結果は、私にとって意外でした。私は、今まで、ほとんどがリピーターで「お気に入り」から来てくれるものと思っていました。もっと検索エンジン対策をして、見栄えも良くしないといけないのかなァと思いますが、でも、やっぱり中身で勝負?に落ち着いてしまいます。


NEC最初のコンピュータNEAC1101が稼動開始から半世紀を迎えました(2008.1.7.)

 今年、平成20年(2008年)は、NEC最初のコンピュータNEAC1101が公式稼動した昭和33年(1958年)から数えて、50周年、半世紀です。これを記念して、50年前の写真を紹介します。下の写真で、左から長森享三氏(故人)、秋野守利氏、吉沢聖一氏(故人)、太刀川勝助氏、私(なぜか、メモリーアレイを一枚持っている)です。 なお、このとき、私は入社後3年目の26歳でした。
 公式稼動の意味は、ほぼ安定に動作するようになったこと、パラメトロンと言う日の丸コンピュータ素子の特殊性から、指導を受けた東京大学、日本電信電話公社、国際電信電話株式会社、技術交流を行った国内同業他社などとの兼ね合いで、この時期に各社ほぼ一斉に発表したことによります。
 装置について説明しますと、手前左から、メモリー内容をモニターするためのオッシロスコープ、制御卓、機械式紙テープリーダ、テレタイプ用プリンタ(紙テープ鑽孔機つき)です。後ろは、左からパラメトロン演算制御部筐体(二連)、メモリ筐体、電源です。パラメトロン用高周波電源は、最左端にありますが、写真には入っていません。 空調設備は無く、筐体上部のファンだけが頼りの厳しい環境であったことも苦労の一因でした。



上の写真をクリックすると大きくなります


Java One Tokyo 2005 に行ってきました(2005.11.19.)

 久しぶりに書いています。最近は、(株)翔泳社のCodeZineへの定期的な寄稿で少し忙しく、ご無沙汰していました。11月8日から10日の間に開かれたJava One Tokyo 2005によれば、「The power of Java rotates the planet.」とかで、「それでも地球は回る」と言った人みたいなことを言っています。もう一つは、「Participation and sharing drives markets.」で、「Participation Age」とも言っています。これだけJavaが広がると、大勢の協力が無いとやって行けないし、その方が、共有物との意識が高まり、皆が使ってくれるとの思惑があるのでしょう。
 従来、JavaにはSE(Standard Edition)、EE(Enterprise Edition)、ME(Mobile Edition)があると思っていたのですが、MEは、Micro Edition と呼ばれるようになっていました。多分、当初のモバイル機器(携帯など)への実用化に成功し、これからは据え置き型の機器にも組み込み用として普及させたいのでしょう。現在、J2SE5.0("Tiger")などと呼ばれている名称は、今後Java(TM) SE 6("Mustang")とかJava(TM) SE 7("Dolphin")などになるとの計画も発表されました。
 Javaを始めて、半年が経ちました。大抵のことが、豊富なAPIに支えられて、簡単にできでしまうのに感心しています。そのことは、いずれ別の機会に・・・。


とうとうJavaを始めました(2005.5.29.)

 ソフト関係の出版社の(株)翔泳社からお誘いがあって、同社が始めたウエブマガジンCodeZineに寄稿させて頂くことにしました。CodeZineは、有名なCodeGruやThe Code Projectの日本版という位置付けで、面白くなりそうです。実は、「Visual C++の勉強部屋」はVisual C++ 6.0を基礎にしていて、新しいバージョンに書き換える必要を感じていました。しかし、最近のJavaの進歩に伴い、かなりのことがJavaでもできると分かりましたので、その代わりに「Javaの勉強部屋」でも始めようかと思っていた矢先でした。
 Javaには、すごく便利なクラスやメソッドが沢山あります(早速Java語になって、失礼!)。画像ファイルの読み込みは、JPEGやGIFなら非常に簡単です。これらはインターネット上の画像フォーマットの標準ですから、インターネット上の通信に重きを置いたJavaなら当然ですね。オブジェクト指向言語の常として、ブラックボックス化したものが沢山あって便利なのですが、ホビープログラマとしては物足りないこともあります。実行速度の遅さが思ったよりも気にならないのは、贔屓(ひいき)目からでしょうか。
 実際にはJavaを使っていて、アルゴリズムだけを参考にするために「Visual C++の勉強部屋」を見てくれている方も多いと思います。CodeZineの方も見てください。


Java誕生10周年を祝ってきました(Java Computing 2005 Spring、Java誕生10周年前夜祭)(2005.3.15.)

 サン・マイクロシステムズ(株)主催の標記カンファレンスに行ってきました。Javaテクノロジーの一層の普及に向けたもので、協賛各社のセッションや展示もありました。Javaは、ネットワークに適した言語ですので、Webアプリケーションやケータイへの応用が強調されていました。昔、COBOLは事務計算用と言われ(FORTRANの技術計算用に対して)、プリンタによる帳票出力に優れていました。現在は、プリンタの代わりに双方向性のWebシステムが用いられることが多いので、JavaがCOBOLに代わるテクノロジーであることを認識しました。あまりプログラムに詳しくない人でも簡単にWebアプリケーションを作成できるように、EoD(Ease of Development)をうたった開発ツールが紹介されていました。
 Javaの入門書が多数本屋に並んでいますが、ほとんどはjavacと言うJavaコンパイラとテキストエディタを用いたCUI方式の解説です。入門者やマニアックなプログラマは、ほとんどがこれのはずです。会場での挙手結果に依れば、IBMが当初開発したオープンなIDE(統合開発環境)であるEclipseを使用している開発者も半数近く居ました。さすがJavaで飯を食っている技術者といったところでしょうか。しかし、SunMicrosystemsのオープンIDEであるNetBeansは、まだ馴染みが薄いようで、これの宣伝もしていました。
 デスクトップのWindow環境として、Looking Glass 3Dがデモで紹介されました。Windowが裏返しになったり、立体的に表示されるのは面白いのですが、CPUパワーやメモリー容量、グラフィックシステムを必要とするので、省エネには逆行するような心配もありました。


デブサミ(Developers Summit 2005)に行ってきました(2005.2.9.)

 大変久しぶりに、書いています。「海外旅行に行っていないが、どうかしたのか」とのご心配も頂きました。昨年は、PSAが上昇する病気のため、手術をしました。現在、ようやく回復してきましたので、活動を再開することにしました。2月3日と4日の両日、出版社の(株)翔泳社が主催する標記デブサミを覗いてきました。エヴァンゲリストやアーキテクトなどの肩書きを持った人が登壇し、いつの間にソフトウエアが宗教や建築物に変わったのかと驚きました。J2SE5.0(Java 2 Platform Standard Edition Ver.5.0)その他の登場で、Javaの勢いはますます強くなり、ソフトウエアの共通語がCからJavaになるのでは?と懸念しています。まあ、オブジェクト指向を必修科目にするのなら良いのかも知れません。Microsoftも、負けじと、Visual Studio 2005を発表しました。もう、ドットネットは付かなくなりました。.NET Frameworkが定着したとの考えでしょうか。単体販売では、「ホビイスト、先進ユーザー、学生」用とうたって、Visial C++ Express Editionがあります。多分、この駄文を読んで下さっている方は、ホビイスト(ソフト開発を飯の種にしない人)か学生の方でしょう。先進ユーザーではないと思いますが・・・。
 PDCAとかカイゼンとかの言葉も聞かれました。これらは、20〜30年前に、ハードでは盛んに聞かれた品質管理用語です。ソフトでもようやくその段階になったのかと、ハード出身のソフト愛好家としては、気強く思っています。


カウンタを付けて1年が経ちました(2004.7.28.)

 昨年7月23日に、恐る恐るカウンタを付けてから、1年が経ちました。1年間で、カウンタは、132,000に達しました。月平均すると、11,000アクセスです。夏休みや春休みのシーズンに減少するところから、多くの訪問者は学生ではないかと思っています。平均して、土日が190アクセス、その他が430アクセスですから、大部分は、学校や職場などから見に来てくれているのでしょう。
 アクセス数の維持は、困難な仕事の一つです。新しいコンテンツを絶えず追加して行かなくてはなりません。ところが、代表的な易しい数値計算、画像処理のアルゴリズムは、ほどんど取り上げてしまっています。学生が卒業して行き、また新しい学生が、卒業論文や修士論文作成にとりかかる、と言ったサイクルのお陰で、辛うじてアクセス数が維持できているのかもしれません。ご愛顧、テーマのご提案を宜しくお願いします。


Javaも始めてみようか(2)(2004.2.20.)

 Sun Microsystems主催の「Java Technology Conference 2004」を覗いてきました。けたたましい音楽と共に、「Java Technology is for Everyone」とか、「Java is Everywhere」の文字が躍っていました。NTTドコモや携帯電話機器メーカがJavaを礼賛していました。「J2ME(Trade Mark)」(Java2 Mobile Edition)に力を入れた話で、家電機器のリモコンの実演もありました。これって、まさに「ユビキタス」なんですよね。展示会場では、LindowsのOS環境で動作するJavaによるウインドウが表示されており、Windowsに似た使い勝手でした。Microsoftに一切お世話にならないでパソコンが使えるとも言っていました。
 Javaが使いにくいのは、C/C++言語で便利なprintf系が使えないことですが、今年の秋に公開される「J2SE1.5 "Tiger"」では out.printf( …… ) が使えるようになる、とのことがあらためて紹介されました。 もうすこし待てば、Javaが一層使いやすくなります。「Everyone」や「Everywhere」に弱い一般プログラマにとって、Javaは目が離せなくなってきました。


Javaも始めてみようか(1)(2004.2.8.)

 最近、「Visual C++の勉強部屋」への訪問者が減っています。12月と1月は約12,800PageViews/月でした。年末年始で、休日が多かったこと、卒業論文や修士論文の作成が一段落したことも関係があるのでしょう。本屋でも、昔は「Visual C++コーナー」があった位だったのに、今は、Visual C++の本はほとんど見かけません。電器量販店のソフト売り場でも、昔は「Visual C++ 6.0」が、高く平積みしてあったのに、今は、「Visual C++.NET」が一個でも置いてあれば良い方です。Microsoft社の講演会を聴いたり展示を見たりしても、初心者や一般プログラマは相手にしていない気がします。
 Microsoft社のVisual C++は、Microsoft社のWindowsの環境では抜群の性能を発揮しますが、一般的には大袈裟です。大型高級乗用車の感じで、Windowsと言う専用高速道路上では、快適なドライブを楽しめますが、高度の運転技能が必要で(やっぱりVisual C++は難しい)、燃費は食うし(メモリが大量に要る)、お値段が高いのです。
 一方、Sun Microsystemsは、Java2の普及に積極的で、Java2SDK(Software Development Kits)を無償で頒布しています。Javaの実行はインタープリター形式なので、時間がかかる欠点がありますが、最近の高速CPUの使い道としては、良いのではないでしょうか。TVをDVDに録画したり編集したり、3Dゲームをやったりするために高性能のパソコンを買うのは、パソコンメーカの戦略に乗せられています。


営業まで覚えた、「メモリーの調整中」(2004.1.18.)

 「コンピュータには、メモリーが要るらしい。演算回路の次はメモリーだ。」というわけで、次に入社した私がメモリー担当になりました。ある大学の先生が会社へ来られ、「石立さんは元気ですね。○○の○○さんは、顔色悪かったですよ。」と、その位苦労をしないとメモリーができないのか、と私の方がびっくりしました。「交流二周波法」という、東大後藤氏の発明した、パラメトロン用の大変エレガントな方式を採用していました。新しい独特の特性(2次高調波が出やすい)を持ったフェライトコア(フェライト製のリング)が必要になり、フェライトメーカとの共同開発を行いました。始めは、なかなか良品が得られず、焼き上がるのを待ってテストに掛け、僅かの良品コアを持ち帰ることを繰り返しました。このメモリ方式は位相に大変敏感な欠点があり、位相調節やその経時変化に苦労しました。
 一年後に、太刀川勝助氏が新入社員としてメモリーに配属され、合計2名になりました。この太刀川勝助氏は、私が位相調節などでオタオタしているのを横目で見て、「待っていれば良くなりますよ」と、落ち着いたものでした。装置の温度が安定すれば、当初の設定通りで動作することを知っていたのです。彼は外科手術の達人でもありました。不良コアを発見すると、メモリーアレイの網目状の配線を切断し、不良コアを取り出し、良品と取り替えて、再び配線をつなぎ、ハンダの跡が目立たないように、上から色を塗るのでした。
 営業の人が、良くお客さんを連れてきました。コンピュータが動いていないと、「ただいま、メモリーの調整中で、動いていませんが・・・・。」と、営業の人まで、覚えてしまいました。何回かに一回は、メモリーが原因でない時もあったのですが・・・・。

交流二周波法メモリーの最初の実験装置、上から、
1)操作用のトグルスイッチ
2)制御用のパラメトロン演算回路
3)上記パラメトロン信号を変換して、2MHzの「非定常励振」
  高周波電力を発生する真空管回路、
4)上記電力によって1MHzで発振する「パワーパラメトロン」
5)アドレス線に選択的に500KHzを流す真空管回路
6)結果の表示回路、その他

下部の見えないところに肝心のメモリーアレイがあり、撚り線
により接続されている。
右は、三相に変調された2MHz高周波電源である。
   
NEAC1101のメモリー部分の扉をはずして、内部を示した
ところ。
上は、本体制御部から受け取ったアドレス信号をデコード
し、選択的にメモリーアレイに高周波電力を供給する真空
管回路ユニット。
下は、メモリーアレイを収納する部分で、まだ、最終計画の
1/4しかメモリーアレイが実装されていない当時のもの。
このメモリーアレイの不良になったフェライトコアを交換する
のが大変な仕事だった。


最初のコンピュータ実験装置の性能は1μMIPSだった(2004.1.17.)

 長森享三博士のもと、俊才で職人肌の面も持ち合わせた中堅の吉沢聖一氏と、新入社員の秋野守利氏で、ディジタルコンピュータの開発が始まりました。最初は、演算回路からと言うことで、2進5桁の四則演算ができるパラメトロン実験装置が作られました。5ビットの入力のための5個のトグルスイッチ(下図で左から5個)、加減乗除の命令を指示するための4個のトグルスイッチ、その他にシフトやクリヤなどのスイッチもありました。出力は10ビットで、パラメトロン出力を整流増幅する真空管、表示用のネオン管が、それぞれ11個ついていました。
 この実験装置には、外国人を含めて外部からの見学者が多く訪れました。ある外国人が感心して、これは1サイクルコンピュータ(現在は、サイクルの単位は使わないので、1ヘルツコンピュータか?)だと褒めてくれました。つまり、これを操作実演して見せた秋野守利氏の手が猛烈な速さで動いたのです。5個のスイッチで入力データをセットし、命令スイッチを操作するのに1秒とかからなかったのですから、まさに、1命令/秒のスピードでした。今風に言えば、1μMIPSでしょうか。

パラメトロン計算機の最初の実験装置、上から、
1)操作用のトグルスイッチ
2)パラメトロン演算回路(大部分を占めている)
3)内容を表示するネオンランプ
4)パラメトロン信号を判定してランプ表示する真空管回路
5)三相に変調された2MHz高周波電源の入力部

高周波電源は右にあり見えない。


日の丸コンピュータ素子、パラメトロンの原理はブランコと同じ(2004.1.14.)

 LC共振回路は、受動回路(Passive Circuit)であって、それ自身で自動的に発振を起こすことはありません。しかし、共振周波数の二倍の周波数でLの値(回路のパラメータ、これがパラメトロンの語源)を変化させてやると、LC共振回路が振動を始めるのです。子供が遊ぶブランコを考えてみます。自然な状態でブランコが揺れる周波数は、ブランコの紐の長さと重力によって決まります。ところが紐の長さを周期的に変えてやると、ブランコは大きく振れ出します。子供がブランコの上で立ったり座ったりしてブランコを漕ぐのは、重心を上下して、実質的に紐の長さを変えているのです。 子供が立ち上がって座って、また立ち上がって座って、子供が2サイクルの動作をした時、はじめてブランコは1サイクルの振動をします。
 パラメトロン(Parametron)のLを2MHzで変化(当時は励振と言っていた)させると、パラメトロンは1MHzで発振します。励振周波数に対して位相が正反対の2種類の発振波形が同じ確率で発生しますので、それが論理の1と0に対応させられました。
 パラメトロンに関する特許は、各所で多数出願されました。パラメトロンは一種の商品名でしたので、NECでは、「周波数変換開閉素子」として出願しました。これは、嶋津保次郎博士の命名によるとされています。


日の丸コンピュータ素子は、大学、通信サービス機関、通信機メーカの協力で実用化された(2004.1.13.)

 東京大学と国際電信電話株式会社(現在のKDDI)、日本電信電話公社(現在のNTT)が共同で研究を開始したパラメトロン(Parametron)は、わが国独自のアイデアによる日の丸コンピュータ素子でした。当然、わが国の代表的な通信機メーカもこの研究に参加し、研究会が開かれました。わが国独自の素子によるディジタルコンピュータは、このような環境から生まれました。 NECの最大の顧客であった電電公社、電電公社から分離独立した国際電電、とは緊密な関係があり、技術指導も受けました。長森享三博士は東京大学のご出身ですが、一時期、東北大学に居られたこともあり、東大、東北大に人脈をお持ちでした。NEC最初のコンピュータは、長森享三博士グループによるパラメトロン計算機NEAC-1101でしたが、製品としての第一号は、東北大学とNEC事業部とで共同開発し、東北大学に納入された、パラメトロン計算機NEAC-1102(SENAC、SENdai Automatic Computer)でした。
 パラメトロン(Parametron)は、東京大学理学部の高橋秀俊教授の下で後藤英一氏により発明されたもので、フェライトコア2個を使ったコイル(インダクタ)と共振用コンデンサから成る、構造が非常に簡単で信頼性の高い論理素子でした。東大のTAC、富士写真フィルムのFUJICなど、真空管を用いたコンピュータも開発中でしたが、固体素子を使ったコンピュータへの願望も強く、一方で、トランジスタの信頼性が極めて低く、困っていた矢先の発明だったので、わが国の多くのメーカがパラメトロンに飛びついたのでした。


アナログコンピュータに、ディジタル技術が使われていた(2004.1.12.)

 開発当初のアナコンは、繰り返し型と呼ばれるものでした。積分のためのCR積が十分大きく取れず(コンデンサのリークが無視できない、増幅器の入力インピーダンスが十分大きく取れないなどの理由により)、長期間の積分を行うと精度が落ちるためでした。そのため、計算結果は、比較的周波数の高い繰り返し波形として、ブラウン管上で見ていました。必要に応じて、波形をカメラで撮影して保存しました。
 しかし、ブラウン管の偏向精度は低く、蛍光スポットの太さは大きく、アナコンの出力装置としての精度が不十分でした。そこで、高周波の繰り返し波形を超低周波に変換し、ブラウン管の他に、ペン書きレコーダ(通称ペンレコ)にも記録することにしました。使われたのは、現在の超高速オッシロスコープに使われている原理と同じで、サンプリング法です。サンプリングには、元になる高周波の繰り返し周波数を精度良くカウントダウンする必要があります。このため、デカトロン(Decatron、10進計数放電管)が使われました。これは、まさにディジタル技術です。


50年も前から、ブラウン管は入力装置を兼ねていた(2004.1.10.)

 ブラウン管や液晶パネルが、ライトペンやマウスの助けを借りて、入力装置として使われているのは、現在の常識です。しかし、50年も前に、アナログコンピュータ(以下、アナコンと略す)で、ブラウン管が入力装置として使われていたのは驚きです。
 アナコンは、外部入力に対する反応(レスポンス)を計算するのに良く用いられます。たとえば、車のショックアブソーバーを設計するのに、車輪が受けるショック波形と車体の動きの関係を、微分方程式を解いて求めます。このような場合には、ショック波形などをアナコンに入力する必要があります。ブラウン管を入力装置として使う原理は、次の通りです。ブラウン管の表面に、入力したい波形の通りに縁を切った不透明の紙を貼り付けます。ブラウン管の周囲を遮光し、ブラウン管の蛍光スポットを光電管で取り出します。サーボを働かせる(スポットが見えると、隠れるように、見えないと出てくるように偏向電圧を制御する)と、ブラウン管上のスポットは、不透明の紙の縁に沿って移動します。この時の偏向電圧波形をアナコンへの入力とするのです。
 長森享三博士が率いたアナコン研究グループは、入社後1、2年の数人でしたが、いずれも精鋭揃いで、これらの実用化に成功しました。


NEACは、最初はアナログコンピュータの名前であった(2004.1.9.)

 わが国のコンピュータの草分け的存在である、長森享三博士のご葬儀で、弔辞を奉読する光栄に浴しましたので、長森享三博士を偲んで、数回にわたり、昔話をしたいと思います。私が学生であった頃、「コンピュータにはアナログコンピュータと、ディジタルコンピュータがある。アナログコンピュータは微分解析などの科学技術計算に用い、ディジタルコンピュータは主として事務計算に用いる。」程度でコンピュータの項を終わっていました。
 長森さんも、最初はアナログコンピュータから出発されました。長森さんは、当時の最先端技術であった「帰還増幅理論」を特に勉強された方でしたから、負帰還増幅器の集まりであるアナログコンピュータの研究開発には、最適な方でした。
 当時、米国でREAC(Reeves Electronic Analog Computer)が商品化されていましたので、それに倣ってNEAC(Nippon Electric Analog Computer)と名付けました。のちに、これはNippon Electric Automatic Computerの意味であると解釈され、ディジタルコンピュータの商品名として使われました。


サンデー・プログラマーの勧め(2003.12.27.)

 サンデー・ドライバーまたは土日ドライバーと言うのがあります。ウイークデーの通勤には車を使わず、休日だけ、主として遊びのために車を転がす人のことです。毎日乗っていないので、やや危ない人も居ます。一方、普段は仕事でダンプカーを運転し、休日は軽自動車で遊びに行くベテランの人も居るかも知れません。
 「Visual C++の勉強部屋」は、サンデー・プログラマー向きです。サンデー・プログラマーとは、ウイークデーには会社で全く別の仕事をしていて、土日に個人的な趣味でプログラムを楽しむ人です。会社で大型汎用機のプログラムを書いて、休日にはパソコンを趣味で使う人も居るかもしれません。学生の場合は、毎日がサンデー・プログラマーの様なものです。サンデー・プログラマーにとっては、UML(Unified Modeling Language)やOOP(Object Oriented Programming)は重要でありません。能率向上や共同作業は必要ないのですから。
 ペーパー・ドライバーと言うのもあります。これは、運転免許を持っていても、車を持たず、運転をしない人のことです。「情報処理技術者試験」の合格者で、プログラムをやらない(できない?)人は、ペーパー・プログラマーと言うのでしょうか。この方たちには、特に、サンデー・プログラマーになることを勧めます。


言語を勉強しただけでは仕事ができない(2003.11.24.)

 1995年に中国へ行ったときの話です。一寸時間ができたので、北京郊外へ観光に出かけました。ホテルに頼むと、二人(運転手と観光ガイド)の中国人が来てくれ、ガイドは英語で案内をしてくれました。ガイドは一流大学の英語科を卒業しているそうですが、「英語だけしかできないので定職がなく、このように臨時のアルバイトをしている。」と言っていました。観光案内ができる知識があれば立派なものと思うのですが、彼の理想は、もっと高かったのでしょう。
 私が電気関係の学科に居たためか、求人に来る会社の人は、巧いことを言います。「ソフトだけできてもダメです。やっぱり、電気の知識があって、しかもソフトができる学生が欲しいのです。」と。確かに、電気メーカの場合は、組み込みマイコン(Embedded Microcomputer)のソフト開発も多く、電気の知識が役に立ちます。
 私は、「学部学科不問」と書いてある求人先には、学生を推薦しませんでした。そのような会社では、経済や法律の学生を多数採用し、理系出身者はあまり優遇されないかも知れないと思ったからです。経済ではかなり高度の数学を使用しますし、法律では、「AとBまたはCの条件を満足し、ただしDを除く」などの複雑な論理にも慣れているでしょうから、入社後、社内でプログラムの特訓をやれば、即戦力になるかもしれません。


メモリからの読み取りは、一旦情報を壊す(2003.11.16.)

 1950年代後半から1970年代前半の間、永らくメインメモリの主流であったコアメモリ(Core Memory、外径2mm〜0.5mmのフェライトリングの磁化方向で記憶する磁心記憶装置)は、破壊読み取り(Destructive Read-Out)方式と呼ばれていました。すなわち、情報を読み取るのに磁化状態が反転して出力が出るかどうかを調べるので、一旦記憶が破壊され、直後に再書き込みする必要があったのです。私は、このメモリの開発の担当でした。米国製のコアでは巧く動作しましたが、開発当初の国産フェライトコアでは苦労しました。
 これを、非破壊読取り(Non-Destructive Read-Out)方式に変える研究が各所で行われましたが、商用機への実用には至りませんでした。理由は、磁化を反転させて情報を破壊しないように、小電流でそっと読み取ったために出力信号が小さく、SN比が悪かったこと、書き込みと読み取りで制御を変える複雑さがあったことなどです。
 「情報を一旦壊すことを怖れてはいけない。すぐ元に戻せば良い。」、「SN比が悪いと信頼性が落ちる、大容量化ができない。」が、高速大容量メモリの考え方です。この考え方は、現在のDRAMにも生きています。DRAMも、読み取ることによって、一旦コンデンサが放電しますが、すぐに再書き込みを行っています。 SRAMは破壊読取りメモリではなく非破壊ですが、1ビットを記憶するセルが複雑で、低密度、高価格のため、メインメモリとしては一般的でありません。


「1」と「0」がすり減ったプリンタ(2003.11.8.)

 昔、私が開発に携わっていたコンピュータは、電源投入後、まずメモリーをチェックしていました。メモリーチェックは、メモリーに一定のパターンを書き込んだ後に全内容を出力する、いわゆるメモリーダンプですが、出力先は、現在のようにモニターではなく、プリンタでした。当時は、16進は一般的でなく、「1」「0」のまま出力していました。そのため、メモリーのご機嫌が悪いときは、メモリーを調整しながら、プリンタへの打ち出しを続けました。そのため、プリンタの活字の「1」と「0」が擦り減ってしまったのでした。通常の計算結果をプリントアウトした時、「1」と「0」だけがぼやけて、読みにくかったのを覚えています。
 1957年に出版された、D.D.McCracken著の「Digital Computer Programming」と言う古い本(当時、給料の4分の1をはたいて買ったもの)を、念のために引っ張り出してきました。そこには、「16や32の基数が、少なくとも一箇所のコンピュータで使われている。しかし、表示するのに6個や22個の余分な新しいシンボルが必要なので、利益よりも欠点の方が多い。入出力装置の性能が良くなれば別だが・・・。」 と書かれていました。その同じ本には、10進数、2進数、8進数の計算の仕方は述べられていましたが、16進数は、前記の記載に留まっていました。


ブートの本来の意味は(2003.10.24.訂正2004.2.12.)

 OSを再インストールすることを「リブートする」などと言います。初めてインストールするのは「ブート」です。「マルチ・ブート方式」などと言うのもありますから、「ブート」は「立ち上げる」程度の意味にも使われます。でも、この「ブート」の本来の意味を知らない人が多いのです。ブートは、「ブートストラップ(bootstrap、長靴を持ち上げる、または引き出すための紐)」の略です。文献等によれば、「pull oneself up by one's bootstraps」は、「to help oneself without the aid of the others」、すなわち、「他人の手を借りずに自分でする」と言う意味、とあります。
 昔、ROMが無かった頃、コンピュータには、イニシアル・ローダー(initial loader、初期読み込みプログラム)がハード・ワイヤードで組み込まれていました。ハードですから、プログラムとしては非常に短いものです。これを用いて、1ワード分だけプログラムを紙テープ装置等から読み込んだのです。最初に読み込んだ1ワード分のプログラムは、更に次の読み込みを指示しました。1ワード読み込むと、次の1ワードを取りに行って、更に次の1ワードを読み込む、と言う調子で少しずつプログラムを読み込み、最後には長いプログラムになって、コンピュータが立ち上がったのです。最初の1ワード分のプログラムが、「ブートストラップ」(靴の引き紐)に相当し、それが元になってプログラム全体(「ブート」)が読み込まれたのでした。

(この項は、渡辺勝寿氏のご指摘により訂正をしました。最初、私は「ブートストラップ」を、単に「靴紐」と解釈し、その結果、最初は編み上げ式の靴紐を連想し、プログラムを少しずつ(靴紐を編み上げるようにして)読み込むことを意味すると、説明しました。しかし、「ブートストラップ」は、携帯電話やカメラについている「ストラップ」と同様に、ぶら下げたり、引き出すために靴についているものであるとのご指摘があり、編み上げ靴紐のように「行ったり来たり」の意味がないことが分かりました。関連Webサイトのご紹介もありましたが、詳細は省略します。渡辺氏に感謝します。)


システム・エンジニアとプログラマ(2003.10.22.)

 大学へ求人にくる会社の人は、「システム・エンジニア」の募集と言い、「プログラマ」の募集とは言いません。でも、「最初はプログラマから始めないとダメでしょう」と私が言うと、「その通りです」との答えが返ってきます。さきに述べたハードとの対応に依れば、「プログラマ」は、回路の組み立てや調整を行う現場作業者のような役割です。「プログラマ35歳定年説」があるのも関係しているのでしょう。
 大学は、「プログラマ」(現場作業者?)の養成機関だとは思っていません。それどころか、特定の言語を教えるのは邪道で、アルゴリズムやデータ構造などの学問を教えるのだとの考え方があります。それならば、「システム・エンジニア」(設計技術者?)の教育をやっているかと言うと、これは学問的体系に乗りにくいらしく、積極的ではありません。
  回路の配線が、部品の自動挿入マシンや自動はんだ付け機、さらには大規模集積回路(LSI)に置き換えられたように、ソフトウエアにおいても、開発の自動化、省力化が急速に進むものと思われます。 その時の対策を考えておかないといけないですね。

プログラムの開発をハードウエアの開発に対応させると・・・(2003.10.21.)

 大学の卒業研究程度のハードウエアの研究の場合、1)ブロック図の作成、2)回路図の作成、3)CADによるシミュレーションの実行、4)回路の組み立て、5)回路の調整、6)条件を変えてのデータ採り、の順に行わせます。これらのスケジュールを立てさせ、学生の尻を引っぱたきます。「条件を変えてのデータ採り」を終わって、はじめて、論文が書けると思うのですが、 ときどき、「回路の組み立て」までがやっとの学生も居ます。
 これを、プログラムの開発に当てはめると、1)流れ図(フロー・ダイヤグラム)の作成、2)ユーザ関数や変数(C++ならクラスやオブジェクト)の割り当て、3)がなくて、4)コーディング、5)デバッグ、6)実用テスト、となるのでしょうか。学生のやり方を見ていると、いきなり「コーディング」から始める者が多く、困ります。「デバッグ」も何とかやるのですが(エラーがあるとビルドできない)、文法的なエラーが無いと言うだけで、とんでもないプログラムができたりします。重要なのは、「実用テスト」です。これが巧く行って、ようやくプログラム作りの醍醐味が味わえるのではないでしょうか。


コメントなしでも解るプログラムにコメントを付ける(2003.10.19.)

 プログラムは脚本のようなものです。最初に、登場人物の名前を並べます(変数や関数の宣言)。人物は、AさんやBさんではなく、フルネームで登場させましょう。名は体を表すと言いますが、その性質を表すような名前を付けると、観客に混乱を起こさせません。プログラム本体は、ストーリー性を持っていなければいけません。つまり、コメントなしでも筋書きが解るのが良いプログラムです。
 構造化プログラミングが提唱された時、「gotoを使わないように」と言われました。タクシーのドライバーに目的地を告げないで、「そこを右に曲がって」、「次の信号を左折して」などと突然に指示をすると、ドライバーは困ってしまいます。gotoは、それと同じです。初期のBASICでは、GOTOが安易に使われ、スパゲッティ・プログラムなどと呼ばれるものもありました。あらかじめ繰り返し回数が決まっているループは必ず forを使いましょう。そうでないものに forループを使ってはいけません。無限ループのfor( ; ; )やwhile(1)などを使って、breakで逃げ出す例を示す参考書を見かけますが、論外です。 コメントなしでも解るプログラムを書いてから、それに、多からず少なからずのコメントを付けるのが良いのです。


ROMとバイトマシン(2003.10.6.)

 ROMの機能は、当初は、Permanent Memory(永久記憶)と呼ばれていました。特に、書き換え可能なものは、Card-Changeable Semi-Permanent Memoryで、パンチカードのようなものを差し替えて、内容を変更していました。
 1959年に発売された中型電子計算機IBM1401は一世を風靡し、コンパチ機も他社から出ていました。これは、いわゆるキャラクタ・マシンで、6〜7ビットが単位でした。コンパチ機の出現に業を煮やしていたIBMは、1964年に、極秘の内に開発していたIBM360シリーズに切り替えます。これが、8ビットのバイト・マシンの最初です。 IBMは、従来のIBM1401に使われていたソフトをIBM360シリーズ上で動かすために、エミュレータを用いました。そのエミュレータプログラムを格納するのに、Permanent Memoryを用いたのです。
 1961年に、私はある種のPermanent Memoryを米国の学会で発表しました。その時、会場のワシントンからIBMの研究所まで、私は引っ張って行かれ、そこで講演をさせられたのです。その当時、IBMが、Permanent Memoryの開発に着手していたことは、私には知る由もありませんでした。私のPermanent Memoryは、IBMには採用されませんでしたが、米国のMeta4と言う計算機には採用されました。Meta4は、わが国でもデモが行われましたが、あまり売れなかったようです。

原理に渦電流(Eddy Current)を利用した
カード状のものを利用するので、Eddycard
と名付けた。左手にサンプルを持ち、原理を
説明している筆者。


ROMと銀行強盗(2003.10.3.)

 ROMはRead Only Memoryの略で、読み取り専用メモリと訳されます。しかし、現在、読み取りだけしかできないROMは少数派です。ほとんどは、書き込みもできます。ただし、容易に書き換えができないように、書き込みには特別の操作を必要とするものが多いのです。ROMの長所は、電源を切っても記憶を失わない不揮発性と高信頼です。一般には、書くことよりも読むことの方が多いので、一時期、Read Mostly Memoryと称したこともあります。
 マレーシア政府機関関係者に教育をしていた頃、ROMの講義をしました。そのとき、「ROMはRead Only Memoryであるが、Write Only Memoryと言うものもある。知らないか?」と受講者に聞きました。答えはありません。そこで、航空機のフライトレコーダや銀行などの監視ビデオの話をしました。これらは、書き込みをするが、何か事故や事件のとき以外は読み取られることが無い。幸せな時はWrite Only Memoryであると。 ところが、その翌日、クアラルンプールの中心街の日系T銀行に、ライフルを持った二人組強盗が入ったのです。前日にその話をしたばっかりだったので、受講者もびっくりしていました。

マレーシア政府機関に依頼されて講義をして
いるところ。長いときは5日間ほど続いた。


ROMはRAMです(2003.10.1.)

 私は電気科卒業ですから、会社ではハードウエア系の仕事をしていました。そこで、今後は、ハードウエアに関する話題も交えてゆきます(表題の色を変えます)。
 1956年に、IBMからRAMAC(Random-Access Method of Accounting and Control)と命名したコンピュータが発売されました。これには、外部大容量メモリーとして、容量4.4MBの磁気円盤(現在のハード・ディスクの第一号)が付いていました。磁気テープのシリアル・アクセスに対し、磁気円盤はランダム・アクセス(ランダムにアドレスを与えても、アクセスタイムが変わらない意、実際には、回転待ち時間があるので、全く同じではないが、磁気テープに比べると・・・)と呼びました。これが、ランダム・アクセスと言う言葉の始まりです。
 つまり、RAMとはRandom Access Memoryの意味であり、磁気テープのようなSerial Access Memoryと対照的な言葉です。ですから、現在、普通に使っているROM(Read Only Memory)はRAMです。RAMは、読み書きがランダムにできるメモリと言う意味ではありません。


巧妙なプログラムから判り易いプログラムへ(2003.9.30.)

 昔のパソコン(いや、その当時は、普通のコンピュータでもそうでした)は処理速度が遅く、クイック・ソートやFFT(高速フーリエ変換)など、巧妙な高速化技法にプログラマは熱中しました。そのため、原理の理解が困難で、プログラム作成は秀才がやるもの、凡人は解らなくても良いもの、とされていました。メモリ容量もごく限られていましたので、やはり、凡人には解りにくい曲芸が行われていました。昔は、巧妙なプログラムが良いプログラムだったのです。
 その後、ソフトウエアに対する需要が急増し、単純な予測では一億総プログラマー化が必要となり、ソフトウエア・クライシス(危機)が叫ばれ、「構造化プログラム」が推奨され、情報処理技術者試験も始まりました。一部の秀才によるソフトウエアの手作りから、凡人の人海戦術によるソフトウエアの量産に変わったのです。処理速度やメモリー容量も向上し、巧妙なテクニックは不要になりました。ソフトウエアの量産は、既存ソフトの再利用と分担作業によって行われるので、誰が見ても判り易いプログラムが良いプログラムになりました。


百聞は一見にしかず、百見は一実行にしかず(2003.9.28.)

 これは、私の実話です。Visual C++を勉強したい気になりました。「Visual C++何とか」と書いてある一冊の本を、良さそうだと思って買いました。読んで行くと、始めは易しいのですが、10ページ位ですぐ難しくなって放棄しました。別の本を買いました。今度は、前の本を読んでいたので、20ページ位まで行きました。また、ギブアップです。こうして、参考書ばかり数冊貯まりました(いずれも、最初の20ページ位までしか読んでない)。あるとき、本に書いてある極めて易しいことを、バカバカしいと思いながらも、そのままパソコンに入力してやってみました。そうすると、参考書が急に読み易くなり、今まで挫折していた本も、どんどん読めるようになったのです。
 参考書は、やってみたらすぐ判ることは書いてないことがあります。しかも、それが判らないと先に進めないのです。参考書は、何冊も買う必要はありません。要は、実際にやってみることです。頭で理解して、判ったと思うことでも、念のために実行してみてください。参考書は、途中を飛ばしてはダメです。バカバカしいことをやって下さい。


プログラム言語の勉強は、外国語の学習法を参考に(2003.9.27.)

 どこかの外国語を勉強しようとする時、どうしますか?「辞書」、「文法書」、「易しい読み物」、「会話のテープ(CD)」などから、何を一番に選びますか?「易しい読み物」を手にとり、知らない単語があれば、「辞書」も欲しいと思うでしょう。今すぐ外国に行く人は、「会話のテープ」で丸暗記をするかもしれません。すくなくとも、最初から「文法書」を読む人は居ません。日本人は、英文和訳はできるが、和文英訳は下手だと言われますが、実は、英文和訳も下手なのです。英文をパターンとして覚えてなく、辞書に頼ったり文法に頼っていたりして居るからです。語学の勉強は、理屈(文法)抜きで、使用例(パターン)を沢山覚えることです。
 プログラム言語も言語の一つですから、理屈にこだわらず、他人の書いたプログラムを良く読むことです。文法は、ひとりでにわかってきます。その段階で、頭を整理するために、「文法書」を読むのも良いでしょう。「他人の書いたプログラム」(特に名作)は、意外に手に入りません。ソース・コードに関心を持つ人が少なく、実行ファイルのみをダウンロードして使っているからでしょう。市販のプログラム言語の参考書は、ほとんどが「文法書」です。その方が、良く売れるからでしょうか?それとも「文法学者」が書くからでしょうか?


パソコンを覚えたい、C言語を勉強したいはダメ(2003.9.26.)

 パソコンを覚えたいからパソコンを買った、と言う人は、大抵、モノになりません。「パソコンは大体分かった。つまらないね。」と言ってパソコンに埃を被せてしまいます。「パソコンを覚える」(この曖昧な言葉!!)ことが目標だったので、本人は目的を達成したつもりで居ます。それに比べると、何か趣味を持っていて、そのためにパソコンを使おうとする人は、それが実現できるまで頑張り、パソコンの達人になれます。つまり、目標が具体的であり、それを達成するとパソコンとは別の世界で満足が得られることが必要なのです。
 C言語(C++でもVisual C++でも良い) を勉強したい、それだけが目標の人の結末も大体同じでしょう。「情報処理技術者試験」に受かることだけが目標の人は、パソコンに向かう必要はありません。過去の問題集をやり、受験参考書を読めば良いのです。出題されるパターンは大体決まっています。C言語(その他の言語でも良い)を本当に勉強したければ、C言語を道具にして「何か別のこと」を狙うことが必要です。「Visual C++の勉強部屋」が、その「何か別のこと」のヒントになれば幸いです。


誰が見に来てくれているのかな(2003.9.25.)

 最近、恐る恐るアクセスカウンタを付けました。と言うのも、もしアクセス数が少ないとがっかりすると思ったからです。しかし、この「Visual C++の勉強部屋」へのリンク元も、判明しているだけで30サイトを超えて来ましたので、付けてみました。現在のところ、1万件/月と、思ったより多くの人が訪れてくれています。
 毎日、期待を込めてアクセス数を見ていますが、ウイークデイが400〜500アクセス、土日・祝日が200アクセス前後です。ということは、学校または職場で見ている人が多いのではないかと想像しています。つまり、学校または職場のパソコンに「Visual C++ 6.0」か何かがインストールされていて、それでプログラムを作成中に、時々見てくれるのではないか?と考えています。 さらに想像すると、多くは、卒業研究の学生ではないかと思っています。
 こんなつまらない文章を、今後も書き続けて行きますので、時々見に来てください(アクセス数アップのために)。



「Visual C++の勉強部屋」に戻る
「石立 喬のホームページ」に戻る