<   2006年 05月 ( 9 )   > この月の画像一覧

マイコンマニア

マイコンマニアなどという言葉はとうに死語になっているが、管理人はそれだ。もう30年以上もパソコンに触っているが、これといったプログラムを組んだためしがない。

この30年間にパソコンにつぎ込んだ、情熱と、学習時間と、お金とは一体なんだったのだろうと空しくなることもある。

管理人をこれほどパソコンが虜にしたのは、パソコンを触っていると、次々にアイディアが沸いてくるからだろうと思う。ここを、こうすれば便利なのに、とか、こういうものがあればいいのになどと工夫してそれが動いたときのうれしさは格別だ。いいアイディアが浮かんだときなどは、仕事の合間にもパソコンのことを考えていたりする。

ところが、はっと気づくと、同じようなアイディアで、もっと洗練されたものが既にあるようなのだ、そこで、そのソフトを一所懸命勉強しているうちに、だんだん、情熱が冷めてしまう。自分の知識では逆立ちしたって、こんなものができるものではない。

また、パソコンの進化は日進月歩で次々に新しい技術が開発される。面白そうだと思って、情報を集めるが、これが、なかなか大変で、簡単に習得できるようなものではない。やっと、hello, world のようなプログラムが書けるようになったころには、もっと、すごい技術が登場している。

そんないたちごっこを繰り返しているうちに、すっかり髪も、白くなってしまった。

要するに、管理人にとっては、パソコンの世界は、夢の世界だったのだ。最先端の技術、洗練されたアイディア、パズルを解くようなアルゴリズムを発見するときの喜び、の雛形に触れながら夢の世界をさまよっていたのかもしれない。夢だから、覚めてしまうと何も残っていないのだ。

こんなことを書いているうちに、だんだん元気がなくなって、オチをまとめる気力もなくなってきたが、それでも、管理人がパソコンを卒業することはないだろう。どうせ夢を見るのなら一生涯見続けていたいものだ。
[PR]
by tnomura9 | 2006-05-31 04:42 | Ruby | Comments(0)

Ajax

Ajax で、どうやったらウェブアプリケーションができるのだろうと、ネット検索したら、次のような仕組みらしい。

まず、ブラウザに JavaScript の Ajax エンジンを送り込んでおいて、ブラウザとhttpサーバの間に介在させる。ユーザー入力の情報は直接にサーバに送らず、Ajax エンジンの方で処理して、必要な情報は、Ajax エンジンと http サーバの方で非同期的に通信してやり取りして、ブラウザの画面はいちいち読み込まないので、あたかも、普通のアプリケーションを使っているかのようにユーザのほうには感じられる。メーラーなども、普通に使っているつもりで、実は情報はサーバーから読み込んでいるのだ。

これがなんですごいのかというと、クライアントのコンピュータにはブラウザさえあれば、サーバにアクセスするだけでどんなソフトでも使うことができるのだ。バージョンアップなんかも、インストールの作業なしに、サーバーのほうで勝手にやってくれる。

もっとすごいのは、そんなすごいことが、ブラウザの景品のようについている JavaScript で、できてしまうということだ。つまり、自分でつくってみることもできる(かもしれない)ということだ。興味のある人は

harupu さんの Ajaxたん に教えてもらうことができる。

Ajax エンジンと http サーバとのデータ通信には今のところ XML が使われているが、JSONだともっと便利かもしれない。なんでなんの変哲もない JSON の規格があれほど騒がれているのかがやっと分かった。

Ajax 関連の情報は、

カザリヤジャーナルの「Ajax関連記事」からたどると便利だ。
[PR]
by tnomura9 | 2006-05-30 19:08 | JavaScript | Comments(0)

eRuby

Windows の Apace で eRuby を使いたくて、ネットを探し回ったが結局分からなかったので、CGI と erb.rb を利用して自作(?)した。

httpd.conf を、スタートメニューの中の Apace メニューから開いて、

<Directory "C:/Program Files/Apache Group/Apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

の Options None を Options ExecCGI に変更して /cgi-bin/ で CGI が使えるようにして、さらに、

# Filters ... のセクションに
AddType application/x-httpd-eruby .rhtml
# Action ... のセクションに
Action application/x-httpd-eruby /cgi-bin/erb_cgi.cgi

を追加して、*.rhtml なファイルがリクエストされたとき、erb_cgi.cgi スクリプトが呼び出されるようにした。リクエストされたファイルは、環境変数 PATH_TRANSLATED でスクリプトに渡される。

最後に、次のスクリプト erb_cgi.cgi を /cgi-bin/ ディレクトリに作成した。

#!C:/Program Files/ruby-1.8/bin/ruby

require 'erb'

print "Content-Type: text/html\n\n"
ERB.new(IO.read(ENV['PATH_TRANSLATED'])).run

Apache を再起動したら、好きなところにおいた *.rhtml ファイルがレンダリングされて出てきた。昨日から悩んでいたわりには、簡単な解決法だった。動作は遅いけれど自分用だから、まあ、いいか。

