yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2017/11 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
紙より軽い責任者
2006/08/11(Fri)20:20:18
 まず企業価値の観点から注目すべきニュースを。
 サイバーエージェントの社長が、堀江氏に対して「最高技術責任者として受け入れよう」という話をしたとのこと。どういうつもりかは良く分かりませんが、この社長の立場と会社側の立場は少々食い違っている模様です。
 同社の社長が称するところによれば「堀江氏はもともとエンジニアだから」とのこと。これについての個人的見解は後で書くとしまして、それに対して同社が(法人の立場として)何を言っているかといえば、「社長が個人的な友人関係から述べたものだ」。会社側の反応はかなり冷ややかであるといえるでしょう。
 何かもう、サイバーエージェントの器が知れるような件です。堀江氏のムチャクチャな言い分と売名工作により、私が「このような会社は絶対ダメだ」と予想したライブドアはやはりその通りの結末となり、村上ファンドも同様でしたが、それもすべて組織及び社長などの行動や言い分から器が推測できるためです。何もサイバーエージェントがどうなると言いたいわけではありませんが、同社がどういうものであるかは何となく見えてきます。
 最高技術責任者といえば、「部門長」や「専務」のようになるでしょうか。同社の社長は個人的な(あくまで個人的な)交友関係を理由として、まれに見る詐欺事件によって逮捕されている犯罪者を、いきなり最高責任者として迎え入れようと言い出しているわけです。もはや公私混同で済まされるレベルではありません。
 それなら会社側が冷ややかなのも理解できます。会社側としてはそんなのは寝耳に水の話であり、社長の友人だからといって詐欺師がいきなり最高責任者に就任というのも、社員からすれば釈然としないでしょう。強制捜査がなされる前ですら、アンチ堀江が半数程度を占めていたことを忘れてはいけません。士気が下がることはあれ、上がることは考えられません。
 また、詐欺師を迎えるというのは爆弾を手に入れるようなものであり、もし社長と堀江氏に関係がなければ「そんなバカな話はない」の一言で済まされていたでしょう。会社の評判にもかかわります。事実、そういうことを言い出す同社の社長には私も半ばあきれています。これでもし同社が「我が社としてもその方向で検討している」などと言っていようものなら、私は間違いなくここでもその旨を述べた上、批判と注意喚起を行っていたでしょう。実際問題として、社長の友人関係ということで犯罪者をいきなり最高責任者に取り付けようとする会社など、危なっかしいことこの上ありません。常識的にそういう会社と取引などできないでしょう。

 後は経済ニュースとして、フタタが「AOKIかコナカのどちらかの子会社になる可能性が高い」としています。フタタ自らが買収を認めた格好であり、何か特別な波乱(友好的買収に怒った他方による敵対的TOBでの買収合戦など)が起こらない限り、フタタが決めた相手に友好的買収、という形になる可能性が高そうです。
 フタタの場合、コナカがバックにいる状態でAOKIからの提案があった状況であり、今のところコナカとAOKIで泥沼の争いにはなっていない様子です。しかも、フタタ自ら「どちらかに入る」と認めている(買収に反発していない)のですから、フタタの気が変わらない限りどちらかに買収されるのであり、分かりやすい構図ではあります。
 それに比べて北越製紙は泥沼です。王子の敵対的買収について、北越銀行は「北越製紙の判断に任せる」としてTOB応募に応じぬ意向。北越製紙の毒薬条項は一応「外部委員会」によって発動の有無が検討されるものの、判例の条件を満たしているとは言いがたく、法廷の争いになりかねない泥沼ぶり。第三者割当を引き受けている三菱の出方。ひたすら難しいです。
 業界再編の動きということで、なかなか目が離せない展開ではあります。

 ところで、サイバーエージェント社長の「堀江氏はエンジニア」発言について、世間に誤解を招きかねませんので、苦言を呈しておかなければなりません。
 まず堀江氏はエンジニアではありません。責任者をやるほどの技術力があるような話も聞きませんし、何より「金で何でも買える」と言っている時点でエンジニアではありません。株を不正操作したり偽装買収を行って他人をペテンにかけ、詐欺やグリーンメール商法を行うのは得意でも、そんなもの技術ではありません。
 そもそも、堀江氏がエンジニアである、すなわち血眼で技術を得ているなら、技術はどのような代償を払っても得られないものだと分かっているはずです。分かっていないからには、技術者であるとは考えられません。詐欺の技術に長けているのだとすれば、それは「エンジニア」ではなく「詐欺師」といいます。一緒くたにされては困ります。
 逆にエンジニアというのは、それこそ「技術のためなら悪魔に魂をも売る」という人間でしょう。堀江氏が金の亡者だとすれば、エンジニアは技術の亡者です。人間、古来から現代に至るまで、身に余る力を持つと身を滅ぼしてしまう生き物ですが、そうして身に余る技術力にのまれてしまうと「ウィルス作者」や「クラッカー」と化してしまうわけです。
 結局、そういう亡者の行く末は悲惨なわけですが。米国ではウィルス作者が逮捕され、結構な刑罰を受けていますし(ウィルス作成はかなり重罰の模様)、IT(イット)がイマイチ普及していない日本では「技術の亡者」の滅亡などはあまりないようですが、亡者つながりで堀江・村上両氏がオリの中。
 逆に、よく「エンジニアは現場主義である」といわれますが、これなどは端的にその性質を現しています。技術のためになら悪魔にでも魂をささげるのですから、技術以外がどうであろうと構わないのです。
 しかし、いくらエンジニアが技術の亡者だからといって、堀江氏と一緒にするとは。どうして世論の誤解を招くようなことを言い出すのでしょう、サイバーエージェントの社長は。

 ロック機構。サーバーサイドスクリプトを書いたことがある人ならご存知でしょうが、書き込みを伴う動作に関しては必ずロックが必要です。ロックといいますのは、要するに「私が書き込んでいる時は他の人は書き込まないで」ということです。
 ロックがなければ、誰かが書き込んでいる最中に他の誰かがそれを読み込むと、書き込み途上のデータや空白が読み込まれてしまうことになりますし、そうして読み込んだデータを書き込めば、これまでのデータを破壊してしまうのです。これは大変危険ですから、避けなければなりません。そこでロック機構を用いるのです。
 方法は色々とありますが、Perlの場合はmkdirやsymlinkが有名です(このブログでもロックとしてこの2つを実装しています)。これは、(mkdirなら)書き込み作業を行う前にディレクトリを作り、書き込みが終わったら削除することで、「ディレクトリが存在する時には他人が書き込み中である」ということを知らせ、他の書き込みをブロックする方法です。
 なお、ちまたには
