2009年9月12日土曜日

「大嫌いっていうことは大好き」っていうこと?

アメリカ出張でサンディエゴに居た時に、お世話になったアメリカの会社のソフトボール大会に参加した事がありました。その試合では、アウト・セーフで熱くなったアメリカの人がいましたが、日本人からみると「おとなげない」と言った感じでした。アメリカ人の気質は、何でもストレートな気がします。

ところで、日本の小学校などでは、好きな女の子がいると、わざとチョッカイを出したりして、仲が悪いような態度をする男子がいます。昔、「男女7人夏物語」でも、「明石屋さんま」が、「大嫌いっていうことは、大好きっていうことやないか」などと言っていました。アメリカでも同じなのでしょうか?
ご存知の方がいれば、コメント下さい

アメリカ出張の思い出(1)


私は、約30年前と20年前に、出張でアメリカに行きました。約30年前には、UCSD-Pascalの勉強のため、サンディエゴに半年滞在しました。UCSD-Pascalは、ヴィルトが開発したPascalシステムを当時のパソコンで動作するとともに、Pascalでの開発環境(オペレーティングシステムやスクリーンエディター)まで開発したシステムであり、カルフォルニア大学サンディエゴ分校のケネスボール教授のグループが開発しシステムです。私は、このシステムの日本語販売に向けて、UCSD-Pascalの開発会社(SofTech Microsystems)社でメンテナンス要員として、サンディエゴで半年暮らしました。右に写真は、そのときの開発会社のメンバーです。また、20年前には、Sunが提供していたウィンドウズシステムであるSunViewの日本語化のため、2週間の出張を2回行い、サンノゼに出張に行きました。
当時の出張で感じたことについて書いてみます。

アメリカでのシステムソフトウェア開発会社では、個室を2,3人でシェアしながら開発を行っており、非常に広い環境でプログラム開発することができます。個室ですので、勿論、ドアを閉めて外部を遮断することができます。羨ましい限りです。
また、帰宅する際には、パソコン(当時はワークステーション)の電源は入れっぱなしで帰宅します。通常は、スクリーンセーバーが動作しますので、ディスプレイが悪くなることはありません。出社してすぐパソコンを利用していました。また、紙と使い放題であり、私たちが日本で裏紙を使っていた状況を考えると、エコとはいえない生活を過ごしていました。


2009年9月9日水曜日

UCSD-Pascalの思い出(2)

私が米国で勉強したUCSD-Pascalは、スクリーンエディターやコンパイラー、オペレーティングシステムが1つのパソコン(その当時は、AppleII)で動作していました。
これらのソースコードは、すべて、Pascalプログラムで記述されていました。これらのPascalプログラムはコンパイルされてシステムを構築必要がありますが、UCSD-Pascalでは、コンパイラーが生成するコードは、バイトコードと呼ばれる仮想のマシンコードが生成されていました。通常は、コンパイラーが生成するコードは、各CPUのマシンコードですが、UCSD-Pascalでは、これが仮想のマシンコードであることが特徴です。

仮想マシンコードは、インタープリタによって実行することシステムが動作していました。仮想マシンコードを解釈するインタープリタは、各CPUのアセンブラ(6502,z80,6800,pdp-11)でコーディングされており、当時の複数のパソコンで動作することができました。弱点は、インタープリター経由で動作することから、直接マシンコードで実行する場合に比べて、パフォーマンスが悪いという点ですが、逆に多くのパソコンに移植できる点がメリットです。
これは、Javaでも同じで、バイトコードとよばれる仮想マシンコードをJava仮想マシンと呼ばれるインタプリターで実行するもとのなります。なお、UCSD-Pascalもこの構成についてオリジナリティがある訳ではなく、Pascal言語の開発者であるチューリッヒ工科大学のニクラウス・ヴィルトが、最初に公開したシステムも同じP-コードとよばれる仮想マシンコードとインタプリターから構成されています。
詳しくは、ニクラウス・ヴィルトが著した「アルゴリズム+データ構造=プログラミングに書かれています。この本は、プログラミングを目指す人には、必ず読んで欲しい名著です。私も感激しました。

追伸:「アルゴリズム+データ構造=プログラミングは、絶版になってしまったそうです。残念!!!
みんなで、復刻ドットコムで復刻のリクエスト投票しましょう。


2009年9月7日月曜日

Yawdba開発談(2)

