過去の日記

2005-11-08 mod_rewrite

apache mod_rewrite [tech]

mod_rewrite のすばらしいところは、 Sendmailのような設定性と柔軟性を与えてくれるところだろう。 また、mod_rewrite のよくないところは、 Sendmailのような設定性と柔軟性を与えてくれるところだろう。

Apache module mod_rewrite

drupal絡みでmod_rewriteを調べていたらでてきたこの文。
いや、判りやすい(?)例えだわー。


追記
drupalに関しては、httpd.conf が、

AllowOverride None

となっていて、.htaccess が効かなかっただけ。

AllowOverride All

に直したら動いたとさ。


2005-11-07 PS版 serial experiments lain, 無限集合のべき集合

無限集合のべき集合の落とし穴 [etc]

数式を書きたいのでトラックバックで。

1. 素数の集合をAとする。
A = {2, 3, 5, ...}
2. Aの冪集合をBとする。
B = {φ, {2}, {3}, {2, 3}, {5}, {2, 5}, {3, 5}, {2, 3, 5}, ...}
3. Bの各元について、含まれる数の積に置換した集合をCとする(ただしφは1とする)
C = {1, 2, 3, 6, 5, 10, 15, 30, ...}


さて、A, B, Cの濃度に注目する。
A は自然数の無限部分集合である(∵素数は無限に存在する)。従って濃度は\(\aleph_{0}\)
Bは濃度\(\aleph_{0}\) の無限集合の冪集合であるから濃度は\(\aleph_{1}\)
Cは自然数の無限部分集合であり\(\aleph_{0}\) の濃度を持つ。しかし一方で、濃度\(\aleph_{1}\) であるBの元と全単射の関係にある(∵Cの各元はBの各元から作られており、またCの各元に重複はない)。

T-pon’s 一日一文Palm日記 with T|T5

いい問題ですね。面白いです。
Cは自然数の無限部分集合ではない、あるいは、Cという集合は作れない、が答えです。


Aは可算無限集合なので、元を\(a_{1},~a_{2},~a_{3},~a_{4},~a_{n},,,\) としましょう。
BがAのべき集合なので、その元には\(\{a_{1},~a_{2},~a_{3},~a_{4},~a_{n},,,\}\) という、Aに等しい(つまりAの全ての元を含む)無限集合が存在するのです。
なので、Cには\(\displaystyle~\prod_{n=1}^{\infty}~a_{n}\) が*1含まれます。もちろん、\(\displaystyle~\prod_{n=2}^{\infty}~a_{n}\) や\(\displaystyle~\prod_{n=3}^{\infty}~a_{n}\) なんかも含まれます。これらはパラメータnが無限大に発散している*2ことから、自然数ではありません*3。なので、自然数の集合からCへの単射は作れない、というのが基本的な考え方です。(\(\prod\) は積の記号。\(\sum\) のかけ算バージョンとでもいいましょうか。)


厳密な公理的集合論は専門外なので、「Cは自然数の無限部分集合ではない」と「Cという集合は作れない」のどちらが正解なのかは判らないのですが。


でも無限集合のべき集合というシロモノの想像のしにくさ、みたいなものを実感できるいい問題だと思います。
結構な時間、堪能させていただきました。


追記:"無限集合のべき集合には、無限集合が元として顕われてくる"ということを忘れています。と表現すれば良かったのだな、と今は思っています。


関連のエントリ

prima materia diary - Q.E.D カントール デデキント ゲーデル そして ミネルヴァの梟
prima materia - diary : カントールの連続体仮説と無限集合のお話

PS版 serial experiments lain [game]

(攻略に関する情報はずっと下の方です)


傑作にして唯一無二,空前絶後の"ゲーム"である。
あえて、ゲームと言い切ってしまう。


主な登場人物は2人。
岩倉玲音(れいん) TVアニメ版の主人公と同じ名前・容姿の女の子。
米良柊子(とうこ) 玲音のカウンセラ。と同時に精神科医でもある。