while(-e "lock_dir"){
	# ウェイト
}
mkdir("lock_dir" , 0777);
 であったり、
for(my $i = 0; $i < 5; $i++){
	if(!-e "lock_dir"){
		mkdir("lock_dir" , 0777);
		last;
	}
	# ウェイト
}
 であったりというロックが存在したりしますが、危険極まりないです。-eにてディレクトリの存在の有無を調べ、存在しないことを確認した後、ロック用にディレクトリを作成する前に他人がディレクトリを作ってしまっても、それを検出することができず、データを破壊する恐れがあります。
 ですから、より安全にするには
while(!mkdir("lock_dir" , 0777)){
	# ウェイト
}
 のようにすべきです(すでにディレクトリがある場合、mkdirが失敗して0を返す。ディレクトリがない場合のみすぐに生成してループを抜ける)。
 ロックのウェイトにはsleep関数が使われることが多いようですが、このブログではselect関数でウェイトを取っています。
sleep(1);	# 1秒待つ
select(undef , undef , undef , 0.5);	# 0.5秒待つ
 また、スクリプトが途中で終了したりすると、ロックが解除されずに残ってしまうことがありますので、ある程度以上の時間が経過したらデッドロックとみなし、ロックを解除するようにしておくべきでしょう。中にはこの実装がないスクリプトもありますが、こうしたスクリプトでひとたびデッドロックが発生すれば、管理者などが自分でロックを抹消しない限り、永久に書き込みができない状態が発生します。
 ところで以前、堂々と「ロックが不完全なスクリプトも多く見かけます。しかも、そういうスクリプトにはロックは必ずしも完璧なものではないと書いてあったりします」などと主張し、スクリプトの作者を小ばかにしたような文章を書いているサイトを見つけましたが、こういう悪質な文章にだまされてはいけません。ロックは必ずしも完全なものではありません
 最も堅牢とされているOracleでさえ、偶然が重なればトラブルが発生するのです。データベースのようにそれ専用の堅固なロック機構を持つものでさえそうなのですから、スクリプトのロック機構など必ずしも完全とはいえないでしょう。ロックは完全ではありません。結局はバックアップをお忘れなく、ということなのですが。
 さて本題。CGIやJSPなどを用いてデータベースにアクセスするのはなかなか便利ではあるのですが、データベースは自身でロックを行ってくれます。ですから、単純な書き込み操作についてロックを実装する必要はありませんが、そうでない場合はロックが必要です。
 といっても、特にファイル書き込みを平行させるような場合でもなければ、mkdirなどでロックの制御を行うことは普通しません。MySQLなどはロック用の文や関数もありますが、普通データベースを使うならトランザクションの魔法は必須でしょう。で、その場合のロック方法ですが、

