« 2007年03月 | メイン | 2007年05月 »

2007年04月 アーカイブ

2007年04月16日

IEのヘッダとフッタを編集する

IEから印刷された用紙に表示されるヘッダとフッタが邪魔だから消せないのかと聞かれた。
非表示だけでなく編集も可能だということは、一般的にあまり知られていないようだ。
以下、簡単にまとめてみる。
(IE6の場合。他のバージョンでも同じかどうかは不明。)
ヘッダとフッタを編集
メニューから、[ファイル]→[ページ設定]の[ヘッダーとフッター]欄を変更すると、印刷時の文字が変わる。
[&]を含んだ表記方法の意味は以下の通り。
ヘッダとフッタで認識可能な可変表記
&w  タイトル
&u  URL
&d  日付(short)
&D  日付(long)
&t  時間
&T  時間(24h)
&p  ページ数
&P  総ページ数
&b  表示位置の調整(詳細は後述)
&&  &のエスケープ(可変ではないが...)
表示位置の調整
表示位置の調整には[&b]を使用する。
例えば、単純に[&w]と入力すると、左寄せでタイトルが表示される。
右寄せにしたい場合、[&b&w]とすればよい。
左にタイトル・右に日付としたい場合は[&w&b&d]とする。
中央揃えは[&b]を2つ使用する。
例えば、タイトルの中央揃えは[&b&w&b]となる。
左にURL・中央にタイトル・右にページ数では[&u&b&w&b&p]と指定する。
ワープロ等で両端揃えを指定した時の動作に近く、[&b]はtabと同等と考えれば理解しやすい。
ヘッダとフッタの既定値
ヘッダとフッタの編集は、場合により便利である。
しかし、[デフォルトに設定]ボタン等の変更後に元に戻す方法がない上に、一度編集をしてしまうと再起動をしても元には戻らない。
どうしても元に戻したくとも、他にPCがない場合、新規ユーザを作成等をして調べなければならない。
面倒なので既定値も記述しておく。
ヘッダとフッタの既定値
ヘッダ  &w&b&p/&P ページ
フッタ  &u&b&d

Class.prototype={xxx:"yyy"}とClass.prototype.xxx="yyy"の違い

prototypeの使用方法について論議がされている。
以前作成したサンプルにちょうど良いのがあったので、役に立つかどうかわからないが、もったいないので公開する。
時間がないため、詳細を省く事をご了承願いたい。
function Point(x,y){
    this.x=x;
    this.y=y;
}

var a=new Point(1,3);
alert(a.constructor==Point);    //true(aのコンストラクタはPoint)

Point.prototype.swap
=function(){
    var buf=this.x;
    this.x=this.y;
    this.y=buf;
}

var b=new Point(2,4);
alert(b.constructor==Point);    //true(bのコンストラクタはPoint)


Point.prototype
={swap:
    function(){
        var buf=this.x;
        this.x=this.y;
        this.y=buf;
    }
}

var c=new Point(3,5);
alert(c.constructor==Point);    //false(cのコンストラクタはPointではない)
alert(c.constructor==Object);   //true(cのコンストラクタはObject)
誰かの役にたちますように...。

2007年04月25日

「そろそろきっちりJavaScript」がきっちりしていない点

あまり、他人の間違いをサイト上で指摘するのは気が引けるが、はてブ等でも注目されており、誤った知見が広がりjavascriptの復権が遅れるのも避けたいのであえて指摘する。
Firebugをこの手のサンプルの実行環境にすべきではない
Firebugはその名前から察せられると思うが、デバッグ用のエクステンションである。
javascriptのスコープは開いているサイト上となってしまう。
例えば、どこかのサイトを表示し、FirebugのConsole上で
document.getElementsByTagName("body")[0].innerHTML;
と実行してみてほしい。