円筒形のフィールド内に散りばめられたデータブロックを選択すると、コンテンツが開ける。ほとんどは音声で、ムービーは少なめ。ゲーム開始時点では登場しないブロックもあれば、選択しても開けないブロックもある。特定のブロックを開くことで、開けるコンテンツが増える。エンディング後にcontinueを選ぶことで開けるコンテンツが増える。


ただ、それだけ。むしろインタラクティブコンテンツって言った方がいいかもしれない。が、あえてゲームと言い切ってしまう。


このゲーム、何が凄いかというと、ストーリーがない。
いや、そんなの他にもあるじゃないかと思うかもしれない。
何が唯一無二かというと、ストーリーがないにも関わらずゲームをプレイしているこちら側はそこにストーリーを見出してしまうこと。
例えて言うと、

カニッツァの三角形 - Wikipedia

こんな感じ。
3つの扇形と3つのくさび形があるだけ。でも人はそこに正位置に置かれた正三角形を見出してしまう。


そこにあるのは、岩倉玲音と米良柊子にまつわるカウンセリング記録と、カウンセリングカルテと、2人の日記。
全ては断片の情報で、それを矛盾無く正しく繋ぐストーリーという糸は存在しない。けど矛盾した状態で断片を心にしまいこめる度量もない。だから仕方なく断片を繋ぎ合わせてストーリーの雌型を作らざるをえない。それは、ストーリーの雌型であってストーリーそのものではない。だけど──それが正しいストーリーの形ではないと知りつつも──雌型を作ってストーリーを想像せずにはいられない。


困ってしまうのは、データを開けば開くほどに作った雌型が間違っていることを気が付かされること。その都度に雌型の細部を直さないといけない。エンディングを見た後にまた最初に戻って断片を開き始める。すると──、自分の作った雌型にうまく嵌ってくれないことに気が付かされる。


だから、やればやるほどに、細部は明瞭になっていくのに、全体は曖昧になっていく。


画面を通して、玲音と柊子の立場が徐々に逆転していく様を見る。玲音と柊子の存在の境界が揺らいでいく様を見る。
何度かエンディングを見た後に出てくるデータブロック。それを開くと、画面の中の玲音が囁く──自分だけは知っているよね? 自分が何をしたか と。
あるいは、柊子が自分の日記にこう綴る──この日記を読みたがっているのはだれ? と。
そんな時、"自分の中に作った玲音と柊子の物語(の雌型)"が自分を呑み込んで、自分と玲音と柊子の存在の境界が揺らぎつつあることに気が付く。
背筋がゾッとする一瞬が、そこにある。
(などと書くと妄想めいた話に見えるかもしれないが、そうではなくて、「『彼女たちの物語』を他の誰かと共有することが難しい。『彼女たち』と『彼女たちの物語』はゲームのあちら側ではなくてこちら側——つまり自分の中にしか存在しない」という事を、不意に気づかされる。というぐらいの意味)

serial experiments lain

  • 出版社/メーカー: パイオニアLDC
  • 対象機種: PlayStation
  • ASIN: B00005OVPO
  • 発売: 1998-11-26
  • amazon.co.jp詳細へ


カスタマーレビューを読んで是非プレイしたくなったのです。


シリアルエクスペリメンツレイン公式ガイド (電撃攻略王)

  • 出版社/メーカー: メディアワークス
  • 発売: 1998-11
  • ASIN: 4073100831
  • メディア: 単行本
  • amazon.co.jp詳細へ


玲音が囁く。

自分の姿なんて幻想? それとも現象?


後は余談。
柊子さんの漢字。"とうこ"と読ませているけど、これは"しゅうこ"と読むのが正しい。藤臣柊子先生を10年近く"とうこ"と読んでいたのに、実は"しゅうこ"だと気が付いた時のショックは忘れられない。さて、この読み方の間違いは意図的なものか否か? と考えてみると楽し。


途中で玲音がAI(らしきもの)をプログラミングしている時の画面。たいていこういう場合C言語やBASICっぽいソースが書かれるものなのに、このゲームはなにやらLISPらしいプログラムソース。"細かいっ!"と思ってしまった。


