2007-09-01から1ヶ月間の記事一覧
C++では"+"や"-"といった演算子のオーバーロードが可能です。これを使うと以下のようなオブジェクト同士の足し算や引き算の動作を規定することができます。 Kitten *mii = new Kitten(); Kitten *tora = new Kitten(); *mii + tora; // オブジェクト同士を足…
オブジェクトも動的変数にすることがでます。 動的変数なのでnew演算子を使用します。 「new (引数..)」で、クラスのインスタンスが動的変数として作成され、そのポインタが返されます。 このときクラスのコンストラクタが実行されます。 不要になった変数は…
昔教えたもらった話。 テストケースを作るときに、かけ算になっている組み合わせを探して、足し算になるように直すとテストパターンを減らすことができます。 例。かけ算になっている組み合わせ。 以下の機能を持つ関数があるとします。(ちょっと無理矢理っ…
java.io.SequenceInputStreamを使うと、複数のストリームを連結して1つのストリームとして扱うことができます。 ストリームを読み、最後まで読み込んだら次のストリームを読みます。(このとき、読み終えたストリームは順次close()されるようです。) Sequence…
Javassistを使うと、実行時のクラス拡張(コンパイル済みのクラスをJavaプログラム実行時に改変し、メソッドに処理を追加したり、フィールドを追加したりすること。)ができます。以下は簡単なサンプルとはまったところについてのメモです。 簡単なサンプル "c…
今日はまったところ。 Seasar2では、Servlet内で起動したThreadからSessionスコープのコンポーネントを利用できません。(Seasar2.3.22で確認。) 原因 HttpSessionの取得先であるHttpServletRequestをThreadLocalで保持しているのが原因。Servletを実行するTh…
Canvasを使って分割された画像を遅延ロードするコントロールを試作してみました。Google Mapの地図表示部分みたいなやつです。 機能 分割された画像のうち、表示される部分のみをダウンロードして表示します。残りの画像は、それが必要になったときにダウン…
Canvasを使って作ったアニメーションです。ちょっとキモイ。見てみる。 仕組み タイマーを仕込んで定期的にキャンバスを更新。 更新ごとにキャンバスはクリアして、1から再描画しています。(座標を変えて画像を張るだけだけど。) フレームレートは24枚/sec。…
new演算子で動的変数を生成できます。動的変数を使うと、プログラムで必要になった時に動的にメモリを確保することができます。(通常はスタック領域に確保されるメモリを、ヒープ領域に確保すると解釈。) 「new ;」でメモリを確保し、そのポインタを返す。 …
ExplorerCanvasを使うとIEでCanvasを使えるようになります。(via PHPSPOT開発日誌-IEでJavaScriptのCanvasを利用するためのライブラリ「ExplorerCanvas」) excanvas.jsをダウンロードしてインポートするだけでOK。 注: Canvasはページのロード完了後に呼び出…
FirefoxやSafariで使えるというCanvas要素を使って、絵を描きました。 これを使うと円やら斜め線やらベジェ曲線やらをHTML上で描くことができます。ただし、対応するブラウザが限られていて、とりあえずIEでは動かないらしい。 基本的な使い方 canvasの基本…
だいぶ前に書いた、オブジェクト比較ユーティリティを使っています。以下はサンプル。 class Kitten { // フィールド private String name; private int age; private Kitten[] friends; public boolean equals ( Object obj ) { if ( obj == null ) { retur…
ServletにアクセスしてきたクライアントのIPアドレスを得る方法。 プロキシを介さない場合 ServletRequest#getRemoteAddr()で、アクセスしてきたクライアントのIPアドレスを取得できます。 ServletRequest request = .. 省略 .. // クライアントのIPアドレス…
実装を持たない仮想関数(純粋仮想関数と呼ばれる)を持つクラスが、抽象クラスになります。 純粋仮想関数は派生クラスで必ず実装しなければならない関数です。(Javaのabstract関数と同じ) 仮想関数のプロトタイプ宣言で「=0;」をつけると、純粋仮想関数になり…
多態性(ポリモーフィズム)について。C++では次のような手順になります。 親クラスのポインタに派生クラスのインスタンスのポインタを代入。 Javaと同じですね。 親クラスのメソッドを実行→派生クラスでオーバーライドしたメソッドが実行される。 このとき、…
継承のつづき。メソッドとコンストラクタのオーバーライドについて。 メソッドのオーバーライド 普通にできます。特に書くことなし。オーバーライドした親クラスのメソッドを呼び出すには「::」をつけます。Javaの「super.」のようもの。 #include <iostream> // 親ク</iostream>…
昔はまった罠について。 複数のクラスローダーで同じクラスを読み込んだ場合、"別のクラス"になります。static変数も別物扱い。このため、シングルトンなクラスのインスタンスが複数できたりします。 例 よくあるシングルトンクラス。privateなstatic変数に…
メモリを拘束してOutOfMemoryErrorをスローする&スローしやすい状態を作るユーティリティです。テスト用に作りました。 hold()でOutOfMemoryErrorが発生するまでメモリを拘束し、OutOfMemoryErrorをスローします。 スローした後もメモリは拘束された状態のま…
Modelの更新をリスンするで作ったリスナ登録ユーテイリティをDIコンテナで使えるようにしてみました。 DIコンテナに登録された関連づけ情報に従って、コンポーネントにリスナを設定します。 ユーティリティはEagerSingletonなので登録するだけでOK 以下はサ…
以前作成したJavaScriptで動くDIコンテナにこっそり機能を追加していたので公開してみます。 新機能は次の3つです。 コンポーネント定義を列挙するAPIの追加。 関数実行結果のインジェクションをサポート。 EagerSingletonスコープ コンポーネント定義の列挙…
ファイル/ディレクトリを再帰的に削除する関数です。 File.delete()を使って削除します。 存在するにもかかわらずFile.delete()で削除できなかった場合、deleteOnExit()を設定してVM終了時に削除を試みます。 デイレクトリは、中にファイルがあると削除でき…
今日はクラスの継承です。継承の宣言から、継承したメソッド・フィールドのアクセス制御まで。 継承の宣言 以下の形式で書きます。 class <派生クラス名> : [<継承修飾子>] <親クラス名> { ... }; 簡単なサンプル。 #include <iostream> // 親クラス class Animal { pr</iostream>…
クラスを定義してみます。 クラス 「class { .. };」の形式で書きます。 末尾に";"が必要なので注意。 コンストラクタ クラス名と同じ名前のpublic関数がコンストラクタになります。 Javaと同じく戻り値は持ちません。 オーバーロード可能です。 デストラク…
C++の文字列はcharの配列です。 「char str[] = "hoge";」で簡単に初期化可能です。 文字列を引数として渡す場合、ポインタを指定して参照渡しとします。(配列なので当たり前といえば当たり前。) 「std::cout このため文字列長+1の配列として、最後に"\0"を…
Getter,Setterを利用すると、「.」でプロパティにアクセスした際に、指定した関数が実行されるようになります。注意:ただし、IEでは動作しません。 function Kitten( name ) { this._name = name; } // Getter, Setterの設定 // プロパティ名と関数を指定す…
配列の名前は、配列の先頭要素のアドレスを指します。これをポインタ変数に代入し、インクリメントしていくことで、配列の列挙ができます。 #include <iostream> int main() { int array[] = { 100, 200, 300 }; // ポインタ変数の宣言 int *pointer; // ポインタ変数</iostream>…
Yahoo! UI LibraryのConnection Managerを使うとXHRで非同期ファイルアップロードが可能です。 アップロードするファイルを選択するフォームを用意し、Connection Managerに関連付けます。 フォームは必須です。また、アップロードするファイルはユーザーが…
「Bookmarks」は、タグをグループ化して整理できる、はてなブックマーク-フロントエンドです。 特徴 タグセットでのタグのグループ化 関連するタグをグループ化してタグセットを作成。 タグセットからタグを探すことで、関係のないタグが排除され、効率よく…
ポインタは変数の「アドレス」を記録する変数です。 ポインタ変数には、「メモリ上での変数の位置(場所)」が格納されます。 ポインタ参照演算子で、ポインタから「それが指し示す変数の値」を取得できます。 これを利用して、変数に別名をつけることができま…