DATE : 2006/08/11 (Fri)
右手の中指の関節を虫に刺されてしまいました。
なんというか、中指を少し動かすだけで違和感と同時にものすごいかゆみが……(;´Д`)
(;^ω^)よくこんな固い所を刺すものですね
他にも、脚や腕の脈あたりも刺されたりと、今年も満員御礼状態です。
(;^ω^)まあ、これも夏の風物詩ですね
DATE : 2006/08/10 (Thu)
実行可能な JAR ファイルを作るには、マニフェストファイルに MainClass: 属性を付けて、main メソッドを持ったクラスを完全修飾名で指定します。
Maven では、そのような属性を持ったマニフェストファイルを生成するような設定ができます。
MainClass: 属性を持つマニフェストファイルを生成する設定は、次のようになります。
(「...」部分は省略を表します)
<project ...>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>(メインクラスの完全修飾名)</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
...
</plugins>
...
</build>
...
</project>
maven-jar-plugin の archive 変数の設定を行うところがミソです。
参考文献
DATE : 2006/08/09 (Wed)
前回の記事では、メソッド内の this キーワードが指すオブジェクト指定する方法を書きました。
今回は、イベントリスナ(ユーザが特定の要素に対して、クリックなどの動作をした際に実行されるメソッド)での this キーワードが指すオブジェクトを指定します。
例として、指定した DOMElement での「 Ctrl キーを押しながらクリックした回数」を数えるオブジェクトを示します。
function ClickCounter(element) {
this.times = 0;
element.onclick = this._count.bindAsEventListener(this);
}
ClickCounter.prototype._count = function(e) {
if (e.ctrlKey) {
this.times++;
}
}
前回とは違い、今回は Prototype.js の bindAsEventListener メソッドを使用しています。bind メソッドと違い、bindAsEventListner メソッドは、イベントリスナ用に最適化されています。
というのも、実は Internet Explorer と Firefox とでは、発生したイベントを表すオブジェクト(イベントオブジェクト)を取得する方法が異なります。
Firefox では、上記の _count メソッドのように、引数にイベントオブジェクトが渡されます。しかし、Internet Explorer では、event オブジェクトにイベントオブジェクトが格納されています。つまり、_count メソッドを Internet Explorer 専用に書き直すと、次のようになります。
ClickCounter.prototype._count = function() {
if (event.ctrlKey) {
this.times++;
}
}
しかし、Prototype.js の bindAsEventListener メソッドを使用すると、上記のようなブラウザ間の違いを吸収してくれます。つまり、Internet Explorer であっても、イベントリスナの引数にイベントオブジェクトが渡されるようになります。
参考文献
DATE : 2006/08/08 (Tue)
以前の記事では、this キーワードの指すオブジェクトは、関数の呼び出しを行うオブジェクトによって異なるということを書きました。
しかし、Protptyoe.js にある bind メソッドを使用すると、this キーワードが指すオブジェクトを指定することができます。
例えば、次のコードは、printMthod 関数内では this キーワードの指すオブジェクトがないために undefined と画面に表示されます。
function MyObject {
this._field = 1;
}
MyObject.prototpye.printField = function() {
document.write(this._field);
}
var myObject = new MyObject();
var printMethod = myObject.printField;
printMethod();
しかし、Prototype.js によって、Function オブジェクトに追加された bind メソッドを使用すると、this の指すオブジェクトを指定することができます。
function MyObject {
this._field = 1;
}
MyObject.prototpye.printField = function() {
document.write(this._field);
}
var myObject = new MyObject();
var printMethod = myObject.printField.bind(myObject);
printMethod();
結果は、「1」と表示されます。
bind メソッドのソースコードを覗くと、次のようになっています。
Function.prototype.bind = function() {
var __method = this, args = $A(arguments), object = args.shift();
return function() {
return __method.apply(object, args.concat($A(arguments)));
}
}
これは、Prototype.js 1.4 の bind メソッドです。
この中で、$A 関数は引数を配列に変換する関数、shift メソッドは、配列の初めの要素を取り出す(その後、空いた部分を詰める)メソッドです。
__method 引数には、bind メソッドを呼び出したオブジェクト(つまり、上の例では printField 関数)が格納されます。そして、object には、bind メソッドの第1引数(上の例では、myObject)が渡されます。
そして戻り値として、bind メソッドを呼び出した関数オブジェクトを実行する関数を生成しています。この関数の中では、Function オブジェクトの apply メソッドが使用されています。apply メソッドは、呼ばれた関数オブジェクトを実行するメソッドで、第1引数に this キーワードの指すオブジェクト、第2引数に引数を格納した配列を格納することになっています。
こうすることで、this キーワードが指し示すオブジェクトを指定できるようになっています。
なお、Function オブジェクトの apply メソッドは、ECMAScript の仕様に定義されています。つまり、Prototype.js を使わずに、apply メソッドを使うという手もあります。
参考文献
DATE : 2006/08/05 (Sat)
今日いつも通りメールを受信すると、受信トレイにこんなメールが来ました。
『【しょこたんメール♪】ギザこんにちは、中川翔子だお(^ω^) しょこたん@GyaOジャック』
(;゚Д゚)……
どうも、GyaO のアニメチャンネル視聴者に送られているようです。
メールの中には、こんな言葉があったり……(文中から一部抜粋)
ありがとうございますおっお(^ω^)
みないとおしおき(`ω′#)おっ
(;^ω^)……
しょこたんはネット界隈では有名なのでこのような文章でも驚きはしません。しかし、その文章が載っているメールは、GyaO のメールです。
しょこたんも2chも知らない一般人(一般人……といっても、定義がどうもあいまいですが)が読むことを考えると、((((;゚Д゚))))
(;^ω^)こうやって、2ch文化がちょっとずつ世間一般を侵食していくわけですね。
(;´∀`)これは恐ろしいインターネッツですね。
(;^ω^)まあ、2chを含め、インターネット文化は一度ハヤリだすと急速にその輪を広めていきますね。かつては手渡しで渡っていた情報が回線上を通信されるようになったわけですから、まず速度からして違います。数年前までは存在しなかったブログや YouTube などの動画配信サービスなど。まったく、インターネッツは恐ろしいおっお('A`)