ムービーの話。断片を見ていた時はつながっている様に見えた物が、(エンディングで)つなぎあわせて見せられると、実はつながっていなくて、それぞれが断片にしか見えないという不思議。面白かった。(追記)そう。この部分こそがこのゲームの本質を的確に表明しているんじゃないかと、今はそう思ったりもする。


追記:
操作性の話。わざとやっているんじゃないかと確信してしまうほど、操作性が悪い──様に感じてしまう。カーソルの移動法則や、キー入力を受け付け始めるタイミングを覚えるまでは実にイライラさせられる。が、簡単に操作できてホイホイっとデータブロックを回収できちゃったら、きっとプレイ感が変わってしまっていただろうな、とも感じるのだ。見たもの、聴いたものを消化するまでの"間"をわざと作っているのだろう。多分。


結末の話。"全く救いがない"という形容をネット上でちらほらと見たけど、全然そうは思わなかった。異形コレクションとかで救いがない終わり方に変な免疫がついているのかな?


追記:2005/11/10
全部のデータブロックを見終えた。
邪道とは知りつつも、この混沌に満ちたゲームに解釈を与えて、一つのストーリーとして語ることができるものかどうか、その検討に入るつもり(でも途中で投げ出すかも)。
やっぱりこれは邪道だと思うのでやめた。今自分の中で構築している仮説を基にしたこのゲームの解釈はそのうち記すことにしよう。(追記:結局記してません)


シナリオ集「lain―scenario experiments(小中 千昭)]」の読後、そしてアニメ版lain 3回目の鑑賞の途中での追記:2006/2/8
こうやって読み返してみるとちと褒め過ぎか? という気もするが、けれども SCENARIO EXPERIMENTS lain を読み終わりそれを受けてアニメ版を見直している今、PS版lainに「単一の物語という解釈」を与えられるだろうか? という欲求が再びでてきているのもまた事実。
SCENARIO EXPERIMENTS lain では、アニメ版の脚本に加えて、小中千昭氏(アニメ版lainの脚本家)自身による多くの注釈を読むことができる。ごくわずかではあるがPS版lainからのインスパイアなども記されている。
興味深いのは、アニメ版lainでも、時制の混乱を意図的に加えていると記されていること。
PS版lainに単一の物語を与えようと試みるにあたり、私がまず考えていたのもこの点である。
特に説明はしていなかったが、円筒形のフィールド上のデータは(最後の方に現れるダイアローグのデータを別にすると)一見して時系列に並んでいる様に見える。
けれども、明らかにそれに従っていないデータが存在する。また、データに附与された番号が必ず時系列に沿って付けられているという保証はどこにも無い。
ということで、パッと見でこういう順番なんだろうと想像してしまうデータの中に、実は時制が反転したデータが紛れ込んでいるのではないか? 実は逆向きに並べると別の意味を持つであろうデータ群(精確には別の意味を持たせることができるデータ群、と言うべきだろうが)の存在を空想した。
そんな感じで「自分で納得がいく解釈を作れるかどうか?」というのが残された宿題でもあるのだがそれはとてもやっかいで時間がかかる──そして、本当にそうする価値があるのかどうかという疑問を拭えない──作業であり、実際のところ取りかかろうとさえしていない。
そういう意味で、このPS版lainはすでに長いことプレイしていないにもかかわらず、未だ気持ちの中では終われずにいるという、そんなゲーム。
……さて、SCENARIO EXPERIMENTS lainに出てくる小中千昭氏の興味深い注釈を一つ挙げてこの追記を終えるとしましょうか。

サイコドラマ
ドラマの種類ではなく、精神療法のひとつでこういうものがある。担当医師と患者が互いの立場を入れ替え、あるいは患者同士が入れ替わり、互いの考えを自らのように想像し、話すことで理解を深めるというもの。


追記(2007/4/29)
最近のオークションでの高騰ぶりは目をみはるばかりではあるが、けれども、それなりに納得できる事象ではある。
上の方で「救いがない結末」に絡めて異形コレクションを引き合いにだしたが、同じく井上雅彦が編んだ本に、