表示中のサイトのHTMLが出力されたはずだ。
また、次のように実行すると
document.getElementsByTagName("body")[0].innerHTML="Firebug";
サイトの表示が変更されたはずだ。
つまり、javascriptの実行環境が、表示中のサイト内のjavascriptの変数で汚染されているのだ。
(これを汚染というのはどうかと思うが、Firebugを学習環境と見ると汚染でもいいかと思う。)
この状況下で、サンプルを実行してしまうとサイト側が思わぬ動きをしかねない。
Gmail等のajaxを多用しているサイト上で行うと、危険性が増す。
Domの勉強ならわからなくもないが、このようなサンプルの実行には安易にFirebugを薦めてほしくないというのが本心である。
無名関数を使用する利点とfunctionオブジェクトを使用する利点を取り違えている
連載2回目の「(2) 無名関数についてもう少し考える」の、例2のサンプルは次のようになっている。
/* 無名関数内での変数定義が外部の(グローバルな)変数を上書きしていないことを確認しよう */
>>> var y=2;
>>> var mtof = function(x) { var y=3.2808399; return x*y; }
>>> mtof(3);
9.8425197
>>> y
2
/* 関数定義をしない、単なるブロック処理だと、変数は上書きされてしまう */
>>> { var y=4; }
>>> y
4
これで無名関数の利点を説明しているが、グローバル変数を上書きしていないのは無名関数だからではなく、単にfunction内でvarを使用し宣言しているからだ。
つまり、3行目を
function mtof(x) { var y=3.2808399; return x*y; }
としても何ら変わりはない。
document.getElementById()=$()と勘違いしている
同じく連載2回目の「(2) 無名関数についてもう少し考える」の、例5では
/* dollar関数 .. $() は document.getElementById() の別名として利用できる */
/* 引数は配列でも受け取れる。多用されるため、覚えておいて損は無い */
>>> document.write('<h1 id=\'myHeader\'>Hello!</h1>');
>>> $('myHeader').style.color='red';
"red"
となっているが、$()がdocument.getElementById()の代用として利用できる環境は限られている。
連載でも取り上げられているprototype.jsをincludeした場合や、Firebugを利用した場合だ。
(もしかすると、最新のブラウザでは可能なのかもしれないが、対象ブラウザを幅広くとるべきであるし、やはり$()は使用すべきではない。)
今後の展開に期待
prototypeチェーンの説明を行っており、また、prototype.jsを解読していくようなので(執筆時点では最新は「(7) prototype.jsを読む(1)」でまだ導入部)、javascriptを本格的に勉強したいと思うのならいいのかもしれない。
ただ、サンプルの可読性の悪さ(人のこと言えないな)、継承の説明時にconstructorの説明が抜けていること等、注意しなければならない点も少々あるが...。

2007年04月30日

自分が「井の中の蛙」と確信したとき

小学生か中学生からプログラミングをはじめて、大学は全く別分野の学部に入った。
この業界に入ってから、ほぼ独学でここまでやってきた。
読んだ書籍の数も雑誌の数も、そして帰宅後の情報収集のための時間も、言っては何だが人よりも断然多いと思う。
リアルに接する人達には十分認められる程に技術力を高めたが、実際の所は全く満足していなかった。
「自分は多分、井の中の蛙だろう」とさえ思っていた。
それは、情報収集をしていたために、もっと凄い技術力を持つ人達がいて、その人達が住む世界の存在を感じていたからだ。
「何でそこまで知る必要があるのか」とも「もう十分だろう」とも言われたが、筆者には高みの世界が見えていたし、その世界を目指していた。
ただ、我ながら不運なのは、その世界をネット上でしか伺い知ることができなかった点だ。
だが、先日「Ruby勉強会@関西-15」とその後の懇親会に参加し、まさにその世界の一端を目にしてしまった。
本当に情報技術を使いこなしているというのは、まさにこうゆう人達を指すのだろう。
筆者程度のスキルでお客からお金を頂いているのが申し訳なくなり、情けなくも思ってしまった。
やはり、蛙だったのだ。
そう気づかせて貰えただけでも参加する意義があったと思う。
もっと気合いを入れて勉強せねば。

#初めて知ったが、シンタックスシュガーは日本語で「構文糖」と言うらしい。
Google