2009年12月27日日曜日

プログラム言語について -COBOL(1)-

ソフト会社に入社して最初に教わったCOBOLについてお話しましょう。

それまでプログラム言語であったアセンブラとfortranが、プログラムの処理ロジックや計算ロジックを記述する言語として開発されていました。その後に開発されたCOBOLでは、事務計算(会計や財務などの計算)向けの言語として開発されました。

それまでの計算機では、2進数の数値しかありませんでしたが、COBOLでは、10進数の数値が追加されて、計算誤差が発生しない10進数の数値が使えるようになりました。
例えば、2進数で0.1を表現しようすると
0×2-1 + 0×2-2 + 0×2-3 + 1×2-4 + 1×2-5 + 0×2-6 + 0×2-7 + 1×2-8 + 1×2-9 + …
となってしまい、2進数の小数表現が不可能となります。このため、利率の計算等で全く誤差が発生しないようにすることが不可能です。COBOLで導入された10進数の数値は、1バイトに1桁の数字を割りあて、10進数の計算をコンピューター上で実現しているので計算誤差が発生しません。

さらに、COBOLでは、プログラム自身がドキュメントとして使用できように、英文で文章を書くように処理を記述できるようになりました。プログラム記述では沢山のコードを書かなければなりませんが、fortranやアセンブラに比べ、プログラムソースを見れば、処理内容が分かる点が改善点となります。

しかし、COBOLはCODASYLによって定義されたCOBOL言語を元に、各コンピュータメーカーが独自に拡張をおこなったため、プログラム間の互換が完全に保たれなくっっているのが弱点となっています。特に、対話型に画面操作を行う処理、レポート作成処理、データーベースのアクセス方法などについて、各メーカー間で互換はありません。また、COBOLのもう一つの特徴である構造体を使ったコーディングでは、各処理系のメモリ配置や数値の構造を知った上でコーディングする必要があるので、すでに作れているプログラムを移行する際には、十分注意する必要があります。
このため、COBOLは、各社での互換のあるプログラム言語のように思われていますが、他のシステムに移行する際には、全部の処理を確認しなければ移行は不可能となります。オープンCOBOLと称するコンパイラーでも移植のためには、全ての処理を見直す必要があります。

C言語では、Unixで開発されたC言語を、各メーカーでそのまま移植しているケースが多く、また、共通ライブラリも各メーカーで同様の関数が用意されていることから、あまりこのようなことは発生しません。もっとも、C言語でもウィンドウ制御のプログラムが各メーカー毎に違うことはあるとは思いますが、COBOL程違ってる訳ではありません。

2009年12月23日水曜日

メリークリスマス

Merry Christmas !!
私のブログには、似つかわしくない写真ですが、家内が作ったクリスマスリースです。
家内は、私と違って手を使って作るのが好きで、リースや結婚式のブーケなども作ったりします。

サンタクロースが、素敵なプレゼントを持ってくると良いですね

プログラミング言語について -Fortran-

この職業に就いてから多くのプログラミング言語について勉強しました。
Fortan、COBOL、PL/I、Pascal、アセンブラ、Basic、awk、Lisp、Prolog、VisualBasic、RPG、Perl、Java
などを使ったことがあります。これから、それぞれのプログラム言語について書きたいと思います。昔からのプログラミング言語を知ることで、過去の賢人がどのように考えて現在のような姿になったのか分かるかと思います。

今日は、まず、最初に触ったFortanについてお話しましょう。私は、あまりFortanを使ってプログラミングしたことはありません。大学の時の選択授業の「統計」でプログラミングで習った最初の言語になります。

プログラムは、偏差値を自動的に計算するものでした。当時は、今のように自分のパソコンなどなく、大学の計算センターで計算を依頼することになります。結果は、翌日に取りに行き、ストック用紙に印刷された結果を受け取るといったことになります。プログラムとデータは、当時は、パソコンのようなディスプレイ画面を自由に使用することができず、パンチカードに打っていました。

それまでCPU命令をそのまま記述するアセンブラ言語しかなかった時代に、IF文やDO文により手順を記述できるFortanは、高水準言語と呼ばれました。事務計算で利用されるCOBOL言語とともに、三角関数や指数関数が利用できるFortranは、科学技術計算で利用されました。

しかし、制御文としてDO文とIF文しか無かったために、do while制御やdo until制御を行おうとすると、必ずGOTO文が必要となりました。さらに、当時のプログラム開発では、フローチャートとよばれるチャートを使ってプログラム手順を記述することが標準されていましたが、GOTOを使うことで動作を制御することが普通に行われていました。私は、Fortranの最大の欠点は、この点であった気がします

しかし、大量のプログラムを開発する上には、いろいろな人が勝手にGOTO文を使うようになるとプログラムをメンテナンスすることが困難になっていくことが分かってきました。そこで、プログラム制御方法としてdo whileやdo untilなどようなプログラム制御方法の型が導入され、GOTOレス-プログラム(GOTOを使わないプログラミングスタイル)によりプログラム開発する構造化プログラミングが開発されました。私が、ソフトハウスに就職した時が、この時代になります。

そして、構造化プログラミングが可能な言語として、PascalやCなどの言語が開発されました。

2009年12月21日月曜日

Ruby On Railsの勉強を始めました