物語の魔の物語―異形ミュージアム〈2〉メタ怪談傑作選 (徳間文庫)

  • 出版社/メーカー: 徳間書店
  • 発売: 2001-05
  • ASIN: 4198914974
  • メディア: 文庫
  • amazon.co.jp詳細へ

がある。
PS版lainはまさしく「魔の物語の魔」が棲んでいるゲームなのだった。
名前《シニフィアン》のみが残り、内容《シニフィエ》が失われた物語。
──いや違うか。名前《シニフィアン》と内容《シニフィエ》のみあって、物語を内包しないゲーム、か。

誰一人としてこのゲームの「完全な姿」を語ることを得ず、それゆえに名前《シニフィアン》のみが広く語られることとなり、内容《シニフィエ》を知りたければゲームをプレイするしかない。
とまぁ、そういうことなのだろう。
「それなりに納得できる事象」というのはそういう意味だ。

だからこそ最初に、「ゲームと言い切って」しまったのだったな。
他のコンテンツには真似のできない魔が、そこに、棲んでいる。


(追記)
攻略法というか、コンテンツを効率よく見る手順。


SiteA の SSkn (コンテンツプレイヤーのUpgrade)

  • lv4
  • lv6
  • lv11
  • lv17


GaTE (Site B/2枚目のディスク へのパス)

  • lv4
  • lv6
  • lv8
  • lv17


まずこれらを回収し Site B へ行く(Selectキーでメニューを出してディスクをチェンジする)

SiteB の SSkn

  • lv4
  • lv7


これでコンテンツを開けられるか開けられないかを決める条件がクリア回数だけになるので、あとは好きな順番にでも根気よく見ること。


クリア回数というのは、エンディングムービーを見た回数のこと。
エンディングムービーの再生につながるコンテンツは、SiteBの

  • Tda092 lv12
  • Cou053 lv12
  • Dia048 lv12
  • Lda237 lv13

の4つ。
エンディングムービーといっても、本編とは全く別なムービーが存在するわけではない。
ゲームの中で時折再生されるムービーが、エンディングムービーの欠片なのだ。
エンディングムービーはその欠片が連続で再生される。それらの中で、まだ見ていない(=一度も再生していない)部分はノイズ状態になる。
先に書いたように、一定以上のクリア回数を満たさないと見られないコンテンツがあるから、完全なエンディングムービーを見るためにはノイズが混じっているエンディングムービーを数回は見なければならない
うまい作りだなぁ。

特に注意する必要があるのは、何も操作せずに放っておくことで見られるコンテンツがあること。それらもエンディングムービーのコンプリートには必要だ。
多くは止め絵に台詞なのだけどまれに流れるムービーが、エンディングムービーの欠片なのだ。


後はご随意に。
自分だけの物語をお楽しみください……。


おまけ

serial experiments lain Blu-ray BOX

  • 監督: 中村隆太郎
  • 出演: 清水香里,大林隆之介,五十嵐麗,川澄綾子
  • 出版社/メーカー: NBCユニバーサル・エンターテイメントジャパン
  • ASIN: B0142KRY48
  • 発売: 2015-10-23
  • amazon.co.jp詳細へ

serial experiments lain Blu-ray BOX|RESTORE (初回限定生産)

  • 監督: 中村隆太郎
  • 出演: 清水香里,大林隆之介,五十嵐麗,川澄綾子,浅田葉子
  • 出版社/メーカー: ジェネオン・ユニバーサル
  • ASIN: B002TPFM1G
  • 発売: 2010-10-27
  • amazon.co.jp詳細へ

scenario experiments lain/シナリオエクスペリメンツ レイン[新装版]

  • 作者: 小中千昭
  • 出版社/メーカー: 復刊ドットコム
  • 発売: 2010-12-10
  • ASIN: 4835445678
  • メディア: 単行本(ソフトカバー)
  • amazon.co.jp詳細へ

visual experiments lain/ビジュアルエクスペリメンツ レイン

  • 出版社/メーカー: 復刊ドットコム
  • 発売: 2013-06-18
  • ASIN: 4835449509
  • メディア: 大型本
  • amazon.co.jp詳細へ

