ログインしてログイン

SQL*PLUSで接続中に「!」を付けてコマンドを入力すると、ホストコマンドとして認識されるので、ファイルの確認などしたいときには多用する。
SolarisからSQL*PLUSで接続している時に、ふと思って「!sqlplus ****/****@****」と入力すると普通に繋がった。

SQL> !ps
PID TTY      TIME CMD
22735 pts/15   0:00 sqlplus
22736 pts/15   0:00 sqlplus

というようにちゃんと二重に繋がっている。当たり前である。この状態で

SQL> !su foo
Password:

とするとちゃんとシェルにスイッチした。飽きたので「exit」を4回入力して抜けたけれど、Windowsでもこういうこと出来れば思ったりする。WindowsServerはあまり知らないので、そういう機能もあるのかもしれないけれど、ログオフしてからログインするのでなく、そのまま別ユーザーでログイン出来ると嬉しい。環境変数を変更した時などはすぐに確認できる。

VBScriptのお勉強 3

プロシージャを作って、値渡しと参照渡しの確認をしてみた。

Dim foo
foo = "Hello"
SetBye(foo)
MsgBox foo
Sub SetBye(ByRef foo)
foo = "Bye"
End Sub

「ByRef」という修飾子で参照渡しとなって、デフォルトなので省略も可。「ByVal」という修飾子を付けると値渡しになる。上のコードを実行したところ

Hello

と表示された。参照渡しが機能していない。ちゃんとしたドキュメントを確認していないが、プロシージャの呼び出しを

Call SetBye(foo)

と「Call」で呼び出すことで解決した。VBScriptはデフォルトで宣言していない変数を使うことが出来るが、これを嫌う場合は「Option Explicit」というステートメントがある。

Option Explicit
foo = "Hello"

これは「foo」が宣言されていないのでエラーになる。
プロシージャが解ったところで、クラスにも挑戦。

<script type="text/VBScript">
Option Explicit
Class Point
Private x
Private y
Private Sub Class_Initialize
x = 0
y = 0
End Sub
Private Sub Class_Terminate
MsgBox("Class_Tarminate")
End Sub
Public Sub SetPoint(inX, inY)
x = inX
y = inY
End Sub
Public Sub Print()
MsgBox("x:" & x & ", y:" & y)
End Sub
End Class
Dim p
Set p = new Point
p.Print()
p.SetPoint 100, 200
p.Print()
Set p = Nothing
</script>

フィールドを用意して値の設定が行われることを確認できたが、作成中に色々エラーが出た。プロシージャを呼び出すときに

p.SetPoint(100, 200)

と書くとエラーになる。括弧は使えないようだ。
その他、オブジェクトの代入には「Set」が必要で

Dim p
p = new Point

と書くとエラーになる。
コンストラクタに相当するもの(まだ継承があるのかも知らないので、コンストラクタと呼ぶに相応しいのかわからないが)として、「Class_Initialize」というメソッドがあり、終了時には「Class_Terminate」と命名されたメソッドが呼び出されるようだ。
JavaでいうObjectクラスのメソッドのようなものだろうか。
最後に変数pの参照をなくして「Class_Terminate」を呼び出すために

Set p = Nothing

とした。最初は山勘で

Set p = null

とか書いてみたが、エラーになったので調べたところ「Nothing」という書き方が見つかった。
アクセス修飾子の細かい仕様などはわかっていないけれど、なんとなくVBScriptというものが解ってきた気がする。後は、デフォルトで使用できるであろう定数、メソッド、オブジェクトなどを調べながらコーディングすれば慣れてくるだろう。

VBScriptのお勉強 2

条件分岐も慣れない。Javaのifブロックなら

if (foo == 0) {
foo = 100;
}

となるが、VBScriptでは

If foo = 0 Then foo = 100

となるみたい。比較か代入か判り難い。処理が複数行にわたるときには

If foo = 0 Then
foo1 = 100
foo2 = 100
foo3 = 100
End If

とうように複数行で書く。「else」や「else if」を使用するときは間に挟むだけだが、それぞれ「Else」と「ElseIf」という記述になる。そういえばVBAを書いたときにも、「If」などはエディタに自動的に頭大文字に直されたのを思い出した。case文は

Select Case foo
Case "a"
foo = 0
Case "b"
foo = 1
Case Else
foo = 2
End Select

という感じ。数字のみでなく文字列を比較対象に出来るのは良いとして、「Case Else」というのが如何にもだ。「default」とかは出てこない。
ループ文も一通り揃ってはいるけど、

For i = 1 To 100
MyProc
Next

やっぱり慣れない。「Next」でカウンタを増加させるとのこと。VBScriptの文法は、文章なのか記号なのかがはっきりしない印象がある。
モジュールとしてはプロシージャがあって「Sub」と「function」がある。「sub」は値を返すことができないが「function」は値を返せる。上手な使い分けは、まだあまりコードを見ていないので解らない。呼び出しは「Call」で行う。
大体文法的な部分は見えてきたけれど、何かサンプルを作ってみないと実感が沸かない。Objectとかはどうなっているのだろう。「new」とか出来るのかな。

VBScriptのお勉強 1

4月からVBScriptを触るような予感がするので、とりあえずは言語仕様から見てみることに。
データ型はスクリプト言語らしく動的型付けでバリアント型になる。内部的な型はありがちなBooleanやIntegerやString、それにObjectなどがある。「空」を示すものとしてEmptyとNullがあって、Emptyは未初期化、Nullは初期値に有効なデータを持たないという意味になるらしい。
この辺はいいけれど、配列が判り難い。

Dim a(10)

これが宣言となる。Javaで言うところの

Object[] a = new Object[11];

と同じ。10のサイズを確保するのではなく、10までのインデックス分を確保するという考え方のようだ。
動的サイズの配列も宣言できるようだけど、今のところReDimの存在があまり判っていない。
あと、見慣れなかったものとしては日付リテラル

#90/10/15#

という記述が出来るみたい。
演算子も特徴がある。「+」とか「-」とかの算術もの以外に「Mod」とか「And」、「Not」という文字列がある。また、文字列の結合には「&」を用いるみたい。Javaでは「+」で文字列結合するけれど、Stringだけ演算子オーバーライドしているので少々不平等感がある。PerlとかPHPの「.」の方がいいかなと思う。
比較に「==」とか「===」という手法はない模様。「=」で比較すれば真偽値を取れる。
コメントアウトが「’」というのは慣れないので違和感がある。すっかり「//」か「/* */」か「#」か「–」に慣れてしまっている。
マイクロソフトの言語に早く慣れねば。

