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ビットになるかもしれませんね。