*1 なんか格好悪い……

*2 この表現自信なし

*3 "自然数の集合"の元にならない、とした方がむしろ判りやすいかも


2005-11-06

javaでのオンラインソフトウェアって少ない [tech][memo]

という話をちょっと前にどこかで見たような気が。やっぱり実行にまつわる障壁が高いんだろう。
メモ。

本日紹介するオープンソース・ソフトウェアはLaunch4j、JarファイルをWindowsネイティブのExeファイルへラッピングしてくれるソフトウェアだ。

Launch4jの便利な所は、ラッピングによるファイル形式の変更だけではない。起動時にスプラッシュ・スクリーンを表示したり、Exeファイルにアイコンを付ける事もできる。更にJREがない場合やバージョンが低い時にダウンロードを促す事も出来る。

MOONGIFT - Launch4j - オープンソースによるIT戦略支援 -

2005-11-05 カントールの連続体仮説と無限集合のお話

無限集合のお話 [etc]

アレフ0は加算無限集合とも言われる。

T-pon’s 一日一文Palm日記 with T|T5

算無限集合の間違いです。

アレフ0は無限集合の中で最小の濃度の集合だ。アレフ0よりも濃度の高い集合にアレフ1があって、これは実数と同じ濃度である。つまり、自然数の集合を実数の集合に1対1対応させることはできない、ということらしい。

T-pon’s 一日一文Palm日記 with T|T5

アレフ0、つまり可算無限集合が無限集合の中で最小の濃度の集合というのはいいです。
が、後がいけない。
「アレフ1が実数と同じ濃度である」という命題は、現在はカントールの連続体仮説と呼ばれ、証明不可能な命題である(つまり、数学の公理系にこの命題を加えても、この命題の否定を加えても矛盾が発生しない)ことが証明されています(ゲーデルからコーエンに至る成果)。
自然数の集合を実数の集合に1対1対応させることはできない、というのは正しく、これはカントールにより示されています。


この話題で続けて書こうと思ったのだけど、前に書いていることに気がついた。

後にこれは証明不能な問題であることが証明される。その証明をしたのは誰あろうゲーデルだった。

prima materia diary - Q.E.D カントール デデキント ゲーデル そして ミネルヴァの梟

この部分だけ、ちょっと訂正するべきだけど。

カントールの連続体仮説 そしてなぜかQ.E.D. [hatena][comic]

無限に関する質問です。まず、自然数の集まりなどを表す無限を∞(0)(アレフゼロ)、無理数の集まりなどを表す無限を∞(1)(アレフワン)とすると、この両者に次のような関係が成り立ちます。
2^∞(0)=∞(1)
これについては問題ないと思えるのですが、
http://www.hatena.ne.jp/1130932358

問題がある。
カントールが一生を懸けて取り組んだこの等式は、証明不可能な命題であることが後にゲーデルやコーエンによって証明されている


追記:証明不能命題だから\(2^{\aleph_{0}}~=~\aleph_{1}\) が真である公理系と、偽である公理系とを別の公理系として話を進めることも可能なわけか(証明不能な命題である、というのはすなわちZFC公理系から独立しているという意味だから)。これは元は「連続体仮説が真な公理系を考えましょう」という宣言だったのかな?


まだ私の回答は開かれてないけど補足しておく。

2^A → A を指し示す対数にあたる概念もありそうな気もしますが、そういう概念は(少なくとも、カントールやゲーデルあたりの解説書のレベルでは)出てきません。

   ↓

(少なくとも、大学の一般教養レベルの数学や、カントールやゲーデルあたりの解説書のレベルでは)

としておくべきだったか。
専門にあたる数学科での授業や、数学という学問の最前線では、そういう概念ももしかしたら出てくるのかもしれない。が、質問者の理解度から察するにそういう立場にいる人ではないだろうし、また、はてなで回答が得られるようなレベルの話でもないだろう。


あー。私も混乱しているなぁ。一般連続体仮説(\(2^{\aleph_{n}}~=~\aleph_{n+1}\) )が証明不能であるのはいいとして、連続体仮説(\(2^{\aleph_{0}}~=~\aleph_{1}\) )はどうなっているんだっけ?
手元にちょうどいい資料が無い……。