*注意! eruby と erb は仕様が違うので注意が必要だ。erb では <% タグの中の print 文は その位置に展開されるのではなく標準出力に出力される。eruby で動作していた *.rhtml ファイルが動かないときは <% タグの中のprint を削除して、引数を <%= タグの中に入れるようにすると同じように動作するはずだ。

ただ、erb の仕様だと ruby スクリプトを HTML 以外のどんな文書にも埋め込むことができる。たとえば、アルゴリズム関係の記事をぐりぐりテキストファイルなどに書いていて、その中にルビーのサンプルプログラムを埋め込んでおいても、erb sample.txt でサンプルプログラムを実行してみることができる。そのほかにも erb の利点はたくさんあるそうだが、管理人には難しすぎて分からない。

しかし、最近の Ruby は WWWサーバーも、Agile な開発環境も、Ajax も、CGI もサーバーサイドスクリプトも、ブログエンジンも、YAML も JSON も全部自前でやってしまっている。Ruby とウェブブラウザさえあれば何でも簡単にできるという、おそろしいことになってきたものだ。

Ruby on Rails を利用したワープロや表計算が出現したら完璧だ。
[PR]
by tnomura9 | 2006-05-21 16:16 | Ruby | Comments(2)

Agile と Ajax

最近、頭に A のついた単語が目に付く。

Agile とは、仕様変更が迅速で容易な開発環境のこと。

Ajax とは、JavaScript の http 通信機能を利用してブラウザとサーバを非同期に通信させ、シームレスなウェブアプリケーションを作る手法のこと。グーグルマップが嚆矢。

ウェブブラウザの機能と、通信速度が上がってきたせいで、インターネット上でのサーバクライアント型のアプリケーションが可能になってきている。セキュリティーの問題を別にすれば、サーバにアプリケーションとデータがあったほうが、どこからでもデータの読み出し、書き込みができるし、OSの種類も気にしなくて済む。また、アプリケーションのアップグレードで悩む必要もない。おなじブラウザから、別の種類のアプリケーションを使うこともできる。自分の文書にリンクを張ることも容易だ。ブログを使い出すとやめられなくなるのはそのせいかもしれない。

街中どこからでもネットにアクセスすることができるようになれば、thin client が復活するかもしれない。
[PR]
by tnomura9 | 2006-05-21 02:23 | Ruby | Comments(0)

Ruby on rails が動いた

管理人の Windows ノートパソコンで Ruby on Rails が動いた。

ダウンロードしたソフトは

Active Script Ruby
MySQL
Ruby Gems
Ruby on Rails

最初、Hot Wired の記事のとおりにサンプルを作ってみたが、どうしても Aplication Error が出て動かなかった。悩んでいたが、config/boot.rb の先頭に、

RAILS_ROOT = "サンプルファイルのルートディレクトリの絶対パス"

を書き込んだら、あっさり動いてくれた。これで、自前のデータベース連動ウェブアプリケーションが書ける --- かもしれない。すごい。
[PR]
by tnomura9 | 2006-05-18 02:03 | Ruby | Comments(0)

括弧思考法

YAML や JSON で遊んでいるうちに、これらの構造の記述を簡潔に行えるという特徴を利用したら、考えを整理するときのツールとしても使えるかもしれないことに気がついた。括弧を使うので、『括弧思考法』と命名しよう。

たとえば年齢の計算をする場合を考えよう。これを言葉で表すと、次のようになる。

年齢を取得するためには、現在の日付と誕生日の年の部分の差を求め、現在の日付の月日の部分が誕生日の月日の部分よりも暦年で早い場合は、さらにそこから1を引くという計算をする。


これを、括弧思考法で表すと次のようになる。

