<   2006年 07月 ( 7 )   > この月の画像一覧

JavaScript の欠点

CUI 好きの管理人は、JavaScript でも、CUI をさくさく使いたい。しかし、残念なことに、JavaScript には、Ruby の gets がないのだ。これでは、コンピュータのプロンプトに答えて、キーボードから入力し、それにまたコンピュータが答えてくれるという、楽しい対話型のプログラムができないではないか。

そこで、input 要素のテキスト入力フィールドを操作して、それらしい動作をさせてみてはどうかと思いついたが、これがうまくいかない。JavaScript は入力用のテキストフィールドは作ってくれるが、入力を待たずに、さっさと次の命令を実行してしまうのだ。JavaScript には前段階の処理を待ってつぎの処理に移るための命令がないし、wait でいったん処理を眠らせて、イベントが来たら次に移るということもできない。

相当悩んだが、メインのプログラムを入力操作が発生する部分で複数の関数に分割し、入力が発生した時点で、次の段階の関数を呼ぶという形にしてみたら、何とかそれらしいものができた。しかし、これを使ってプログラムをつくる気には到底なれない。複雑に考えなくても、

question = ”Please input number >”;
answer = prompt(qutestion);
document.write(qutestion+answer+”<br>”);

などとすれば、プロンプトのウィンドウがパカパカ開いて、目がちかちかするかもしれないが、操作的には同じようなことができるので当分はこれで我慢しなければならないかもしれない。もっとも、JavaScript を CUI で使いたい人もあまりいないだろうけれど。

ただ、JavaScript を、本当にウェブアプリケーションのフロントエンドとしていくためには、JavaScript のオブジェクトに、ターミナルオブジェクトや、スプレッドシートオブジェクトや、グラフィックオブジェクトを追加していくほうが効率的なのではないだろうか。

日常的な業務にはエクセルがひとつあればたいてい事足りるから、JavaScriptに表計算の入力部分のオブジェクトを持たせておけば、バックエンドのサーバーと通信するだけでかなり使い勝手のいいウェブアプリケーションが作れるのではないかと思う。

Google Map は、Ajax や JavaScript を使って、ブラウザに連動したスクリプトと、XMLHttp 非同期通信の組み合わせで、パソコン本体にインストールするアプリケーションに匹敵する動作が、ウェブアプリケーションでできることを示してくれた。しかし、それだけでなく、クライアントがブラウザを持ってさえいればいつでもどこでも使い慣れたアプリケーションやデータが利用できるという新しいパソコンの使い勝手を切り開いたのではないだろうか。

とはいえ、本格的なウェブアプリケーションの時代になるためには、もう少しクライアントサイドのスクリプト言語の進化が必要なのかもしれない。
[PR]
by tnomura9 | 2006-07-29 18:26 | JavaScript | Comments(0)

細部にこだわる

19世紀と違って最近は博物学という言葉を耳にしない。むしろ、ブログやウェブの影響で爆発的に増加する情報をどう処理するかという問題のほうに力点が置かれているような気がする。

その根本となる考え方は、あふれる情報の大海のなかから、目的の情報をどう選び出すかということだ。大量の情報の中から本質的な意味を取り出すという情報の量を減少させるための努力だ。これを仮にリダクションの方向性と呼ぼう。

今まで、管理人のやり方はいつも、このリダクションの方向性だった。大部の書類にさっと目を通し、その骨格や本質をつかもうとする。本質が分かっていれば後で細部は見返すことができる。

ところが、先日話を聞いた天才的な整形外科医の話は、違っていた。彼の頭の中には、神経や血管の様々な変異が全て頭に入っていたそうだ。そのため、血管の縫合なども非常に短時間で、出血も少なく。他の人が不可能だと考える植皮などもやすやすと成功させているらしい。

神経や血管の解剖の本はありふれているが、細部までこだわって読むことはない。血管の走行の変異についても、重要な大きな血管については覚えるが、末梢の小さな血管まではあまり気にしないのではないだろうか。普通は一通り理解したら、小さい血管の個人差については術中に十分対応できる。本質が分かっていれば細部はあとで詰めればよいというリダクションの考え方だ。