いや、待てよ。

Q.E.D.証明終了(20) (講談社コミックス月刊マガジン)

  • 作者: 加藤 元浩
  • 出版社/メーカー: 講談社
  • 発売: 2005-02-17
  • ASIN: 4063709728
  • メディア: コミック
  • amazon.co.jp詳細へ

に出てるんだな。
連続体仮説も証明不能命題でいいのか……。ちゃんと回答に書くんだった。これは大失敗だなぁ。
(はてなのキーワードリンクでもよかった。)
(ということで、先頭に追記した。)


いやいや、待て待て。Q.E.D.やはてダのキーワードに書いてある「連続体仮説」が「一般連続体仮説」を指している可能性も否定できないぞ……。
(ということで再び更新)


いいかげんしつこいが。

連続体仮説 - Wikipedia

連続体仮説と一般連続体仮説がちゃんと区別して記されているし、連続体仮説は証明不能命題であるということでいいのだろう。


追記:あぁ、これは質問が悪い。「可算無限集合よりも小さい濃度の無限集合は無いのでしょうか? それが証明されたことはありますか?」という質問文の方が妥当だったのでは?
そうであれば、何も回答することはありませーん。というかZF公理系の公理の中に無いから、公理ではないんじゃないかなぁ、ぐらいで思考が止まってしまう。自然数の概念も集合論の中では、日常的な感覚とは違う定義になってしまうし。

broken link

このあたり。


もう回答する気がないのでここに書いてしまうが、無限集合のべき集合が元の集合よりも高い濃度を持つ(元の集合からべき集合への全単射が存在しない)ことは、カントールが対角線論法を用いて証明済み。

カントールの対角線論法 - Wikipedia

ただし、一般連続体仮説(\(2^{\aleph_{n}}~=~\aleph_{n+1}\) )が証明不能命題であることには注意。


追記:一見して集合論の話をしているように見えるこの質問。だけど集合論の言語で語っていない。だから集合論の言葉で回答しても、その回答は正しく届かない。集合\(A\) のべき集合を\(2^{A}\) と表記すること、集合\(A\) の要素の個数を\(|A|\) と表記すること。それらの表記法が「集合論以外の数学」からの借り物であるために混乱してしまう。
否、それらはもちろん、素朴集合論から公理的集合論へと移り変わる過程で、集合論の公理に組み込まれたり再定義されたりして、集合論を語るための道具となったわけではあるが。例えば、集合論の言語では"自然数"や"関数"でさえ我々が日常使っているものとは定義を異にする。
それを無視して、集合論の言語で再定義されていない――集合論の公理によって支えられていない――"対数"という概念/言葉を持ち出してしまっているのだ。

wish [comic]

Wish―たったひとつの願いごと (講談社コミックスなかよし)

  • 作者: 征海 未亜
  • 出版社/メーカー: 講談社
  • 発売: 2005-10-06
  • ASIN: 4063640930
  • メディア: コミック
  • amazon.co.jp詳細へ

たまには表紙だけで衝動買いもする。しかし、なかよしのコミックスを買うのは生まれて初めてだな。
全然知らなかったが、東京ミュウミュウの作者なのだな。
少女漫画誌に一本ぐらいは入っているホラー(っぽい)話。可もなく不可もなく。
特筆するべき所は特に無いのだけど、1と3がわりと面白かった。


しかし、楠桂の妖魔の最終回をたまたまリアルタイムで読んだという体験は結構、漫画の趣味に影響を与えているなぁ、と今は思う。

情報に対する姿勢・アンテナが命では? [hatena]

ネットで株の取引をしたいと思っています。初心者です。最初は週1−2回の取引(1回の手数料が安いところがいい)、後に毎日のデイトレーディングをしたい(使い放題が安いところがいい)です。2つの条件が揃っていて、かつWEB上で上記の契約条件の切り替えができるところはありますか?その会社の欠点や利点など詳細も知りたいです。よろしくお願いします
http://www.hatena.ne.jp/1131145747