1.ISOLATION LEVELを「SERIALIZABLE」にする
 あらゆる読み取りにLOCK IN SHARE MODE(共有ロック)がなされる効果があります。しかし、所詮は共有ロック。他者の読み込みには干渉しません。ですから、SELECT文で何らかの値を取得し、その値を基にした新しいデータをINSERTするような場合、SELECT文によるデータの取得が終わった後で、INSERTがなされる前に他者がデータを読み込んだ場合、古いデータが読み込まれることになり、完全とは言いがたいです。

2.更新を実行する可能性のあるトランザクションにおいて、SELECT時にFOR UPDATEしておく
 手軽でパフォーマンスも落ちにくい方法です。一旦FOR UPDATEしておくと、トランザクションが終わるまで他者はそのテーブルのデータを読み書きできません。FOR UPDATEされたテーブルのみがロックされるため、不必要なロックがなされず、パフォーマンスもそこそこ維持されます。ただし、複数のテーブルにFOR UPDATEを使う場合、これをかける順番をしっかり考えておかないと、デッドロックを起こす危険があります。

3.ロック用にテーブルを用意し、このロックを使いまわす
 ロックの管理のような難しいことを考える必要がない方法です。簡単ではありますが、パフォーマンスは落ちてしまうでしょう。

4.ロック用にテーブルを用意し、レコードをフラグとして使う
 似たり寄ったりではありますが、こちらの方法なら1つのロックテーブルを複数のロックにおいて使いまわせそうです。意味があるのかは知りませんが。一応、トランザクションを使用しない場合でも使える方法ですが、それならロック関数や標準のロック文を使うべきのような。トランザクション内外でロックを共有するのには使えるかもしれません。

 ポピュラーなところでこの辺りでしょうか。ちなみにJSPでロック(ただしデータベースに限らず、マルチスレッドによるメモリ共有やファイル出入力などのロック)を行う場合、標準の機構を使うのが断然楽です。
// 自分のオブジェクトをロックに使う
synchronized(this){
	// ロックが必要な処理
}

// 共通のオブジェクトをロックに使う
<%!
	private static Object lock = new Object();
%>

<%
	synchronized(lock){
		// 処理
	}
%>
 はっきり言ってmkdirなどでは話にならないほど高速です。それこそ、4msや7ms(4ms = 4/1000sec = 0.004秒)などといったレベルです。Servlet Chatはこの方法でロックを行っています。PerlやPHPはこういう方法が使えないため、自前でロックを用意することになります。
 DBに戻ります。とりあえずサンプルとして「テーブルcntから最も大きな値を1つ読み取り、それより1つ大きな値を次の値として登録する」という単純な例を考えてみます。ただ、単純とはいえこれでカウンターも作れたりします。その場合はAUTO INCREMENTを使う方が楽でしょうが、単純に「1ずつ増やす」ことによらずに数値を決める場合であったり、数値以外のデータを用いる場合などでは、AUTO INCREMENTは使えません。
 この場合、値を読み取ってから書き込むまでの間にロックが必要でしょう。そこでFOR UPDATEを用いれば、同じ値が書き込まれるような状況を防止することができます。また、まずトランザクション内でロック用テーブルに適当なレコードを追加し(この時点でロック用テーブルへのロックを保持する)、その後でデータを更新するようにすれば、他のアクセスはロック用テーブルの時点で立ち止まり、安全にコミットやロールバックをすることができます。
 で、なぜこの段階になってロックの話かといいますと、どうもFOR UPDATEの動作が私の想定と異なっているような。スクリプトの手直しが必要かもしれません。

 もう1つ。先日の宿題(そんなものありません)の答案を提出しておきます。