Yawdbaは、クライアントから送られてきたHTMLプロトコルのget/postメソッドに対して、get/postパラメータからデータベースに対する指示を解釈して、Web画面に表示するためのhtmlページを作成して、クライアントへ返却します。
しかし、データベースに対する指示をパラメータだけで表現することが不可能であるため、動作をルールとしてデータベースのテーブルに格納します。
クライアントからは、このテーブルと実際に動作させるルール名を指定することにより、データベース上に格納されている動作ルールが適用されるようになっています。
詳しくは、システム構成ルール構文を見てください。

データベースをアクセスするためのロジックや表示方法などを変更したり、追加するには、ルールが格納されているデータベースに上のレコードを変更したり、新しくレコードを追加したすることで実現します。
ASP.NETやStrutsでは、システム上で定義されているASP.NETプログラムやJSPプログラム・Javaプログラムを変更しないと、システムの変更ができません。この方法では、プログラミングを知っている必要がある上、修正するにはサーバー上で作業する以外に方法はありません。Yawdbaでは、データベースにルールを追加・修正するだけであり、どこのPCからでも対応が可能です。
こうした方が良いなどの意見があれば、コメントください。

2009年9月6日日曜日

私の旅アルバムをアップしました。

私の旅写真のアルバムをアップしました。ページの右上にあります。このサムネールをクリックすると、全ての写真を見る事ができます。気に入った写真があれば良いのですが、如何ですか?
写真が見えないようでしたら、ご連絡ください。また、それぞれの写真について、コメントもできますので、お気軽に書いてください。

2009年9月5日土曜日

日本のコンピュータ業界

日本のコンピュータ業界では、プログラマーから入って、システム設計を行ってSEになることがスキルアップするのが良しと言うことになっています。
私は、会計システムやオンラインシステムなどの開発に携わったことがないので、大人数で開発するシステムの詳しいことはわかりませんが、コンパイラーやウィンドウシステムなどの基本ソフト開発では、少数精鋭のプログラマーが数人に開発するのが一番効率的なシステムを開発できるのではないでしょうか?

基本システムの開発では、上になって人を使うよりは、プログラミング技術を磨き、他の人には負けないだけの技量が必要だと思います。技術者としては、他のだれにも負けない技術が持っている事のほうが、大切ではないでしょうか?私の思い込みかもしれませんが、如何でしょうか?

パソコン昔話1(なぜ、1バイトは8ビット?)

きのう、新人の男の子に昔話をしました。彼は、コンピュータ関連の学科を出ましたが、コンピュータの昔話(「なぜ、パソコンを起動するときにブートと言うのか」、「パリティビットがなぜ有効なのか」など)については、大学で話を聞いたことが無いようで、大変、興味を持ってもらいました。現在の当たり前のように使われているパソコンでも、昔からの歴史を知ることによって、より理解が進むのではないでしょうか?

そこから、1つ思い出したので、ここで一つ話します。どうして1バイトが8ビットかと言うことです。これは、Wikipediaにも書いていましたので、参考に見ていただくと良いかもしれません。(参考)
コンピュータ内部ではオン/オフを示すbitを処理する回路で構成されます。データを取り出すためには、それぞれのビットを取り出すのではなく、まとまった単位で取り出す方が効率的です。そこで、CPUは、何らかの単位でビットの集まりを取り出して、アキュムレータやレジスタと呼ばれる演算器へ送られ、そこで、演算を行ってメモリに格納します。この基本単位がバイトとなります。CPUは、ビットが集まって作られているCPU命令を基に動作します。この命令もメモリに格納されていますので、CPUが解釈する命令もバイトの倍数となります。

昔は、メモリも十分に無かったので、表現が必要なパターンがバイトで表現できるようすることが、効率的にコンピュータを利用することになります。このため、昔のコンピュータでは、アドレスの単位が6bitのコンピュータもありました。有名なコンピュータは、PDP-11です。PDP-11は、1バイトが6ビットでした。HPのホームページには、PDP-11開発談があります。その中には、開発者のケンオルセンの話が以下のようにあります。
「その当時必要とされていたデータは6ビットでいろいろな文字コードや制御コードを表現していたんだよ。」
ちなみに、UNIXで8進数表現がある点もPDP-11の命令を表現し易かった事が理由であると思います。

しかし、処理する文字が英語の大文字小文字や特殊記号など増えてくるのに従って、6ビットでは足りなくなってきました。英語大文字+英語小文字+数字を表現するだけで26+26+10=64パターン必要です。64パターンを表現するには、6ビット必要となります。さらに、プラスやマイナス等の特殊記号を表現させるために、最低でも7ビット必要となります。
7bitで1バイトでも良いのですが、通信用のパリティビットを表現させたりするために、プラス1ビットを追加した8ビットが1バイトとなりました。

将来は、処理する文字コードを全世界で対応できるunicodeにするなどして、1バイトが16ビットになるかもしれませんね。