「初心者」が、ネットの初心者を意味するのか株の初心者を意味するのか曖昧。
いずれにせよ、株取引なんて情報収集が命の様にも思えるのだけど?
そのあたりから人任せにしてしまうという姿勢に不安を覚えるのは私だけ?


2005-11-04 義捐金, java nested class

nested class [tech][java]

ネストクラス・インナークラスに関して勉強中ですが、
下記のようなルール
(略)
などあるようですが、そういうものかと頭では思えても、
・なぜそのようなルールがあるのか、
・このような仕組みは、実際の開発ではどのように
使われているのか、
といったことが見えてこないので、ぴんときません。

そこで、このネストクラス・インナークラスの仕組みがよく
分かるようになるサイト等をご存知の方がおりましたら
ご教授下さいますようお願いします。
http://www.hatena.ne.jp/1131095872


Java言語仕様(Java Language Specification)

http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html

に書いてあることなので、"why?"を突き詰めていこうとすると、仕様を策定した偉い人が書いた他の解説にあたるなり、直に訊くなりしないといけないのだけど。
ま、憶測することぐらいはできるわけだが。


以下、クラス名は以下の凡例で示す。

class TopLevelClass {
   class MemberClass {
   }
   
   static class StaticMemberClass {
   }
}


(1)非staticなネストクラスは、staticなメンバ・フィールドを持てない

実はこれは正しくない。

Inner classes may not declare static members, unless they are compile-time constant fields.
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#262890

とあり、コンパイル時で静的になるフィールドならばstaticなメンバは許される。簡単な例となるコードも載っている。
これが何故か? と問われると困るが「必要が無いから」といっていいだろう。後で示そう。


(2)非staticなネストクラスのオブジェクトは、外側のオブジェクトを生成してから生成する

この性質はある1つの事実を暗に示している。非staticなネストクラス――つまり、内部クラス――は、暗黙で外側のクラスのインスタンスへの参照を持っている、ということだ。
この暗黙の参照は、TopLevelClass.this という書き方で使用することができる。

class TopLevelClass {
   class MemberClass {
      void notStaticMethid() {
         TopLevelClass t = TopLevelClass.this;  //←ここ。
         t.anMethodOfTopLevelClass();
      }
   }
   
   void anMethodOfTopLevelClass() {
   }
}

ちなみに、単にthisと書くとMemberClassのインスタンスを指してしまう(当たり前ではあるが)。
この暗黙の参照があればこそ*1、TopLevelClassのインスタンスメソッド(非staticなメソッド)やインスタンスフィールドがMemberClassの中で利用できる。逆に言うと、TopLevelClassのインスタンスメソッドやインスタンスフィールドを使用する必要がなければ static を付けて単なるネストしたクラスにすればよい。
さて、MemberClassのインスタンスは(暗黙で)TopLevelClassのインスタンスを必ず参照していることを納得したとしよう。ということは、MemberClassのインスタンスを生成する時にTopLevelClassのインスタンスが必要なわけだ。
TopLevelClassのインスタンスメソッドの中で new MemberClass() の様にインスタンスを生成する場合は話が簡単だ。暗黙で this(=TopLevelClassのインスタンス)を渡しているだけの話。
TopLevelClassのインスタンスメソッドの外――「TopLevelClassの外」という意味以外に「TopLevelClassのクラスメソッドなど」も含まれることに注意――では、

TopLevelClass t = new TopLevelClass;
TopLevelClass.MemberClass m = t.new MemberClass();

という構文になる。t.new という形で、TopLevelClassのインスタンスに結びつけられる(結びつけられなければならない)ということが判る。


この事実の裏が、

(4)staticなメソッド内で、非staticなネストクラスのオブジェクトは生成できない

の理解を可能にする。
「非staticなネストクラスのオブジェクトは生成できない」は厳密には正しくない。
new MemberClass() という形での生成ができないだけである。staticなメソッド内では this という指示詞が使えないことを思い出して欲しい。new MemberClass() と書いた時に暗黙に渡している this が無いから、この形での生成ができないのだ。
(2)で先に述べてしまったが、