Yawdba開発する上で、データベースを簡易的にWeb画面に表示するシステムとして最近注目されるようになってきたRuby On Railsについて、調べ始めました。
Ruby On RailsもYawdba同様に、できるだけ簡単にデータベースをWeb画面に表示するためのツールです。Ruby On Railsでは、基本としてオブジェクト指向によるプログラミングですが、Yawdbaでは、難しいプログラミングを知らなくても、簡単に開発できることを目指しています。
おそらく、Ruby On Railsでは、プログラミングを使って非常に複雑なロジックも開発できるとは思いますが、Yawdbaでは、複雑なプログラミングなしに、どこまでデータベーステーブルをWeb画面に表示できることを目指しているので、若干、目標となる点が違っているのかもしれません。
いずれにしても、Ruby On Railsの勉強をするため、Webからダウンロードして調べる予定です。何か、分かったらYawdba開発サイトにアップする予定です。
また、同じく、StrutsやASP.NETについても勉強したいと思います。

2009年11月27日金曜日

htmlの<input type=text>タグでvalueに「ダブル引用符」を設定する方法

htmlの<input type="text">でvalueプロパティの値に「ダブル引用符」を指定しようとして、value変数にダブル引用符を書くと次のようになってしまいます。<input type="text" name="a" size="" value="ダブル引用符(")">とすると、value文字列内の"で終わってしまいます。
つまり
「"ダブル引用符(" 」と「)"」で分かれてしまいます。
このようにHTMLのinputタグのtextタイプでは、簡単にダブル引用符を使うことができません。
しかし、textタイプに「ダブル引用符」を指定する方法が分かりました!!

ダブル引用符を「&quot;」とすれば正しく表示することができます。このようなHTMLでの特殊記号については、こちらを見てください。

