ThinkPadセットアップ中2007年08月14日 03時04分58秒

この記事、書くの3回目...

本題に入る前に愚痴をば。

なんかわからんが、「のーと」を変換しようとすると使用中のアプリが落ちるというよくわからん事態に見舞われて、この記事書くのが3回目。しょぼPCとか揶揄するから反乱おこしたのかしらん。

さて、本題。ってほどたいしたネタ書くわけじゃないんだけど。

一週間もブログをさぼってしまった

先週の頭から夏風邪をひいてダウンしてしまった。風邪をひくこと自体が2~3年ぶり(どんだけバカなんだか...)だったのだが、夏風邪なんぞはこれまでの人生で1、2回しかひいたことがないのでけっこうしんどかった。

まぁ、週の後半は大分体調も回復していたのだが、こちらのエントリにも書いたように、愛機・ThinkPad X22のHDDがアレな状態になっており、しかたないので代替のしょぼノート(おぉ、F7の変換なら落ちないか)を使用しているのだがこれがまた使いづらい。CPUのしょぼさもさることながら、メモリが192M(これがこの機種のMAX。これ以上はごっつい改造しないと無理)ってのがかなりしんどく、Firefoxをまともに使う気になれないのでネットを見るのも億劫にしていた。

HDDを買ってきたワケだが

そんなこんなで、週末にアキバに出張って2.5インチのHDDを購入してきた。ほんとは新品を調達するつもりだったが、ほぼ同じ値段で倍の容量が買えるのでついつい中古にしてしまった。80G。まぁ、大丈夫だろ。

こちらのエントリでも書いたが、外付け3.5インチ用の設備を流用して5インチ工学ドライブからブートが可能なのでHDDさえ入手できればセットアップに入れるので早速HDDを換装、Win2KのインストールCDからブートしてみた。

なんか、画面が青いんスけど...

USB1.1経由なうえ、手持ちの5インチドライブが何倍速かもわからんような古いやつなのでとろとろとセットアッププログラムをロードしていたのだが、はっと気づくと青画面。ええ、STOPエラーですわ。

手持ちのインストールCDが悪いのかと思い、今日(もう明けてるので昨日か)会社からインストールCDを借りてきて試してみるも結果同じ。ぐぅ。

で、調べてみると、どうやらSP3以前のWindows2000がUSB接続のCD-ROMドライブをサポートしていないための障害の模様。なんや、それ。

SP適用済みインストールディスクを作成してみたり

解決策としては、「SP3(またはSP4)を適用したインストールCDを作成してそっからインスコしる」ってな感じらしいので、めんどうくさいがこんなところこんなところを参考にして、SP4適用済みのインストールCDを作成してみることに。

不精はアカンね...

普段使用しているDeep Burnerでもブートイメージはサポートしているので、bbie.exeで吸い上げたブートイメージを指定、あとは元のインストールCDからXCOPYしたファイル郡を単純に焼きこんで作成してみたが「ブートできねぇぞ、ゴルァ」メッセージが連発、あえなく廃棄。

こちらの手順どおり、makeisofsを使用してISOイメージを作成したらちゃんとブートできた。やはり先達の叡智は大事にせにゃ、ってことだすな。

ということでセットアップ中

インストールパーティションを40G確保したせいか、パーティションのフォーマットに結構時間がかかったが、なんとか現在セットアップは進行中。でもこっから環境復帰させるのがまた大変なんだよなぁ。

多少は和らいだかな?2007年08月18日 03時27分31秒

暑さには強いんだけど

夏生まれのせいか、ほかの人より暑さには強いと思うんだけど、さすがに体温と同じくらいの気温が続くと「もぉいいっス」という感じになっていたのだが、今日になって多少楽になった気がする。

それが証拠に、多少ブログを書く気になってるし(w

どのくらいで「暑すぎ」と思うか

5~6年くらい前は32度を超えると「暑すぎ」と思っていたのだが、ここ数年は33度くらいまで許容範囲だった。

しかしこの猛暑でまた少し許容範囲が広がった気がする。たぶん34度まで大丈夫と身体が勘違いしていそうだ。

気が付いたらもう8月も半ばを過ぎ、暦の上では秋が近づいてきているが、来週は多少は楽になるかなぁ。

余談

ボクのセンセイはぁ…と出てきた貴方は 40代。
...まだ30代だけど浮かびましたよ > 水谷豊の顔。

PHPのコネタ2007年08月18日 04時10分33秒

脈絡もなくPHPネタ。いや、いろいろとすぐに忘れちゃうもんで。

スタティックメソッドチェーンて、できるのか?

まぁ、インスタンスアクセスをしないユーティリティクラスに対して値を設定するなんてことは普通しないワケなんだけど、何を思ったのか、スタティックメソッドでメソッドチェーンができないかを試してみた。

ま、実用性皆無のサンプルだけど、こんな感じのコードがあったとする。

/**
 * 単純なカウンタクラス
 */
class Counter {
	private static $_counter = 0;
	
	/**
	 * 現在値の取得
	 */
	public static function current() {
		return self::$_counter;
	}
	
	/**
	 * カウンタを進める
	 */
	public static function increment() {
		self::$_counter++;
	}
}

見てのとおり、現在値の取得とカウンタのインクリメントをスタティックメソッドで提供している。で、これを
var_dump( Counter::increment() );
echo Counter::current();
とかってすると、出力は
NULL
1
見たいな感じになる。

で、本題。incrementメソッドを何も考えずに

	public static function increment() {
		self::$_counter++;
		return self;
	}
としてみる。「echo Counter::increment()::current();」とかってやってみたいわけ。記述は変態じみてるけど。

で、実行してみると、以下のようになる。

string(4) "self"
1
キーワード「self」を戻り値にすると、"self"という文字列が返るみたいだ。なので当然「increment()::current()」はできませんでしたとさ。

call_user_funcのまとめ

よく忘れるのでメモ的にまとめる。

関数「call_user_func」は、第一引数に関数名、それ以降にその関数への引数を列挙することで動的な関数呼び出しを行う関数。

で、第一引数にはarrayを渡すこともでき、これによりメソッド呼び出しも行える。インスタンスメソッドもクラスメソッド(スタティックメソッド)も。

まとめるとこんな感じ。

  • 関数呼び出し
    • 呼び出したい関数名をstringで渡す。
  • インスタンスメソッド呼び出し
    • array渡し。arrayの第一要素にはメソッドを所有するインスタンス、第二要素にメソッド名をstringで渡す。
  • クラスメソッド呼び出し
    • array渡し。arrayの第一要素にはクラス名をstringで、第二要素にメソッド名をstringで渡す。

以下サンプル。ちなみにPHP5のコードなので注意。

<?php
function func_test() {
	return '関数呼び出し';
}

class TestClass {
	public function __construct() {}
	
	public function instanceMethod() {
		return 'インスタンスメソッド呼び出し';
	}
	
	public static function staticMethod() {
		return 'クラスメソッド呼び出し';
	}
}

// 「func_test()」と等価
echo call_user_func( 'func_test' ) . "\n"; // → "関数呼び出し"

$test = new TestClass();
// 「$test->instanceMethod()」と等価
echo call_user_func( array( $test, 'instanceMethod' ) ) . "\n";
// → "インスタンスメソッド呼び出し"

// 「TestClass::staticMethod()」と等価
echo call_user_func( array( 'TestClass', 'staticMethod' ) ) . "\n";
// → "クラスメソッド呼び出し"