TopLevelClass t = new TopLevelClass;
TopLevelClass.MemberClass m = t.new MemberClass();

という形でなら生成できるので"厳密には正しくない"と言った。


(1)で残してきたことを説明しよう。
内部クラスがstaticな(かつ finalでない)メンバを持っても特に意味が無い。
TopLevelClass.thisという形で外側のクラスのメンバを参照できるし、外側のクラスのstaticメンバも――例え private が指定してあっても――使えるからである。それで十分であろう。
「内部クラスのstaticなメンバが外側のクラスインスタンス毎に用意される」という誤解を招くことを懸念して、内部クラスでのstaticなメンバを禁止したのではないだろうか?


(3)staticなネストクラスは、自分を含むクラスに付随し、外側のオブジェクトがなくとも使える

これも(2)の裏であろう。
内部クラスが外側のクラスのインスタンス無しには生成できないのと違い、staticを指定したクラスはその制約から免れられる。
ただそれだけの話。


(5)メソッド内で定義されたインナークラスからアクセスできるのは
*外側のメソッドのfinalな引数・変数
*メソッドを持つクラスのフィールド

これはちょっと難しい。いわゆる無名内部クラス。

class TopLevelClass {
   class MemberClass {
      void anMethidOfMemberClass() {
         int a = 100;
         final int b = 100;

         TopLevelClass t = new TopLevelClass() {
            public void inheritedMethod() {
               int m = a; // NG
               int n = b; // OK
            }
         }
      }
   }
}

という様なパターン。Other は interface や abstract class のことが多いだろう。
インスタンス t の inheritedMethod が呼ばれるのが、anMethidOfMemberClass() の実行が終わった後だということを想定すると、int m = a; が駄目だろうなぁ、とは思う程度で、これはちゃんと解説できない。


・このような仕組みは、実際の開発ではどのように使われているのか、

これはSDKのソースを参考にするのも1つの手段だと思う。

java.util.LinkedList

のlistIterator()メソッドあたりがいいのでは?

    public ListIterator listIterator(int index) {
        return new ListItr(index);
    }

    private class ListItr implements ListIterator {
        :
        :
    }

こんな感じ。
listIteratorメソッドが返すListIteratorの正体は、privateなインナークラスである。
privateなインナークラスということは、その実装は LinkedList の中に隠蔽できる。
それはとりもなおさず、LinkedList の内部データの隠蔽性を維持できる、ということでもある。


もしインナークラスが無いことを想像してみよう。listIteratorメソッドが返すインスタンスを LinkedList の外のクラスとして実装しなくてはならなくなる。そうすると、LikedList はそのクラスに対して内部データを何らかの形で公開しなければならない。それでは結局 LikedList の内部データが隠蔽できない=不正にいじられる可能性を生む。

一番きれい [hatena]

どのメーカーのどの機種が一番きれいに撮れるでしょうか?
http://www.hatena.ne.jp/1131061683

「きれい」を定義してください。
クライアントから「とにかくかっこよく」と依頼があったら、どう思うのかな? 「わかりました」って言って作れるのかな?

寄付金控除の対象に成る団体に義援金を という選択肢をもっと広めよう [etc]

「被災地に古着等を送るのは迷惑です」というのをもっと啓蒙する必要はありそう。「善意だから良い事なんだ。それに文句をつけるなんて酷い」という反応を起こさないように狡猾に


赤十字などの寄付金控除の対象に成る団体に義援金を送るのが最もバランスの良い支援の方法。
http://www.otsune.com/diary/2005/11/03/3.html#200511033

一票。
ただし、「狡猾に」かつ「短くまとめて」。
本文が長いとそれだけで読んでもらえない


[R30]: 寄付する前に立ち止まれ

はちょっと長すぎると思うので。


……人任せかい? と言われそうだな。

*1 というのは厳密には正しく無いはずだ。もっと複雑な仕掛けがあったはずで、それはVMの仕様書を読み解く必要があったと記憶している。のだけど、そこまで理解する必要は、javaプログラムを書く人には必要はないはずだ。