はてなキーワード: デコードとは
PCでの複数コアの主な使い方というのは、まるで違う用途のタスクをそれぞれのコアに割り振って、一番負荷のかかるメインのタスクを停止させないことでキャッシュメモリのフラッシュ回数を激減させることにより、システム全体のスループットを若干上げるためにあるのだと考えてた。
たとえばにAコアでメイングラフィック、Bコアで音声処理/ネットワークでOS(ディスクや入力I/O)みたいな。
セマフォだの同期処理だのまったく考えずにマルチコアの恩恵をそれなりに受けることができる手法って、ほかにないですよね。
ちょっと前に話題になったヘテロジニアスマルチコアなんて、モロ的にそういう発想ですよね。
動画デコードに特化したコアとか、アフィン変換に特化した不動少数SIMDコアとか、AESなど暗号専用のコアとか、それらをまとめる一般整数コアなどまとめて、今までより速いのを安く低消費電力で作って、車載ナビで地デジもネットもゲームもokにしちまおうぜみたいな。
最近のPCは、それとはまた違うアプローチで、CPUコア同様のGPUコアももうすこし自由に使えるような仕組みを増やして、性能稼ごうって方向みたいですが。
A Beautiful Site (http://abeautifulsite.net/)さんの
jquery.fileTreeを利用させてもらった。
以下、留意点...
パスを指定しないと、もとのhtmlがあるパス(ディレクトリ)にあるものと解釈する。
(/jqueryFileTree.php と指定すると、公開しているルートディレクトリにあるjqueryFileTree.phpを探しにいく)
http://...と指定して他のサーバへ問い合わせるのも可能な模様(だが、試していない)。
root:
d:/
d:/temp/
など
hemlentries -> htmlspecialchars は必須。
http://treatment-head.blogspot.com/2008/11/jquery-file-tree_21.html
ただし、UTF-8やEUC-JPでページを記述している場合は、さらに処理が必要。
windowsでは、mbstringの設定にかかわらず、引数SJIS渡し、戻り値SJIS返しの模様。
したがってUTF-8やEUC-JPでページを記述している場合は、
その点を考慮してconnectorsフォルダにあるjqueryFileTree.phpを書き換える必要がある。
$_POST['dir'] = urldecode($_POST['dir']);
という行があるが(スーパーグローバル変数はデコード済みで、さらにデコードするのは危険とphpマニュアルに記載されている)
どのみちUnicode文字列のURLデコードはこの関数では無理なようなので、phpマニュアルのUserNoteから拝借。
http://php.net/manual/en/function.urldecode.php
こちらにズバリが掲載されているか...と試してみたが、どうも動作がうまくいかなかった
http://ameblo.jp/pushurinko/entry-10287161493.html
他、ご参考
「ワタクシの友人が言っていましたよ」突然、裏声めいた声で須江岳史くんが始めた。須江岳史くんが、ワタクシという言葉を使うと、説明不能の寒気がした。男の人でも、大人になって仕事をするようになったら使うだろうし、むしろ使うべきだと理屈ではわかるのだけれど、須江岳史くんが使っているのを聞くと、端的に言って気持ち悪かった。「どの人も、ゲームの策定者になれてしまうらしいのです。東せつなさんのような、凡庸な人ですら。ワタクシは東せつなさんが作ったゲームに自分から巻き込まれていった人間ですから、友人の言うことはとてもよくわかります」私を見ずに、正面にある鏡に映る自分の顔だけを彼は見ていた。彼の細かく揺れる光彩が不気味で、私はそこから目が離せなかった。「タイムライン上で偶然に出くわした、それをデコードするための適切な文脈のわからない言葉にも、人は一喜一憂するわけです。馬鹿にもわかる言葉で言えば、人は、彼が馬鹿にしている人物から馬鹿にされても馬鹿みたいに傷つく」私は体重を後ろに下げて、すぐにでも立ち去ろうとした。けれど、須江岳史くんの言葉は途切れ目がなくて、精一杯がんばっても、そのタイミングを掴めなかった。「せいこうという語を、ワタクシはセックスの意味で発話しても、無垢な東せつなさんはサクセスの意味で受け取ることはままあるでしょう。それと全く同じように、ポルノ禁止と叫ぶ声を、ある者は表現の自由の侵害と解釈し、ある者はそれを、日本の治安の向上と読み解く。前者は表現の自由のために後者を叩き、後者は治安のために前者を罵る。言葉のやりとりをしても、それぞれの心が持つ辞書で各々が勝手に翻訳するため、意味のやりとりはできないわけでした。心の辞書で翻訳した際に、それが快として響くか不快として響くかの違いしかない、無意味な音声のやりとりなわけでした」須江岳史くんは揺れる瞳で鏡を見つめたまま、話をやめようとしない。「正しくデコードできないので、無意味だが、しかし、無価値ではない。意味は伝わらなくても、罵りは罵りとして、賞賛は賞賛として、それだけは掛け値なしに伝わるのでした。だからこそ人は、彼が馬鹿にしている人物から馬鹿にされても馬鹿みたいに傷つく。意味はなくても、感情という価値はある。感情のやりとりにより、不快な言葉を言った者には罰を与えそれをやめさせ、心地よい言葉を言う者には心地よい言葉をかけ、それを推奨させるのが、会話の本質なのです。歴史を振り返ってみれば、意味のやりとりができない者に対しては、ゲーム論的な賞罰のやりとりが唯一のコミュニケート手段になるのは、バベルの塔が崩れてからの通例なのでした。無意味ではあるが無価値ではない言葉により、どの人も、小さなゲームの策定者になれる。小さなゲームの策定者に振り回されるせいで、たとえどれだけ信じて祈っても、完璧な幸せなどゲットできない。だからこそワタクシは、ゲーム的かつ誤配的な言葉を聞かないように、完全に隔絶された言論の管理国家を私は作りたいわけです。東せつなさんなんかに、会わないように」
「メイドいんジャパン」からぶっこ抜いた構造(http://anond.hatelabo.jp/20100328131122#tb)に、この前映画館で見た、『誰かが私にキスをした』から連想したものをぶち込んだらこうなった。男一人で恋愛映画を見に行くのは正直キツかった。不自然なところをこれから直していっている途中なんだけど、無理がでてきた。出てきた無理を直していく作業に苦労している。「どんな言葉をぶちこむのが適当か」を判断するもの(思考ツール?)を用意しないまま思いつくままに言葉をぶち込んだのが敗因か。ぶち込まれる空欄(=以前に増田に貼り付けたもの(http://anond.hatelabo.jp/20100328131122#tb)のアルファベット)間の関連性をもっと意識すべきだった。というか、それさえ意識すれば何とかなるんじゃないだろうか。というか、それを意識して、いま思いついているものをぶち込みなおしたら、すんなり物語の形になるのではないだろうか? アルファベット間の関連性について今週の土曜日までに考えてみる。ぶちこみ直しの作業は土曜日に始めて土曜日に終わらせる。
・
神酒薫(ミキ カオリ)が視点浮動者として存在する。高校二年生の女子。視点浮動者は、自分がどの視点から物事を見るか、どの記憶から物事をデコードするかを決められないでいる。
視点を決定すると、通常ならば、その視点向けのコマーシャル(=企業が配給する良質のドラマ)を見ることができるのだが、県から支給されたモバイルを使っている神酒薫は、コマーシャルを見ることができない。だから、視点を決定するインセンティブがない。
モバイルによる拡張現実は、学校での授業に必要になる。モバイルから発せられる電界が、それを身につけている者のコンタクトレンズや眼鏡に像を映す。神酒薫の父親は特別に教育に厳しい人なので、薫に個人向けのモバイルを買ってくれない。
神酒薫は他人からの視点を気にせずに生きることを求める。タイムラインに、他人が発言した自分の振るまいが蓄積されるので、自分の振るまいが正しいかどうかがひどく気になる。視点を決定している人たちは、自分の視界内の発言しか見る余裕がないので、他人の視点というものを気にしない。というか、視点を決定すると、カーソルの初期位置から一番近いのが返信欄になり、それから遠く離れたところに検索欄が移動するので、他人を検索すると言うことが少なくなる
神酒には、勉強ばかりしているというイメージが、他者のタイムラインの中では固定化されている。高校一年の学校祭の準備のとき、神酒はキキに励まされながら土砂降りの雨の中を自転車で木材を運んだ。それをきっかけに、ポジティブでアクティブな自分に変われそうな気がした。しかし、学校に戻ると、
「このときの神酒さんとイメージが変わった」
と、クラスメートに過去のタイムラインを見せられる。クラスメートは肯定的な意味合いでそれを言ったのだが、神酒はとても恥ずかしくなる。もう、自分のイメージからはずれた行動はしないようにしようと決めた。
視点を決定しなければならないという切迫感が存在する。
神酒薫は視点を決定しなければならないという切迫感を取り除くことを求める。
電子アシスタントが存在する。電子アシスタントはキキを含む。キキは、白いウォンバット。常に神酒の近くを付いてまわり、神酒を常に必要としてくれる。
電子アシスタントは、その所有者が設定したように、その所有者を誉めたり注意したりしてくれる。モバイルに勝手にソフトをインストールすることを父は怒るのではないかと神酒は思ったが、キキの機能を見て、彼はキキを気に入る。
キキを持っていることで、神酒薫は視点浮動者であることを隠す。電子デバイスに興味があるんだというフリができる。
津島修一は、神酒と同じ中学校・同じクラスだった男子。神酒薫にキキをくれたのは、津島修一だった。
津島は、男子からはハナコと呼ばれていた。というか、誰かに対して陰口で使っているハナコという呼び名を、津島に当てはめると、無矛盾なのだった。だから、津島=ハナコは憶測。
ハナコの良いところは顔だけ。ハナコは男なのに生理がある(精神が安定していない)。ハナコは……。
ハナコがハナコと呼ばれるようになったのは、ハナコが男子トイレの個室で泣きながら、ボールペンの先端を彼の腕にぶつぶつと刺していたから。
卒業式に、津島修一に呼び出される。呼び出されたその瞬間まで、会話をしたことは一度としてなかった。卒業式の日に、神酒薫を好きだと言って、その贈り物だとしてキキをくれた。津島修一が勝手に、神酒薫のモバイルにインストールしてしまったので、神酒薫はキキをアンインストールする方法を知らない。それに、日本語を喋る存在をアンインストールすることは、殺しと同じことに思えてしまい、できない。
「ヒメ! ヒメ!」と、キキは神酒の足にすり寄る。
「うざかったら、ワンス・ア・ウィークって言えば、彼はしばらく動きを止める。週に一回くらい、電子アシスタントですらうざくなるときがあるでしょう?」と、津島は言う。「今日の夜八時に、キキが指定する場所に来て」とも。
そのとき神酒は、「うん、行く」と答えてしまう。
神酒は、クラスの中核をなす声の大きい集団からはジミーズと呼ばれていた。仕返しに、神酒は心の中で、声の大きい集団を、彼らの化粧のけばけばしさを由来にケバブと呼んでいた。ジミーズはジミーズなりに地味な人同士で集まっていたので、ケバブが思っているように友達がいないわけではない。卒業式の帰り、仲の良かった友達とカラオケに行く。神酒の視界の中には、まだその存在になれられないキキがいた。キキは、友達に見えないようにしてあった。
カラオケからの帰り道、道の関係で一人になった。信号待ちをしていると、ラブホテルが横断歩道を隔てた向かいに建っている。
ラブホテルの裏道から、高校生のカップルが、自転車の二人乗りをしてでてくる。
ラブホテルの電光掲示が目に入る。
『まだまだ寒い夜 あつあつのラーメンを! プレミア価格5○○円(会員様)』
「ラーメンって、おいしい?」キキが訊いてくる。
「ワンス・ア・ウィーク」キキを黙らせる。
給食で食べたソフト麺のベチャベチャした味が、舌の上で思い出された。その味をかき消すために、津島からもらった連絡先のメモを、小さく、小さく畳んで、制服のスカートのポケットに入れた。ポケットに紙を入れたまま、洗濯機にスカートを入れ、スイッチを押した。
キキがしゃべり始めるたびに、「ワンス・ア・ウィーク」をした。そして約束の八時が過ぎ去るのを待った。
津島のタイムラインの卒業式前後のものを見ないようにしようと決めた。見ないために、神酒は視点浮動者になることを選んだのだ。
自分に自信を持てていない神酒薫は、彼からの告白を何かの悪いいたずらだと思い、津島修一とは連絡を取っていない。しかし、津島修一と神酒薫は同じ高校に通っているのだ。ときどき廊下ですれ違うと、気まずい。
ほかの人は、タイムライン上に友人との約束を記憶させる。神酒はキキに約束を覚えさせる。どちらも、モバイルを使って約束を管理しているので、他者は神酒がすでに視点を決定しているのだと勘違いしている。
神酒薫は、他人のタイムラインに自分がどう記録されているかを気にすることを取り除きたい。
電子アシスタントは他人のTL上の自分を気にすることを取り除く手段になるように見受けられる。神酒はキキに、神酒が他人のTLを気にしたらキキが神酒を注意するようにコマンドする。
神酒薫が他人のTL上の自分を気にすることを取り除くことは失敗する。キキの注意が煩わしくて、神酒はイヤフォンと眼鏡を外してしまう。ワンス・ワ・ウィークしなかったのは、キキに自分を注意するようにコマンドしたのに、注意を理由にキキを黙らせるのはかわいそうだと思ったから。
友人との会話:「モバイルを忘れたら、記憶が不確かになって約束の1日前に待ち合わせの場所にいることになって、困った」
イヤフォンも眼鏡もつけずに図書室に行く。
そこには、一人の女性がいる。上靴のいろは赤なので、一つ学年が上の三年生の先輩。神酒が一年生のころ、彼女は貸し出しカウンターの内側にいたことを神酒は覚えている。彼女のノートには、たくさんの三角形が書かれている。また、たくさんの三角形が書かれているページの反対のページには、三角関数表がセロハンテープで貼り付けられている。
図書室の端に行くと、先輩が突然、「私のアシスタントを動かさないで」と言う。神酒はあわてて、拡張現実を身につける。
キキがしきりに神酒の足下で、「ヒメあぶない! ヒメあぶない!」と言っていた。先輩のアシスタントは、天使の羽。神酒がぶつかった勢いで、空中を漂っていた。
五時間目の授業から、モバイルをオープンにしたままだったことを思い出す。(授業中はオーソリティが先生に移るため、電子アシスタントはオフになる。)
「痛い男が、彼女を呼ぶみたい」と先輩は言う。「彼氏からプレゼントされたの?」
神酒は、終わった、と思った。誰か男にキキをプレゼントされたとタイムライン上に記憶されたら、全てが終わってしまう、と神酒は思う。
神酒は先輩のタイムラインを展開しようとする。彼女が、伊庭瑠璃という名前の三年生であることが表示される。偶数組だから、文系クラスだとわかる。ローディングを示す輪がくるくるまわり続けるだけで、タイムラインが表示されない。
「私の知ってる男も、彼女をヒメって呼んでいて、痛々しい」と伊庭は言う。
「彼氏からもらったわけじゃなく!」と神酒。
「ヒメ! ヒメ!」とキキ。
「キキ! ワンス・ア・ウィーク(黙れ)!」
キキはぴたっと止まる。
「え」
「だって、ワンス・ア・ウィークって、シュウイチってことでしょ?」
「そうだったのか!」
キキをもらってから二年間、ずっと気づかなかった!
納得したことで、もう隠しようがないことに気づき、神酒は硬直する。
「いや、でも、気のせいかもしれない。津島修一なんて人が私の知り合いにいたかは、タイムラインを確認してみないとわからないな……」と、苦しいとりつくろいをする。
伊庭は、ふっと笑いを漏らす。
「そういえば、私の知り合いに津島なんていないかもしれない。私はタイムラインを持ってないから、確かめようがないや。名前なんて忘れちゃった」
「伊庭先輩は、視点浮動者なんですか?」
伊庭はうなずく。「私とあなたの間には、一年の学年の違いが横たわっている。だから、私は視点浮動者というよりも、視点を持たないものと言った方が正しいかもしれない。県が私に貸し出したモバイルは、タイムラインを見る機能を持たない」
「伊庭先輩の親も、個人用のモバイルを持つことに反対なんですか?」
「ううん。中学受験のために塾に通わされたときに、安全のためのモバイルは持たされた。私は親に反発して、モバイルを川に投げ捨て、塾にも行かなかった。それ以来、親は私にモバイルを与えようとしない。そして中学受験をしなかったから、私はいま、公立高校であるこの学校にいる」
図書館で話していても大丈夫か、すごく気になる。遠くで、溶けた雪がどさっと落ちる音が聞こえたから。それに、伊庭のアシスタントがあまりに寡黙だから。しかし、三月の土曜登校日の放課後なので、二人のほかに誰もいない。
「私は前の図書局局長だから、私がルールみたいなものだ。大丈夫」と伊庭は言う。「私と貴方の関係は、少し長いものになると思う。私が名前を忘れた誰かのせいで。貴方の呼び方を決めていい?」
先輩は手を振る。視界上に、私の情報を展開したのだと思う。
「神酒さんって呼ぶのは、距離が遠くて好かないな」
「呼び捨てで、いいですよ」
「呼び捨てと、さん付けの間をとって、ミキクンっていうのはどうかな」言った伊庭先輩が、ひとりで笑う。「変だな」
「慣れれば、慣れますよ」
伊庭先輩は、ミキクン、と十回繰り返した。「やっぱり、変だよ」自分が言い出したのに、くすくすと笑っていた。
「土曜登校日の放課後に図書館でなにをしてたんですか?」と神酒。
「私の彼氏ーー名前は忘れちゃったーーは、一つ下の学年にいるんだけどーーつまりミキクンとおなじ学年なんだけどーーその、名前を忘れちゃった彼氏は、精神的に不安定なところがある。だから図書館にいる」
「彼氏さんとの関係に、疲れてしまったの?」と神酒。
「ううん。疲れていないから、ここにいる。臨戦待機中」
「それと、その三角形とどういう関係が?」
「ただ待っているだけだと、頭が暇になる。かといって、彼から連絡があったときに何かに没頭していると、すぐには動けない。だから、私と私のアシスタントと彼のアシスタントを三角形の頂点に見立てて、彼のアシスタントと私との間の距離を求めていた。彼のアシスタントは、彼の近くにいるから。彼を意識しながら、頭に作業をさせることができるから。そして彼が「死にたい」って言ったら、すぐにでも私は駆け出す。死にたい気分を、逸らしに行く」
「死にたい気分って、そんなに簡単にそらせられるものなんですか」
「なんたって私は、彼より一年年上のお姉さんだから」
「どうやって?」
「その」伊庭は、一瞬迷う。「一緒にラーメン食べに行こう、とか」
「へ!?」
「え……」
「……」
「……」
給食のソフト麺のべちゃべちゃした味を神酒は舌の上で思い出す。二人の間にすごく微妙な空気が流れる。訊いたことを、神酒はすごく後悔する。
伊庭先輩は、タイムラインを持たないので、神酒は、自分がタイムライン上でどういうキャラクターであるかを気にせずに、勇気を持った行動をできる。津島と伊庭先輩を引き離そうと決める。伊庭先輩のために。
「伊庭先輩が津島くんを支えようとすることは、よいことだとは思わない。きっと、彼の負の力に引きずられてしまう。彼の行動をタイムラインに記憶してる友達を、何人か紹介するよ。それを見たら、伊庭先輩はきっと津島くんから離れようと決心してくれる」
「私はタイムラインを持たないから、複数の他者の発言を根拠に、いますでに読みとっている彼からの愛の意味を変更することはできない。それに、彼の愛から読みとった意味は、私の内部にある。タイムライン上の外部化された記憶のように、消しされるものではない。そして私は、私がもう津島を助けられないという言葉を私のタイムライン上に蓄積することができないので、津島を助け続けなければならない」
デスクトップから書き込んだタイムラインはないかと、伊庭瑠璃の名前で検索する。伊庭瑠璃から見える津島を知りたかった。しかし、伊庭瑠璃はデスクトップ上のタイムラインも所有していない。
検索ワード「図書局局長」でサーチをかける。彼女についての噂を書いているタイムラインが、いくつかある。図書室だより、生徒会だより、男性からの、そして女性からの、あこがれのまなざし。「どうしてハナコが、図書局局長と付き合っているんだ」という、いらだちの声。図書局局長は、自分の身を削って他者に尽くす、素晴らしい人間だということになっている。「八方美人だ」と言って、彼女を攻撃する人間にすらも。
視点浮動者である神酒薫は、津島修一のタイムラインを見ることができる。見ないと決めたものを見ていることに、罪悪感がある。しかし、彼女が見ないと決めたものは卒業式前後の記憶だったので、決めたことをやぶっていることにはならないのだ(と、神酒は自分をだます)。
津島修一は精神が不安定なので、膨大な数の書き込みがタイムライン上に堆積している。津島修一は過度に記憶を外部化している。それを読む限りでは、津島修一は伊庭瑠璃からの自立を求めているらしい。伊庭に依存してばかりいる自分の弱々しさを嫌っているらしい。
津島はタイムライン上で、他人の反応を待ち続ける。しかし、他人がこない。反応がくるまで、じっとうずくまる。しかし、どれだけ待ってもこない。死にたい気分になる。その気持ちを消したいがために、他人の反応を待ち続ける……。他人の気持ちを引くために、自虐を繰り返す。そして、自傷をする。アップロードされた自傷画像には、ハナコがそうしていたのと同じ、ボールペンを腕に突き刺したものもあった。傷が治癒していく経時変化もアップロードされている。「そういうことをやめろ」という声が、彼には心地よい。しかし、心地よいのだが、しかられたダメージはしっかりと受けている。スパイラルは、次第に破滅的な方向へと落ちていく……。
津島の頭の中では、津島のタイムライン上に書き込まれた、伊庭瑠璃からの「愛してる」がリフレインしている。だから、伊庭瑠璃から離れることができずにいる。「愛してるから、なんでもできる」と伊庭瑠璃が過去において言ったことを口実に、津島は伊庭に依存している。いや、その言葉を自分に言い聞かせることで、伊庭が自分をいやしてくれるという現実から、抜け出さなくてもいいのだと自分をだましている……。
伊庭の都合の良さは、まるで電子アシスタントみたいだ。そして電子アシスタント的な伊庭に依存している津島の生き方は、独りよがりで弱々しくて、気持ち悪い、と神酒は思う。
「伊庭が記憶を外部化していないことを理由に、津島の記憶の外部化をやめさせられるのでは。ペアルック的な感覚で」と神酒は思う。
津島の神酒との思い出が存在する。神酒は津島のタイムラインを遡行していると、自分のことについては外部化されていないことに気づく。
廊下の端。普段なら、カップルがそこにいるような場所。そこで神酒と伊庭は待ち合わせる。
伊庭は、天使の羽を背中につけて待っている。それは、伊庭の茶目っ気でもある。伊庭のねらい通り、それをしている伊庭を神酒はかわいいと思う。伊庭のアシスタントが天使ではなく天使の羽なのは、伊庭は天使ではなく天使になることを求めているから。
人が少ない場所。伊庭はタイムラインを、モバイルではなくデスクトップ上でしか見られない。伊庭と神酒の二人で津島について話をするため、電界通信をオープンにして、伊庭と神酒は手をつなぐ。二人の拡張現実が共有される。
「伊庭の都合の良さは、まるで電子アシスタントみたいだ。そして電子アシスタント的な伊庭に依存している津島の生き方は、独りよがりで弱々しくて、気持ち悪い」と神酒は言う。伊庭は表情変えずに、「そうね」と言った。
「伊庭が記憶を外部化していないことは津島修一が津島の記憶の外部化を取り除く手段に、きっとなるよ」と、神酒は伊庭に言う。「だって、たとえば、私に告白したことを津島くんはタイムラインに載せていない。全ての記憶をタイムラインにゆだねているわけではない」
津島が、二人のいる廊下の端に現れる。三角測量で、伊庭の位置を知っていたのだ。文系の伊庭が三角測量で津島の居場所を求めていたのは津島の影響をうけていたからだったのだ。
津島が現れたとき、伊庭はびくりとして、手を引く。
「大丈夫だよ」
神酒は伊庭の手を押さえる。
知らない、大人の女性の声が聞こえる。
「他者のために尽くす貴方は素晴らしいわ……」
声のするほうを見ると、伊庭のアシスタントがいた。
伊庭は、彼女の電子アシスタントの声を聞かせたくなかった。だから、彼女の電界をクローズドにしたかった。しかし、神酒が手を押さえたために、それができなかったのだ。
津島の三角測量は、伊庭のとは比べものにならないほど優れている。伊庭が緊張のためにかすかに肩を膨らませると、津島の三角測量の、小数点以下の数字の変動としてインディケートされる。
「君たちは、僕について語っているのだろう?」と津島。「君たちは、悪である僕について語る。そうして、善であることを偽装したいんだ。そうだろう? 二人で語るだけで、実際には善の振る舞いをしないにも関わらず。僕は来てやったよ。善をなし得ない、君たちふたりの為に。どうだ、潔いだろう」
(ここから)
津島が、タイムラインに載せていない記憶を持っていることは、津島がタイムラインに依存していることを取り除き得ない。高校時代における津島の精神の脆弱さのきっかけは、ほかならぬ、神酒による津島の拒絶だったのだ。津島がタイムラインに依存しているのは、タイムラインに載せることのできない記憶が存在しているからこそなのだった。神酒が津島を振ったトラウマは伊庭瑠璃が津島修一からの自由を得ることを阻む。
時間の一回性(=神酒が津島との約束をやぶったこと)は、神酒薫が神酒が津島を振ったトラウマを取り除くことを阻む。
神酒は、津島を振ったことを謝ろうとする。
津島は、神酒がどれだけひどいことをしたかを伊庭に語る。タイムラインを持たない伊庭は、津島視点の神酒の行為を、疑わずに信じてしまう。
「貴方は、津島にそんなひどいことをしたの? 見損なう」と、伊庭は神酒に言う。
「まって。津島くんは、私を好きだったんじゃなかったの?」と神酒は言う。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言は神酒薫が神酒が津島を振ったトラウマを取り除くことを助ける。
神酒薫は時間の一回性を取り除くことを求める。
「愛してる」ではどうにもならないことが存在する。
「愛してる」ではどうにもならないことは神酒薫が時間の一回性を取り除くことの手段となる。
「おまえの視点は確定的じゃなかったのか」と、津島は神酒に対して言う。
天使の翼が「愛してる」ではどうにもならないことを取り除くことを求める。
「おまえの視点は確定的じゃなかったのか」は天使の翼が「愛してる」ではどうにもならないことを取り除く手段となる
天使の翼が「愛してる」ではどうにもならないことを取り除くことは成功する。
「私のアシスタントの声を聞かれて恥ずかしい」と伊庭は言う。
「アシスタントに誉めてもらうなんて、みんなやってること。恥ずかしくないよ」と神酒。
「恥ずかしいよ! 恥ずかしくて、弱々しくて、気持ち悪い! アシスタントに頼っていないと自分を保てないなんて、一人の独立した人間として恥ずかしい! しかも、そんな恥ずかしい生き方は、私のアシスタントが求める生き方じゃない!」
電子アシスタントは、神酒薫が時間の一回性を取り除く手段になる。
電子アシスタントに含まれるキキは、天使の翼が電子アシスタントを取り除く手段になる。
伊庭瑠璃は、「神酒薫が他人からの視点を気にせずに生きることを得たこと」を求める。(どこかで神酒が、他人からの視点をとても気にして生きている描写が必要になる。そしてそれを伊庭が見たという描写も。)
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言は、伊庭瑠璃が「神酒薫が他人からの視点を気にせずに生きることを得たこと」を得ることを阻む。
「メイドいんジャパン」からぶっこ抜いた構造に、この前映画館で見た、「誰かが私にキスをした」から連想したものをぶち込んだらこうなった。不自然なところをこれから直していっている途中なんだけど、無理がでてきた。
神酒薫(ミキ カオリ)が視点浮動者として存在する。高校二年生の女子。視点浮動者は、自分がどの視点から物事を見るか、どの記憶から物事をデコードするかを決められないでいる。
視点を決定すると、通常ならば、その視点向けのコマーシャル(=企業が配給する良質のドラマ)を見ることができるのだが、県から支給されたモバイルを使っている神酒薫は、コマーシャルを見ることができない。だから、視点を決定するインセンティブがない。
モバイルによる拡張現実は、学校での授業に必要になる。モバイルから発せられる電界が、それを身につけている者のコンタクトレンズや眼鏡に像を映す。神酒薫の父親は特別に教育に厳しい人なので、薫に個人向けのモバイルを買ってくれない。
神酒薫は他人からの視点を気にせずに生きることを求める。タイムラインに、他人が発言した自分の振るまいが蓄積されるので、自分の振るまいが正しいかどうかがひどく気になる。視点を決定している人たちは、自分の視界内の発言しか見る余裕がないので、他人の視点というものを気にしない。というか、視点を決定すると、カーソルの初期位置から一番近いのが返信欄になり、それから遠く離れたところに検索欄が移動するので、他人を検索すると言うことが少なくなる
神酒には、勉強ばかりしているというイメージが、他者のタイムラインの中では固定化されている。高校一年の学校祭の準備のとき、神酒はキキに励まされながら土砂降りの雨の中を自転車で木材を運んだ。それをきっかけに、ポジティブでアクティブな自分に変われそうな気がした。しかし、学校に戻ると、
「このときの神酒さんとイメージが変わった」
と、クラスメートに過去のタイムラインを見せられる。クラスメートは肯定的な意味合いでそれを言ったのだが、神酒はとても恥ずかしくなる。もう、自分のイメージからはずれた行動はしないようにしようと決めた。
視点を決定しなければならないという切迫感が存在する。
神酒薫は視点を決定しなければならないという切迫感を取り除くことを求める。
電子アシスタントが存在する。電子アシスタントはキキを含む。キキは、白いウォンバット。常に神酒の近くを付いてまわり、神酒を常に必要としてくれる。
電子アシスタントは、その所有者が設定したように、その所有者を誉めたり注意したりしてくれる。モバイルに勝手にソフトをインストールすることを父は怒るのではないかと神酒は思ったが、キキの機能を見て、彼はキキを気に入る。
キキを持っていることで、神酒薫は視点浮動者であることを隠す。電子デバイスに興味があるんだというフリができる。
津島修一は、神酒と同じ中学校・同じクラスだった男子。神酒薫にキキをくれたのは、津島修一だった。
津島は、男子からはハナコと呼ばれていた。というか、誰かに対して陰口で使っているハナコという呼び名を、津島に当てはめると、無矛盾なのだった。だから、津島=ハナコは憶測。
ハナコの良いところは顔だけ。ハナコは男なのに生理がある(精神が安定していない)。ハナコは……。
ハナコがハナコと呼ばれるようになったのは、ハナコが男子トイレの個室で泣きながら、ボールペンの先端を彼の腕にぶつぶつと刺していたから。
卒業式に、津島修一に呼び出される。呼び出されたその瞬間まで、会話をしたことは一度としてなかった。卒業式の日に、神酒薫を好きだと言って、その贈り物だとしてキキをくれた。津島修一が勝手に、神酒薫のモバイルにインストールしてしまったので、神酒薫はキキをアンインストールする方法を知らない。それに、日本語を喋る存在をアンインストールすることは、殺しと同じことに思えてしまい、できない。
「ヒメ! ヒメ!」と、キキは神酒の足にすり寄る。
「うざかったら、ワンス・ア・ウィークって言えば、彼はしばらく動きを止める。週に一回くらい、電子アシスタントですらうざくなるときがあるでしょう?」と、津島は言う。
神酒は、クラスの中核をなす声の大きい集団からはジミーズと呼ばれていた。仕返しに、神酒は心の中で、声の大きい集団を、彼らの化粧のけばけばしさを由来にケバブと呼んでいた。ジミーズはジミーズなりに地味な人同士で集まっていたので、ケバブが思っているように友達がいないわけではない。卒業式の帰り、仲の良かった友達とカラオケに行く。神酒の視界の中には、まだその存在になれられないキキがいた。キキは、友達に見えないようにしてあった。
カラオケからの帰り道、道の関係で一人になった。信号待ちをしていると、ラブホテルが横断歩道を隔てた向かいに建っている。
ラブホテルの裏道から、高校生のカップルが、自転車の二人乗りをしてでてくる。
ラブホテルの電光掲示が目に入る。
『まだまだ寒い夜 あつあつのラーメンを! プレミア価格5○○円(会員様)』
「ラーメンって、おいしい?」キキが訊いてくる。
「ワンス・ア・ウィーク」キキを黙らせる。
給食で食べたソフト麺のベチャベチャした味が、舌の上で思い出された。その味をかき消すために、津島からもらった連絡先のメモを、小さく、小さく畳んで、制服のスカートのポケットに入れた。ポケットに紙を入れたまま、洗濯機にスカートを入れ、スイッチを押した。
津島のタイムラインの卒業式前後のものを見ないようにしようと決めた。見ないために、神酒は視点浮動者になることを選んだのだ。
自分に自信を持てていない神酒薫は、彼からの告白を何かの悪いいたずらだと思い、津島修一とは連絡を取っていない。しかし、津島修一と神酒薫は同じ高校に通っているのだ。ときどき廊下ですれ違うと、気まずい。
ほかの人は、タイムライン上に友人との約束を記憶させる。神酒はキキに約束を覚えさせる。どちらも、モバイルを使って約束を管理しているので、他者は神酒がすでに視点を決定しているのだと勘違いしている。
神酒薫は、他人のタイムラインに自分がどう記録されているかを気にすることを取り除きたい。
電子アシスタントは他人のTL上の自分を気にすることを取り除く手段になるように見受けられる。神酒はキキに、神酒が他人のTLを気にしたらキキが神酒を注意するようにコマンドする。
神酒薫が他人のTL上の自分を気にすることを取り除くことは失敗する。キキの注意が煩わしくて、神酒はイヤフォンと眼鏡を外してしまう。ワンス・ワ・ウィークしなかったのは、キキに自分を注意するようにコマンドしたのに、注意を理由にキキを黙らせるのはかわいそうだと思ったから。
友人との会話:「モバイルを忘れたら、記憶が不確かになって約束の1日前に待ち合わせの場所にいることになって、困った」
イヤフォンも眼鏡もつけずに図書室に行く。
そこには、一人の女性がいる。上靴のいろは赤なので、一つ学年が上の三年生の先輩。神酒が一年生のころ、彼女は貸し出しカウンターの内側にいたことを神酒は覚えている。彼女のノートには、たくさんの三角形が書かれている。また、たくさんの三角形が書かれているページの反対のページには、三角関数表がセロハンテープで貼り付けられている。
図書室の端に行くと、先輩が突然、「私のアシスタントを動かさないで」と言う。神酒はあわてて、拡張現実を身につける。
キキがしきりに神酒の足下で、「ヒメあぶない! ヒメあぶない!」と言っていた。先輩のアシスタントは、天使の羽。神酒がぶつかった勢いで、空中を漂っていた。
五時間目の授業から、モバイルをオープンにしたままだったことを思い出す。(授業中はオーソリティが先生に移るため、電子アシスタントはオフになる。)
「痛い男が、彼女を呼ぶみたい」と先輩は言う。「彼氏からプレゼントされたの?」
神酒は、終わった、と思った。誰か男にキキをプレゼントされたとタイムライン上に記憶されたら、全てが終わってしまう、と神酒は思う。
神酒は先輩のタイムラインを展開しようとする。彼女が、伊庭瑠璃という名前の三年生であることが表示される。偶数組だから、文系クラスだとわかる。ローディングを示す輪がくるくるまわり続けるだけで、タイムラインが表示されない。
「私の知ってる男も、彼女をヒメって呼んでいて、痛々しい」と伊庭は言う。
「彼氏からもらったわけじゃなく!」と神酒。
「ヒメ! ヒメ!」とキキ。
「キキ! ワンス・ア・ウィーク(黙れ)!」
キキはぴたっと止まる。
「え」
「だって、ワンス・ア・ウィークって、シュウイチってことでしょ?」
「そうだったのか!」
キキをもらってから二年間、ずっと気づかなかった!
納得したことで、もう隠しようがないことに気づき、神酒は硬直する。
「いや、でも、気のせいかもしれない。津島修一なんて人が私の知り合いにいたかは、タイムラインを確認してみないとわからないな……」と、苦しいとりつくろいをする。
伊庭は、ふっと笑いを漏らす。
「そういえば、私の知り合いに津島なんていないかもしれない。私はタイムラインを持ってないから、確かめようがないや。名前なんて忘れちゃった」
「伊庭先輩は、視点浮動者なんですか?」
伊庭はうなずく。「私とあなたの間には、一年の学年の違いが横たわっている。だから、私は視点浮動者というよりも、視点を持たないものと言った方が正しいかもしれない。県が私に貸し出したモバイルは、タイムラインを見る機能を持たない」
「伊庭先輩の親も、個人用のモバイルを持つことに反対なんですか?」
「ううん。中学受験のために塾に通わされたときに、安全のためのモバイルは持たされた。私は親に反発して、モバイルを川に投げ捨て、塾にも行かなかった。それ以来、親は私にモバイルを与えようとしない。そして中学受験をしなかったから、私はいま、公立高校であるこの学校にいる」
図書館で話していても大丈夫か、すごく気になる。しかし、三月の土曜登校日の放課後なので、二人のほかに誰もいない。
「私は前の図書局局長だから、私がルールみたいなものだ。大丈夫」と伊庭は言う。「私と貴方の関係は、少し長いものになると思う。私が名前を忘れた誰かのせいで。貴方の呼び方を決めていい?」
先輩は手を振る。視界上に、私の情報を展開したのだと思う。
「神酒さんって呼ぶのは、距離が遠くて好かないな」
「呼び捨てで、いいですよ」
「呼び捨てと、さん付けの間をとって、ミキクンっていうのはどうかな」言った伊庭先輩が、ひとりで笑う。「変だな」
「慣れれば、慣れますよ」
伊庭先輩は、ミキクン、と十回繰り返した。「やっぱり、変だよ」自分が言い出したのに、くすくすと笑っていた。
「土曜登校日の放課後に図書館でなにをしてたんですか?」と神酒。
「私の彼氏ーー名前は忘れちゃったーーは、一つ下の学年にいるんだけどーーつまりミキクンとおなじ学年なんだけどーーその、名前を忘れちゃった彼氏は、精神的に不安定なところがある。だから図書館にいる」
「彼氏さんとの関係に、疲れてしまったの?」と神酒。
「ううん。疲れていないから、ここにいる。臨戦待機中」
「それと、その三角形とどういう関係が?」
「ただ待っているだけだと、頭が暇になる。かといって、彼から連絡があったときに何かに没頭していると、すぐには動けない。だから、私と私のアシスタントと彼のアシスタントを三角形の頂点に見立てて、彼のアシスタントと私との間の距離を求めていた。彼のアシスタントは、彼の近くにいるから。彼を意識しながら、頭に作業をさせることができるから。そして彼が「死にたい」って言ったら、すぐにでも私は駆け出す。死にたい気分を、逸らしに行く」
「死にたい気分って、そんなに簡単にそらせられるものなんですか」
「なんたって私は、彼より一年年上のお姉さんだから」
「どうやって?」
「その」伊庭は、一瞬迷う。「一緒にラーメン食べに行こう、とか」
「へ!?」
「え……」
「……」
「……」
給食のソフト麺のべちゃべちゃした味を神酒は舌の上で思い出す。二人の間にすごく微妙な空気が流れる。訊いたことを、神酒はすごく後悔する。
伊庭先輩は、タイムラインを持たないので、神酒は、自分がタイムライン上でどういうキャラクターであるかを気にせずに、勇気を持った行動をできる。津島と伊庭先輩を引き離そうと決める。伊庭先輩のために。
「伊庭先輩が津島くんを支えようとすることは、よいことだとは思わない。きっと、彼の負の力に引きずられてしまう。彼の行動をタイムラインに記憶してる友達を、何人か紹介するよ。それを見たら、伊庭先輩はきっと津島くんから離れようと決心してくれる」
「私はタイムラインを持たないから、複数の他者の発言を根拠に、いますでに読みとっている彼からの愛の意味を変更することはできない。それに、彼の愛から読みとった意味は、私の内部にある。タイムライン上の外部化された記憶のように、消しされるものではない。そして私は、私がもう津島を助けられないという言葉を私のタイムライン上に蓄積することができないので、津島を助け続けなければならない」
視点浮動者である神酒薫は、津島修一のタイムラインを見ることができる。見ないと決めたものを見ていることに、罪悪感がある。しかし、彼女が見ないと決めたものは卒業式前後の記憶だったので、決めたことをやぶっていることにはならないのだ(と、神酒は自分をだます)。
津島修一は精神が不安定なので、膨大な数の書き込みがタイムライン上に堆積している。津島修一は過度に記憶を外部化している。それを読む限りでは、津島修一は伊庭瑠璃からの自立を求めているらしい。伊庭に依存してばかりいる自分の弱々しさを嫌っているらしい。
津島の頭の中では、津島のタイムライン上に書き込まれた、伊庭瑠璃からの「愛してる」がリフレインしている。だから、伊庭瑠璃から離れることができずにいる。「愛してるから、なんでもできる」と伊庭瑠璃が過去において言ったことを口実に、津島は伊庭に依存している。
「伊庭が記憶を外部化していないことを理由に、津島の記憶の外部化をやめさせられるのでは。ペアルック的な感覚で」と神酒は思う。
津島の神酒との思い出が存在する。神酒は津島のタイムラインを遡行していると、自分のことについては外部化されていないことに気づく。
廊下の端。普段なら、カップルがそこにいるような場所。人が少ない場所。伊庭はタイムラインを、モバイルではなくデスクトップ上でしか見られない。伊庭と神酒の二人で津島について話をするため、電界通信をオープンにして、伊庭と神酒は手をつなぐ。二人の拡張現実が共有される。
「伊庭が記憶を外部化していないことは津島修一が津島の記憶の外部化を取り除く手段に、きっとなるよ」と、神酒は伊庭に言う。「だって、たとえば、私に告白したことを津島くんはタイムラインに載せていない。全ての記憶をタイムラインにゆだねているわけではない」
津島の神酒との思い出が存在することがきっかけとなり、津島が忘れられない「弱点」が存在する。
津島が忘れられない「弱点」が存在することがきっかけとなり、読解の文脈を変えられないことが存在する。
津島が、二人のいる廊下の端に現れる。三角測量で、伊庭の位置を知っていたのだ。文系の伊庭が三角測量で津島の居場所を求めていたのは津島の影響をうけていたからだったのだ。
読解の文脈を変えられないことは伊庭瑠璃が津島修一からの自由を得ることを阻む。高校時代における津島の精神の脆弱さのきっかけは、ほかならぬ、神酒による津島の拒絶だったのだ。神酒が津島を振ったトラウマは伊庭瑠璃が津島修一からの自由を得ることを阻む。
時間の一回性は、神酒薫が神酒が津島を振ったトラウマを取り除くことを阻む。
神酒は、津島を振ったことを謝ろうとする。
津島は、神酒がどれだけひどいことをしたかを伊庭に語る。タイムラインを持たない伊庭は、津島視点の神酒の行為を、疑わずに信じてしまう。
「貴方は、津島にそんなひどいことをしたの? 見損なう」と、伊庭は神酒に言う。
「まって。津島くんは、私を好きだったんじゃなかったの?」と神酒は言う。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言は神酒薫が神酒が津島を振ったトラウマを取り除くことを助ける。
神酒薫は時間の一回性を取り除くことを求める。
「愛してる」ではどうにもならないことが存在する。
「愛してる」ではどうにもならないことは神酒薫が時間の一回性を取り除くことの手段となる。
「おまえの視点は確定的じゃなかったのか」と、津島は神酒に対して言う。
天使の翼が「愛してる」ではどうにもならないことを取り除くことを求める。
「おまえの視点は確定的じゃなかったのか」は天使の翼が「愛してる」ではどうにもならないことを取り除く手段となる
天使の翼が「愛してる」ではどうにもならないことを取り除くことは成功する。
電子アシスタントは、神酒薫が時間の一回性を取り除く手段になる。
電子アシスタントに含まれるキキは、天使の翼が電子アシスタントを取り除く手段になる。
伊庭瑠璃は、「神酒薫が他人からの視点を気にせずに生きることを得たこと」を求める。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言は、伊庭瑠璃が「神酒薫が他人からの視点を気にせずに生きることを得たこと」を得ることを阻む。
伊庭瑠璃は「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除くことを求める。
神酒薫が視点浮動者として存在することは、伊庭瑠璃が「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除くことを阻む。
天使の翼は「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除くことを求める。
「津島修一が伊庭瑠璃からの自立を求めることは、天使の翼が「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除く手段になる」らしい。
津島修一が伊庭瑠璃からの自立を求めることは、天使の翼が「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除く手段になるように見受けられる。
「俺を忘れろ」という津島の発言は、神酒薫が神酒が津島を振ったトラウマを取り除く手段になるように見受けられる。
「俺を忘れろ」という津島の発言と伊庭が記憶を外部化していないことがともに存在していることが原因となり、神酒薫が神酒が津島を振ったトラウマを取り除くことは失敗する。「俺を忘れろ」という津島の発言は神酒薫が神酒が津島を振ったトラウマを取り除く手段とはならなかった。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言が存在することがきっかけとなり、モバイルがなくても覚えていることと神酒がすでに過去を振り切っていることが存在する。
モバイルがなくても覚えていることは、神酒薫が視点を決定しなければならないという切迫感を取り除く手段となる。
神酒がすでに過去を振り切っていることは、神酒薫が他人からの視点を気にせずに生きることを得る手段となる。
メイドいんジャパンからぶっこ抜いた構造に、昨日映画館で見た、「誰かが私にキスをした」から連想したものをぶち込んだらこうなった。不自然なところをこれから直していく。
(身体的な前提)
償いが存在する。
神酒薫(ミキ カオリ)が視点浮動者として存在する。高校二年生の女子。視点浮動者は、自分がどの視点から物事を見るか、どの記憶から物事をデコードするかを決められないでいる。
視点を決定すると、通常ならば、その視点向けのコマーシャル(=企業が配給する良質のドラマ)を見ることができるのだが、学校から支給されたモバイルを使っている神酒薫は、コマーシャルを見ることができない。だから、視点を決定するインセンティブがない。
他人からの視線を気にすることが存在する。
(本編)
神酒薫は他人からの視点を気にせずに生きることを求める。タイムラインに、他人が発言した自分の振るまいが蓄積されるので、自分の振るまいが正しいかどうかがひどく気になる。視点を決定している人たちは、自分の視界内の発言しか見る余裕がないので、他人の視点というものを気にしない。
視点を決定しなければならないという切迫感が存在する。
神酒薫は視点を決定しなければならないという切迫感を取り除くことを求める。
キキを持っていることで、神酒薫は視点浮動者であることを隠す。電子デバイスに興味があるんだというフリができる。
津島修一は、同じ中学校だった男の子。神酒薫にキキをくれたのは、津島修一だった。卒業式の日に、神酒薫を好きだと言って、その贈り物だとしてキキをくれた。津島修一が勝手に、神酒薫のモバイルにインストールしてしまったので、神酒薫はキキをアンインストールする方法を知らない。それに、日本語を喋る存在をアンインストールすることは、殺しと同じことに思えてしまい、できない。自分に自信を持てていない神酒薫は、彼からの告白を何かの悪いいたずらだと思い、津島修一とは連絡を取っていない。しかし、津島修一と神酒薫は同じ高校に通っているのだ。ときどき廊下ですれ違うと、気まずい。
神酒薫は他人からの視線を気にすることを取り除くことを求める。
電子アシスタントは他人からの視線を気にすることを取り除く手段になるように見受けられる。
神酒薫が他人からの視線を気にすることを取り除くことは失敗する。電子アシスタントは他人からの視線を気にすることを取り除く手段たりえなかった。
「曖昧な記憶は、記憶は不確かなものだという認識を視点浮動者が得る手段になる」
伊庭瑠璃のアシスタント(=天使の羽)が存在する。それがきっかけとなり、伊庭瑠璃が存在する。それがきっかけとなり、キキに刻まれた津島の記憶が存在する。それがきっかけとなり、神酒が津島と付き合っていたという噂が存在する。
神酒が津島と付き合っていたという噂は、神酒薫が他人からの視点を気にせずに生きることを得ることを阻む。
神酒薫は神酒が津島と付き合っていたという噂を取り除くことを求める。
キキに刻まれた津島の記憶は神酒薫が神酒が津島と付き合っていたという噂を取り除くことを阻む。
キキへのコマンドのパスワードは神酒薫がキキに刻まれた津島の記憶を取り除く手段になるように見受けられる。
神酒薫がキキに刻まれた津島の記憶を取り除くことは失敗する。キキへのコマンドのパスワードは、神酒薫がキキに刻まれた津島の記憶を取り除く手段にはならず、むしろそれを阻んだ。
「記憶は不確かなものだという認識は神酒薫が神酒が津島と付き合っていたという噂を取り除く手段になる」
視点浮動者として存在する神酒薫は、記憶は不確かなものだという認識を求める。
曖昧な記憶は、神酒薫が記憶は不確かなものだという認識を得る手段となる。
神酒薫は曖昧な記憶によって、記憶は不確かなものだという認識を得た。
記憶は不確かなものだという認識は神酒薫が神酒が津島と付き合っていたという噂を取り除く手段となる。
神酒薫は記憶は不確かなものだという認識によって、神酒が津島と付き合っていたという噂を取り除く。
「読解の文脈を変えられないことは伊庭瑠璃が津島修一からの自由を得ることを阻む」
津島の記憶の外部化は津島修一が伊庭瑠璃からの自立を得ることを阻む。
「伊庭が記憶を外部化していないことは津島修一が津島の記憶の外部化を取り除くことを助ける」らしい。
曖昧な記憶が存在する。それがきっかけとなり、伊庭が記憶を外部化していないことが存在する。
伊庭が記憶を外部化していないことは津島修一が津島の記憶の外部化を取り除く手段になるように見受けられる。
曖昧な記憶が存在することがきっかけとなり、記憶の流動性の低さが存在する。
記憶の流動性の低さが存在することがきっかけとなり、読解の文脈を変えられないことが存在する。
読解の文脈を変えられないことは伊庭瑠璃が津島修一からの自由を得ることを阻む。それがきっかけとなり、変えられない事実が存在する。
変えられない事実は伊庭瑠璃が津島修一からの自由を得ることを阻む。
神酒薫は変えられない事実を取り除くことを求める。
時間の一回性は、神酒薫が変えられない事実を取り除くことを阻む。
償いは神酒薫が変えられない事実を取り除くことの手段となる。
変えられない事実が存在し、伊庭瑠璃が視点浮動者として存在することがきっかけとなり、記憶がないと、全てを信じざるを得ないことが存在する。
記憶がないと、全てを信じざるを得ないことが存在することがきっかけとなり、神酒薫が変えられない事実を取り除く手段であった償いは取り除かれる。
記憶がないと、全てを信じざるを得ないことがきっかけとなり、「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言が存在する。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言は神酒薫が変えられない事実を取り除くことを助ける。
神酒薫は時間の一回性を取り除くことを求める。
「愛してる」ではどうにもならないことが存在する。
「愛してる」ではどうにもならないことは神酒薫が時間の一回性を取り除くことの手段となる。
「おまえの視点は確定的じゃなかったのか」が存在する。
天使の翼が「愛してる」ではどうにもならないことを取り除くことを求める。
「おまえの視点は確定的じゃなかったのか」は天使の翼が「愛してる」ではどうにもならないことを取り除く手段となる
天使の翼が「愛してる」ではどうにもならないことを取り除くことは成功する。
電子アシスタントは、神酒薫が時間の一回性を取り除く手段になる。
電子アシスタントに含まれるキキは、天使の翼が電子アシスタントを取り除く手段になる。
伊庭瑠璃は、「神酒薫が他人からの視点を気にせずに生きることを得たこと」を求める。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言は、伊庭瑠璃が「神酒薫が他人からの視点を気にせずに生きることを得たこと」を得ることを阻む。
伊庭瑠璃は「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除くことを求める。
神酒薫が視点浮動者として存在することは、伊庭瑠璃が「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除くことを阻む。
天使の翼は「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除くことを求める。
「津島修一が伊庭瑠璃からの自立を求めることは、天使の翼が「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除く手段になる」らしい。
津島修一が伊庭瑠璃からの自立を求めることは、天使の翼が「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言を取り除く手段になるように見受けられる。
「俺を忘れろ」という津島の発言は、神酒薫が変えられない事実を取り除く手段になるように見受けられる。
「俺を忘れろ」という津島の発言と伊庭が記憶を外部化していないことがともに存在していることが原因となり、神酒薫が変えられない事実を取り除くことは失敗する。「俺を忘れろ」という津島の発言は神酒薫が変えられない事実を取り除く手段とはならなかった。
「津島くんは、私を好きだったんじゃなかったの?」という神酒薫の発言が存在することがきっかけとなり、モバイルがなくても覚えていることと神酒がすでに過去を振り切っていることが存在する。
モバイルがなくても覚えていることは、神酒薫が視点を決定しなければならないという切迫感を取り除く手段となる。
神酒がすでに過去を振り切っていることは、神酒薫が他人からの視点を気にせずに生きることを得る手段となる。
↓あのさぁ、「自分がされて嫌な事は、他の人にもしてはいけません」と教えられてこなかったか?
http://anond.hatelabo.jp/20090403234837
俺達だって別に読みたくて読んでるわけじゃないのに
それとも、先人たちが繰り返し訴え続けてきた“それ”は実の伴わない「ただのキャッチフレーズ」なのか?
「薄馬鹿」と罵倒すれば“ダメージを与えられる”とか、追い詰め追い込んで言う事を聞かせられるなどと思っている時点で、品性下劣である事を宣言しているようなものだ。馬鹿で何が悪いのよ?
別に「普通の人」でも、「迎合してヘラヘラ笑ったり、納得のいかないことで謝罪を要求され続けて」いるのは、ものすごく嫌なのだということです。でもそうしないと生きていけなかったりするので仕方なくしているのです。
「ものすごく嫌なのだ」というなら、しないで済む様に頭を使ったほうがよほど健康的で建設的ではないのかね?
http://anond.hatelabo.jp/20090404045713の↓には激しく同意。
なんである。http://www.katotaizo.com/ぐらいは読了しておこうぜ?もっとも、この人の語り口はどっかネガティブな匂いがするので、耐性がない人にはおススメでないかも知れん。
折角の匿名日記なので普段口にしたら社会的に死にかねないようなことを言わせてもらえば、あなたがいじめられた原因はあなたが嫌われやすい人だから、というひどいトートロージーが答えになるでしょうか。あなたが悪いと言うのではなくて、恐らく生得的に嫌われやすい体質をしているのです(それは見た目だったり、話し方だったり、性格だったり時々によります)。三つ目の段落の話は内容から推察して小学校時代のことだと思いますが、そもそも小学生では普通の人でも「空気読む」能力はあんまりついてないものなので、あなたの対人スキルが原因ではないでしょう。原因を突き詰めれば単に生理的にキモいという以上の理由はないかと。
#本来ならそういった「なんとなく」による差別を見つけたらしばき倒して自身の差別心との向き合い方を見つけるのが教育というもののはずですが・・・まあ日本の公立小学校の教師程度にそれを期待するのは無理な相談なんでしょうね。
学生時代のサークルの面々に小学校時代の話を語った時の反応も、どうも既に鬱陶しがられているという感じがしますね。その時どのように話したのかは知りませんが、エントリにある通りの内容を話したとしたら同情されるのが一般的な反応だと思います。普通はいじめられてる人に味方しないのはマズいですからね。空気を読めるようにするにはどうしたらいい?とアドバイスを求めたことに対するサークルの面子の反応もかなりひどいですし。これらの諸々をあなたは「空気を読むスキル」の欠如が原因だとしていますが、そもそも嫌われているので空気を読む権利すら与えられていないように見えます。大体空気嫁というフレーズはデコードしたら9割方が「うまい言い方が思いつかないが、とにかくお前の態度が気にくわない」なので、空気を読む能力を身につけたい!と思ったとしてもどうにもならないというか解決になりません。
#その場で取るべき態度を取れという意味で空気嫁と言う場合も確かにありますが、あなたのエントリを読む限りは関係なさそうです。
ではどうすればいいのよって話になりますが、プライベートでは差別心の薄い連中を捜して付き合うのが次善の策でしょうか。あるいは、同じことですがあなたの性質を嫌わない人と付き合うか。嫌われない体質になりたい!というのは挑戦的に過ぎると思います。人間持って生まれた性質はそうそう変えられませんからね。
それよりキーワードになってる単語含む文字列使ったリンクの記述に骨ぼきぼきってなったよ。増田さんちょっと来ない間にどうしたの。あ、まずっぱい。
これねー、色々大人の事情があるらしんだわ。
発端はhttp://anond.hatelabo.jp/20090119011950とか、タグを閉じないで遊ぶ増田ちゃんがいて、
それをどうにも腹に据えかねた増田様がhttp://anond.hatelabo.jp/20090120165220なるエントリを挙げたもんだから、http://b.hatena.ne.jp/naoya/20090120#bookmark-11744130とかって対策されたんだけど、
たぶん使ったHTMLを正規化するライブラリがASCII以外を数値文字参照にするようで、http://anond.hatelabo.jp/20090121091528の様に携帯からみれなくなったり、キーワードを含むページが化けたりした。
それで、その流れと関係あるかは分からないけれど、おそらく文字実体参照を含むキーワードに関するバグを直すためか、
http://anond.hatelabo.jp/20090126170135みたいに文字化けするバグ(トラックバックツリーの欄に痕跡あり)を経て、
キーワードリンク関係の処理機構が変わり、http://anond.hatelabo.jp/20090128194522のような状態となり、
更に、http://anond.hatelabo.jp/20090204012513の指摘を受けて、数値文字参照はデコードされるようになって、
http://anond.hatelabo.jp/20090205205616の状態に落ち着く事となったらしい。
YourFileHostのCAPTCHA画像をなんとかするの続き。
その後、適当にいじったら、手元環境で1枚あたり25秒くらい→だいたい2.5秒くらいで判別できるようになった。このくらいなら使えるかな。
速度向上に一番効いたのは、Token#importで画像を比較しているところの修正。他は細かい手直し。
使い方は前のやつと変わってません。
あと、テストに100枚くらいCAPTCHA画像食わせてみたけど、とりあえず全部正しく判定できた。
カレントディレクトリ以下にある*.gifなCAPTCHA画像ファイルを適当に判別するスクリプト。動作確認用にどうぞ。
後述のdecaptcha.rbと同じディレクトリに適当に置いてchmod +xしてね。
#!/usr/local/bin/ruby $LOAD_PATH << File::dirname(File::expand_path($0)) require 'decaptcha' STDOUT.sync = true Dir.glob('*.gif').sort.each do |file| correct = File::basename(file, '.*') puts "Processing file: #{file}" start_time = Time.now ret = DeCAPTCHA.decode(file) elapsed = Time.now - start_time puts " Result: #{ret} (=> #{(correct == ret) ? "Ok" : "Fail"})" puts " Elapsed time: #{elapsed}" puts end
#!/usr/local/bin/ruby require 'rubygems' require 'gd2' require 'pp' # #= CAPTCHA画像解析モジュール # CAPTCHA画像ファイルを食わすとあら不思議、Stringが出てくるよ。 # YourFileHostのやつに対応。 # #== Usage # decoded_str = DeCAPTCHA.decode("some_captcha_image.gif") #=> String # 失敗したらnilが返る。 # module DeCAPTCHA DEBUG = false #=== CAPTCHA画像デコード # file:: 画像ファイル名のパス # method:: 未指定でよい。男は細かい事を気にするな。 # returns:: CAPTCHA画像解析結果(String) or nil (デコード失敗時) def self.decode(file, method = DeCAPTCHA::Site::YourFileHost) return method.new(file).decode end #= CAPTCHA画像デコード用クラス # このクラスのサブクラスはimport, tokenize, stream_parseメソッドの # 実装を含む必要がある。 class Site def initialize(file = nil) @pix = nil self.import(file) unless file.nil? end def decode return stream_parse(tokenize()) end end #= YourFileHostのCAPTCHA画像を解析するクラス class Site::YourFileHost < Site def import(file) @pix = PixelMatrix.new.import(file) return self end # importしたイメージ(PixelMatrix)から、文字と思わしきパターンを # 抽出して上下マージンを切り取ってArrayにして返す。 # returns:: Array of PixelMatrix def tokenize ret = [] state = :initial for x in 0...@pix.width case state when :initial if !@pix.vline_blank?(x) then state = :tokenize pixel = PixelMatrix.new(0, 0, true) ret << pixel redo end when :tokenize if @pix.vline_blank?(x) then state = :initial next end x0 = pixel.width for y in 0...@pix.height pixel[x0, y] = @pix[x, y] end else raise 'NOTREACHED' end end ret.map! {|token| Token.new.import(token.cutoff_vmargin!) } end # PixelMatrixのArrayを受け取り、数字を判別。 # tokens:: Array of PixelMatrix # returns:: String (判別結果) def stream_parse(tokens) rs = tokens.map {|x| x.guess.to_s }.join('') if rs.length != 4 then rs = nil if DEBUG then puts '- guess failed. dumping guess result of each token:' tokens.each_index do |i| print "##{i}:#{tokens[i].guess} " pp tokens[i].candidate end puts end end return rs end class Token @@digits = nil attr_accessor :candidate def initialize if @@digits.nil? then # 文字画像サンプルを作っておく @@digits = DIGITS_ASSOC.map {|digit| PixelMatrix.new(0, 0, true).import_array(digit) } end @candidate = Hash.new end # PixelMatrixを受け取り、文字画像サンプルと比較して # 一致率を計算しておく。 # pixel:: PixelMatrix # returns:: self def import(pixel) @@digits.each_index do |i| digit = @@digits[i] if (digit.width - pixel.width).abs > 4 or (digit.height - pixel.height).abs > 4 then @candidate[i] = -1 # サイズが違いすぎな場合、一致させない next end correct_bits = 0 enlarged_width = [digit.width, pixel.width ].max enlarged_height = [digit.height, pixel.height].max for y in 0...enlarged_height dy = (y.to_f / digit.height * enlarged_height).to_i py = (y.to_f / pixel.height * enlarged_height).to_i for x in 0...enlarged_width dx = (x.to_f / digit.width * enlarged_width).to_i px = (x.to_f / pixel.width * enlarged_width).to_i correct_bits += 1 if digit[dx, dy] == pixel[px, py] end end @candidate[i] = correct_bits * 100 / (enlarged_width * enlarged_height) end return self end # importのときの比較結果をもとに文字を推測 # returns:: Fixnum or nil(失敗時) def guess digit, ratio = @candidate.sort {|a, b| a.last <=> b.last}.last digit = nil if ratio < 0 or ratio < 65 return digit end end end #= 画素マトリックスクラス # 画像ファイルを食わせると、各ピクセル(画素)を2値(black(1) or white(0))に # 変換して、内部で保持する。 # 以後、Matrixクラスのような感じで個々の画素にアクセスできる。 class PixelMatrix BLACK = 1 WHITE = 0 attr_accessor :width attr_accessor :height # width:: 幅 # height:: 高さ # is_flexible:: 自動的に伸張するか def initialize(width = 0, height = 0, is_flexible = false) @matrix = Hash.new {|hash, key| hash[key] = Hash.new(WHITE)} @width, @height, @flexible = width, height, is_flexible end # file:: 画像ファイル名のパス # brightness_threshold:: 画素を黒とみなす閾値 (0 - 255, default: 0x40) # returns:: self (DeCAPTCHA::PixelMatrix) def import(file, brightness_threshold = 0x40) gd = GD2::Image.import(file) @width, @height = gd.width, gd.height self.each_with_axis do |x, y| color = gd[x, y] greyscale = (color.red + color.green + color.blue) / 3 self[x, y] = (greyscale > brightness_threshold) ? WHITE : BLACK end return self end def import_array(array) array.each_with_index do |str, y| str.split('').each_with_index do |c, x| self[x, y] = c.to_i end end return self end # PixelMatrixを画像ファイルとしてexport # file:: 新たに作る画像ファイル名のパス def export(file) gd = GD2::Image::IndexedColor.new(@width, @height) gd.palette << GD2::Color::WHITE gd.palette << GD2::Color::BLACK self.each_with_axis do |x, y| gd[x, y] = { WHITE => GD2::Color::WHITE, BLACK => GD2::Color::BLACK, }[self[x, y]] end gd.export(file) return self end # 指定された位置の画素を返す。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def [](x, y) if !@flexible and !in_range?(x, y) then raise RangeError end return WHITE if !@matrix.has_key?(y) # XXX: for optimize return @matrix[y][x] end # 画素に値を設定。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def []=(x, y, val) unless in_range?(x, y) then raise RangeError unless @flexible @width = (x >= @width) ? x + 1 : @width @height = (y >= @height) ? y + 1 : @height end @matrix[y][x] = val end def in_range?(x, y) ((0...@width) === x and (0...@height) === y) end # 指定された軸をもとに画素を走査し、Arrayに変換。 # 例えば、to_a(:vertical, 10) とすると、x == 10 な列を取り出して # Arrayにして返す。 # # axis:: 軸を指定 (:vertical または :horizontal) # pos:: 位置を指定。_axis_で指定した軸と直交する軸における位置を指定。 def to_a(axis, pos) {:vertical => lambda { (0...@height).map {|y| self[pos, y]} }, :horizontal => lambda { (0...@width).map {|x| self[x, pos]} }, }[axis].call end # returns:: Array def hline(y) self.to_a(:horizontal, y) end # returns:: Array def vline(x) self.to_a(:vertical, x) end # X軸方向に画素を走査。 # y:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def hline_blank?(y) return true if @matrix.has_key?(y) == false # XXX: for optimize for x in 0...@width return false if self[x, y] == BLACK end return true end # Y軸方向に画素を走査。 # x:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def vline_blank?(x) for y in 0...@height return false if self[x, y] == BLACK end return true end # 上下のマージンを削除した新しいPixelMatrixを返す。 # returns:: PixelMatrix def cutoff_vmargin pixel = PixelMatrix.new(0, 0, true) head = 0 tail = self.height - 1 head.upto(tail) do |y| if !self.hline_blank?(y) then head = y break end end tail.downto(head) do |y| if !self.hline_blank?(y) then tail = y break end end head.upto(tail) do |y| 0.upto(self.width - 1) do |x| pixel[x, y - head] = self[x, y] end end return pixel end # 自身の上下のマージンを削除する。cutoff_vmarginの破壊版。 # 速度稼ぎのために直接@matrixを触ったり、すこしずるをしている。 # 効率は、ほんの少しだけ速くなったような誤差の範囲のような感じ。 # returns:: self (PixelMatrix) def cutoff_vmargin! head = 0 tail = self.height - 1 head.upto(tail) do |y| if !self.hline_blank?(y) then head = y break end end tail.downto(head) do |y| if !self.hline_blank?(y) then tail = y break end @matrix.delete(y) if @matrix.has_key?(y) # XXX end if head > 0 then head.upto(tail) do |y| next if !@matrix.has_key?(y) # XXX @matrix[y - head] = @matrix.delete(y) # XXX end end self.height = tail - head + 1 return self end def each_with_axis for x in 0...@width for y in 0...@height yield(x, y) end end end end end class DeCAPTCHA::Site::YourFileHost::Token DIGITS_ASSOC = [ # 0 ["00000000011111110000000000", "00000001111111111110000000", "00000011111000001111000000", "00001111111100010011110000", "00011111100000110000111000", "00111111000000100001111000", "00111111110001000001111100", "01111111000010000011111110", "01111100000110000111111110", "01111111000100000111111110", "11111100001000001111111111", "11100000001000011111111111", "11111000010000011111111111", "11111000110000111111111111", "10000000100001111111111111", "01100001000001111111111110", "01100010000011111111111110", "01100010000111111111111110", "00111100000111111111111100", "00011100001111111111111000", "00001100011111111111111000", "00001111111111111111100000", "00000011111111111111000000", "00000000111111111100000000"], # 1 ["00001", "00111", "11111", "11111", "10001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001", "00001"], # 2 ["0000011111111110000000", "0001111111111111000000", "0011110000000010000000", "0110000000000100000000", "1100000000001100011110", "1000000000001000001111", "1000000000010000000111", "1000000000110001111111", "1000000000100001111111", "1000000001000000011111", "0100000011000001111111", "0011000010000111111110", "0011000110000001111110", "0000001100000111111100", "0000001000011111110000", "0000011000000111100000", "0000110000000000000000", "0000111111111111111111", "0001111111111111111110", "0011111111111111111100", "0011111111111111111100", "0111111111111111111000", "0111111111111111110000"], # 3 ["000000011111111110000000", "000001111111111111100000", "000011100000011111111000", "000111000000111111111000", "000110000001111111111100", "000100000001111111111100", "000100000011111111111100", "000110000111111111111000", "000010000111111111111000", "000000001111111111100000", "000000011111111111000000", "000000011111111110000000", "000000000000001100000000", "000000000000011100011100", "000000000000111000111110", "000000000000110000001110", "000000000001110001111111", "110000000011100011111111", "111000000111000000111110", "011100000110001111111100", "001111001110000111111000", "000011111100000011100000", "000000011000111000000000"], # 4 ["0000000000011", "0000000000011", "0000000000111", "0000000001111", "0000000001111", "0000000011111", "0000000111111", "0000000110111", "0000001100111", "0000011100111", "0000011000111", "0000110000111", "0001110000111", "0001100000111", "0011000000111", "0111000000111", "0111111111111", "1111111111111", "0000000000111", "0000000000111", "0000000000111", "0000000000111", "0000000000111"], # 5 ["000000001111111111111110", "000000011111111111111100", "000000111111111111111100", "000000111111111111111000", "000001111111111111110000", "000011100000000000000000", "000011011111111110000000", "000111111111111111000000", "001111100000000111000000", "001110000000000110001100", "000000000000000100011110", "000000000000001100000110", "000000000000011000011111", "000000000000011001111111", "000000000000110000011111", "000000000001100000111111", "110000000001100111111110", "011000000011000001111110", "011100000110000011111100", "001111000110011111111000", "000111111100001111110000", "000001111100000011000000", "000000001000011000000000"], # 6 ["000000000000000110000000", "000000010001111111111000", "000001110000011100111100", "000011100000011000001000", "000111000011111000000000", "001111000001110000000000", "001110000000111100000000", "011110001111111111100000", "011100000111000011110000", "011000000010000001111000", "011000011110000011111100", "010000111100000111111110", "100000001000000111111110", "100001111000001111111111", "000011110000011111111111", "000000100000011111111111", "000011100000111111111111", "001111000001111111111110", "000010000001111111111110", "001110000011111111111100", "000111000111111111111000", "000011111111111111110000", "000000111111111111000000", "000000000111111000000000"], # 7 ["0011111111111110001111", "0011111111111100000011", "0111111111111000000110", "1111111111111000111100", "1111111111110000001100", "0000000000000000011000", "0000000000000011111000", "0000000011000000110000", "0000001110000011100000", "0000011110001111100000", "0000111100000011000000", "0001111000000110000000", "0001111000111110000000", "0011110000001100000000", "0011110000001000000000", "0011100011111000000000", "0011000001110000000000", "0001000000110000000000", "0000000111100000000000", "0000000111000000000000", "0000000011000000000000", "0000001110000000000000", "0000001100000000000000"], # 8 ["0000000111111111110000000", "0000011111111111111100000", "0000001111100000011110000", "0000000001110000000111000", "0011000011111000000011100", "0011100001111100000011100", "0011110000001110000011100", "0001111000011111000111000", "0000111100000111101110000", "0000011110000001111100000", "0000001111000011111110000", "0000111111110000011111000", "0011110011111000001111100", "0111100001111100011111100", "0111000000111110000111110", "1111000000011111000000111", "1111000000001111100011111", "1111000000000011111000010", "0111100000000001111100000", "0011110000000000111110000", "0001111110000001111110000", "0000011111111111111000000", "0000000011111110000000000"], # 9 ["000000111111111110000000", "000001111111111111100000", "000111111111111001111000", "001111111111110000010000", "011111111111110000010000", "011111111111100000100000", "011111111111000001100000", "111111111110000001000111", "111111111110000010000001", "111111111100000110000111", "011111111000000100011111", "011111111000001000001111", "001111110000011000011111", "001111100000010001111110", "000111110000100000011110", "000001111111100000111110", "000000011111000111111100", "000000000010000001111100", "000000000110000001111000", "000100001100011111110000", "000111001100001111100000", "000011111000001111000000", "000000010000110000000000"], ] end __END__
ノンリニア編集(ノンリニアへんしゅう、Non-linear editing)はコンピュータを使用した非直線的(ノンリニア)な映像編集方式のこと。2台以上のデッキを使いテープからテープへ映像をコピーするリニア編集に比べ、編集箇所を自由に選択でき、映像データを即座に追加・削除・修正・並べ替えることができる利点がある。1990年代に登場し、PCと共に急速に普及した。
編集システムとしてはAvid、Adobe Premiere、Corel Ulead VideoStudio、Final Cut Pro、flame、Kino、Canopus CWSシリーズ、Canopus HDWSシリーズなどが代表的である。
PS3のCPUであるCell B.E.は浮動小数点演算処理能力が飛び抜けており、動画エンコード/デコード能力は現在市販されているハイエンドCPUよりも十分に高い。
仮に年月が経過して一般的なPCの性能が向上し、相対的にPS3の処理能力が陳腐化したとしてもコストパフォーマンスの面で断然有利。PS3本体とソフトの価格の合計5万円弱で、同等の環境をPCで揃えるのは至難。時間が経てば本体価格も下がっていくだろうし。
全てのパッケージにHDDが標準搭載で、今月からは80GBが標準になり、しかもその気になればさらに大容量の市販のHDDに換装可能。よって素材となるファイルのストレージとしては容量面も拡張性も十分。また「PLAYSTATION Eye」といったUSBカメラで直接の素材取り込み手段もある。
一般的なMPEG1、2のみならずh.264やDivXも再生に対応しているので、出力形式の対応も敷居は低いのでは。
PS3用ソフト「まいにちいっしょ」には、ゲーム内を録画してYouTubeにアップロードする機能があり、他のメーカーに提供されている開発環境にもこの機能は含まれていると聞く。よって制作した動画や音声をシームレスにYouTubeにアップロードする事も可能なのでは。
制作した動画をフレンドに送ったり、制作者のhomeでフレンドを呼んで上映するといった機能も実現可能なはず。もしくは、ソフトそのものにストリーミングサーバの機能を付加するというのもアリかも。
当然ながら可能だろう。
大容量ストレージと高性能CPUが必須のソフトなのでWiiにはまず不可能だろう。可能性があるとすればXbox360だが、(3)は専用HDDしか選択肢がなく価格も高価。(5)は今のところ実績は無く、PS3に十分なアドバンテージが見込める。
YouTubeやニコニコ動画など、ユーザが作成する動画コンテンツ(CGMとか言うんだっけ)の隆盛は今後も続くと思われるので、その分野で一定の地位を確立するのも将来的にも有益ではないかと思うが、いかがだろうか。
そんなわけで、みんな大好きなYourFileHostだけども、最近みてみたら、なんかCAPTCHA認証がついているわけじゃないですか。
でもこれってさーCAPTCHAといっても見るからに危ういというか、見れば見るほど簡単に破れてしまいそうな気がして、どうにもむずがゆいアンニュイな気分になってしまうわけです。
そんで、このたび適当にいじってみたところ、それなりに推測できるコードが書けたので、ここに張ってみますね。
やってることは単純で、こんな感じ
使い方は、こんな感じで
require 'decaptcha.rb' captcha_string = DeCAPTCHA.decode(filename) if !captcha_string.nil? then # 判別成功時の処理 else # 判別失敗時の処理。失敗することもあるのでよしなに。 end
あ、Ruby/GD2入れといてね。sudo gem install gd2とかで入ります。多分。
判別率はそこそこ良い感じになったんだけども、富豪プログラミングがたたってか、いかんせん遅いです。
手元だと1枚判別するのに20秒くらいかかることもある。
そんなわけで誰かチューニングしてくれるとうれしい。
実行速度を上げた改良版はこっちにうpしました。以下のコードは参考程度に。
#!/usr/local/bin/ruby require 'rubygems' require 'gd2' require 'pp' # #= CAPTCHA画像解析モジュール # CAPTCHA画像ファイルを食わすとあら不思議、Stringが出てくるよ。 # YourFileHostのやつに対応。 # #== Usage # decoded_str = DeCAPTCHA.decode("some_captcha_image.gif") #=> String # 失敗したらnilが返る。 # module DeCAPTCHA DEBUG = false #=== CAPTCHA画像デコード # file:: 画像ファイル名のパス # method:: 未指定でよい。男は細かい事を気にするな。 # returns:: CAPTCHA画像解析結果(String) or nil (デコード失敗時) def self.decode(file, method = DeCAPTCHA::Site::YourFileHost) return method.new(file).decode end #= CAPTCHA画像デコード用クラス # このクラスのサブクラスはimport, tokenize, stream_parseメソッドの # 実装を含む必要がある。 class Site def initialize(file = nil) @pix = nil self.import(file) unless file.nil? end def decode return stream_parse(tokenize()) end end #= YourFileHostのCAPTCHA画像を解析するクラス class Site::YourFileHost < Site def import(file) @pix = PixelMatrix.new.import(file) return self end # importしたイメージ(PixelMatrix)から、文字と思わしきパターンを # 抽出して上下マージンを切り取ってArrayにして返す。 # returns:: Array of PixelMatrix def tokenize getter, tokenizer = lambda {|queue| [ lambda { return queue }, lambda {|x, pixel| if pixel.nil? then x, pixel = tokenizer.call(x, PixelMatrix.new(0, 0, true)) queue << pixel return x end if !@pix.in_range?(x, 0) or @pix.vline_blank?(x) then return [x, pixel] end x0 = pixel.width @pix.vline(x).inject(0) do |y, color| pixel[x0, y] = color y + 1 end return tokenizer.call(x + 1, pixel) } ] }.call([]) x = 0 while (x < @pix.width) x = @pix.vline_blank?(x) ? x + 1 : tokenizer.call(x, nil) end getter.call.map do |token| # Token.new.import(token.cutoff_vmargin.shrink) Token.new.import(token.cutoff_vmargin) end end # PixelMatrixのArrayを受け取り、数字を判別。 # tokens:: Array of PixelMatrix # returns:: String (判別結果) def stream_parse(tokens) r = [] tokens.inject(nil) do |prev, cur| r << cur.guess end rs = r.map {|x| x.to_s}.join('') if rs.length != 4 then if DEBUG then puts '- guess failed. dumping guess result of each token:' tokens.each_index do |i| print "##{i}: " pp tokens[i].candidate end puts end return nil end return rs end class Token @@digits = nil attr_accessor :candidate def initialize if @@digits.nil? then # 文字画像サンプルを作っておく @@digits = DIGITS_ASSOC.map {|assoc| PixelMatrix.new(0, 0, true).import_assoc(assoc) } end @candidate = Hash.new end # PixelMatrixを受け取り、文字画像サンプルと比較して # 一致率を計算しておく。 # pixel:: PixelMatrix # returns:: self def import(pixel) gcd = lambda {|a, b| a, b = [b, a] if a < b return a if b == 0 r = a % b return gcd.call(b, r) } lcm = lambda {|a, b| a * b / gcd.call(a, b) } mul_to_lcm = lambda {|a, b| g = gcd.call(a, b) [b / g, a / g] } 0.upto(@@digits.size - 1) do |i| if (@@digits[i].width - pixel.width).abs > 4 or (@@digits[i].height - pixel.height).abs > 4 then @candidate[i] = -1 # 比較対象とサイズが違いすぎ next end mul_ax, mul_bx = mul_to_lcm.call(@@digits[i].width, pixel.width) mul_ay, mul_by = mul_to_lcm.call(@@digits[i].height, pixel.height) enlarged_width = @@digits[i].width * mul_ax enlarged_height = @@digits[i].height * mul_ay # 文字画像サンプルと比較対象画像のサイズをあわせる # 幅・高さをそれぞれ適当に整数倍して、最小公倍数に合わせて比較 # (めんどうだから) correct_bits = 0 (0...enlarged_width).each do |x| (0...enlarged_height).each do |y| if @@digits[i][x/mul_ax, y/mul_ay] == pixel[x/mul_bx, y/mul_by] then correct_bits += 1 end end end @candidate[i] = correct_bits * 100 / (enlarged_width * enlarged_height) end return self end # importのときの比較結果をもとに文字を推測 # returns:: Fixnum or nil(失敗時) def guess digit, ratio = @candidate.sort {|a, b| a.last <=> b.last}.last digit = nil if ratio < 0 or ratio < 80 return digit end end end #= 画素マトリックスクラス # 画像ファイルを食わせると、各ピクセル(画素)を2値(black(1) or white(0))に # 変換して、内部で保持する。 # 以後、Matrixクラスのような感じで個々の画素にアクセスできる。 class PixelMatrix BLACK = 1 WHITE = 0 attr_accessor :width attr_accessor :height # width:: 幅 # height:: 高さ # is_flexible:: 自動的に伸張するか def initialize(width = 0, height = 0, is_flexible = false) @matrix = Hash.new {|hash, key| hash[key] = Hash.new(WHITE)} @width, @height, @flexible = width, height, is_flexible end # file:: 画像ファイル名のパス # brightness_threshold:: 画素を黒とみなす閾値 (0 - 255, default: 0x40) # returns:: self (DeCAPTCHA::PixelMatrix) def import(file, brightness_threshold = 0x40) gd = GD2::Image.import(file) @width, @height = gd.width, gd.height self.each_with_axis do |x, y| color = gd[x, y] greyscale = (color.red + color.green + color.blue) / 3 self[x, y] = (greyscale > brightness_threshold) ? WHITE : BLACK end return self end # reverse function of to_assoc def import_assoc(assoc) assoc.inject(0) do |y, columns| columns.inject(0) do |x, color| self[x, y] = color x + 1 end y + 1 end return self end # PixelMatrixを画像ファイルとしてexport # file:: 新たに作る画像ファイル名のパス def export(file) gd = GD2::Image::IndexedColor.new(@width, @height) gd.palette << GD2::Color::WHITE gd.palette << GD2::Color::BLACK self.each_with_axis do |x, y| gd[x, y] = { WHITE => GD2::Color::WHITE, BLACK => GD2::Color::BLACK, }[self[x, y]] end gd.export(file) return self end def to_assoc (0...@height).map do |y| (0...@width).map do |x| self[x, y] end end end # 指定された位置の画素を返す。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def [](x, y) if !@flexible and !in_range?(x, y) then raise RangeError end return @matrix[y][x] end # 画素に値を設定。 # returns:: PixelMatrix::BLACK(1) or WHITE(0) def []=(x, y, val) unless in_range?(x, y) then raise RangeError unless @flexible @width = (x >= @width) ? x + 1 : @width @height = (y >= @height) ? y + 1 : @height end @matrix[y][x] = val end def in_range?(x, y) ((0...@width) === x and (0...@height) === y) end # 指定された軸をもとに画素を走査し、Arrayに変換。 # 例えば、to_a(:vertical, 10) とすると、x == 10 な列を取り出して # Arrayにして返す。 # # axis:: 軸を指定 (:vertical または :horizontal) # pos:: 位置を指定。_axis_で指定した軸と直交する軸における位置を指定。 def to_a(axis, pos) {:vertical => lambda { (0...@height).map {|y| self[pos, y]} }, :horizontal => lambda { (0...@width).map {|x| self[x, pos]} }, }[axis].call end # returns:: Array def hline(y) self.to_a(:horizontal, y) end # returns:: Array def vline(x) self.to_a(:vertical, x) end # X軸方向に画素を走査。 # y:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def hline_blank?(y) hline(y).find {|color| color == BLACK }.nil? ? true : false end # Y軸方向に画素を走査。 # x:: どの位置で走査するか # returns:: 指定された軸の上にドットが存在: false, 無い: true def vline_blank?(x) vline(x).find {|color| color == BLACK }.nil? ? true : false end # 上下のマージンを削除した新しいPixelMatrixを返す。 # returns:: PixelMatrix def cutoff_vmargin pixel = PixelMatrix.new(0, 0, true) head = 0.upto(self.height - 1) do |y| break(y) if !self.hline_blank?(y) end tail = (self.height - 1).downto(0) do |y| break(y) if !self.hline_blank?(y) end head.upto(tail) do |y| y0 = pixel.height self.hline(y).inject(0) do |x, color| pixel[x, y0] = color x + 1 end end return pixel end def each_with_axis (0...@width).each {|x| (0...@height).each {|y| yield(x, y)}} end end end class DeCAPTCHA::Site::YourFileHost::Token DIGITS_ASSOC = [ # 0 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0] ], # 1 [[0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1]], # 2 [[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]], # 3 [[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 4 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]], # 5 [[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 6 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 7 [[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 8 [[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0], [0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], # 9 [[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], ] end __END__ Dir.glob('*.gif').each do |file| puts "Processing file: #{file}" p DeCAPTCHA.decode(file) end __END__
考えてみたら、いまこの文章を読んでいるあなたと私は、たぶん一度も会ったことがないわけで。
それなのに、ディスプレイ見て文字を切り出していくだけで
「文章の意味が理解できる」んだからすごい。
赤ん坊にモノの名前を教えるレベルのことは、別に不思議じゃないよ。
手と手をとりあって「これ、りんご」「これ、パパ」とかやるんだから、
名前とモノとの対応が付けられるのは分かる。
そうじゃなくて、定義を一度も確認しあったことがないのに、
分かる、って、なんでそんなことができちゃうの?
私がなんとかして同じようにエンコードするプログラムを作り上げる。
あなたも同じように、でも別の場所で別の人たちをみつつ、
そしたら、私の作ったファイルを、あなたが再生できるようになってるってこと。
どういう仕組みでそうなってるの?
テレビとか本とかがあるからかとも思ったけど、
言語自体はもっと昔からあるよね。
教えてえらいひと。
>仮に知識を共有してもそれを理解するスキルがないと共有してもしょうがない。
>結局のところ局所的な共有で、自分達の理解できる難易度の範囲で解せる(心理的に快適にその情報を受け入れることができる。)ことを共有するのが精神衛生上良いのだろうと思う。
超高圧縮な動画のコーデックがあったとしてだ
ということはありそうに思う。
いきなり横からレスだけど。
人の心ってのを少し深く考えられない、こういうのをドラマや小説や漫画やアニメと同次元に考えるような人は理解できないんじゃないかな。
当事者じゃないって言い換えたほうがいいんだろうけど。
ここから「人の心を少し深く考える」のは困難だよ。
だから設定に齟齬があるのも当然。
「ゲームマスター」さんが設定を出してくれないし、
状況がどう変化していくのかもわからない。
「登場キャラクター」の性格も真意もぜんぜん分からないし、
空気だって読めやしない。
ゲームマスター自身が「吐き出せる場所が欲しかっただけ。」
なんて言ってるから仕方ないんだけどね。