しかし、この外科医の例でも分かるように、プロフェッショナルな仕事を行うには、ときに、このリダクションの方向性をやめて、意識して細部にこだわらないといけないのかもしれない。

古代の名医と言われる人たちも博学と同時に細部にこだわる目を持っていたのかもしれない。医学の知識のようなものも、誰でも、普通に手に入れることのできる情報だが、リダクションの方向性で読んでいては、薄っぺらな知識になってしまいそうな気がする。名医になるためには、情報量に圧倒されず細部にまでこだわって読もうとする目が必要なのである。
[PR]
by tnomura9 | 2006-07-28 07:41 | 考えるということ | Comments(0)

複数のページをひとつのファイルにまとめる。

JavaScript を使って、複数のページをひとつのHTMLファイルにまとめる方法を考えてみた。チュートリアルのように、小さい文書を有機的にリンクでつなげるような場合に便利だと思う。

複数のページからなるHTML文書

こういうちょっとした細工ができるようになったのも、JavaScript、CSS、DOMのトリオのおかげだ。自前のサーバーにいろいろなバックエンドを持つことのできるプロは、Ajaxだろうが、何もない素人にとっては、ブラウザさえあればいろいろ遊べるダイナミックHTMLはありがたい。

スクリプトの使い勝手から言えば、Rubyのほうが、ずっといいが、JavaScriptはHTML文書をいじることができるという魅力がある。

素人がプログラムを夢中になって作るのは、一つはそれが面白いからだが、もうひとつは、自分が面白いと思う作品ができたとき、他の人にも面白いと思って欲しいからだ。HTML文書がこのように隆盛になったのは、素人でも手軽にネットの世界で自己表現できるからだと思う。

JavaScriptを使えば、HTMLで文書を表現するだけでなく、それに小さな仕掛けを用意することができる。手軽に面白い表現ができるという点では、JavaScriptが一番だ。
[PR]
by tnomura9 | 2006-07-13 08:31 | JavaScript | Comments(0)

JavaScript の canvas

<canvas>要素を使うと、Javascript で、ベクトルグラフィックスをブラウザ上に描くことができる。参考ページは次のページ。

Drawing Graphics with Canvas - MDC
Canvas tutorial
Canvas Painter
ブラウザ上でお絵かき: Days on the Moon

このほかにも、JavaScript でできるグラフィックスには、マイクロソフトの VML や W3C のSVG などがあって、実装や互換性の問題がまだまだ多いようだ。要するに、canvas も含めて、JavaScript のグラフィックスについては、発展途上という所だろう。

しかし、それを考慮しても、JavaScript はすでにグラフィックの描画能力も身につけているのだ。

そうなってくると、JavaScript を使いこなすということは、プログラム言語の使い方を覚えるということよりも、アプリケーションを開発する能力に依存することになってくる。そうなると、これは素人にはちょっときつい気がする。

いずれにしろ、今まで単体のコンピュータで使い慣れていた、いろいろなプログラムが、ネットワーク型のプログラムに移行していくことが十分可能であることがわかってきた。また、Ruby on Rails でブレイクしたように、その中心が、JavaScript と Ruby というオブジェクト指向言語になりそうなことも。

また、一口に Ajax といっても、JavaScript や CSS、DOM だけでなく、オブジェクト指向プログラム、イベント駆動型のプログラム、ネットワーク技術、デザインパターン、データベース、ホームページデザイン、グラフィックスなどの幅広い知識を要求される。

やっぱり、作るより使うほうが賢いかな?
[PR]
by tnomura9 | 2006-07-10 08:13 | JavaScript | Comments(0)

JavaScript に puts

JavaScript の document.write の振る舞いがもうひとつ予測できないところがある。継続して表示されたり、前の表示に上書きされてしまったり。document.close() をしないと表示が現れなかったり。理由はあるのだろうが、JavaScript を普通のスクリプトとして使ってみたいときには何かと不便だ。そこで、Ruby にあるような、puts と print を定義してみた。

詳細は、JavaScript ターミナルのサンプルの、puts.html を試して欲しい。

これで、例えば次のようなスクリプトが、気軽に使えるようになった。