# オブジェクトのクローンを生成するPerlスクリプト
sub clone{
	my $old = $_[0];
	my $type = ref $old;
	if($type){
		if($type eq "ARRAY"){
			my @inst = @$old;
			my @array = @inst;
			foreach(@array){
				$_ = &clone($_);
			}
			return \@array;
		}elsif($type eq "SCALAR"){
			my $inst = $$old;
			my $data = $inst;
			return \$data;
		}else{
			my %inst = %$old;
			my %hash = %inst;
			while(my($name , $value) = each(%hash)){
				$hash{$name} = &clone($value);
			}

			if($type ne "HASH"){
				return bless(\%hash , $type);
			}
			return \%hash;
		}
	}else{
		my $data = $old;
		return $data;
	}
}
 おそらくかなり汎用的なクローンメソッドです。値が実体でも参照でも、配列やオブジェクトを含んでいてもいなくても、ネストがなされていても、ディープコピーを行うことができます。配列やハッシュをコピーしたい時には、コピーしたい配列を参照渡しし、得られた値をデリファレンスで復元するようにします。
 簡単な用例はこちら。
# テスト用パッケージ「A」
{
	package A;
	sub new{
		return bless({data => 1024} , shift);
	}
	sub data{
		my $this = shift;
		return $this->{'data'};
	}
}

# 適当に配列を作る
$ref = {
	a => 10 , 
	dual => [
		128 , 
		256 , 
		{
			b => 20 , 
			c => A->new
		}
	]
};

# クローン生成
$cref = &clone($ref);

# 正しく複製できているか確認するため、
# 元のデータにデタラメな値を代入
$ref->{'dual'}->[2]->{'c'}->{'data'} = 16384;
$ref->{'dual'}->[2]->{'c'} = undef;
$ref->{'dual'}->[2] = 512;
$ref->{'dual'} = undef;
$ref = undef;

# dataサブルーチンを呼び出してみる
print $cref->{'dual'}->[2]->{'c'}->data;

# Result
1024
 この通り。スカラー、配列、ハッシュ、オブジェクト(blessされたハッシュ)の参照、スカラーの実体であれば、いかなるオブジェクトでも一応はクローンを生成することができますが、そのオブジェクトがDBへの接続やファイル出入力処理などを含んでいたりすると厄介なことになるでしょう。あまりクローンを作るのも考え物です。

 SQL.86。スノーレインボー地方にハロー注意報が出ています。皆さん、挨拶の際はお気をつけください。

魔道士イリアス「うーん、結構な難問なのね」
イリスのシェリー「どうすれば良いのでしょうか・・・」
魔道士イリアス「困った時にはやっぱりこれよ。・・・サーラ!」
騎士サーラ「はっ、お呼びでしょうか」
魔道士イリアス「サーラ、いつもながら悪いんだけど・・・」
騎士サーラ「はっ、お呼びでしょうか」
魔道士イリアス「あの、別に何度も繰り返さなくても・・・あれ?」
騎士サーラ「サーラ、参上いたしました。何なりとお申し付けください」
騎士サーラ「イリアスさん、何か御用でしょうか」
騎士サーラ「遅れて申し訳ございません。何なりと」
魔道士イリアス「じゃあサーラ、まず最初に聞きたいんだけど・・・」
騎士サーラ「何でしょうか」
魔道士イリアス「青髪の騎士が5人いるのって、気のせいかしら」
騎士サーラ「いえ、私を含めて5名おります。気のせいではございません」
魔道士イリアス「あの、そんなことをしれっと言われても・・・」
騎士サーラ「騎士たるもの、いかなる状況でも動じてはなりません」
魔道士イリアス「こっちが動じるのよ、こっちが」

 何度書いたか分かりませんが、つくづくこの人は一体。騎士には冷静な状況判断力、何事にも動じぬ度量が求められるといいましても。例えば魔道士イリアスがいきなり驚かそうとしても、「あっ、イリアスさん、どうされましたか?」で済ましてしまうのでしょうか。それとも、そういう場合はしっかり驚くのでしょうか。

魔道士イリアス「シェリー、どうする?サーラが多いと困るわよ」
イリスのシェリー「本物はどれでしょう・・・」
魔道士イリアス「仕方ないわね。じゃあ問題を出してみるわ。ここに水があるとして、それを25cc集めたとするわね。さらに、それを20個用意したとするわね。これってどの程度の重さになるかしら?」
騎士サーラ「はっ、約1.1ポンドではないかと」
騎士サーラ「1.101lbsといったところですか・・・」
騎士サーラ「17.6oz付近になるでしょうか」
魔道士イリアス「何よ、その意味不明な表現!あなたたち・・・と言っていいのか分からないけど、ワザとやってるんじゃないの?」
イリスのシェリー「マークシート式の問題を出してはいかがでしょうか」
魔道士イリアス「さすがシェリー。いいアイデアね。じゃあ、本物のサーラだったら正解できる問題をYES/NOの2択方式で考えてみるわ」

 そうして出題された問題と各人の答えは以下の通りです。騎士サーラには便宜上、A〜Eまでのアルファベットを当てはめています。