予約語が気になる

プログラム言語には必ず予約語がある。予約語を利用することでプログラム文法とその他を区別している。
プログラムコードに見慣れるに従って、全く関係ない英文でも予約語が出てくると注目してしまうようになった。例えば洋楽の歌詞に

I`ve finally broke free

こんなのが出てくると、つい頭の中で「finally」の部分が強調表示されてしまう。英語を母国語にする人がプログラムコードを見ると、どう見えるものだろう。
PL*SQLでCREATE PACKAGEの後はISでもASでも使えるが、この辺は母国語として不自然の無いように使い分けれるためで、システム的な意味はないと聞いたことがある。
予約語(主にクォーテーションとか)を文字列として使用するためにエスケープシーケンスがあるが、これは標準ではバックスラッシュであることが多い。しかし、日本語キーボードでの割り当ては円マークなので通常のフォントでは¥と表示される。
正規表現ではエスケープを駆使することが多いので円だらけになってしまう。エスケープを知らない人が見たら、暗号にしか見えないと思う。

Google Page Creator

GooglePageCreatorを使ってみた。
こうしたWeb2.0的なアプリケーションは大分見慣れたので、一つ一つの挙動に驚くことはなくなったが、それでも凄い。テンプレートでデザインやレイアウトを選んで、後は各タグに相当するアイテムを乗せていく感じ。
新しいページの追加もボタン一つで出来るし、ページ間のリンクも自動的にリストアップしてくれるので、記事に相当する部分以外はほとんどコーディングしなくても大丈夫。
また、各パーツごとにHTMLの編集が可能で、タグの間違いもある程度は補完・修正してくれる。例えば

<table>
<div></span>
</table>

という無茶なタグを記入すると

<TABLE>
<DIV></SPAN></DIV>
<TBODY></TBODY></TABLE>

というような具合で保存される。またundo機能も付いているので、かなり操作面でも親切だと思う。ホームページ・ビルダー10 通常版とかの方が細かいエディットが出来るのだろうけど、デザインに拘りがなければ十分だと思う。
こうしてWebページをそのまま編集できる感覚は何かに似ていると思った。それは多分SSHで自分のサーバーに接続してviとかでファイルを編集している感覚に近いんだろうと思った。それのGUI版だなと。
ここまでサーバー上で出来てしまうと、.htmlファイルの存在とかも知る必要がないので、職業でない人はFTPアップロードなんてしない時代が来そうだ。

Yahoo! UI Library でお勉強 その参

Ajaxの主役オブジェクトのXMLHttpRequestを生成するときに、どうしてもブラウザ実装の違いを吸収する必要がある。
Yahoo! UI Libraryのconnection.jsの手法はなるほどという感じ。
createXhrObjectというfunction内の話ですが、まずXMLHttpRequestをnewしてみる。

http = new XMLHttpRequest();

失敗してcatchブロックに入ると、ActiveXObjectをnewして頑張ろうとする。

http = new ActiveXObject(this._msxml_progid[i]);
obj = { conn:http, tId:transactionId };

で_msxml_progidという配列分ループ(失敗したらcatchに入るのでobj変数は上書きされない)してfinallyブロックにて

return obj;

となる。
_msxml_progidは

_msxml_progid:[
‘MSXML2.XMLHTTP.5.0’,
‘MSXML2.XMLHTTP.4.0’,
‘MSXML2.XMLHTTP.3.0’,
‘MSXML2.XMLHTTP’,
Microsoft.XMLHTTP’
]

とありったけ定義されていると。
そのまんまなコーディングだけど、何か巧いなと思ってしまう。if-elseだらけになったりtry-catchだらけになったりせず、明瞭なコードで気持ちが良い。

ウェブ進化論を読んで

ウェブ進化論 本当の大変化はこれから始まる (ちくま新書)

ウェブ進化論 本当の大変化はこれから始まる (ちくま新書)

ウェブ進化論を読み終えた感想。
特に斬新なことが論じられているようには感じはなかったけれど、何となく体験的に感じていたことが言葉で整理することが出来た点で有意義だった。
例えば、ブログやGoogleアドセンスなど個人の存在が大きくなったことは感じていたけれど、コストが低くなったことでロングテール市場を開拓することが出来たという明確な言葉にはなっていなかった。
この本の中で、テキストによる情報の取捨選択に比べてメディアは難しく、まだどの検索エンジンも達成されていないという趣旨の記述があった。メディアの判断が難しいのは現実世界では当たり前で、私の場合、持っているCDで視聴(若しくは中身を知っている)してから買ったものは非常に少ない。既に視聴による取捨選択を諦めているのだと思う。購入の基準は創作者に依るところが大きい。
しかし、もしインターネットで検索するメディアの全てが視聴できるなら、恐らく視聴するようになると思う。イントロだけで自分にとっての当たり曲かどうかを完璧に判断することは出来ないけれど、それでも30秒ほど聴けばある程度判る。だから、コストが低くなれば十分に今より掘り出し物を買うと思う。そして、今よりも能動的に探すようになると思う。
だからメディアの判定が難しいのは私としてはあまり問題でないと思うけれど、確かに要求するメディアを検索語から見つけるのは難しいかもしれない。
案としては、音楽なら作曲者や演奏者に関連するものが表示されると有難いし、歌詞を解析して関連のある検索語でヒットするのもアリかと思う。ジャケ買いなんて言葉があるけど、ジャケットのイメージを網羅して適当に選ぶのも面白いかもしれない。発売された時代で探すのも新しい発見がありそうだし、とにかく現実世界ではコストがかかって出来ないけれど、出来たら楽しそうなことは一杯あると思う。
とにかく色々考えることが出来て良かった。