for (i = 1; i <=10; i++) {
  for (j=1; i<=j; j++) {
    print('*');
  }
  puts();
}

puts があるだけで、JavaScript を普通のスクリプトとして使うことができるので、いろいろとロジックを組んで遊ぶことができそうだ。CUI の JavaScript も面白い。
[PR]
by tnomura9 | 2006-07-09 15:02 | JavaScript | Comments(0)

JavaScript のプログラミングスタイル

JavaScript でスクリプトを書きはじめてから大分たったが、そろそろ、きれいなスクリプトを書くにはどうすればよいかが気になり始めた。

JavaScript は script タグで囲めば HTML のどの場所においても良いが、できるなら、head において、body の部分にはおかないようにしたい。

しかし、パースがワンパスで後方参照だけのようなので、body部分のDOM要素を参照するような文はエラーになることがある。

これを解決するためには、head の部分のコードは、大域変数の宣言以外はすべて関数を記述し、メインルーチンもC言語のように、function main() { ... } として関数にしておく。そうして、window オブジェクトの onload アトリビュートに、

window.onload = main;

のように main ファンクションを登録しておくと、すべてのHTML文書がロードされた後に main() が実行されるので、変数の参照の問題がなくなる。

body 部分のイベント処理も、addEventListener() で登録するようにすれば、body の部分に全くプログラムが存在しなくなるため、スクリプトの見通しがよくなる。

たとえば、次のような書き方になる。

<script>
var a, b;

function A(arg) {
  var target = document.getElementById("target");
  ...
}

function main() { // 引数なしの関数にする
  ...
}

window.onload = main;
</script>

<body>
<div id="target"></div>
</body>
[PR]
by tnomura9 | 2006-07-07 18:04 | JavaScript | Comments(0)

JavaScript は日曜プログラマ向き?

最近、管理人はあまり Linux をいじらなくなってしまった。Windows のノートパソコンに、Cygwin、Firefox、Thunderbird、OpenOffice、Lhaca、FFFTP、Apache、Googleデスクトップ、ActiveRubyなどをインストールしたら、あまり不満がなくなってしまったからだ。

ネットワーク接続も無線LANでやっているので、部屋のどこにいてもインターネットに接続できる。時々外出したときにノートパソコンを持ち出してみるが、ネットに接続できないと、靴の上から痒いところを掻くようなもどかしさを感じてしまう。パソコンが確実にインターネットの端末化しているのが分かる。

閑話休題(それはさておき)

JavaScript をいじりだしてから、これは、まさに、日曜プログラマ向けの言語ではないかと感じるようになってきた。それは、JavaScript が Web の飾りを作るだけでなく、しっかりと、ロジックを記述できるということが分かってきたからだ。

日曜プログラマは、楽しみのためにプログラミングするのである。だから、出来上がったものが、おやっ、面白いなというものでなければ満足することができない。

そのくせ、日曜プログラマには、決定的に知識がない。だから、あまり複雑なものは作ることができない。あまり、低レベルのインターフェースから記述しなければならないとなると、急激に意欲がなくなるのだ。

そのうえ、様々なOSの様々なバージョンでも動くようにプログラムを作らなければならないとなると、さっさとパソコンの電源を切って居酒屋に出かけてしまう。

要するに日曜プログラマとは、極端にわがままな人種なのである。

ところが、JavaScript はスクリプト言語でありながら、ネットワーク型のプログラムを書くことができる。日曜プログラマにとって、大いに自尊心を満足できる。イベントを扱うAPIも簡単なので、イベント駆動型のプログラムが組める。おまけにオブジェクト指向型のプログラムだから、書いたプログラムを後で読み返しても何を考えていたのか分かるし、記述量も節約することができる。それになんといっても今様の Ajax の中心なのである。日曜プログラマにとっては狂喜するほどうれしい。

日曜プログラマとしては、もう少し図形を扱うAPIが欲しいところだが、贅沢は言えない。何しろ、タダなのである。

そういうわけで、管理人の JavaScript フィーバーはしばらく続きそうである。
[PR]
by tnomura9 | 2006-07-02 19:31 | JavaScript | Comments(0)