2007年12月
■ 名所など
札幌にいる。
札幌で何人か友達を迎える予定なので名所などを考えねばならない。
やはりとらのあなに行ってIOSYSグッズなどをあさるのが今風だろうか。
- とらのあな
〒060-0062 北海道札幌市中央区南二条西1-7-1 2番館ビル1F
- まんだらけ
北海道札幌市中央区南2条西4丁目1 コスモビル5F
http://www.mandarake.co.jp/shop/index_spr.html
- アニメイト
北海道札幌市中央区南二条西1丁目5番地 丸大ビル2F
http://www.animate.co.jp/animate/map/east/sapporo/sapporo.html
あとはスイーツとカフェーだな。
- フルーツケーキファクトリー
札幌市中央区南1条西4丁目
http://www.fruitscakefactory.com/shop/headquarters.html
- Care69
札幌市中央区 南3条西8丁目7 大洋ビル1F
http://www.fineworks.jp/cafe69/
札幌のメイドカフェ一覧とか。
■ スレ
最近おもしろかったスレ。「メタルスライムだけど何か質問ある?」。1が逃亡して即終了。
■ 思いつき
「λ という字は人と人が支えあってできている」
■ Web素行調査
http://detective.kayac.com/search?q=at_akada
菱沼さんとat_akadaの間に肉体関係はまだない。
まあね。
■ 買おうかと思った本。
- 『モテたい理由』
赤坂真理(著)
講談社現代新書(講談社)、2007
http://shop.kodansha.jp/bc/magazines/hon/0801/index04.html
島田裕巳(著)
幻冬舎新書(幻冬舎)、2007
以下は買った本
スタニスワフ・レム (著), 村上 昭三 (翻訳), 村上 義治 (翻訳)
早川書房、1976
ついに復刊。これは期待。
■ 本
両親が昔使ってた教科書をもらった。数学関係、計算機関係と動的システム、サイバネティクスとか。
まえがきに以下のように書いてあっておもしろかった。
計算機に強くなる近路は, それを自ら使うことである. 従来の計算尺と同じように, 自らアナログ計算機を操作したり, 自らフオートラン・プログラムを書いてカードまでパンチ(せん孔)する態度が望ましい.
,o/ ∠先生!パンチカードってどこに売ってますか! lミiニ!
■ 本2
ジュエリーに本を何冊かもらった。
kashmir (著)
メディアファクトリー、2007
kashmir好きだ。
石黒正数(著)
徳間書店、2007
『それでも町は廻っている』を読んだときから、ぜひこの人の推理物をもっと読んでみたいなあと思っていたのでこれも楽しみ。
あとスタージョンの『人間以上』とか。
■ 読んだ
『宇宙の戦士』
ロバート・A・ハインライン(著), 矢野徹(著)
早川書房、1979
わたしによるわたしのための1人企画「ヒューゴー賞受賞作を年代順に読むよ」。
しばらく忙しかったので長らく忘れてましたが、再開しました。
「宇宙の戦士」はガンダムなどいわゆるリアルロボットものの元祖と言われる作品で、映画スターシップ・トゥルーパーズの原作でもある。
発表されたときは、これはファシズム肯定の小説じゃないかと随分議論もあったらしいが、その辺りの論争事情は本書の巻末で丁寧に紹介されている。
個人的には大変楽しく読めた。確かに「僕の考えた理想の戦争」みたいな内容ではあるものの、別のオーディオに興味が無くても「オーディオマニアが考えた理想のオーディオ環境」をおもしろいと思うように、あるいはインテリアに興味が無くても「インテリアマニアが考えた理想の家」をおもしろいと思うように、理想の戦争の話もおもしろい。
もっともわたしは気質的にファシストを見ると萌える傾向にあるので、そのためにおもしろく読めた部分もある。
とはいえ、単にファシストと切り捨てるには勿体ない印象深いセリフがいろいろと出てくる小説であったことだよ。
たとえば「戦争」について。
「たったひとりの教授タイプの男が、ただボタンを押すだけで、より以上の効果があげられるという時代に、時代遅れの武器を持った大勢の兵隊たちが自分の生命を危険にさらすということに、どういう利点があるのでありますか?」
(...)
「いいか、もしおまえが赤ん坊をしかろうと思ったら、そいつの首をはねてしまうか?」
「えっ......とんでもありません、軍曹どの!」
「もちろん、そんなことはせんだろう。ピシャリとたたきつけるだろうな。敵国の都市を水爆で攻撃するなんてことは、赤ん坊の頭を斧でたたっ切るのと同じように、実に馬鹿げたことだというような事情のときもあるんだ。戦争とはそう単純な暴力と殺戮ではない。戦争とは、目的を達成するための、抑制できる暴力なんだ。戦争の目的とは、政府の決定したことを力によって支持することだ。その目的は、決して殺すためだけのために敵を殺すことではなく、こちらがさせたいと思っていることを相手にさせることだ。殺戮ではなく......抑制され、目的を持った暴力なのだ。」
「投票」について。
「投票するということは、権威を使用することである。これは最高の権力ともいうべきもので、ほかのあらゆる権力はここから発生する......
(...)
いうなれば、それは暴力なのだ! 公民権は力である......裸であり、生の<棍棒と斧>なのだ。よしんばこれが、十人の男によって使われようと、あるいは十億人によって使われようと、いずれにせよ、政治的権力というものは、力なのである......」
若者を投票に行かせようと思ったら「投票は市民の義務です」なんて言わずに「投票は棍棒と斧なのだ!」などと叫ぶと良いのではないか。
■ 本企画について
http://www.at-akada.org/blog/2007/07/post_227.html
■ 文学
おそろしいことに今の日本では「純文学」よりもジャンル小説の方が敷居が高くてアカデミックなものになりつつあるわけだが。
少なくとも二世代くらい前までは、文学と言えば、難しいことを知っている人が難しいことを考えながら超絶技巧を駆使してときに破滅へ向って疾走しつつ書くものであり、どちらかと言えば「怖いので近寄りたくない」というものだったと思うのだが。村上春樹や吉本ばななが出てきたときに「歴史との断絶」が云々され、その後どうなるのかと思っていたら、それっきり断絶したままになったという印象。
今や文学というのは何となく感性で書くものであり、一方ミステリやSFは楽しむのも書くのもその分野に関するそれなりの歴史的知識や教養を求められるので敷居が高いといった配置になりつつあるように見える。芥川賞をとるのは、内容があんんまなくて文章と構成がウェルメイドでぽわーとした生活ドラマみたいなやつばっかりだし。
別に文学がどうでもよいのだが、それってすごいことだと思っている。
■ 言説
あんまり確言できるような内容ではないが、書かないと忘れそうなので、書いておく。
言説分析の可能性―社会学的方法の迷宮から (シリーズ 社会学のアクチュアリティ:批判と創造)
東信堂、2006
たとえばこの本などを読むとしみじみ実感するのは、理論的傾向の強い社会学者は「言語論的転回」という言葉の意味がよくわかっていないということだ。
もちろんフレーゲもソシュールもひっくるめて指すような大雑把な意味で「言語論的転回」という語を使ってかまわないのだが*1、狭い意味での「言語論的転回」(フレーゲに端を発するそれ)に話をかぎるならば、論理学と無縁なところで転回を捉えても意味はないだろうと思う。
何に違和感があるかというと、「言語論的転回」を「考え方の違い」と捉えている節があること。
「Aという考え方からBという考え方に変わった。これを言語論的転回と呼ぶ」という趣旨の記述にはのきなみ違和感を感じる。わたしは言語論的転回を考え方の変化だとは思わない。それは発見であり、端的な驚きだと思う。
何についての驚きかと言えば「言語のなかに数学みたいなものがある件」について。
論理学というのはまあ数学みたいなもんだ。
しかしそれは現実の言語や判断によく似たものでもある。
そして驚くべきことはそこ。そこだけ。
「人間の言語や判断をいじってたら数学的体系みたいのが出てきたんだけど、何これ?」というのがまず根本的な驚きなのだと思う。そしてその体系に触れ、そのことを確かめてみることは後から来た誰にでもできる。
だから言語論的転回を一口に言っても出てくる考え方は千差万別。
「言語のなかに数学みたいなものがある件」をどうやって説明するかが人によって違うから。脳の構造だって言ってもいいし、社会的規約だって言ってもいいし、世界の構造だって言ってもいいし。
しかしいずれにせよ、「言語のなかに数学みたいなものがある件」にぶちあたること(ぶちあたったこと)を言語論的転回と呼ぶのだと考えることにするとわりとすっきり話がまとまる気がしている。
■ 思いつき
ふたりはプリンキピア
ふたり=ラッセルとホワイトヘッド
■ おれが金持ちだったら
らっぷびととみくすびとに金をやってオリジナル曲をつくらせハルヒ第2期OPに使う。
でも若いミュージシャンにいきなり大金をやったりするのはよくないかなーとも思った。というかおれが金をやらなくてもきっと自分でチャンスを掴むんだろうなー才能のある人はとも思った。
前提として金は無いわけだが。
■ ドゥルーズ
ドゥルーズとかが好きな人と話していると、相手が「冗長性が!冗長性が!」などと言うので、「ところでそれが情報理論の概念であることは知っているのか」と尋ねると、ムッとした顔をされ「それがオレと何の関係があるのか」みたいな態度を取られることが何度かあった。
きっとああいうのを「ゆとり」と言うんだろうなあ。
■ 数学
「数学とか科学の論文に対しても芸術作品のような美を感じることがある」といったようなことを言う人がいるじゃないか、ときに。たとえば最近id:pha氏が書いてた。
しかしわたしの場合それが実感としてよくわからずむしろ逆じゃないかと思ってる。
数学的な構築物に触れて「美しい」と感じのはよくわかる。
しかし(広義の)芸術作品に触れて、「美しい」と思うことなんかなくないか?と思う。作品に触れてわたしが思うのは「やべー、これやべー」とか「かっけー」とか「熱い!」とか「うまい!」とか「もえー」とか「おもしれー」であり、美しいと思うことはまずない。
思うに、「美」っていうのはどっちかと言うと必然的なものというか他ではありえないものに対して抱く感情じゃないか。限界までそぎおとして単純な構造だけがあるものなどを見ると、「美しい」という感情を抱いたりする。
一方(広義の)芸術作品にはそんなことは求めてなくて、作品のよさ・おもしろさは偶然的な部分にある。昔からあるお約束であるとか世の風潮に対して、つくった人が何を見たか・何をしたかっていう部分が重要なのであって、だからこそ「熱い」とか「やべー」はあっても「美しい」はない。
だから言うならばむしろ「芸術作品に対しても数学的な構築物に感じるような美しさを感じることがある」だと思うんだけど。
まあこれはきっとわたしの作品観が偏っているせいもあるんだろう。
■ グッドマン
http://www.at-akada.org/blog/2007/03/post-127.html
ひさびさに自分で書いた記事を読んで思い出した。わたしはこのとき椅子に使っていた木箱が壊れたので捨てると書いているのだが、今だに捨てていない......。もう半年以上経過しているらしい。ひどい話だ。
- *1: わたしが独裁者だったら止めさせるが独裁者じゃないので心の広いところを見せておく。
■ 思いつき
ケータイ小説に必要(?)なものは下世話かつわかりやすいコメンテーターだと思う。
具体的に言うと、切り込み隊長の炎上ウォッチングのようなものを想定している。
「ホラ、ここでミカっていうのが出てきただろ。この援交してる友達っていうのはケータイ小説の定番キャラの1人で。見どころはバッドエンド」
「堕胎シーンキター! この後絶対回想シーンくるから! ほら! ほら! うわ、幻覚まで見はじめた」
みたいな感じ。
なんとなく楽しそうじゃね?
こういう人が出てくると、おそらく「ケータイ小説を読む」という行動がエッジの効いたヲタクサブカル趣味として一定の市民権を得るようになると思う。
(ケータイ小説のパブリッシャーらはそんなことを微塵も期待していないだろうが)。
■ ちなみに
わたしはケータイ小説を読んだことがないので、上の記事は「きっとこういうものだろう」という想像で書いています。
「ホラ、ここでミカっていうのが出てきただろ。この援交してる友達っていうのはケータイ小説の定番キャラの1人で。見どころはバッドエンド」
これは多少説明が必要かと思われるので(必要ないが)、書いておく。
「援交してる友達」はケータイ小説の定番キャラなのだが、必ず小説の最後の方でバッドエンドに落ち込むのが定番の筋書である。
そしてケータイ小説ヲチャーの間では、「援交してる友達」のバッドエンドのバリエーションやインフレーションを楽しむのが通とされている*1。
「援交してる友達」には、「ヤクザにだまされて売られる」から「不治の病が発覚」まで多様なエンドが用意されており、作家によっては、エスカレーションのあまり大げさかつ不自然な展開に無理矢理もっていこうとする(「ロードローラーにひかれてペチャンコ」など)。しかしケータイ小説ヲチャーの間では、「むしろそこがいい」という者が多く、どれだけ過激なバッドエンドを描けたかで作家の評価が決まることも珍しくない。
「堕胎シーンキター! この後絶対回想シーンくるから! ほら! ほら! うわ、幻覚まで見はじめた」
堕胎シーンを経由し、主人公が自分の人生を振り返りつつ新たな再生の予感に目覚めラストシーンへいたるという流れがケータイ小説における一つの定番となっている*2。いわば堕胎シーンは水戸黄門で言う印籠の登場シーンにあたり、ケータイ小説ヲチャーならばもはや絶対に盛り上がらざるをえないクライマックスである。
堕胎シーンは、主人公の転回を描くことを目的としており、ここをどれだけの説得力を持って描けるかがケータイ小説作家の腕の見せどころである。
上のケータイ小説ヲチャーは、期待通り回想シーンがはじまったのでテンションが上がり、さらにもはやサイケデリックとも言える「主人公の幻覚体験」まで出現したので興奮の絶頂に達した*3。
■ jQuery.ajaxはajaxじゃない件
jQueryについて。
jQuery.ajax($.ajax)など通信系の関数のコードを見る。デフォルトの状態では同期通信をタイマーで動かしている。
というかこれ、ひょっとすると、非同期にするとまともに動かないんじゃないか?*4
というわけで全然Ajaxじゃない。のでびっくりした。
■ zipでくれ
今日MM氏に会ったら「論文をzipでくれ」と言われたのでそろそろ配布について考える*1。
いずれネットでも公開しようと思いますが、ちょっと公開前に直さないといけない部分があるのでまだ公開しません。
万が一一刻も早く見たいという人がいたらわたし宛てにメールをくれれば送ります。
今日知ったこと。
ゼッヒ・ジップデークレのモデルはアナトール・フランス。
_,. ----、 _,_ ,r''" ヽ / r' `゛ ― ミ.ミミ . l 彡 :. i .! r' r'" 、 l l.r-、" ,;;;::::::;;:,;,, ,,_i_ l ヽ ,r'i_lヽ "!irt、! .! 、 - 、 iT ヽ r 、 l,! ,. r ;ミヽ;:: -、,,,ノ / ヾ、 ,.r'" r ,: ': ヾ '´ ヽ、. ;' ;r' ;'" r''";"' ,;! ヾ; ; ,; ; '" ミ ヾ;i:' ミ ヾ、, ;r;, ,ミヽ "''" ヽ ゼッヒ・ジップデークレ[Sech Zipdeclair] (1938~1996 オランダ)
■ 論文を書いている途中に思ったこと。UFO
- asahi.com:「UFOの存在、確認していない」 閣議で答弁書を決定 - 政治
- 石破防衛相、6分も大マジUFO持論展開 - 社会ニュース : nikkansports.com
- asahi.com:町村長官「UFO絶対いる」 政府公式見解に「異議」 - 政治
最近政界でUFOの話が流行っているらしい。以下は論文の締め切り間際、この手のニュースのタイトルを見て考えていたこと。
ちなみに答弁書の内容は「地球外から飛来してきたと思われる未確認飛行物体(UFO)の存在を確認していない」というものだったそうなので以下は多少的外れである。
はじめにこのニュースを聞いたとき、「未確認飛行物体の存在を確認していない」はトートロジーではないかと思った。しかしよく考えるとこれは違う。
まず「UFO」とは「未確認飛行物体」のことだ。
「未確認」というのは"unidentified"の訳であることから「何であるかがわからない」の意であると受け取ってよいだろう。
一方「何であるかわからない飛行物体」であっても存在が確認できる場合は明らかにある。従ってこれはトートロジーではない*2。
たとえばヒマラヤの頂上付近では誰も見ていない時にでも岩が陥落することがあると思われるのだが、これらの岩は飛行中確認されておらず、未確認飛行物体にあたるだろう。
また「未確認飛行物体」という語はむしろこちらを指すために使われていると思うのだが、次のような場合もある。「空に何か飛んでいるのだが、飛行機なのか何なのかわからず確認する以前に消えてしまった」というケースである。たとえばわたしが学部生の頃、夜中に寮生の1人が「UFOだ!」と騒ぎだし、見に行くと確かに白いものが浮いているということがあった。これは実際には学校の建物から浮べられている気象観測用の気球であったわけだが、そのことがわかるまでは、この白い物体はまさに未確認飛行物体であった。
これらの飛行物体は確実に存在する。
わたしも町村長官同様に未確認飛行物体は確実に存在すると思うのだが、しかしなぜか政府はその存在を否定したそうだ。
イアン・ハッキングの本(出典が確認できないのだが『表現と介入』か『言語はなぜ哲学の問題になるのか』)に出てきた懐疑主義の学生の話を思い出した。
その学生は「誰にも認識されないものは存在しない」という立場を厳格に護っており、「南極には誰も見たことのない白クマ(カモシカだったかも)がたくさんいると思うが」と聞かれると、「もし確認されればそのときにはすでに確認されている。それまでは存在しているとは言えない」とか何とか答えたと言う。
ひょっとすると、政府はこの学生と似た立場を取る懐疑主義者だったのだろうか、と一瞬考えたが、次に別の可能性を思いついた。
「政府は存在を否定した」とは書いていない。「存在を確認していない」と書いてある。「未確認飛行物体は存在するが、政府は存在を確認していない」という意味かもしれない。明らかに存在するものについても、政府がわざわざ確認していない場合はおそらくたくさんあるだろうから、当の発言をこのように解釈するならばそれほどおかしくなことは言っていない。
しかし逆に考えると「存在を確認」という作業はどういう風に遂行すればよいのだろうか。政府が公文書などで「安部首相の存在を確認した」と明示的に発言すればもちろん確認したことになるだろうが、政府がそのような発言をしたという話は聞いたことがない。たとえば政府は大地の存在を確認したことはあるのだろうか。しかしおそらく政府が執行する政策はほぼすべて大地が存在することを前提につくられているだろうから、政府の発表した文書をチェックし、明らかに「大地の存在を前提としている」箇所を発見すれば、政府が大地の存在を確認していることを証明できるかもしれない......。
などということをずっと考えていた。もちろんただの現実逃避である。
■ 論文を書いていて思ったこと
三浦俊彦は怖い
『虚構世界の存在論』を読み返して思った。ほんとに怖い。
何が怖いかというと間違ったことが書いてない。いや書いてあるのかもしれないが、少なくともわたしには間違っているかどうか判断できない。
そして扱っている問題が小さい。よく読むとものすごく小さい。
その小さな問題に対してどれだけの力を結集しているかがほの見えた瞬間にうすら寒いものを感じた。
■ 提出後に気がついた誤り
さっそく気がついた。
オースティンは「約束」などの発話行為の遂行がときにある種の意図を要求することを指摘し、それらの意図の欠如によって行為が不適切なものとなることを「不誠実[insincerity]」と名付けた(\cite{Austin1962}Austin[1962=1978]第四講)。たとえば「明日8時に会うことを約束するが、明日8時に会うつもりはない」という発言は矛盾して響く。これは「約束」という行為の遂行が約束された行為を遂行する意志を含意することを意味する
\footnote{
ただしここで言う「含意imply」は真理関数的な意味での含意を意味しない。ときに
論理学で含意と呼ばれるような「AならばB」という関係をオースティンは「帰結
entail」と呼んで含意からは区別している。オースティンの言う「含意」は「発言が
暗に意味すること」というくらいの意味である。
}。
これは不正確。
「ならば」は含意でも帰結でもなく条件法だ。
- 含意
- はメタ言語上の表現。「文Pは文Qを含意する」は文に言及する。
- 条件法
- はベタなレベルで完結している。「PならばQ」は文を使用しているのであって、言及はしていない。
この2つを混同するとクワイン先生がぶち切れるそうだ。
一方オースティンの言う「含意」と「帰結」は以下のようなものだ。
- 含意[imply]
- は発言に対して使う。たとえば「マットの上に猫がいる」という発言は「話者がマットの上に猫がいると信じていること」を含意する。
- 帰結[entail]
- は命題(ないし文)に対して使う。「マットの上に猫がいる」という文は「ネコの下にマットがある」という文を帰結する。
まあふつう社会学の人はそんな細かいことは気にしないのでいいと言えばいいんだが、わたしの論文から「無駄に細かい」ことを除いたら他にどんな長所があるというのか。
あと、冷静に見ると『これは「約束」という行為の遂行が約束された行為を遂行する意志を含意することを意味する』っていう日本語も変だな...orz。
■本
ドナルド・デイヴィドソン、春秋社、2007
というのが出るらしい。
てゆうかなんか論文にやたらとデイヴィドソンがでてくるようになってきた...。
■買った本
岩波書店、2006
筑摩書房、2006
おれ、論文の締め切りが終ったら田舎に帰ってゲーデル読むんだ......。
スマリヤンも買おうと思うのだが、どっちがいいのかな。
レビューによれば、下は誤訳が多いと書いてあるな。というわけで上を買った。
『決定不能の論理パズル―ゲーデルの定理と様相論理 (単行本) 』
どうでもいいが岩波文庫版についていた以下のレビューがおもしろかった。
実際、星1つも付けたくないがレヴューを書くのに星を付けなければならないので最低の星1つを付けた。
全宇宙は人間もあらゆる自然も含めて全知全能の聖書の神が創造した。そして、神はこの世界を司っておられる。当然、学問という学問も全て神が創造した世界を保つために神が創造された。であるがゆえ、人間がいかなる学問分野であれ、理性(知性)を絶対化することは人間を神とする神への冒涜となります。
聖書においては人間は神という全知全能なお方が理性に限界がある存在として創造されたものであると徹頭徹尾主張されます。欧米でも神を信じる信じないにかかわらず常識なのです。そして、数学や自然科学全般、神を信じる者は、神の素晴らしさを知るために行うのです。そこには人間を神と見做す今の数学・自然科学の考え方はありません。
■ 趣味
過剰に論理的な文章か、過剰に頭の悪い文章のどちらかしか書きたくない。
いつからそんな趣味になったのだろうと思うが、考えてみると卒論を書いていた頃にはすでにそのような傾向があったような気もする。
■ 引用
「全体とは、始めと中間と終りをもつところのものである」
アリストテレス『詩学』。物語の分析のなかででてくるテーゼ。
ところで、全体とは、始めと中間と終りとをもつところのものである。そして、始めとは、それ自身、必然的に他のものの後に甫めて存在するというのではないところのものであり、寧ろそれの後には自然に他のものが存在したり生成したりするように定められているところのものである。終りとは、それと逆で、それ自身は、必然的な帰結としてであれ、蓋然的な規則としてであれ、他のものの後に存在するのが本来であるが、しかし、それの後には何も他のものは存在しないところのものである。また、中間とは、それ自身が他のものの後に存在するとともに、それの後にも別のものが存在するところのものである。
ときどき大まじめに引用されているのを見るのだが、すげー当り前すぎてびっくりする。本当に何も言ってないところがすごいと思う。
「中間とは、それ自身が他のものの後に存在するとともに、それの後にも別のものが存在するところのものである」って言われても。決して間違ってはいないと思うが......。
ちなみに村上春樹の何かの小説にこれのパロディーが出てきた。小説とセックスの共通点について「はじめと中間と終りがあるところだけだ」と言うシーンがあったのを記憶している。考えてみるに、おそらく村上氏もどこかでこのアリストテレスのテーゼを見て「あたり前じゃないか」と思って印象に残っていたに違いない。
もしも機会があれば「あれってアリストテレスが元ネタだよね」って指摘するとちょっといばれるかもしれないですね(アリストテレスが元ネタというのは単なるわたしの推測だが)。
■ 学問
学問は正しい主張を延べることを目指しているという説をときに聞く。たとえばニクラス・ルーマンがそう言っていた。
しかしこれって変だと思うんだよね。
本当に主張が真であることだけが大切ならば、みんな論文にはトートロジーだけを書くと思うんだ(「ポチが犬であるならばポチは犬である」「ポチが犬でありかつミケが猫であるならばポチは犬である」云々)。しかしそんな人はいない。
■ dis
Firefox=Firebugの上にあるやつ
■ オミトロンフィルタ
Proxomitronフィルタ
[Patterns]
Name = "Add Amazon Short URL"
Active = TRUE
URL = "www.amazon.co.jp/*(dp|ASIN|product)/[0-9]+{10}/*"
Limit = 256
Match = "(<div[^>]++class="buying"[^>]++>*"
"<[^>]++class="sans"[^>]++>\s+)\1"
"([^<]+)\2(*<*/*>)\3$STOP()"
Replace = "$URL(\u&&(*/([0-9]+{10})\4*))"
"\1<a href="http://\h/dp/\4/ref=nosim/atakadaorg-22">\2</a>\3<br />"
"<textarea style='width:300px;height:auto;'><a href="http://\h/dp/\4/ref=nosim/atakadaorg-22">\2</a></textarea>"
"<br />"
"$STOP()"
↓こういう長いURLはいやじゃないか。
ちなみに、Amazonの商品ページのURLで一番短いのは↓こういうやつなんだ。
アフィリエイト的には↓これ。
本のタイトルがこの短いURLへのリンクになってると便利だよな?
ついでにタイトルの下に↓こういうのを追加するといいよね?
atakadaorg-22の部分を自分のアフィリエイトIDにすると便利だろうが、このまま使ってくれるとわたしが儲かる手はずなのでそのことは内緒にしておこう。
なぜかGreaseMonkey/UserJS版もつくった。
http://www.at-akada.org/download/AddAmazonShortURL.user.js
あんまりテストしてない。
追記:
ちょっと直しました。
■ 思う
論文を書いていると思うが、書くことで一番むずかしいのは自分が当り前だと思っていることを人に説明することだ。
往々にして他人が理解できないのは、自分が新しい考えだとか何とか思っている部分ではなく、自分が当り前だと思っているせいで書き損ねた部分だったりする。
「表現力がつく」というのは結局のところ、より正直により素直に物を書いたり喋ったりできるようになることではないか、とときどき思う。
■ 慣習
これも論文を書いていて思ったことだが、わたしは慣習というものが好きなんだ。
慣習というのは何かというと、「他のやり方でもいいのだけど、1つに決ってる方が便利なので、何となく昔からあるやり方でやっていること」だと思う。
具体的に言うと、エスカレーターのどちら側に立つかとかがそうだ。一部で有名な例だが電話が断線したときにどちらの側からかけ直すかとかもそうだな。
なぜ慣習のようなものが好きかということはあまりうまく説明できないが、わたしはきっと「他でもいいけど、1つに決っていると便利だから、何となくそのやり方でやっている」というようなものが好きなのだと思う。たとえば慣習が細部まで詳細に決められ明文化されると「規格」になったりするが、規格も嫌いじゃない。休日にJIS規格をランダムに選んで熟読するというほどではないが、たまにはそういうことをしてもよいのではないかと思うことがあるくらいには好きだと思う。
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%B9%E3%82%AB%E3%83%AC%E3%83%BC%E3%82%BF
ところで今知ったのだが、エスカレーターの上を歩くと危険なので、「日本エレベーター協会ではエスカレーターでの歩行禁止をマナーとして呼びかけている」そうだ。日本エレベーター協会が呼びかけているというところに風情を感じる。世の中にはエレベーターとエスカレーターを混同する人というのが結構な割り合いで存在するが、日本エレベーター協会がこんなことを呼びかけたりすると混同により拍車がかかるのではないかと他人事ながら心配になる。
■ setTimeoutと再帰による疑似ループ
ごめん、締め切りまでJavaScriptに触らないって言ったけど結構触っている。
Loop = function(opt){
var i = 0,
interval = opt.interval || 1000,
success;
if(opt.init)opt.init(i);
var loop = function(){
success = opt.until ? opt.until(i): null;
if(!success && (!opt.max || i< opt.max ) ){
opt.doThis(i);
i++
loop.state.times = i;
loop.nextLoop = function(){
var pid = setTimeout(function(){
loop();
clearTimeout(pid);
},interval);
loop.nextLoop.pid = pid;
}
loop.nextLoop();
}
else{
if(success){
loop.state.complete = true;
if(opt.oncomplete)opt.oncomplete();
}
if(opt.ensure)opt.ensure();
}
return loop.state;
};
loop.state = {
times:0,
complete:false,
cancel: function(){
loop.state.times = 0;
loop.complete = false;
if(opt.ensure)opt.ensure();
if(loop.nextLoop)clearTimeout(loop.nextLoop.pid);
}
};
return loop();
};
setTimeoutと再帰による疑似ループ。
疑似マルチスレッドみたいな処理が簡単に書ける。untilがtrueを返すかmax回にいたるまでdoThisの中身を実行。
以下のようにして使う。
Loop({
init: function(){
this.m = 1
this.n = 0;
this.div = document.createElement('div');
document.getElementById('entry-855').appendChild(this.div);
},
doThis: function(){
this.div.appendChild(document.createTextNode(this.m + ', '));
var tmp = this.m
this.m = this.m + this.n;
this.n = tmp;
},
until: function(){
return this.m > 100
},
oncomplete: function(){
document.getElementById('entry-855').removeChild(this.div);
},
ensure: function(){
this.n=0
},
interval: 1000
});
Loop({
init: function(){
this.n = 0;
this.div = document.createElement('div');
document.getElementById('entry-855').appendChild(this.div);
},
until: function(){
return this.n > 20;
},
doThis: function(){
this.n+=2;
this.div.appendChild(document.createTextNode(this.n+', '));
},
oncomplete: function(){
document.getElementById('entry-855').removeChild(this.div);
},
interval:700
});
http://www.infoq.com/jp/articles/js_multithread
上の記事を読んで、「そうかー先読み処理はむずかしいのかー」と思っていたが、これを思いついたおかげでわりとすぐできた。
■ Operaのarguments
数日風邪で寝ていまして、しばらくJavaScriptのことしか考えてなかったので他に書くことがありません。
(修論の締め切りも近づいてまいりました。風邪は治ったのでもう締め切りまでJavaScriptには触りません)
以下、驚いたこと。
JavaScriptには関数内でのみ参照できるargumentsという変数がある。噂によればargumentsは「配列のようなもの」であって配列ではないらしい。
var args;
var fn = function(){
args = arguments;
};
fn(0,1,2);
以上のように書くと関数の外側からargumentsを参照できるようになる。
で、Operaの場合。
>> args 0,1,2 >> typeof args object >> args instanceof Array true
配列だと主張する(他のブラウザだとfalse)。
>> args.pop() 2 >> args 0,1 >> args.push(3) 3 >> args 0,1,3
popとpushが動く(他のブラウザだと動かない)。
shiftを動かしてみる。
>> args.shift(); 0 >> args ,1 >> args.length 2 >> args[2] null >> args[1] 1 >> args[0] null
なぜか配列末尾までなくなった!
気をとりなおしてunshift。
>> args 0,1,2 >> args.unshift(3); 4 >> args 3,1,2, >> args.length 4
配列の頭がどっかいった!
何これ。こいつのせいで大変無駄な時間を......。
■ Link
[追記]HTMLエレメントと自作オブジェクトの間に循環参照があるとIEがメモリリークを起こすそうです。
ので下の記事のようなことをするのはやめた方がいいようです。[/追記]
ページ内にあるHTML要素だってJavaScriptから見ればオブジェクトなわけじゃないか。
で、オブジェクトであるということはエレメントに対する書き込みもできるわけなんだ。
そしてだな、今仮にA要素(<a href...>のことな)を見て、リンク先のページをJavaScriptでロードするような或る物をつくってるとするじゃないか。その場合読み込んだページをどこかにキャッシュできるようにしておくとありがたいわけだが、問題はどこにキャッシュするかだ。で、その選択肢の1つとして、リンクそのものにデータをキャッシュさせるというのもありなんじゃないかと思うんだ。
これはつまり「自分のリンク先の内容くらい自分で覚えておけ」という形で自己責任を追求する立場と考えることもできる。あと、これをやると結構綺麗に処理が書ける。
たとえばリンクをクリックすると、ハンドラが呼び出される。ハンドラはイベントのターゲットであるA要素に対し、キャッシュがあるかどうかを問い合わせる。もしキャッシュがあればそれを表示し、なければ新たにロードする。
というのはなかなか美しい流れなんじゃないかと思うのだが、ページ内のHTML要素に対してそんな大規模な書き込みをしてもいいのかな?というのが微妙に不安だった。だからリンクそのものではなくリンクに対するラッパーをつくっておいて、キャッシュはラッパーに持たせ、リンクにはラッパーへの参照だけを書き込むということにした。
今いちその辺の微妙なノウハウがわからないのだが、そういうことしてもいいのかな? どうなんだろう?
あとFunctionとかArrayのprototypeに関数を追加するのはどうなんだろう。firebugで見たときに追加した関数がぞろぞろ表示されたりして何となく気持ち悪いと思わないでもないが、えらい人も(prototype.jsとかLDRとか)やってるし、よく考えたら別にいいのかな。しばらくの間勝手に禁じ手にしてたのだがやっぱり開放することにしようか。
余談だが、Array.prototype.eachを追加する件について以前書いたが、prototype.js風じゃなくてjquery風の以下の方が素敵だと思った。
Array.prototype.each = function(itr){
for(var i=0,l=this.length;i<l;i++)
itr.apply(this[i])
}
これだと以下のように書ける。
[1,2,3].each(function(){
alert(this);
});
■風邪
風邪で寝ていた。
風邪で寝ていた間にJavaScriptをいじった(寝てろよ)。
JQueryをさわってみて、以下のように思った。
JavaScriptではイベント関係の関数などがブラウザ依存なのでその辺の扱いはライブラリによって様々。
prototype.jsだと、
Event.observe(document,'click',function(){alert('hoge')});
みたいな感じ。
JQueryはすごいので
$('div#sidebar').click(function(){alert('hoge')});
$(document).click(function(){alert('hoge')});
または
$(document).bind('click',function(){alert('hoge')});
などと書ける。寝てる間に、以前つくった前のページをロードするやつをJQueryで書き直してみたが(寝てろよ)、適当に書いても結構すぐ動いたのですごいと思った。
しかしJQueryほどがんばらなくても、ブラウザ依存を解消する際に、
$html(document).event('click',function(){alert('hoge')});
などと書けるようにすると良いのではないか。$html()とやるとラッパー用のオブジェクトを返すの。
そう思い、はじめは"HTML = function()"などとやっていたが、見づらいのでラッパー用のクラスを抽象化したものをつくった。
//util
Object.extend = function(destination, source){
for(var key in source){
destination[key] = source[key];
}
return destination;
};
Object.inherit = function(destination, source){
for(var key in source){
if(destination[key]) continue;
try{
destination[key] = source[key];
}catch(e){};
}
};
//wrapperClass
var wrapperClass = function(){
var klass = function(){
this.initialize.apply(this,arguments);
};
klass.copy = false;
klass.wrap = function(source){
var wrapping = new this();
if(this.copy){
Object.inherit(wrapping,source);
}
wrapping.original = source;
return wrapping;
};
klass.sugar = function(bind){
var _this = this;
var _wrap = function(){
return _this.wrap.apply(_this,arguments)
};
return _wrap;
};
klass.prototype = {};
klass.prototype.initialize = function(){};
return klass;
};
使い方の例。
//HTML Element
HTML = new wrapperClass();
HTML.copy = true;
Object.extend(HTML.prototype,{
event: function(type,handler){
var element = this.original;
if(element.addEventListener)
element.addEventListener(type,handler,false);
else if(element.attachEvent)
element.attachEvent('on'+type,handler);
},
removeEvent: function(type,handler){
var element = this.original;
if(element.removeEventListener)
element.removeEventListener(type,handler);
else if(element.detachEvent)
element.detachEvent('on'+type,handler);
}
});
var $html = HTML.sugar();
var handler = function(){alert('hoge')};
$html(document).event('click',handler);
new wrapperClass()とやると、wrapおよびsugarというメソッドをもったクラスを作成する。
その後、HTML.wrap(document)とか、HTML.wrap(document.getElementById('hoge'))などとやると、HTMLクラスのインタンスを作成する。
小文字のhtmlがインスタンスの名前だとするとhtml.originalに元のエレメントが格納される。htmlはHTMLクラスのインスタンスなので、prototypeにブラウザ依存解消用のラッパー関数を登録しておけばよい。上の例ではhtml.eventがクロスブラウザで動くイベントハンドラ登録用の関数となっている。
HTML.copyがtrueになってる場合、htmlにはoriginalのプロパティがコピーされる。これはもちろんただのコピーなのでインスタンスであるhtmlを書き換えてもドキュメントそのものを変更することはできないが、リードのみならば役に立つこともあるだろう。
また、HTML.sugar()とやるとシンタックスシュガー用の関数を作成する。単に$html = HTML.wrapとやるとコンテキストが変わってしまいうまく動かないため、こちらを利用する。$html=HTML.sugar()とすると、$html(document).eventなどと書けるようになる。
個人的にはklass.wrapの中のnew this()というところが気持ち悪くて良いと思う。
追記:
wrapの部分を以下のように書けば、オリジナルのメソッドを、あたかもラッパーオブジェクトのメソッドであるかのように実行できることに気づいた。
klass.wrap = function(source){
var wrapping = new this(source);
if(this.copy){
for(var key in source){
if(wrapping[key])continue;
try{
if(typeof source[key] == 'function'){
wrapping[key] = function(){
return source[key].apply(source,arguments)
};
}
else wrapping[key] = source[key];
}catch(e){}
}
}
wrapping.original = source;
return wrapping;
};
これなら、$html(document).createElement('div')などと書くこともできる。
個人的にはすごい発見のような気がしたのだが、書いているうちにだんだん自信がなくなってきた。
さらに追記:
上の書き方だと動かなかった。
var makeWrapper = function(wrapper,source){
for(var key in source){
if(wrapper[key])continue;
if(typeof source[key] == 'function'){
var methods = function(){
return source[key].apply(source, arguments);
}
wrapper[key]=methods;
}
else wrapper[key] = source[key];
}
};
var o = {};
makeWrapper(o,document);
o.createElement('div');
これだと動かない。argumentsの中身は空になる。
var fixContext = function(func, bind){
return function(){
return func.apply(bind,arguments);
}
}
makeWrapper = function(wrapper,source){
for(var key in source){
if(wrapper[key])continue;
if(typeof source[key] == 'function')
wrapper[key] = fixContext(source[key],source);
else wrapper[key] = source[key];
}
};
var o = {};
makeWrapper(o,document);
o.createElement('div');
これだと動く。
oからdocumentのメソッドが呼び出せるようになる。ただしIEだとダメ(documentのメソッドに対してapplyを使えない)。
■ eventListenerに引数をわたす
普通にaddEventListenerやattachEventを使ってイベントリスナを登録すると、リスナに引数をわたすことができない。
またイベントリスナはグローバルな関数として実行されるのでthisの参照先が変わってしまい困ることがある。
Hoge = function(value){this.value = value}
Hoge.prototype.plus = function(){
this.value++;
};
Hoge.prototype.minus = function(){
this.value--;
};
Hoge.prototype.setVal = function(value){
this.value = value;
};
Hoge.prototype.setListener = function(){
$html(document).event('click',this.plus);
$html(document).event('keydown',this.setVal(0));
}
var h = new Hoge(0);
h.setListener();
これだとイベントハンドラとして呼びだされたときにh.minusとh.plusの中のthisの参照先がインスタンスであるところのhじゃなくてwindowになっちゃうのでダメなんだよ。あとsetVal(0)もちゃんと動かないよ。
じゃあどうすればよいか。
Hoge.prototype.setListener = function(){
var self = this;
$html(document).event('click',
function(){self.plus()}
);
$html(document).event('keydown',
function(){self.setVal(0)}
);
}
わたしは今までこうやってやっていた。こうすると、変数selfにthis==hが格納され、selfはイベントハンドラにわたした無名関数からでも参照できるのでうまくいく。
しかしprototype.jsを見ていたら以下のような方法が使われていて、こっちの方がかっこいいと思った(内容はちょっと変えてある)。
//イベントハンドラ作成用の関数。
//bindしたいコンテキストとハンドラにわたしたい引数をわたす。
Function.prototype.toHandler = function(){
var __method = this,
args = [];
//argumentsをコピー
for(var i=0,leng=arguments.length;i<leng;i++)
args[i]=arguments[i];
//bindは関数にわたしたいコンテキスト
var bind = args.shift();
// ハンドラを作成し返す。
/// ハンドラは元の関数をbindのコンテキストで実行し、
/// 引数にはtoHandlerにわたした引数とeventが渡される。
return function(event){
__method.apply(bind,args.concat([event || window.event]))
}
}
Functionコンストラクタのプロトタイプ関数にハンドラ作成用の関数を登録してしまう。
これをやると、
Hoge.prototype.setListener = function(){
$html(document).event('click', this.plus.toHandler(this));
$html(document).event('keydown', this.setVal.toHandler(this,0));
}
と書けてすっきり。