上の例のように、textタイプで「ダブル引用符(")」と値設定する場合には、次のようにします。
<input type="text" name="a" size="" value="ダブル引用符(&quot;)">

inputタグのtextタイプ以外でも<textarea>タグ内のデータで&quot;」とすれば正しく表示することができました。
さらに、formタグ内のinputタグの値(value)は、submitボタンなどにより送信されるPostメソッドのパラメータとなりますが、このようにして設定した文字列が、サーブレットのPostメソッドで正常に取り出せることを確認しました。

2009年11月24日火曜日

Yawdbaでルール設計中(1)

約1ヶ月近くアップしていませんでした。現在、Yawdbaでのルールを考えています。

Yawdbaのルールは、主に、SQLコマンドなどを通じてWebに表示するテーブルを作成する[Control]セクションと、[Control]セクションで得られたテーブルをWeb画面に表示する際の見た目を定義する[View]セクション、さらに[View]セクションで得られたhtml画面のスタイルを定義する[StylSheet]セクションから構成されます。

現在の考えている案は、以下のようになります。
[Control]
Table = Query("SELECT ID, DATE, FIELD1 FROM MYDB WHERE DATE=#%Param%#");
SQLExec="UPDATE MYDB SET DATE1 = #$MYDB.DATE$#,
FIELD1 = "$MYDB.FIELD1$' WHERE ID = %MYDB.ID%";

[View]
table {
label {
MYDB.DATE = 日付;
MYDB.FIELD1 = 値;
body {
MYDB.DATE=date[YY/MM/DD];
MYDB.FIELD1=text[20];
MYDB.ID=hidden;
}
}

上の例では、データベースのMYDBテーブルからブラウザのParamパラメタで指定された日付を検索して、ID、DATE、FIELD1を表示するとともに、DATEフィールドとFIELDフィールドを入力フィールドとして値を変更するものです。
バッククォーテーション(`)で指定された文字列が、SQLコマンドとなりますが、この中の$あるいは%で囲まれた部分が変数名となります。$で囲まれた変数は、入力フィールドとして動作し、%で囲まれた変数は、埋め込みフィールドとして動作することになります。

したがって、
  Table = Query(`SELECT ID, DATE, FIELD1 FROM MYDB WHERE DATE=#%Param%#`);

のParamは、%で囲まれているので、この変数部分にHttpのGetパラメータの値が埋めもまれ、SQL文字列が完成し、処理する内部テーブルが完成します。
次に、SQLExecでは、データベースのSQL更新のSQLコマンドを定義している。ここでは、$で囲まれたMYDB.DATE変数とMYDB.FIELD1変数が入力フィールドとなります。さらに、その後のbodyでこららの変数の形が定義されています。

因みに、内部テーブルに取り込んだMYDB.IDは、bodyのhiddenパラメータで表示しないように定義しているので、Web画面上では、MYDB.IDは表示しません。

皆さんの意見を頂けると助かります。お願いします。

2009年10月25日日曜日

Yawdba開発談(4)

今日は、Yawdbaの開発状況についてお話します。現在、ODBC接続によりデータベースを取得する部分の処理が大方終わりました。この部分は、以下の3つのクラスで構成されています。
  1. ODBC接続を行ってコネクションを作成するクラス
  2. コネクションからStatementを作成して、クエリやアップデートなどSQLコマンド実行するクラス
  3. 上記クラスのクエリコマンド実施によって得られたデータをテーブルに格納するクラス(DBTable)
から、構成されています。Yawdbaでは、DBTableクラスのインスタンスデータをWeb画面に表示させることになります。
今回の開発では、ODBC接続やStatement作成のクラスで発生したエラーをどうハンドリングをJavaの例外処理を使ってコーディングしています。
Yawdbaでは、何かエラーがあった場合には、基本的にエラー発生として画面表示させることにしたため、下位モジュールでは、エラーが発生した場合、Throwにより例外を発生させ、Yawdbaの最も上位モジュールでキャッチをして、エラーメッセージを表示させるようにしています。

今後は、ODBCの接続などの情報をキャッシュ化してパフォーマンス向上を図りたいと思います。

2009年10月20日火曜日

javaのsqlアクセスメソッドgetStringで文字化け?

通常、javaを使ってデータベースにアクセスするには、java.sqlのStatement変数のexecuteQueryメソッドを使用します。そして、このexecuteQueryメソッドで得られたResultSet変数を元に、レコード位置を指定したり、データを取り出します。
データを取り出すには、得られたResultSet変数のgetStringメソッドを使うケースが多いと思います。Yawdbaでも、同様の方法でMSAccessデータベースからデータを取り出していましたが、日本語文字データで文字化けが発生しました。どうも、日本語文字の奇数バイト目でデータが切れているために文字化けが発生しているように思われました。getStringと言うメソッド名からすると問題ないように思われますが、どう言う訳か、文字化けが発生しました。

別の方法がないか試行錯誤した結果、現在は次のような方法でデータをアクセスしています。現在のところ、問題なく動作しています。

取得するデータが文字列の場合には、getStringメソッドではなく、getCharacterStreamメソッドを使います。getCharacterStreamメソッドでjava.io.Reader変数を取得し、このReader経由で文字列を取得しています。この方法では、問題なくデータ取得ができるようになりました。

MSAccessデータベース内のデータは、外部のファイルとみなすべきであり、getCharacterStreamで取り出すべきかもしれません。しかし、本来、外部インタフェースとJava内部の処理との間でこれらの面倒を見るべきは、jdbcのような気がします。ひょっとすると、これは、利用したjdbcドライバ(odbcドライバ)の問題かもしれません。

2009年10月12日月曜日

Yawdbaでは、JavaScriptのオブジェクト化が必要?

Yawdbaでは、URLの指示によって決定されたルールによってデータベースの情報を取り出してWeb画面に表示します。しかし、Web画面に表示するだけであると、あまり見栄えの良い画面になりません。
昔のWeb画面のように、単に表が表示されるだけです。最近のWebでは、Ajaxと呼ばれる機構を用いて、HTMLのJavaScriptの中から、Webサーバーにアクセスして、データ取得を依頼し、データが取得されたら、JavaScriptを使って、ドロップダウンリストにデータを表示させたりすることができます。

Yawdbaでも、データベースのテーブルをHTML+JavaScriptの基本機能を使って、できるだけリッチなクライアントにしたいと思っています。
組み込むJavaScript手続きも、できるだけ今後の拡張に備えて、JavaScriptをオブジェクト指向に合わせた書き方にしたいと思います。このため、JavaScriptのオブジェクト指向の記述について検討して、有効なサブルーチンを作りたいと思います。

試験が終わるのが来週ですので、来週以降、Yawdbaのサイトにも情報を展開したいと思います。

2009年10月5日月曜日

AutoPostBackの画面ちらつきを防ぐサンプルをアップしました

以前より、AutoPostBackでの画面ちらつきを防ぐ方法を書いてきましたが、そのサンプルソースをアップしました。「AutoPostBackで画面のちらつきを防ぐ方法」をご覧ください。
このページの添付ファイルには、そのASP.NETソースプログラム(VB)も付けてあります。参考にしてください。

2009年10月3日土曜日

ASP.NETでエラー発生時に対応方法は

ASP.NETでのWebサービス上でロジックの誤りなどでエラーが発生して処理が中断される場合に下のような画面が表示されることがあります。
通常、ASP.NETサーバーのデバッグなどでエラーを発生した場合には、エラーが発生した際のVBプログラムなどを表示します。しかし、システムの運用時にこのようなエラーメッセージを表示させることは適切ではないので、上のような画面が表示されます。
このような場合には、ASP.NETサイトのルートフォルダーに存在するweb.configファイルで、画面に指示にあるように、「< customErrors mode="off" >」を指定します。
本来的には「< customErrors mode=..... >」や「< error mode=..... >」タグを使って、エラーメッセージ画面を定義することで、それぞれのエラーに合ったエラーメッセージを表示することができます。

2009年10月1日木曜日

今、JavaScriptの正規表現について勉強中です。

Yawdbaでは、Web画面でユーザが入力したときなどに、エラーチェックが必要だと思っています。しかし、このチェックをWebサーバーサイドで行うと画面のちらつきなどが発生してしまうので、エラーチェックについては、JavaScriptにせざるおえません。
エラーチェックには、入力した文字列が数字かどうか、日付かどうか、あるいは、離散的な値か、などいろいろのパターンがあります。それぞれの文字パターンについて検査する必要がありますが、これをJavaScriptでゴリゴリ書いていては、能がありません。現在は、JavaScriptの正規表現で、見通しの良いJavaScript関数ができないか検討しています。

とりあえず、数値かどうか判断するための関数を作ってみました。正規表現では、「[0-9]+」までで整数部分、「(\x2e[0-9]*)?」で小数部分を表しています。\x2eはピリオドを16進数で表したものです。

★ JavaScript
function check(v)
{
str = v ;
rnum = /[0-9]+(\x2e[0-9]*)?/; /* 正規表現文字列 */
if(rnum.test(str)) {
alert("数値です");
}
else {
alert("エラー発生");
}
}

★ Html
<input type="text" name="mytext" >
<input type="button" value="Check" onClick="check(mytext.value)">

正規表現は、検索する文字列に正規表現パターンが現れるとパターンマッチしてしまいます。例えば「a 1234 ddd」と言う文字列を検査しようとした場合、文字列の一部に「1234」の数字と認識できるパターンがありますので、数字と成ってしまいます。どうしたらよいでしょうか?お知恵を拝借できればと思います。
今回は、数字かどうか判断するものでしたが、今後は、Yawdbaのサイトに順次掲載したいと思います。

2009年9月28日月曜日

Yawdba開発談(4)

今日は、Yawdba開発に関するお話をします。現在、全体を大きく5つのクラスに分割し、それぞれのクラスについて設計を開始しました。詳しくは、http://sites.google.com/site/mydbtool/shisutemu-kousei-1を見てください。このシステム構成と同じ節には、それぞれのクラスについて、順に説明を加えていますので、合わせてご覧ください。コメントあれば、お送りください。

ルールを処理するクラスでは、ロジックを記述するためにルールの構文を決める必要があるのですが、頭で考えているルールでは、ユーザが値を入力したり、OKボタンを押したタイミングで、その値が適切か判断しようと思っています。
そのためには、JavaScriptを用いてインプリメントしようと思っています。
このブログでも、JavaScriptで設計の中で分かったことなどを書きたいと思います。
よろしくお願いします。

2009年9月26日土曜日

ASP.NETでボタンなどのオブジェクト位置が指定できなくなりました。

ASP.NETを使ってWebデータベースのシステムを構築しました。このブログの「ASP.NETでWebシステムを開発してみました」をご覧ください。

このWebシステムの開発中に、突如、配置されたオブジェクトが左上に寄ってしまい、位置付けができなくなってしまいました。

調べたところ、何らかの操作でASP.NETでのオブジェクト位置づけに関する動作モードが変わってしまったようです。下の図のように、ASP.NETのメニューの中から[レイアウト]→[位置]→[自動配置オプション]を開き、[ツールボックス、貼り付け、ドラッグ アンド ドロップを使用して追加されたコントロールの配置を次の通り変更する]のチェックボックスをオンにして、その下のメニューで[絶対位置]を指定することでデフォルトのモードを変更することが可能になりました。


こららの指定は、スタイルシート(CSS)に展開されているので、実際のオブジェクト配置がどうなるかは、スタイルシートについて熟知する必要があるようです。

この他の方法としては、ツールボックスのHTMLオブジェクトの中にあるDIVを使う方法があるかと思います。DIVオブジェクトをWeb画面上に配置したのち、DIVオブジェクトのプロパティを開き、Styleを選ぶと、プロパティの右端にボタンが表示されます。このボタンをクリックすると、このDIVオブジェクトの位置を指定することができます。DIVオブジェクトが配置できれば、その中に通常のTextBoxやListBoxなどのオブジェクトを入れて位置あわせが可能です。さらに、HTMLでは、DIVタグ中に別のDIVタグを書くことも可能ですので、同じような指定をASP.NETで定義して、より複雑な位置指定も可能になるかもしれません。アイディアなどあれば、お教えいただけると助かります。

わたしも、ASP.NETの基本的な部分で十分、把握していませんでした。勉強が必要ですね。

2009年9月25日金曜日

米国Sunへの出張

20年くらい前に、SunViewの日本語化(JLE)プロジェクトのお手伝いで米国Sunへ出張に行ったことがあります。私たちは、Sun社より前からSunView日本語化を行っていましたので、米国Sunでの日本語化に関する技術支援で出張しました。右の写真は、お世話になった米国Sunインターコム部門(インターコンチネンタルの略)のビルです。私たちは、あくまでSunでのプロジェクトのお手伝いでしたので、毎日、食事のお誘いなどを受けて、歓待して頂きました。

開発では、米国Sunと日本Sunが共同で行っていましたが、プロジェクトが遅れていたので、日本Sunのメンバーが徹夜で仕事していたことに、米国Sunのメンバーが大変驚いていたことを覚えています。また、11月の感謝祭を過ぎると、ウィンターバケーションで1カ月程度休み人がいることも驚きました。アメリカ人はあまりにも仕事をしないのか、日本人はあまりにも働き過ぎなのかどちらでしょうか?

この出張でもう一つ、気が付いたことがあります。それは、当時、カルフォルニア州では、ほとんどの人がタバコを吸っておらず、人の居るところでタバコを吸わないようになっていたことです。食事をしても、タバコの吸いたい人は、食後に外でタバコを吸っていました。日本人のオジサンだけは、タバコを吸いたがるので、Sunでのタバコの吸いたい日本人のオジサンたちは、バルコニーでタバコを吸おうとして、外に出てロックアウトされてしまったと聞きました。
今の日本以上にタバコを吸わない環境になっており、ビアホールでも、煙がなくて遠くまで良く見えました。

2009年9月22日火曜日

「アキレスと亀」のパラドックスについて

「アキレスと亀」と言うと北野たけしの映画のようですが、「アキレスと亀」のパラドックスとは、ギリシャの哲学者であるゼノンが考えたパラドックスです。

あるところにアキレスと亀がいて、二人は徒競走をすることとなりました。しかしアキレスの方が足が速いのは明らかなので亀がハンデをもらって、いくらか進んだ地点(地点 A とする)からスタートすることとになりました。

スタート後、アキレスが地点 A に達した時には亀はアキレスがそこに達するまでの時間分先に進んでいます。(地点 B)。アキレスが今度は地点 B に達したときには亀はまたその時間分先へ進みます。(地点 C)。同様にアキレスが地点 C の時には亀はさらにその先にいることになります。この考えはいくらでも続けることができ、結果、いつまでたってもアキレスは亀に追いつけないことになるというのがゼノンのパラドックスです。

即ち、アキレスは永久に亀に追いつけないことになります。

でも実際には、アキレスは、亀に追いつくことは可能です。それでは、どうしてこのような結論になるのでしょうか?。これをグラフに描くと良く分かります。下の図は、横軸がアキレスが居た地点を原点とた距離を示しています。また、縦軸が時間となります。赤がアキレス、青が亀を示しています。

ゼノンが指摘したアキレスが追いつくまでに亀も先に行くという距離は、追いつくまでの時間に近づくにつれて、0に近づき、収束した時間で追いつくくとになります。ゼノンが行っていることは、追いつくまでの時間を無限回に分割して見せてるだけであり、無限回の操作であっても、時間が無限でないことを示しています。

これら無限回の操作を足した時間が追いつく時間となります。各ステージの時間を計算して、各項をΣを使って足し算することになりますが、このときの各項は、無限等比級数であることが分かります。このため、Σの時間も一定の時間が計算され、これが追いつく時間となります。

例えば、アキレスの速度が毎秒αm、亀の速度が毎秒β、最初に亀がアキレスからγは離れていたとします。

アキレスが亀が居た地点Aまでにかかる時間は、γ/αとなります。

次に、A地点からB地点までの時間は、 アキレスからA地点に付くまでに亀の歩いた距離をアキレスが歩く時間ですから、(γ/α×β) /αとなります。

次にB地点からA地点までの時間は、アキレスがA地点からB地点までに付くまでに亀が歩いた距離をアキレスが歩く時間ですから((γ/α×β) /α)×β/αとなります。

以降は、その直前の移動秒数にβ/αを掛けた値が、移動時間となります。

これらの時間を足し合わせたのが、アキレスが亀に追いつく時間Sですから

S =  γ/α +  (γ/α×β) /α  +  ((γ/α×β) /α)×β/α +  .....
  =  γ/α + γ/α×(β/α)  +  γ/α×(β/α)2  +  γ/α×(β/α)3  +  .....

となります。これは、高校の数学で習った無限等比級数列となります。

この両辺に(β/α)を掛け合わせます。

(β/α)×S = γ/α×(β/α)  + γ/α×(β/α)2 + γ/α×(β/α)3 +    .....

となります。0<(β/α)<1でnが無限の場合、(β/α)n=0であるので

上の式は、次のように変形することができます。

(β/α)×S = - γ/α + γ/α + γ/α×(β/α)  +  γ/α×(β/α)2 +   .....
               =  -γ/α  +  S

となります。

したがって、S - (β/α)×S  = γ/αとなります。

この式は次のように変形され、

        (1-(β/α))×S =((α-β)/α)×S = γ/α

S = γ / (α-β)

となり、これが、アキレスが亀に追いつく時間となります。

★ これを通常の算数を使って解くことにしてみましょう。アキレスが亀に追いつく時間とT秒とします。アキレスが追いかけ始めた原点を基点にすると、アキレスが歩いた距離は、αTmとなります。亀が歩いた距離は、βTmとなりますが、亀が先行して進んでいた距離γmを足すと、アキレスの歩いた距離となります。すなわち、

       αT = βT + γ

         T =  γ / (α-β)

となり、無限等比級数による解と合致します。

Yawdba開発談(3)

現在、Yawdbaの基本設計を行っておりますが、モジュールとなるクラスの設計を行いました。詳しくは、Yawdbaサイトのモジュール構成を見ていただけると幸いです。

モジュール構成の章には、基本となるクラス(Tableクラス、RuleTableクラス、RuleSyntaxクラス、WebPageクラス、WebPartsクラス)の説明に関する章がありますが、これは、今後、加筆する予定です。もう暫くお待ちください。

設計にあたっては、こららのクラスが、今後、別のツールとしても利用できるよう中核部分は、利用環境が変わってもそのまま利用できるように設計したつもりです。
こうしたら良いなどのご意見がありましたら、コメント頂けると助かります。

私の大学受験

今日は、私が大学で物理学科を選んだ訳をお話しましょう。
大学受験の時には、漠然と原子力発電の仕事がしたいと思った事から理学部の物理学科を選びました。あと、大学の中でも物理学科が結構難しかったので、人より上に行きたいと思ったことも一因かも知れません。なお、当時の大学受験では、学科の希望を第一志望、第二志望などと書くことができたので、ダメもとで物理学科を第一志望、電子工学部を第二志望としました。
しかし、大学に入ってみると、入学した大学が私立大学だった(私立大学はお金がない?)ことから、結構有名な大学でしたが、原子力発電の研究はありませんでした。因みに当時、私立大学で原子炉を持っているのは、立教大学だけだと聞いたことがあります。

大学の選択では、大学の名前だけで入学しても、良い就職ができるとは限りません。やりたいことが明確であれば、有名大学でなくても、学会で有名な教授の研究室に入ることが就職に一番役立つと思います。コンピューターの学会でも有名大学でなくても有名な教授がいます。このような教授の研究室にいると就職でもいろいろサポートして頂けると思うので、非常に有利だと思います。

私が居た理論物理研究室は、就職が難しくオーバードクター(博士課程が終わっても就職できない人)が沢山おり、就職を考えてプログラマーの会社に学士で入社しました。しかし、物理学科を選んだことに後悔していません。世の中のいろいろな物理学者の英知について知ることができたこと、また、量子力学の面白さが分かったことなどの他、コンピュータ科学を含むいろいろなことを物理学的な視点で考えることができることが良かったと思います。回り道であっても、いろいろなことを知ることは大切であると思います。

これから受験の方もいると思いますが、大学受験の学部・学科の選択も就職では、大きなファクターとなりますので、十分考えて受験してください。

2009年9月20日日曜日

HTMLのtableでセル幅を指定しても効かない?

HTMLのtableタグで、セル幅を指定しても正常に動作しない現象が発生します。
これは、セル幅の動作が不正であるのではなく、セル幅近辺で表示されている文字の種類によって、セル内での文字列の自動改行がされないため、セル幅を変わってしまうのが原因です。

このような場合、どんな文字の種類でも、セル幅に達した時などの条件で、自動的に改行して良いとするようにするタグや特殊文字を入れると解決できます。

IEであれば、<wbr>タグを各文字の間に入れれば、自動的に改行することができます。
例えば a<wbr>b<wbr>c<wbr>1<wbr>2<wbr>3<wbr><wbr><wbr>
などとします。

上記以外のブラウザの場合には、セル幅に達した時などの条件で、自動的に改行して、改行位置にハイフン(-)を表示しするための特殊文字(&shy;)を指定します。
例えば a&shy;b&shy;c&shy;1&shy;2&shy;3&shy;&shy;&shy;
などとします。
全世界的なHTMLの標準規格では&shy;特殊文字が採用されており、<wbr>タグは少数派のようです。

そのほかの方法としてCSSを使っても対応可能なようです。確認できたら、紹介します

2009年9月19日土曜日

なぜ -1 と-1 を掛けると +1 になる(その1)

私が大学になって、どうしてだろうと考えたことがあります。それは、-1 と -1 を掛けると、なぜ +1になるのかと言うことです。
-1 に 1 を掛けるとは、-1が1回分なので-1になることは分かりますが、-1回掛けるとなぜ符号が逆転するの分からなくなりました。最初にマイナス符号について学習した時には納得した筈でしたが、大学になってなぜだろうと思うようになりました。

今の中学校教育では、-1回かけるということは、逆をしめすから符号が逆になると言っていたようですが、これでは納得いきません。

でも、(-1) ×1 = -1と分配法則と交換法則を使うと (-1)×(-1) = 1が導けることを発見しました。

(1-1)×(-1) = ((1) + (-1))×(-1) = 0 ⇒ 第1項目が0なので値は0となります。
(1)×(-1) + (-1)×(-1) = 0      ⇒ 上の式を分配の法則で分配します。
第1項の(1)×(-1)は 交換法則によって(-1)×(1)であり、-1となります。

したがって
-1 + (-1)×(-1) = 0
となり、(-1)×(-1)は、+1にならないとつじつまが会いません。

私は、この方が、より納得できる解答とは思いますが、どなたか (-1)×(-1)が1になる理由について数学の歴史などの話で知っている方がいればコメントください。

他には、大学のときに気になった問題は、「アキレスと亀のパラドクス」の問題です。これについては、後日、お話したいと思います。ヒントは、高校3年の時にならった、無限等比級数とか極限に関係します。

Tomcatの簡単なサーブレットの作り方

Apache Tomcatを使って、簡単なサーブレットプログラムを作る手順を書いてみました。Yawdba(もう一つのWebデータベースアプローチ)サイトの「1.Tomcatサーブレット開発方法」をご覧ください。
この中には、ブラウザからURL指定してからどのような動作が行われるかについても書いてみました。
分からない点やご意見があれば、どしどしコメントください。

2009年9月17日木曜日

アメリカの食事が美味しいと思ったことがありますか?

いままで、西海岸のサンディエゴ・ロサンゼルス・サンフランシスコ・シアトルと行った事がありますが、食事で満足したことは、ほとんどありません。
これは、西海岸は、やはりアメリカでは田舎なので美味しい食事がないのかなって思い、家族旅行でニューヨークに行きました。でも、やっぱりアメリカの料理は美味しくありません。

ニューヨークについて、お昼に何を食べるか探していたときに、レッドロブスターが見つかりました。日本のレッドロブスターは結構お気に入りなので、美味しいかなって思って入りました。でも、期待は見事に裏切られました。脂っこい料理が多く、唯一つたらば蟹(Alaska King Crab)のボイルが在ったので頼みました。

しかし、出てきたのボイルした蟹と例のごとく付いてくる溶かしバターです。これが美味しいのでしょうか?アメリカ人の味覚がわかりません。しかも、蟹の殻を切るハサミもありません。付いてきたのはクルミを割るようなペンチのようなものです。ウェイターに、どうやって食べるのか聞いたところ、クルミ割りで割ってたべるようです。これでは、中身の煮汁が出てしまいおいしくありません。ウェイターのお兄ちゃんも苦戦していました。まったく、大雑把でがっかりです。

私が、何回かアメリカに行って、本当に美味しいと思ったのは、シアトルの牡蠣です。値段も高かったのですが、この生牡蠣が本当においしいと思います。日本食が食べられますが、それ以外で、美味しく思ったことはありません。マクドナルドのハンバーグでも美味しいと思うほどです。

みなさんは、如何ですか?

2009年9月16日水曜日

JavaのHashtableクラスを使ったことがありますか?

プログラムのパフォーマンスを向上する手法としてハッシュテーブルがありますが、Javaには、Hashtableというクラスがあり、これを上手く利用するとパフォーマンスを向上させることができます。

Hashtableは、あるキー(文字列)に対する値を保持するものです。通常のテーブルでは、テーブル内のキーから値を取り出す場合には、テーブルの順にキーと同じエントリを探して、見つかったらその値を返却することになります。しかし、この方法だとテーブルのエントリが増えてくると、検索までに多くの時間がかかってしまいます。
ハッシュテーブルは、キー(文字列)から自動的にハッシュ値とよばれる値を計算し、この計算値と使って直接値を取り出す方式で、テーブルのエントリが増えても、通常のテーブルに比べてパフォーマンスが低下することはありません。

昔は、ハッシュテーブルの処理を自分で作る必要がありました。しかし、Javaでは、予めハッシュテーブルが用意されており、このHashtableを利用することでパフォーマンスの向上が見込めます。

私が作ったプログラムでは、あるメソッドで、何かの値を計算する処理があり、このメソッドが何回も呼ばれるケースで、以下のようなコーディングを使ってパフォーマンスを改善することができました。

hash =  new Hashtable(); // Hashtableクラスのインスタンス変数hashを設定しておく

// p1とp2を使って文字列型のValueを返却するメソッドでの使用例
public String getValue(int p1, int p2) {
String value;
String key = "getValue:"+p1+":"+p2;

if(hash.containsKey(key))
return (String)hash.get(key);
else {
// p1とp2を使ってString値を計算して、変数valueへ格納。
hash.put(key,value);
return value;
}
}

上記のメソッドでは、p1とp2の値のみから、変数値が計算されるのであれば、p1とp2が同じであれば、同じ返却値となります。そこで、一度でも計算した返却値をハッシュテーブルにputし、呼ばれた際には、そのキーがあれば、一度保管した返却値を返すアルゴリズムとなります。

同じようなメソッドが呼ばれるケースが多い場合には、毎回計算する必要がなくなるのでパフォーマンス向上が見込まれます。一度、使ってみてください。

2009年9月14日月曜日

AutoPostBackでちらつかないサンプル

以前、「ASP.NETでAutoPostBackにより画面ちらつきを行わない方法」について書きました。今度はこの方法を使ったサンプルを作りましたので、紹介します。

2つチェックボックスを作成し、一方のチェックボックス(CheckBox1)がオンになったら、他方のチェックボックス(CheckBox2)もオンにするようなASP.NETプログラムを作成する場合のサンプルをAutoPostBackを使う方法と、JavaScriptを使う方法のサンプルを書いてみました。

AutoPostBackを使う方法では、
CheckBox1をクリックして作成した手続き(CheckBox1_CheckedChange)で

If CheckBox1.Checked Then
    CheckBox2.Checked = True
End If

とコーディングして、CheckBox1プロパティのAutoPostBackをTrueにすると動作します。
しかし、この方法だと、複雑なロジックが必要ないのにもかかわらずサーバーサイドで処理するため、画面のちらつきが発生します。

JavaScriptを使う方法では、
ページロードの手続き(Page_Load)で以下のようにコーディングします。

CheckBox1.InputAttributes.Add("onClick", "if (CheckBox1.checked) CheckBox2.checked = true")

勿論、AutoPostBackはfalseにしておきます。

ASP.NETのcheckboxは、htmlのinputタグにありますので、このinputタグの属性として、クリックされた場合のjavascriptプログラムを指定しているのがInputAttribute.Addです。この命令によって、以下のhtmlが生成されます。

<input id="CheckBox1" type="checkbox" name="CheckBox1" onClick="if (CheckBox1.checked) CheckBox2.checked = true" />

これにより、javascriptでプログラムが動作することができ、クライアント側のブラウザー上で動作することになります。ブラウザー上で動作するのでちらつきが無くなるのです。ASP.NETのオブジェクト部品でInputAttributeを使うのか、Attributeを使うのかについては、調べる必要があるかと思いますが、生成されたhtmlを見比べれば分かるかと思います。

※ javascriptのCheckBox1.checkedは、本当は、document.form1.CheckBox1.checkedなどと記述すべきかもしれません。詳しくは、javascriptのマニュアルなどをご覧ください。


2009年9月13日日曜日

Javaの開発環境

みなさんはご存知かも知れませんが、Javaの開発環境のEclipseは大変良くできていますね。ASP.NET開発環境であるMiscrosoftのVisual Web Developperに比べて数段上の機能を持っています。特に、うれしいのは、変数を選ぶとその変数を利用している部分がハイライトされ、全体のソースプログラムの中でどこで利用されているか瞬時に分かる機能が便利です。
しかも、Eclipseは無料でダウンロードでき、多くのプラグインを利用することで、TomcatのデバッグだけでなくJavaCCのデバッグも可能です。他にも沢山のプラグインが利用できるようですが、私が使用しているのはこの2つのプラグインだけです。ここまで使い勝手の良いソフトがフリーソフトとは驚きです。
難点は、JavaCCまでのデバッグが可能なGanymede Releaseでは、メモリを食ってしまうためか、私のPCでは、荷が重いようです。便利なだけに残念。

2009年9月12日土曜日

UCSD-Pascalのシステムリソースが見つかりました

UCSD-Pascalのソースコードや内部仕様書が、Webで展開されていることが分かりました。英語ですが、調べては如何でしょうか?ルートのフォルダは、http://pascal.retro8bits.com/ucsd.htmlです。

中間のバイトコード(p-code)を解析するインタプリターの仕様について調べるには、Softech p-System internal Architecture 1983が役に立つかと思います。

時間を見て、internal Architectureの内容についても、書きたいと思います。

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

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

ところで、日本の小学校などでは、好きな女の子がいると、わざとチョッカイを出したりして、仲が悪いような態度をする男子がいます。昔、「男女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ビットになるかもしれませんね。

2009年8月23日日曜日

サーブレットからのパラメータ解析

Apache上のサーブレットに対して、getやpostでパラメータを指定した場合には、以下のようにget/postのhttpServletRequest型パラメータ変数のgetParameterメソッドを呼び出してその値を取り出します。

[例] String p = req.getParameter("パラメータ名");

しかし、このAPIでは、まず、パラメータ名文字列を引数に指定するため、ブラウザからどのようなパラメータ名が存在するか予め知っておく必要があります。

Yawdbaでは、ブラウザから指示された多様なパラメータを知るために、ブラウザで指示されたパラメータを自動的に調べる必要があります。そこで、私は、次のようなロジックでパラメータの自動取り出しを行っています。

Enumeration e;
int c;
for(e = req.getParameterNames(); e.hasMoreElements();) {
String name = (String)e.nextElement();
String p =  req.getParameter(name);
}

すなわち、httpServletRequest型のreqを用いて、req.getParameterNames()で列挙型のeを取得し、e.nextElement()で名前を取り出しながら、e.hasMoreElements()になるまで繰り返し処理を行います。あとは、ルール内でパラメータ名文字列が取り出されましたので、あとは、getParameterでその値を取り出します。上の例では、そのまま文字列を取り出していますが、ArrayListなどを用いれば、全てのパラメータを取り出すことが可能です。

使ってみては如何でしょうか?

2009年8月22日土曜日

Yawdba開発談(1)

Yawdbaは、ApacheのサーブレットプログラムをJavaで開発しています。
ブラウザからの要求をgetあるいはpostメソッドで受けてらからの動作に関するコーディングを終了しました。現在、インプリ終了しているのは、以下の部分となります。
 パラメータを取得し、パラメータで渡されたODBCソースとテーブル名から対応する動作記述をデータベースから取得する。

現在は、動作記述のルールを解析して、Yawdbaが処理しやすい内部形式に変換する部分をコーディングしています。変換に際しては、文章の構文を解析するコンパイラコンパイラを利用して、以後のルール変更が容易になるようにしています。

コンパイラコンパイラとして有名なものとしては、Yacc/lexがありますが、java用のコンパイラコンパイラであるjavaccを使っています。開発の途中で得たノウハウを、今後載せていきたいと思います。

2009年8月17日月曜日

ASP.NETでAutoPostBackにより画面ちらつきを行わない方法

ASP.NETの基本は、サーバーサイドのプログラミングにより、発行されるWebページの内容を表示するものです。
例えば、Webページのメニューなどの選択結果により、Webページ上のチェックボックスにチェックを入れたり外したりする場合には、ASP.NETサーバー上で動作する必要がり、AutoPostBackを使用します。即ち、AutoPostBackでは、Webページ上のチェックボックスやテキスト領域が変更されるとともに、制御がASP.NETにも戻り、ASP.NET側でのロジックを動作させることになります。
しかし、この方法だと、制御がASP.NETに戻ることから、画面のちらつきが発生する。
このちらつきを起こさないようにするには、JavaScriptによりクライアント側でロジックを組み込み、制御がASP.NETに戻らないようにする必要があります。ASP.NET2005からは、ASP.NETのオブジェクトから、イベント発生時起動するJavaScriptプログラムを定義することが可能になったので、この機能を利用することで、ちらつきの無い表示が可能となります。

2009年8月16日日曜日

UCSD-Pascalの思い出(1)

1980年に、米国サンディエゴでUCSD-Pascalというシステムのメンテナンスができるように半年出張したことがあります。UCDS-Pascalは、コンピュータ科学でよく利用されるパスカル言語をパソコンで動作するようにした最初のシステムです。
このシステムは、現在のJava言語につながることが書かれてます。(http://ja.wikipedia.org/wiki/UCSD_p-System
それまで、PL/Iコンパイラのソースコードを見ていましたが、パスカルコンパイラーのソースコード量が非常に少なくて出来ている事に驚いたことを覚えています。

また、米国でのプログラミングの書き方に、大いに影響を受けました。まるで、言葉を書いているようにプログラミングされていました。これは、その後、UnixコンパイラーのソースコードやSunViewのソースコードでも感じた事です。

例えば、IF文の条件で、英字であることをチェックする関数を作る場合に、
日本では、「CHECK_EIJI」などとなりますが、米国では、「is_alphabetic」と書きます。
ソースコードでは、「if is_alphabetic」となり、まるで、文章を書いているようです。

Webデータベースシステムを開発中です

従来のWebブラウザを通じて、データベースを操作する開発キットとしては、ASP.NETやStrutsなどがありますが、VisualBasicやjavaなどの知見が必要となっています。
現在、このような知識がなくて、SQLコマンドによる命令を、Webブラウザから入力することで動作するアプリケーションの開発を開始しました。
ご期待ください。