Q1.「DNS」とはDomain Name System、ドメイン名を解決するものであるが、これは師団内では「デュアルナイトのサーラ」を意味する隠語として使われている。
YESと答えた騎士サーラ : A , E
NOと答えた騎士サーラ : B , C , D

Q2.例えばコンフラグレイションは火属性魔法配下の魔法であるが、RDBMS魔法はトランザクションの魔法配下の魔法である。
YES : A , C , D
NO : B , E

Q3.魔道士イリアスはコーヒーが好きであるが、コーヒーは開発魔法の威力を一時的に高める能力を持つ。一部には他のカフェイン含有飲料では得られない効果をも引き起こす。
YES : C , D
NO : A , B , E

Q4.デュアルナイトはナイトやアーチャーを継承している(DualKnight extends Knight など)と考えられるが、ヴァルキリーやアマゾネスは継承していない。
YES : A , B , E
NO : C , D

Q5.師団の管理帳簿はSQLであるため、締め切りに大陸・英米の概念はないが、インターフェイス上では英米式として表示される。すなわち、仕訳帳にて各勘定から損益に振り替えられ、来期の初頭に再び繰り越された分が振り分けられる。
YES : A , C , E
NO : B , D

イリスのシェリー「イリアスさん、分かりましたか?」
魔道士イリアス「ええ、どのサーラが本物か、しっかり分かったわよ。以下がヒントね」

・魔道士イリアスは、本物なら確実に答えられるであろう問題を出題しているため、本物の騎士サーラは必ず正解する
・偽物のうち、全問不正解の人物が1名存在する
・1人は1問しか正解していない
・また1人は、1問を除いて全部正解している
・また1人は、過半数を逃している(不正解が過半数である)

 さあ、誰が本物なのでしょうか。シークェルの魔法で当ててみてください。

模範解答
 実はどの問題が正解であるかは考えれば分かったりするのですが、それではお話になりません。やはりシークェルのコーナーはシークェルで解かなければ。
 まず問題の正否を表すテーブルが必要でしょうか。
CREATE TABLE q(q BOOLEAN) ENGINE=HEAP;
INSERT INTO q VALUES(0) , (1);
 これ自体は嘘つきテーブルとさほど変わりません。さて、問題はここからです。問題の答えは分からないのに、一体どうすれば正解者を見分けることができるのでしょうか。方法は色々考えられますが、開発魔法・サブクエリでも使ってみますか。
 ヒントでは正解数(全問正解であったり不正解であったり)が指定されているため、まず問題パターンごとに正解数を求めるクエリでも。
SELECT (q1.q = 1) + (q2.q = 1) + (q3.q = 0) + (q4.q = 1) + (q5.q = 1) AS 'a' , 
(q1.q = 0) + (q2.q = 0) + (q3.q = 0) + (q4.q = 1) + (q5.q = 0) AS 'b' , 
(q1.q = 0) + (q2.q = 1) + (q3.q = 1) + (q4.q = 0) + (q5.q = 1) AS 'c' , 
(q1.q = 0) + (q2.q = 1) + (q3.q = 1) + (q4.q = 0) + (q5.q = 0) AS 'd' , 
(q1.q = 1) + (q2.q = 0) + (q3.q = 0) + (q4.q = 1) + (q5.q = 1) AS 'e'
FROM q q1 , q q2 , q q3 , q q4 , q q5;
 これをサブクエリ化して、条件に当てはまるパターンを探してみます。全問正解については正解数5、不正解なら0、1問を除いて不正解なら1、正解なら4として、それでは「過半数を取れなかった人が1人」というのはどうしましょう。0が1人、1が1人で0、1とも出揃っていますから、必ず2問正解であると考えられるため、クエリはこうなります。