{ 年齢計算:{
  現在の年 - 誕生日の年
  現在の月日 < 誕生日の月日 : さらに 1 を引く }


これを作るのには次のようにする。まず、最初の括弧を書くことによって、いまから何かの概念について整理するぞという心構えをする。

次にその概念の中心が年齢計算であることを示すために 年齢計算とコロンで概念のラベルを作る。

ラベルの後ろにはそれに対応する事項を書くのだが、年齢計算が単純な構造であればそのままコロンの後ろに書けばいいのだが、ちょっと複雑そうなのでとりあえず、内容が複数の要素でできていることを表すためにコロンの後ろに括弧を書いておく。

括弧の中身はおそらく複数行にわたりそうなので、そこで改行して、次の行は数個の空白でインデントする。

年齢計算は二つの部分に分かれるようだ。最初は年に注目した計算でそれを一行で書く。二番目は月日に注目した計算で、その場合にはさらに1を引くという操作が発生するのでコロンで区切られたペアで表現する。

YAML や JSON では配列要素と、連想配列のペアが同列に並ぶことはないのだが、機械ではないので硬いことは言わないようにしよう。大切なのは{}と : だけの最小限の記号の利用で複雑な概念をこれだけわかりやすく整理することができるということなのだ。

年齢計算の手続きはこの2行で終了するようなので、2行目の行末の閉じ括弧で終わりを表す。

さらに、ここで年齢計算の概念が終わったことを示すために概念の範囲の終了を示すおしまいの閉じ括弧をつける。

括弧と閉じ括弧の対応は厳密にする必要がある。括弧の対応を検討することで概念の構造も厳密に見ることができるからだ。

この方法の利点はパソコンのエディターとの相性が良いという事だ。図形的なダイアグラムは電子化が大変だが、この括弧思考法なら、ちょっとエディタを開いて書き込むことができる。電子化できるということは、再利用が簡単になるということだ。

実際、この記事も、Windows のメモ帳にちょっと書き込んだものをコピーしている。
[PR]
by tnomura9 | 2006-05-14 08:59 | 考えるということ | Comments(0)

Apache

Ruby on Rails を使ってみたくてたまらなくなったので、Windows の ノートパソコンに Apache と MySQL をインストールした。久しぶりのサーバのインストールだったので、要点をほとんど忘れていて、一週間ほど格闘した。

Apache は CGI の勉強のために Linux マシンで使ってみたことがあったが、個人のパソコンに WWW サーバがあっても仕方ないと思って随分遠ざかっていた。しかし、今度 Windows のノートパソコンに入れてみて意外な使い勝手のよさに驚いた。http.conf をいじって自分のマイドキュメントの My Website ホルダーの文書をサーバで表示できるようにしたのだが、これにインターネットからダウンロードしてきたHTML文書を放り込んでおくと、localhost/~username にアクセスするだけで、簡単に読むことができる。わずらわしい、ホルダー操作が一切いらなくなってしまった。HTML文書はもともとサーバで使うように設計されているのだから、当然といえば当然かもしれない。

必要に迫られて、Apache を入れ、MySQL を入れ、Cygwin を入れしていたら、Windows のノートパソコンが随分楽しいものになってきた。
[PR]
by tnomura9 | 2006-05-13 19:19 | Ruby | Comments(0)

Scheme

JSON の構文が Lisp に似ているのに気がついたので、Scheme 入門をネットで読んでいたら、やはり、Lisp のリストそのものだった。JSON の構文のうち、 ペアと要素を判別できれば、{} と [] は統一してもかまわないし、ペアも {pair name value} のようなリストとして表現できる。結局 JSON は Lisp のリストの Syntax sugar だったのだ。

Lisp はこのリスト構造だけでプログラミングも出来る。だから、やろうと思えば、JSON でプログラムすることも出来ないことではないかもしれない。JSON がそのシンプルな構文にも関わらず、多様な情報を記述できるのはそのせいだったのだ。

Lisp はその暗号的な記述がなじめず、避けて通っていたが、少し、本でも買って勉強しなくてはならないかもしれない。物事の表面的な多様性のなかに潜む共通点を見出して単純化していくと、思いもかけない見通しが開けることがある。本質を抽象化して構造を浮き立たせるという手法は、プログラミングのみならず、いろいろな分野で応用可能な気がする。

Lisp を試してみるのは、Lispの方言の Scheme のインタープリタの guile を使ってみるのが手っ取り早い。使い方は、ネット検索で「Scheme 入門」を探すと解説ページを見つけることができる。
[PR]
by tnomura9 | 2006-05-10 05:24 | Ruby | Comments(2)

JSON

最近、XMLのデータが大量のタグに埋まってしまって、データの可読性が低下しているため、YAMLやJSONなどの軽量マークアップ言語が注目されている。開発の趣旨はYAMLがスペースによるインデントによって人間に読みやすいようなデータフォーマットを目指しているのに対し、JSONは簡潔な文法で構造のあるデータを異なるプログラム間で共有するにはどうすればよいかが主眼となっている。

人間にとっての読みやすさからいくと、YAMLのほうが読みやすいが、JSONはインデントに特別な意味がなく、文法構造も簡潔だ。いずれにしても、両者の特徴は、データの要素に name:value のペアからなる member と value のみの element  の2種類だけとし、その要素の列と列の階層構造だけで構造化されたデータをあらわすことが出来ることに気がついているところだ。複雑なマークアップは、member の name として吸収されてしまっている。

YAMLは読みやすいが、インデントに意味を持たせているため、構文解析がやや難しくなるのではないだろうか。JSON は文法がすっきりしていて、衝突が起きにくそうだ。したがって、設定ファイルは YAML 、データ交換は JSON というように用途が分かれていくかもしれない。

JSON の規格を見ると、Unix のキャラクターストリームに似ている気がする。データの種類を実数、整数、文字などに分けて記録する場合と比べ、データを文字列の配列として単純化したおかげで、データとプログラムの独立性が保たれ、異なるプログラム間でデータの共有が行われるようになり、パイプラインのような便利なものが可能になった。JSONにも同じようなパワーが潜んでいるかもしれない。
[PR]
by tnomura9 | 2006-05-08 08:05 | Ruby | Comments(0)