SELECT CHAR(ORD('A') - 1 + (q.a = 5) + (q.b = 5) * 2 + (q.c = 5) * 3 + 
(q.d = 5) * 4 + (q.e = 5) * 5) AS '本物' FROM 
(SELECT (q1.q = 1) + (q2.q = 1) + (q3.q = 0) + (q4.q = 1) + (q5.q = 1) AS 'a' , 
(q1.q = 0) + (q2.q = 0) + (q3.q = 0) + (q4.q = 1) + (q5.q = 0) AS 'b' , 
(q1.q = 0) + (q2.q = 1) + (q3.q = 1) + (q4.q = 0) + (q5.q = 1) AS 'c' , 
(q1.q = 0) + (q2.q = 1) + (q3.q = 1) + (q4.q = 0) + (q5.q = 0) AS 'd' , 
(q1.q = 1) + (q2.q = 0) + (q3.q = 0) + (q4.q = 1) + (q5.q = 1) AS 'e'
FROM q q1 , q q2 , q q3 , q q4 , q q5) q 
WHERE (q.a = 5) + (q.b = 5) + (q.c = 5) + (q.d = 5) + (q.e = 5) = 1 AND 
(q.a = 0) + (q.b = 0) + (q.c = 0) + (q.d = 0) + (q.e = 0) = 1 AND 
(q.a = 1) + (q.b = 1) + (q.c = 1) + (q.d = 1) + (q.e = 1) = 1 AND 
(q.a = 4) + (q.b = 4) + (q.c = 4) + (q.d = 4) + (q.e = 4) = 1 AND 
(q.a = 2) + (q.b = 2) + (q.c = 2) + (q.d = 2) + (q.e = 2) = 1;

// Result
本物
D
 すなわち、Dの騎士サーラが本物であることが分かります。

魔道士イリアス「首尾よく本物が分かったところで、答えでも説明してみようかしら。まず1問目、DNSがサーラを表す言葉であるかどうかについてだけど」
イリスのシェリー「耳慣れない言葉ではありますが、だからといって師団で使われていないとは言い切れませんし・・・正解など分かるのでしょうか」
魔道士イリアス「じゃあシェリー、英語でデュアルナイト サーラと書いてみて」
イリスのシェリー「はい・・・。DualKnight Sara・・・」
魔道士イリアス「で、頭文字を拾って。DNSと読める?」
イリスのシェリー「なるほど、ナイトのスペルはNightではなくKnightなのですね」
魔道士イリアス「そういうこと。で、2問目だけど・・・」
イリスのシェリー「これ、イリアスさんのような魔法使いでなければ分からないのではありませんか?」
魔道士イリアス「そんなことはないわよ。魔法が使えないサーラだって分かるのよ」
騎士サーラ「はい。トランザクションの魔法はRDBMS魔法の1つであり、トランザクションの下にRDBMSがあるのではありません。ですから、正解は設問とは逆なのです」
イリスのシェリー「そうなのですか・・・」
魔道士イリアス「3問目は説明不要ね。シェリーはもともと製薬会社の人間なんだから。今でも効果を完全には解明できていないらしいわ」
騎士サーラ「集中力増大などについては科学的に証明がなされたそうです」
魔道士イリアス「そして4問目だけど、分かる人は分かるわよね」
イリスのシェリー「私は継承の概念自体があまり分からないのですが・・・」
魔道士イリアス「ヴァルキリーは中程度の攻撃魔法も使える魔法戦士だし、アマゾネスは弓と同時に補助魔法も申し訳程度に使えるけど、デュアルナイトって魔法が使えないのよね。だから、継承クラスではないと考えられるわ」
イリスのシェリー「良く分かりませんが、そういうことですか」
騎士サーラ「5問目については、シェリーさんなら良くご存知でしょう」
イリスのシェリー「はい。一旦仕訳に落としてから振り分けるのは大陸式です。設問は単語が逆なのです」
魔道士イリアス「こっちは私が良く分からないんだけどね。問題もシェリー発案だし。考えてみたら、サーラってこれ全部分かるのよね。頼りになるわね」
騎士サーラ「恐れ入ります。さて、申し訳ございませんが、私は例の出撃を行いますゆえ・・・」
イリスのシェリー「サーラさん、どうかお気をつけて」
魔道士イリアス「そういえば・・・例の難問、サーラに片付けてもらわなくて良かったの?シェリー」
イリスのシェリー「あっ!?」

 このように、忘れていては何ともならないのです。
カテゴリ [開発魔法][社会問題][経済・知的財産] [トラックバック 1][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

Trackback(1)
幻のバトン(from ブログ@うにうに画像倉庫) - 2006/08/12(Sat)23:02:59
★ミドリバトン★神無川雫様にバトンの指名を頂いたので貰ってきました。参考記事は【こちら】です。珍しくブログにそのまま文章を打っていたのですが・・・アップでエラーが出てやり直し。エラーで戻ると真っ白になっているの辛いなぁ^^;<>のキャラを「テンミリオンで一..


- Blog by yamicha.com -