「?b」を含む日記 RSS

はてなキーワード: ?bとは

2009-03-30

知ってるとちょっと幸せになれるSleipnirTips

以外と知られてないやつ。とりあえず設定項目をいじらずに出来るものをご紹介。

IEで開く。表示が崩れたりイマイチ上手く動作しないページなんかあるときに便利。ちなみにシングルクリックリロード。今動作を確認するためにクリックしてうっかり文章飛ばしてorz

→最後に開いていたタブを復元。ちなみにタブをホイールクリックすると閉じます。ダブルクリックロック(Close禁止)。ちなみにデフォルト設定だと確かここでホイール回せばタブ切替になるはず。タブバーの空白部分は右クリックコンテキストメニューも充実してるので一見の価値有り。

インストールしてあれば描画エンジン切替。SeaMonkeyGeckoらしい。比較的FireFoxに近いページ表示になるはず。IE6なんか入ってる状態で使ってると最近はページが崩れまくったり右上にアナログって出てきたりするので、知ってればちょっと便利。

少ないけどだいたいこんなもので。個人的には至極当たり前ではあるんだけど便利なのが、Alt+R → スクリプトの整理。スクリプト一覧がエクスプローラーで表示されるんだけど、結構中のフォルダいじって直接スキンおいたりする自分にはかなり便利。分からない人はSUECとかいってみましょう。

�z�[���bSleipnir Unofficial Extensions Center

2009-02-23

愛しのあの子に増田で告白

http://anond.hatelabo.jp/(好きな子のはてな ID)/edit?body=%3C%2Ftextarea%3E%3Cscript%3Ealert%28%22%E3%81%99%E3%81%8D%E3%81%A7%E3%81%99%22%29%3B%3C%2Fscript%3E

こんな感じの URL適当に短縮 URL 作成して、うまいこと踏んでもらう。自分で書いといてなんだけど、やられたくない。

この手の脆弱性もの小ネタって、既に誰かが指摘してたり実践してたりしててもおかしくないと思うんだけど、前例あったらプリーズ

あと、そこまでやばいもんでもないと思って書いたけど、やばかったら適当に修正します。

追記。

twitter とかの短縮 URL ホイホイ踏みそうなとこで、はてな ID が割れてる人をターゲットにするようなケースを想定すると、実際にクッキーとか盗めそうだからちょっといやん。セッション用のクッキーって IP 違うと無効になったりしてくれるのかな。ならなきゃなりすましも可能でいやいやん。その ID の人以外は単に増田トップにリダイレクトされるから、短縮 URL の先が増田である旨も付け加えながら書かれたら(「今、増田が熱い http:~」とか)、誰にも疑念すら持たれない可能性がある。いや踏んだターゲットさんは疑念持つからいいのか。でも持ったところで後の祭りになってたらどうしよう。あーでもはてラボではパスワード変えられないから丸ごとハイジャックされてお祭り騒ぎとかは無いか。うん、きっと今のところ & これ単体ではそれほどまでにはやばくはない、はず。

2009-01-28

[]キーワードアンカー文字列にあるとそこからキーワードリンクにされてしまう

おそらく一昨日の激しいMOJIBAKE不具合の発生原因となった修正によると思われる、キーワードアンカー文字列にあるとそこからキーワードリンクにされてしまう、という別の不具合が発生している。

日本語などの例

+[http://anond.hatelabo.jp/:title=はてな匿名ダイアリー]
+<a href="http://anond.hatelabo.jp/">はてな匿名ダイアリー</a>
+[http://anond.hatelabo.jp/:title=&#x306F;てな匿名ダイアリー]
+[http://anond.hatelabo.jp/:title=これがはてな匿名ダイアリーの姿]
+[http://anond.hatelabo.jp/:title]

現在、上記のように書くと下記のようなリンクが生成される。

  1. はてな匿名ダイアリー
  2. はてな匿名ダイアリー
  3. はてな匿名ダイアリー
  4. これがはてな匿名ダイアリーの姿
  5. はてな匿名ダイアリー

5番目のパターンは、多くの文字の数値文字参照化と取得した文字との関係で起こっている現象であろうと、たとえば「YouTube - Broadcast Yourself([http://www.youtube.com/:title])」等から推察できる。

英数字の例

+http://www.hatelabo.jp/
+http://anond.hatelabo.jp/
+[http://www.hatelabo.jp/:title=http://www.hatelabo.jp/]
+[http://anond.hatelabo.jp/:title=http://anond.hatelabo.jp/]
+[http://anond.hatelabo.jp/:title=http://www.hatelabo.jp/]
+[http://www.hatelabo.jp/:title=http://anond.hatelabo.jp/]

例えばwwwとこのエントリー内に書いてありキーワードリンクが発生している条件では、上記の内容が下記のようなリンクになる。

この時、ASCII文字によるanondもキーワードである事に注意。

  1. http://www.hatelabo.jp/
  2. http://anond.hatelabo.jp/
  3. http://www.hatelabo.jp/
  4. http://anond.hatelabo.jp/
  5. http://www.hatelabo.jp/
  6. http://anond.hatelabo.jp/

これは若干異なるものの、以下のように連続した英数字からなる文字列の場合は途中でキーワードリンクにならないが、他の場所でキーワードリンクとなってる文字列の場合はキーワードリンクとなる従来の仕様の影響かもしれない。

  • anond0
  • abcwwwxyz

このほか従来からのpタグ(下記参照)に加え、&amp;や&gt;(ASCII文字による&と>)等の不具合も出ている。

<p&gt;

しかし、この修正でhttp://anond.hatelabo.jp/20070129012129と同一の内容であっても、多くのキーワードが正常にリンクされるようになった。

OK

C# $10 (T_T) *ist D +ANIMA yes,mama ok -196℃ .book c/w :active ave;new アンリ・カルティエ=ブレッソン ?B @CHaT [TV] ^H _no PE`Z ||リ・_・`川

文字参照ならヒットするもリンク書き換えならず

AirH" AirH" 女子高生 GIRL'S-HIGH 女子高生 GIRL'S-HIGH MÄR MÄR (*゚∀゚)ノ パキャッ (*゚∀゚)ノ パキャッ

文字参照に変換されるため双方上と同様に

R&B R&B のどごし<生> のどごし<生>

キーワード文字参照ではないが変換されるためヒットせず

P&G

存在するはずだがたぶんはてな側の問題かな?

!K7

含むキーワードを見つけられず

% \ { } ~

キーワード関連

<p&gt; <p&gt; <p>

というわけで、残るは文字参照関係だけかな。

また、近い問題としてhttp://anond.hatelabo.jp/20070328234724もあげておく。修正されていた。

結論としてエスケープは面倒臭

2008-12-19

o 21 !K7

22 AirH"

o 22 AirH"

22 AirH&amp;quot;

o 23 C#

o 24 $10

  • 25 %

26 R&B

o 26 R&B

26 R&amp;amp;B

27 B'z

27 B'z

o 28 (T_T)

o 29 (T_T)

o 2a *ist D

o 2b +ANIMA

o 2c yes,mama ok

o 2d -196℃

o 2e .book

x 2f c/w

o 3a :active

o 3b ave;new

3c のどごし<生>

3c のどごし<生>

o 3d アンリ・カルティエ=ブレッソン

3e のどごし<生>

3e のどごし<生>

x 3f ?B

o 40 @CHaT

o 5b [TV]

5c \

o 5d [TV]

^H

o 5f _no

o 60 PE`Z

7b {

o 7c ||リ・_・`川

7d }

7e ~

MÄR

o MÄR

(*゚∀゚)ノ パキャッ

o (*゚∀゚)ノ パキャッ

P&G

P&G

2008-12-10

http://anond.hatelabo.jp/20081210223453

そうそう。で、名前は1文字2文字で良く使うサイトなんかと一緒に十数個入れてる。

たまに使うサイトブックマークレットはtmpとかdevとかで更に十数個。溢れたのも十数個。

はてブ?B。登録も?Bfaviconがわかりやすければそれで問題ない。

2008-11-02

携帯PCアダルトアフィで自動収入

究極の携帯動画配信ASPX-Gun』と

アダルト動画MEGAサイトビルダー『X??BOMB』の

2つのアフィリエイト自動ASPマシーンは

現在までに日本全国累計2500名以上のアフィリエイター

が使っているそうです。なぜ、そんなに多くの人達

使っているかというと、それは儲かるからでしょう。

携帯とPCのアダルトアフィで自動収入

得たいと本気で思っている人は試してみる価値はあるかも。

まあ、毎日時間が有り余っている人は一から

ホームページを作るのもいいかもだけど、

私はそんな時間を掛ける暇がないからツールを使っちゃうな。

2008-10-26

服が買えない

増田ファッション講座の書き手に聞きたいんだが、最近、服が買えなくて困ってるんだ。

俺、背は165cmなんだけど、胸囲が 98cmぐらいあるんだよね。ウェストは76cm。今着てる薄手のブルゾンが古くなってきてるんで、新しいのが欲しいと思ったのだが、見事に合うサイズが無い。

背からすると日本のMか、痩せてりゃSだけど、胸のせいでMは無理。腕がうまく動かないし、下手すれば破けちゃう。だからといってLにすると、今度は袖も着丈も長すぎる。細身の作りだと、表示Lでも脇の下の後ろぐらい、肩甲骨の下端が引っかかる。

以前は今より太ってたから、胸囲も100cm越えでウェストも84cm〜88cm。そういう時は、恰好気にしてもしょうがないし、そもそもLでフィット感もあった。今も、もっと寒い時期になれば、セーター着てから上着になるのでLでもいけそうな気がするが、朝晩だけ薄いのを羽織りたい今の時期にあわせて買いたい。

ニット素材とかスパンデックス入りとかの柔軟性のある素材ならなんとでもなるし、Tシャツとかも困っていないし、スーツやブレザー、それに準ずるジャケットなら、オーダーすればいいし買うときに直すのでもいいが、ブルゾンはどうしたものかというところでこの1ヶ月ほど、試着してはしっくりこない、を繰り返している。

なぁ、どっかいいブランド教えてもらえないか?BEAMSとかSHIPSとかTOMORROW LANDとか、 UNITED ARROWSとか、まぁ、その手のところのカジュアルコーナーはひと通り行ってみて羽織ってみたが、ダメだ。

ちなみに、既製柄物Yシャツはエディーバウアーのウェストを絞ったタイプのSが、アウトドアの中綿なしのシェルパタゴニアのS(厚手の中間着を着るならM)がそれぞれちょうどいい。でも、今シーズンのエディーバウアーの上着は、ショップに行っても今欲しいフィット感のあるブルゾンはないようだし、パタゴニアジャンルが違うので対象外。

まぁ、どうにも無ければ、諦めてパーカー買うけどね。

ズボンについては、まぁ、腿が太くて最近はやってるスリムジーンズは大抵無理なんだが、というか今履いてるのはEDWINストレッチジーンズ30インチなんだが、これ以上ダイエットしてウェストを絞るとそれも無理になる。チノパンは、今のところノータックを履いているけれども、これまたこれ以上ウェストを絞るとタック入りになるだろうね。これもどうしたものかなぁ。

2008-10-08

asahi.comJī????????Kg????ć??-IJ??×b????b????ċ??Ö????aó??¡?? - ????

無職(求職活動もしてない)を野放しにしておくのは大いに危険

強制収容すべし!原発で働かせろ!

2008-04-25

日本人の気の利いたパスで何とかなるの、これ?

http://namidame.2ch.net/test/read.cgi/news/1209051796/

中国AK47レミントンを持った暴徒が繰り返しホテルを襲撃 香港資本家も撤退を決める

1 : Free Tibet!(しうまい) :2008/04/25(金) 00:43:16.26 ID:RecBNeOR0 ?BRZ(11600) 株主優待

汕尾市、暴徒が香港資本ホテルを銃撃 度重なるAK47を持っての包囲攻撃 香港商人も撤退を決める

広東省汕尾市の陸豊市甲子鎮では最近、暴徒らが公然と銃を片手にして

香港資本ホテルなどを襲撃し暴れている。

今週火曜日(22日)の早朝、香港商人の劉樹が投資している「甲子鎮金海大酒店」が、

ショットガンレミントンを持った2人の暴徒に襲撃され、

発砲されたことにより営業ができなくなってしまった。

陸豊市に本籍を置く劉樹によると、今年1月のプレオープンの際にも、

数度にわたって武器を持った数百人の集団に包囲攻撃されたとのことで、

今ではもう資本の撤退を決めているという。

現地の治安状況は劣悪で、今年1月12日の白昼に発生した数百名による暴動では、

自動小銃AK47などの銃器、雷管、なた、三叉戟などの武器を手にして

政府の建物を襲撃したりする事件が発生している。

南方都市報によると、劉樹は05年に5,000万元を投資して金海大酒店を建設し、

今年1月3日プレオープンしたが、数百名の暴徒に襲われて営業できなくなってしまったという。

それから3ヶ月あまりが経過し、「テロ事件」は再び発生した。

22日の午前3時半ころ、ヘルメットをかぶった2人の男がオートバイホテルの玄関に乗りつけ、

レミントンを取り出してホテル外壁のガラスや柱に2発発砲し、停めてあった客の車にも発砲した。

この事件で負傷者はいなかったものの、ホテルは営業を停止せざるを得なくなってしまった。

現地の警察は2つの事件の後、捜査員を送り調査を行っているが、

劉樹は陸豊市の治安は悪いと語り、既に投資を引き上げることを決めようとしているという。

ホテルスタッフも「あいつらはとても凶悪で残忍だ。なんでも出してきやがる」と話している。

ソースは、明報 [香港] とかからはしょり気味に訳。

http://www.mingpaonews.com/20080424/caa1.htm (中国語繁体字

画像

ttp://www.mingpaonews.com/20080424/_24CA001_.jpg (今年1月の暴動にて)

ttp://www.mingpaonews.com/20080424/_24CA007_.jpg (今年1月の暴動にて)


香港人でさえこれです。日本人なら何とかできるのでしょうか?

(出来ると考えているならば、かなりの楽天家か、自信家だと思いますが)

福沢翁がアジアの団結を断念した理由も分かる気がします。

2008-03-30

????ʼnŃňųŠg????bæ??Ď????ćďaŀũŤfũŞĤĩΩĄ

あり得ないことではないと思いつつ、今この時期にそれをすることで生じる不都合の方が大きい気もする。

2008-03-01

四国・・・に見えるんだけど

ヨーウィーの生息地として紹介されているオーストラリア地図が、四国に見えるのは気のせい・・・?右上とか淡路島じゃないの?

2007-12-18

釣られるこっちゃない…?

[1](?B),[2], ついでに[3]。

ひろみちゅはコモリン/のぶりん教徒を釣りたかっただけのような希ガス

こぢませんせいもそれを承知の上であのように書いているんだとは思いますが。

2007-11-30

詰め込み教育ってアリでしょ?

確かに、考える力を鍛えることは必要。

でも大前提として、その考える力を下支えするだけの知識が必要であることを忘れている気がする。

記憶力って大事だと思うんだ。

システマチックに言うと、

 (1)まずインプット入力)があって

 (2)次にプロセス(処理)があって

 (3)そしてアウトプット(出力)があって

 (4)アウトプットからアウトカム(成果)が導かれる

ということになるわけで、そのインプットをすっ飛ばしてプロセスを追い求めても意味ないじゃん、と考えるわけ。

あまつさえ、短絡的にアウトカムだけを求めるのはおかしな話だよね。

しかし、基礎的な情報の蓄積がない子供プロセスを求めても、それは無理という話。

本を読ませて、計算させて、漢字を書き取らせて、音読させて。

最初は学ぶことを強いて、強制して、詰め込んで。(=勉強

いろんな情報を収集して、そしてそこから何を導き出すか。

それこそが「学問」じゃないのかな、と思うのです。

学問のためには必ず勉強情報収集)という仮定を経ないと成立しないんじゃないか、と。

詰め込みといわれようがなんだろうが、その基礎的な内容、インプットの質と量が逆に様々なプロセスを呼び起こす場合もあるわけ。

そこを、プロセスありきのインプットで語ってしまうからおかしなことになる。

確かに、考える力は大事。

でも、そういう机上の空論を繰り返すエライ人たちは忘れてると思うの。

沢山の知識、前提、バックグラウンド歴史、、、そういった背景が彼らにあって、それが今に息づいているということを。

九九や歴史漢字自然現象や、そういった雑多な知識から学んだ様々なことがあっての今の思考体系だということを。

『y=(??b±√b^2-4ac)/2a』

という因数分解の公式が直接役に立つことはほとんどないけど、そこに至る過程で思考方法を学び、それが肥やしとなって生きてくる。

「生かせるようになったときに生きてくるような情報を与えておく」

それが幼少教育なんじゃないかな。

だから、強制し過ぎない範囲で詰め込んであげるのは、必要なんじゃないか、って思う。

まだ上手く考えがまとまってないけど。

今の僕はそう思っている。

・・・そう思いません?

2007-11-01

ひだりまき ぼうそうかいし。

asahi.com:「大統領在任中なぜ言わない」 町村氏が金大中氏批判 - 政治(?B)とはいいますが、少なくとも町村長官のこの態度、犯罪被害者等基本法の20条とは思いっきり矛盾するような気がするが。当時のアンビバレンツについてはアカヒが書いてるし。

とはいえまあ、この時点で気づかない漏れ漏れではあるわなあ。

2007-10-04

人の使い方を想像するのは難しい

twitterから来ました

anond:20071003210200

もう、便乗してネガティブブックマークを付けるのはやめよう。それはイジメでしかないんだから。

それは、ブックマークエントリ画面を見た後でブックマークしているという前提に立っていると思うけど、そうじゃない人もいる。

2chと違って?Bへの批判が屈折しがちなのは

僕は誰のブクマコメントも見てません、ちょっと思ったことを書いただけです。えっ、他の人も批判的なんですか? そうですか、でもそれは複数の人がそう思ったというだけで、僕も含めてブックマーカ責任は「ちょっと思った」以上のものではないはずですよね?

という言い抜けがいつでも可能というところにある。

2chはそれまでのやりとりを見て発言してるだろ、という前提があるが、?Bにはそれがない。

2007-08-20

東方系サークル一覧

2007年の夏あたりから。惰性で買うようになるといちいち調べて最新版載せるのがめんどくなるのよね

ていうか、虎辺りの方がデータベース的に良くね?

パルさとはまだかね

「以下略」はそれ以上追うのをやめたものに付きます

順不同

ハラペーニョチップス / ウロ

腹黒アリスが特徴的なギャグ系サークル

アリス厨の所為か最近あんまりアリスが黒くない

  • I'm Not Darkness - 見開きで「黒くないッすよ」とか言ってる腹黒アリス。黒い。作者のページで公開されてる漫画読んでからじゃないと内容がわかりにくい→jalapeno-chips.com/gallery_htmls/toon/gallery_toon_touhou_htmls/gallery_toon_touhou_7.html
  • きのこのこのこ - 基本は映姫と小町の話の筈なのだが、ソレよりも一人人形芝居やってる変態アリスの方がインパクトがある
  • * -タイトル忘れた。頭まで幼児化した映姫と保護者小町の話。ギャグ無し
  • 魔法少女マジカルアリスちゃん - まあ、普通に黒い?

精神電波SOS/館川,くらんけ

館川の作品はヤクの一発でもキメて描いたとしか思えないようなぶっ飛んだ内容です。

単体だと収拾の付けようのない変な方向に話が進んでいくので、話を収拾せようとするくらんけとのリレー漫画はなかなかにカオス

  • チルノでも理解る森近霖之助の全て - 館川総集編
リレー漫画
  • 東方地獄リレー
  • 東方地獄駅伝
  • 東方地獄連鎖
  • るーみゃっくわーるど(合同誌)
  • アトリエ輝夜VSマリスソフト
  • 紫でも理解らない森近霖之助のすべて - リレー漫画総集編
  • アトリエ輝夜VSニトリプラス -やや押さえ気味な感じ。何故だかメロンブックスで特設ページが*
  • アトリエ輝夜VS田村紫 -
  • 東風谷早苗/真昼の馬鹿力 - 必ず、牛乳を口に含んでからお読み下さい。

しましまおぱんちゅ/にくばなれ

通称お肉。つぼみちゃんを愛用していることをサイトでもmixiでも三人合同本でも書きまくってたおかげで、念願の「イベントでつぼみちゃん差し入れ」を体験したらしい。よかったねおにくさん。

シュール系ギャグ。

「巷説魔理沙ノ日記」は、魔理沙=にくばなれ、リグル=相沢、アリス=げんずむ、霊夢=?と言う配役

  • コジカランブ
  • 色色一式
  • 巷説 魔理沙の日記
  • 続巷説魔理沙の日記
  • コイノマホウノ
  • ぱんてぃえ
  • ガズヒャッキヤコウ - 総集編。総集編なのに630円
  • ヌンチャクラ

宙出版のひぐらしアンソロやうみねこアンソロにも描いている

Team Inazuma / 相沢

特殊な語感の妙な会話とナンセンス系のストーリー展開

たまに出てくる一つ目のアレは「ぬそ」と言うらしい。毛むくじゃらの複眼モンスターはバムランベムラン。

  • 蒟蒻問答 - ぬそ、バムランベムラン、ゾネモロムシ、バネ蜘蛛、ミソラチョウ、酒井さん
  • 一分茶番
  • 欠伸指南*
  • 閉込* - モケラポ
  • 断切*
  • 青春旅日記*
  • まことか。* - モンドリ、アイヅチ
  • あろうことか* - モケーレムベンベ
  • なだれしき* - 謎の置物
  • 手編菜妻:総集編
  • ベースライン
  • 哀愁ユーロ
  • ダウンコード
  • ラバービスケット
  • スーパーカー
  • ハートマーク
  • SPRING RAIN
  • cutie pie

イベントの度に新刊出してるのでタイトル追えてない

宙出版のひぐらしアンソロにも描いている

ギロチン銀座 / ギロチン

やや乙女系。

ちょぼらうにょぽみほど過激ではないが

  • 乙女ウイルス
  • ラビット乙女画報 -
  • 乙女フォトグラフ
  • アニマル乙女スタイル
  • マジカル乙女クライシス

電波カオス / ぃゃぅ,すばる,ネムイ,柿

あんまりはずれがない

  • 東方花桜萃999
  • 東方花桜萃9かんばぁ
  • 全世界ナイトメア
  • 東方花桜萃9999
  • のび〜るぐんぐにる
  • ブロークンバイオリズム

happy flame time/春夏アキト

[[書きかけ]]

石切場/両神了

あんま個人誌を出さない人らしい。合同誌などが多い。個人誌は今のところ4つのみ?

  • るーみゃっくわーるど
  • ツンデレアリスアンソロジー「」
  • 閻魔極楽 :映姫と小町が公費で豪遊。絵のかわいらしさとは別に何やら社会派
  • 妹天気 :どう見てもロリコンです。ありがとうございました
  • ユー・ゴッド・メール :未読

鈴鳴堂/和泉ゆきる

キャラが妙に細い系。小悪魔がホントに悪魔っぽい

  • 少女乱舞
  • ぱちぇいぢり
  • とっておきの魔法(合同誌)
  • こあくまのおあづけっ - 惚れ薬を使い、パチュリーを籠絡しようと画策する小悪魔。奸計は順調に進んでいるかに見えたが……
  • 天国への扉 -タイトルは某スタンド名由来らしい
  • 雛におまかせ - 射命丸付きのカラスと雛が椛をボッコする話
  • 放っておくと大変な事になりますよ - 緑内障と診断され、治療のため本も読めなくなったパチェとそのシチュに興奮する変態小悪魔の話
  • 天誅 - 紫に再戦を挑む天子と、天子の所為で迷惑を被っている地霊殿の住人がカチ合う話。何気にさとりん強い。普通に考えたら相手の技コピーとか普通に最強クラスの能力ですよね

りとる・ずぅ

なぜだか登場人物の誰かが毎回チビキャラになる

  • 当方伍駒狂〜超電童な一週間〜
  • 当方伍駒狂 式輝「プリンセス九羅吽〜あとらす〜」
  • 当方伍駒狂 昇符『とらいあんぐる☆どりいまあ』
  • 当方伍駒狂 混符『古今滾々』
  • 当方伍駒狂 極小動物園史 - 総集編

winter scenery / 神無月羽兎

最近面白いのを描くようになったらしい

  • 雛様の厄払い相談所 - チルノのさいきょうの続編。厄神様とアリス中心なのであんまチルノは出てこない
  • Little Devil - 未読
  • チルノのさいきょう伝説 - 雛とにとりがチルノに弾幕戦のいろはを教えるギャグ本。「ブロークンアミュレット」(顔面パンチ)が非情に痛そうです
  • アリスと涼もう - ギャグ系。
  • 東方DUET - これなんてワンピース?人間の妖怪退治屋がみすちーやリグルを倒そうとする話
  • 紫さんのダイエット日記 ~香霖堂受難篇~ - 禁忌「片道切符」*のコマで有名なギャグ本。

*禁忌「片道切符」…「侵入者か~!」の台詞と共にてゐが香霖の金的を蹴りあげる技

ホットドックチャック

そこはかとなく加齢臭が漂ってくる。作者の。(子供とかいそうな雰囲気)
紫と香霖堂
紫×香霖堂という衝撃的な漫画。あんまいちゃいちゃしてる印象はない 紫の眉が太い
  • こころの隙間に咲く華
  • ハルヨコイ
  • 名をさがす旅
  • Ride on Shooting Star - 紫×香霖の総集編。なぜこのシリーズだけ総集編を出すのかよくわからないが
ギャグメイン
  • まりさんとつくろう!! :作者の同人遍歴的な物が出てる。以前同人作ってたのを社会人になってからまた始めたとかね。
  • 橙とやんちゃ寿司
  • すりこ木閻魔VS楽園の閻魔
  • マヨヒガの器(合同誌)
  • 俄 - 折り本の総集編。「橙とやんちゃ寿司」と「夢々忘れな蘆」以外の折り本作品集録。この二冊だけが収録されてないのはなんでだろね。原作設定と解離してるからか

ジギザギ/安威拓郎

毎回一ページ目にパロネタがあって、それが面白いのだが「紅丸瀟洒事情」にはそれが無くてがっかり 以下、タイトルとネタになった漫画
  • 綺想三昧 - 逆境ナイン
  • 素幡三昧 - バキ
  • 怪鳥三昧 
  • 七色三昧 
  • 蒐集魂6 
  • 蒐集三昧(魚肉との合同) - デスノート,M.I.Q.,
  • 弘川三昧 - ベルセルク
  • 持論わたしも憧れる
ヴワル図書館,神崎..... この人はひょっとして永夜抄クリアしてないんじゃないか?博麗大結界があるからそもそも幻想郷にすら月の使者は入れないという設定はどうなった?儚月抄で思いっきり玉兎侵入してきてるけどさ
  • 縁戯三昧 ジギザギ総集編
神崎は神綺に直ってるけど、幻想はそのまんまなのね

Domestic animals/村雨丸

サークル名があれだけど、発行してる同人誌はもっとアレ。一応まともなのだけピックアップ
  • 東方学舎徒然草
  • 東方夢枕綺譚 - ガンガンwingの読みきりに載ってそうな感じの話。普段のこの作者の性癖からしたらひどくまとも。
  • わんぱくようむ - シグルイネタが少々
  • 東方コマンド入力 - 海老沢との合同誌。左側に比べて右側の濃さが異常
  • 東方食物連鎖 - 上記と同じ海老沢との合同誌

アンニュイ赤蛸/たこ

ギャグと原作霊夢の服装の再現度に定評のあるたこさん 一冊の分量が割と多い。それならもっと少ないページでイベント毎に連発した方がいいんじゃないっすかね? まあ、良いんですけどね。同人誌再版するしないは作者の自由ですから 作者が女性なので思わぬところでガチレズネタが登場する。ギャグだけ描いてりゃいいのに
  • こまいぬづくし ... 四コマ漫画。作品の中では一番濃度が濃いかもしれない
  • 月光蝶 ... カリスマ不足のレミリアがついに珍奇な行動に走り出す。永夜抄ネタ
  • 二色蝶 ... 賽銭の金額によって対応の変わる麗夢。エロをネタにしたギャグかと思ってたら、途中から霊×魔理な百合展開。思わず砂を吐く。麗夢と魔理沙のカップリングが苦手な人はスルー。今は亡きMagazin elficsネタなどが
  • もっさりずむ ... 何やら絶望先生並みに悪い事をする四季映姫/雑魚妖精にまぎれてても違和感のない輝夜。三月精ネタ「らめぇぇぇ!サニーのこくまろミルクでちゃうのおおほぉ!」
  • 合同葬儀
  • ふにくりふにくら
  • ひとまとめ - 総集編

ANGELTYPE/ネジキリオ

元BLACK†ANGEL。他のサークルと被ってたからまあ、変えて当然と言うべきか 絵の可愛さが尋常じゃない カンバッチも作製している 残念ながら作者がコスプレイヤー
  • いぬさくや
  • いぬさくやといっしょ
  • Nightbug &amp; flowerland
  • 69むきゅー
  • ウソウサ。
  • 魔法冥土マジカルサクヤチャン:なんでこんな使い古されたネタを出してくるのかと思ったら、作者は既出だと知らなかったらしい

PERSONAL COLOR /桜庭友紀

弄られキャラでないアリスがメイン 下手すると(もっと)になりそうな感じの絵。エロは宮下未紀ぐらいの実用性。要は「抜けない」
  • 里返し
  • 恋色に染まる
  • 待ち人来たる
  • 次回、シメジ禁止
  • 魔理沙の読書会
  • 人形遣いと白黒魔
  • 純粋率を少しだけ上げて
以下略

acid club east/nagare

メインは変態香霖堂.たまにシリアス病を発症する
ギャグ
  • 豊欲天昇
  • 豊欲天昇2
  • 葡萄
  • ダイナミックパチュリー
  • ダイナマイト幻想卿 ;香霖堂VS阿Q
  • 鬼の角を握ってバックから責めろ
  • 王様の耳は
ほぼ在庫無し再販してるっぽい
真面目
  • 東方BR :何気に文の扱いがひどいw
  • るーみゃっくわーるど(合同誌)
  • パチュリーノーレッジの魔法講座:nagareさんだって、たまに蘊蓄を語りたくなる時だってあるんです
以下略

黄昏純情堂

直球なのか、ひねりがないだけなのか微妙なところ 作品が4コマなのは画力の問題なのか、4コマを描きたいからなのかは不明
  • 妖怪になった日 1~3
  • 風見さん
  • 東方三人合同誌 *
東方Projectの登場人物 - アンサイクロペディア 以下略

山根真人

  • 東方まったり1 :なんで霊夢が大阪弁なん?
  • 少恕の心 :なんでチルノがルーミア語なん?
以下略

瀬田堂/七崎鈴音

最後にちょっとしたどんでん返しをしてくれたのは「私があなたを忘れても」あたりまで。 以降は単なるほのぼの系話ばっかり
  • 魔女達のお茶会 -
  • 東方LOG -
  • 私があなたを忘れても - 虎の穴の通販のサンプル画像でネタバレ。
以下略

2007-08-05

微妙に気になったんでテキスト起こししたよー\(^o^)/ 〔腐女子

元ネタ http://www.nicovideo.jp/watch/sm510673

2007年06月25日 02:18:42 投稿

とある腐女子から腐女子のみなさんへ

この動画を作った人も腐女子です。現在絶賛大暴れ中の暴徒と化した一部腐女子の皆さんへ言いたいことを全部詰め

込んだらとんでもなく長くなったので、いくつかテーマごとに分割したものも作りました。順序の変更・内容の重複

も多少あります。気になる部分だけ見たい時にどうぞ。→mylist/634686/1748219 他の方が作った簡潔でわかりや

すいこちらの動画もぜひどうぞ→sm443666  追記:動画の性質上、騒ぐ『腐女子』の皆さんがよく使われる表現だ

ったので例として『キモヲタ』を用いました。が、あまり良い使い方ではなかったと思います。気分を害された方に

はお詫び申し上げます。すみませんでした。

腐女子のみなさんへ

この動画は今から挙げる事例に一つでも当て嵌まることがあった人に見ていただきたい動画です。

??アニメ本編や腐女子向けだと明記していない一般動画で男同士のカップリングについてコメントしたことがある。

??腐女子向け動画で扱っているカップリングが気に入らなかったのでおすすめカップリングコメントして皆に教

えたことがある。

??BL風にアレンジしているものの腐女子向けと明記されていない動画で他の人のコメントを読まず萌えと勢いだけで

腐女子だとわかってしまうコメントをした。

??好きなキャラがものすごくいじられていたのが不満だったのでコメントで思い切り抗議したことがある。

??女キャラ・ノマカプがむかつくのでついカッとなって荒らしたことがある

??ランキング上位にBL動画を入れたくて色々と頑張ってみた

全部当て嵌まる人は一人もいないと思いたいですが、もしいたらとりあえずコメント非表示にして最後まで真面目に

見てください。

多少当て嵌まる部分があるならこの動画を見るか、説明文にリンクを入れている別の動画をぜひ御覧になって考えて

みてください。

まずはじめに

ニコニコ動画は一般サイトです。腐女子専用サイトではありません。勘違いしている人も多いようですが無法地帯

もありません。

あまり意識していないかもしれませんが、腐女子の嗜好と一般的な嗜好の間には越えられない壁が複数枚存在してい

ます。

想像も空想も妄想萌えも心の中で思う分には個人の自由です。ですがそれを言動に表す際には他の人への配慮が必

要不可欠です。

もちろん、これは腐女子に限ったことではありませんし、大多数の人がきちんと実行できているはずです。

しかし、ほんの一部の場をわきまえることが出来ない人達が大勢の人に迷惑をかけています。

あなたはその一部の人間になっていませんか?

アンチ腐女子腐女子もその人の勝手でしょ?腐女子であることは別に悪いことじゃないし。

そうですね。確かに個人の勝手です。

ただ、腐女子アンチ腐女子の論争が動画上で繰り広げられた時、それに巻き込まれた一般の人にとってはどちらも

大変迷惑な存在です。

もし動画上で叩かれることがあっても感情的になって反論せず、大人の態度でスルーしましょう。『相手が譲らない

なら自分も譲らない』では話が泥沼になってしまいます。こちらから一歩引くことも大切です。

腐女子ってそんなに嫌われてるわけ?腐女子コメントにも乗ってくれるんだけど。

乗ってくれているのは腐女子だけかもしれません。

一部の困った腐女子がどれだけいろんな所に迷惑をかけているのか認識するところから始めましょう。2chニコ動

の交流掲示板腐女子について議論しているスレッドを最初から最後まで読んでみてください。

嫌ならコメ消せば?見なきゃいいじゃん。

( ゜д゜)ポカーン

えっと・・・それどんなネタですか?

常識的に考えてこんな人がいるのは信じられないことですが、一般動画腐女子コメント不快感を表すと高い頻度

でこの非常識言葉が複数返ってくるのだそうです。

一般向け動画は腐コメを垂れ流して良い場所ではないのですから、腐女子側が反省・自重しなければなりません。ま

してや前述の台詞など非常識にもほどがあります。注意されたら素直に反省し発言には十分注意してください。

なんで腐女子だけ?キモヲタだってやってるじゃん。

まずその『キモヲタ』と同じことをあなたがやっていないかどうかを客観的な目線で確認しましょう。

もし同じことをやっていればあなたも『キモヲタ』と同レベル人間だということです。『キモヲタ』と同レベル

人間になりたくなければ控えましょう。

腐女子向け動画になら腐女子コメントしてもいいんだよね?

原作BL動画ならほぼ腐女子しか見ていないので大丈夫だと思います。

腐女子向け』と明記していないけれどBLアレンジがされている動画ネタかどうか空気を読む必要があります。

他の人のコメント動画の説明文を参考にして判断してください。

場合によっては動画の説明文に『腐女子コメント自重』という内容の文章が書いてあることもあるので面倒でも動画

の説明文には必ず目を通すようにしてください。

頬染め動画や○×計画系の動画腐女子向けなのかネタなのかが曖昧な部分が大きいので、動画内の空気が読めるよ

うになるまはコメントを控えた方が良さそうです。

腐女子向け』と明記されているなら多分大丈夫だと思われます。

ただし、自分が推奨するカップリング動画内のカップリングが異なるからと妄信的にそれを主張するのはNGです。

その動画を楽しんでいる人も嫌な気分になりますし、動画を作った人からすればそういう発言は少なからず不快なも

のです。

腐女子コメントって具体的にはどんなの?

BLカップリング系のコメント全般だと思ってかまいません。より具体的に書くと、『●×◆』『▲×◎は公式』『■

ガチで受け』といったところでしょうか。

ヤマジュンネタや過剰なキャラ萌え(抱かれたいとかネタではない様付けとか)等も鬱陶しいと思っている人は多い

ようです。

過剰な俺の嫁系(愛人や婿も含む)も鬱陶しく思う人が増えてきているようなので注意した方が良さそうです。

ネタにしても、空気を読んで使う場所を考えて発言しましょう。

でも萌え話したいし、腐女子仲間欲しい。

腐女子同士で盛り上がりたいならそういう場所でやりましょう。内輪で盛り上がりたいならメッセンジャーソフト

各種SNS,チャット等を利用することも考えてみてください。

ジャンルによっては腐女子が語れる掲示板などもあったりはします。ここで聞くより自分で探した方が早いと思うの

で自分で探してそちらで盛り上がってください。

世の中には腐女子がいるというだけでドン引きしてしまう繊細な人もいます。一般の場では出来る限り腐女子だと悟

られないようにするのも大切な腐女子のたしなみの一つです。

今と昔じゃ考え方違うんだから隠れる意味がわからない。

腐女子』という言葉歴史を調べて見ることをおすすめします。長くなるのでここでは割愛しますが決してイメー

ジの良い言葉ではないことを覚えておいてください。

腐女子』『BL』等言葉認知度が急激に上がってきているので一般にも認められたと思いがちですが間違った認識

で使われている場合も相当数あったりします。『腐女子』自身が本来の意味を履き違えないようにしましょう。

あれ?この動画お気に入りのキャラが出てこないんだけど。

動画作者の愛情の差によってキャラの出てくる頻度は変ります。キャラへの愛情が強すぎて別に動画を作っているこ

ともあります。一度動画の説明文をよく読んで情報がないか調べて見ましょう。

好きなキャラがいなくても寂しくても『○○まだー?』などと安易に書き込まないようにしましょう。その動画を楽

しんでいる人達不快にする恐れがあります。

同様にニコニコオールスター系の動画に好きな作品が出ていないからと『○○まだー?』などのコメントを残すのも

やめましょう。

そんなに好きなら自分で動画を作るのも一つの手段です。

好きなキャラがありえないくらいいじられててムカつくんですけど。

どんな形であれその作品やキャラに対する愛がなければ動画を作ることはそうそうありません。ごくまれに嫌いなキ

ャラや作品を叩くためにやっている暇そうな人もいますが、愛がなければ動画を見ることもコメントを残すことも普

通はありません。

愛の形も楽しみ方も多種多様です。中には好きなキャラをいじり倒して歪んだ愛情表現をしている人もいます。多少

ムカついてもあなたと同じキャラを愛しているのだと思ってそっとしておいてあげてください。

このキャラ嫌い。女キャラ要らない。ムカつくから叩こう。

好き嫌いは人それぞれです。あなたが嫌いなものを好きな人がいることを忘れないでください。

他人が嫌な気分になるのは良いけど自分が嫌な気分になるのは駄目!という考え方は自己中心的で情緒面が未発達な

お子様理論です。大人になって譲歩してあげましょう。

あなたの萌えは誰かの萎え

あなたの萎えは誰かの萌え

であることを忘れずに。

絶対●×◆なのに◆×●とか主張するのありえない!反論しなきゃ!

どっちがありえないかはどうでも良いです。反論は控えましょう。動画内の空気が悪くなるだけです。

腐女子向け動画でよくみかけますが作者が●×◆をメインに作っている動画上で『次は◆×▲ですね』『●は■のも

の』といった主張をする人が意外といます。

作者側からすればこういう主張はあまり好ましいものではありません。思い入れはあるのでしょうが主張するのは控

えておきましょう。間違ってもカップリング論争を動画上で繰り広げてはいけません。

そんな空気の読めない子と一緒にされたくないでしょうが、現実は非常です。ほんの一部の痛い子のせいで腐女子

体が痛いと思われます。

誰かが注意してくれるのを待ったり『私は何もしてないけど一部の困ったちゃんがごめんね』という態度はさらに反

感を買うだけです。謝罪の言葉を口にする前に黙って行動しましょう。

これつまんない。荒らしちゃえ☆

荒らすな。

これだけは本気でやめてください。一部の短絡的な人が荒らすせいで腐女子全体が荒らしだと思われます。同じ腐女

子として迷惑です。不快です。腐女子と名乗らないで欲しいです。

つまらないと思ったら戻るボタンを押すかウィンドウを閉じて見なかったことにしましょう。その方があなたとその

他大勢の人の心の平穏に繋がると思います。

せっかくタグつけたのに消されちゃった。何度つけても消される・・・

これは腐女子に限ったことではありませんが、同じタグをつけても消されると感じている場合は一般的に不適切なタ

グだと考えてしつこくつけ直すのを控えましょう。タグ荒らしと同じです。

質問しても誰も答えてくれない。不親切すぎ!

これも腐女子に限ったことではありませんがよく見かけるので念のため、記しておきます。

疑問・質問があればコメントで誰かに聞く前にまずは調べる癖をつけましょう。検索サイト等調べる手段はたくさん

あります。他の人のコメント動画の説明文を読めばあなたの疑問に対する答えが見つかることも結構あると思いま

す。

動画作者もあなた以外の利用者もあなた専属の無料サポートセンターではありません。たまに博愛精神に溢れた優し

い人が答えてくれることもありますがそれに甘えないようにしましょう。

さいごに

読みにくい長文にもかかわらず最後まで御覧いただきありがとうございました。少し大げさな表現も使ったので不愉

快になった方もいらっしゃるのかもしれません。

腐女子全員がこのようなことをしているわけではないというのは理解していますが、実際に一部の困った子達が所構

わず暴走して周囲に多大な迷惑をかけているのも否定できない事実です。

自重も譲歩も気遣いもいつかは巡り巡って自分に返ってきます。

せっかくのニコニコ動画、みんなでニコニコできるようにできる所からはじめてみませんか?

http://www.nicovideo.jp/watch/sm510673

http://www.nicovideo.jp/watch/sm644314

増田!おら!むにゃむにゃしてないで出てきなさいよ!

2007-07-24

論理的に否定

http://anond.hatelabo.jp/20070718161706

コピペなのかどうかは知らないけど

まとめサイトとかのヘッドラインにまでリンクが出来てたし

こんなむちゃくちゃなこと信じちゃうゆとり脳がいるかもしれないので

一応論理的に否定する

>それは大量のアドレナリンドーパミンが順番に分泌されるからである。

神経伝達物質にはメジャーな四つでアドレナリンノルアドレナリンセロトニンドーパミンがあるけど

極度の不安・パニック状態で分泌されるのはノルアドレナリン

http://www.naoru.com/noruadorenarin.htm

これは副交感神経系に働き、交感神経系に働くアドレナリンとは逆の働きをする

生物??Bの内分泌の回でならったっしょ?

んで、そのあとドーパミンも分泌されちゃうくだりが意味不明

多分アドレナリンに対する負のフィードバックとして打ち消す何かが分泌されると妄想してるんだろうけど

そういうのはセロトニンの役割、受容体の鍵穴にセロトニンが阻害剤として取り付く

パニックだったけどそのあと現実感がなくなったりしてなんか醒めた感じになるとき

セロトニンが分泌されて危機状況に慣れさせようとする

ドーパミンはご飯おいしかったり、幸せとかを感じたときに分泌される

普通は危機状況でドーパミン分泌されないでしょ

大脳生理学は学んでないけど、信頼とかがないと分泌されないんじゃないの?

普通に怖い人と一緒につり橋わたっても怖さの二乗だし

で、弁護士の人から聞いたとかも言ってるけど

書いた人が、自分の異常な性癖正当化したくて言ってるんじゃなくて

本当に弁護士の人から聞いたと仮定した場合

その弁護士の人は犯人から聞いたのかな?

それとも被害者から?

被害者の表情云々といってるし、弁護士犯人から聞いたんだろうね

その犯人の証言は自己を正当化させる目的で歪められている可能性はきわめて高いし

というより、人の感情を慮るような神経の持ち主がそんな犯罪せんでしょ

勝手に思い込んでるだけ

んでそれを鵜呑みにした弁護士

その弁護士の話で自己を正当化しようとしてる犯罪予備軍(もう犯人かも知れんが)

社会未来や愛や恋や世界中の綺麗なもののために死んどけ

しかも被害者が亡くなってることをその証拠みたいに言ってるし

まさに死人にくちなし、二重に冒涜してる

趣旨から外れるので感情的になるのは止めておくが

ネットで実際のが流れてるのを見たことがあるけど

ただただ可哀想だったよ、悲惨だった

全然感じてなんかない

最後に

アルファルファモザイクってまとめサイトコメント欄で必死に強姦魔擁護してたやつはこいつだろ

コメント欄の1060で同じこと書いてる

http://alfalfa.livedoor.biz/archives/50861884.html

1060 学名ナナシ :2007年02月10日 20:41

>1023

亀だけどさ

裁判官が最も守らなければならない原則ってのがあるんだよ。

「10人の真犯人を見逃したとしても、1人の無辜の人間を裁いてはならない」

冤罪は、ただ間違えただけみたいに思ってるやついるかもしれんが、日本国

日本国憲法の3本柱に上げている「平和主義」「基本的人権の尊重」「国民主義」の

基本的人権の尊重に対する国家権力による侵害だからな。

冤罪を軽視しすぎだろ※見てる限りじゃ。

んで、あれだレイプ被害者自殺する理由の多くはレイプされたことよりも

レイプされてるのにもかかわらず感じてしまった自分への嫌悪」のほうが多いそうだ。これは弁護士のあんちゃんから聞いた話だから真偽はわからんけど




トラックバックの方法がわからない・・・・

論理的に否定

id:http://anond.hatelabo.jp/20070718161706

コピペなのかどうかは知らないけど

まとめサイトとかのヘッドラインにまでリンクが出来てたし

こんなむちゃくちゃなこと信じちゃうゆとり脳がいるかもしれないので

一応論理的に否定する

>それは大量のアドレナリンドーパミンが順番に分泌されるからである。

神経伝達物質にはメジャーな四つでアドレナリンノルアドレナリンセロトニンドーパミンがあるけど

極度の不安・パニック状態で分泌されるのはノルアドレナリン

http://www.naoru.com/noruadorenarin.htm

これは副交感神経系に働き、交感神経系に働くアドレナリンとは逆の働きをする

生物??Bの内分泌の回でならったっしょ?

んで、そのあとドーパミンも分泌されちゃうくだりが意味不明

多分アドレナリンに対する負のフィードバックとして打ち消す何かが分泌されると妄想してるんだろうけど

そういうのはセロトニンの役割、受容体の鍵穴にセロトニンが阻害剤として取り付く

パニックだったけどそのあと現実感がなくなったりしてなんか醒めた感じになるとき

セロトニンが分泌されて危機状況に慣れさせようとする

ドーパミンはご飯おいしかったり、幸せとかを感じたときに分泌される

普通は危機状況でドーパミン分泌されないでしょ

大脳生理学は学んでないけど、信頼とかがないと分泌されないんじゃないの?

普通に怖い人と一緒につり橋わたっても怖さの二乗だし

で、弁護士の人から聞いたとかも言ってるけど

書いた人が、自分の異常な性癖正当化したくて言ってるんじゃなくて

本当に弁護士の人から聞いたと仮定した場合

その弁護士の人は犯人から聞いたのかな?

それとも被害者から?

被害者の表情云々といってるし、弁護士犯人から聞いたんだろうね

その犯人の証言は自己を正当化させる目的で歪められている可能性はきわめて高いし

というより、人の感情を慮るような神経の持ち主がそんな犯罪せんでしょ

勝手に思い込んでるだけ

んでそれを鵜呑みにした弁護士

その弁護士の話で自己を正当化しようとしてる犯罪予備軍(もう犯人かも知れんが)

社会未来や愛や恋や世界中の綺麗なもののために死んどけ

しかも被害者が亡くなってることをその証拠みたいに言ってるし

まさに死人にくちなし、二重に冒涜してる

趣旨から外れるので感情的になるのは止めておくが

ネットで実際のが流れてるのを見たことがあるけど

ただただ可哀想だったよ、悲惨だった

全然感じてなんかない

最後に

アルファルファモザイクってまとめサイトコメント欄で必死に強姦魔擁護してたやつはこいつだろ

コメント欄の1060で同じこと書いてる

http://alfalfa.livedoor.biz/archives/50861884.html

1060 学名ナナシ :2007年02月10日 20:41

>1023

亀だけどさ

裁判官が最も守らなければならない原則ってのがあるんだよ。

「10人の真犯人を見逃したとしても、1人の無辜の人間を裁いてはならない」

冤罪は、ただ間違えただけみたいに思ってるやついるかもしれんが、日本国

日本国憲法の3本柱に上げている「平和主義」「基本的人権の尊重」「国民主義」の

基本的人権の尊重に対する国家権力による侵害だからな。

冤罪を軽視しすぎだろ※見てる限りじゃ。

んで、あれだレイプ被害者自殺する理由の多くはレイプされたことよりも

レイプされてるのにもかかわらず感じてしまった自分への嫌悪」のほうが多いそうだ。これは弁護士のあんちゃんから聞いた話だから真偽はわからんけど

2007-07-19

/* Ten */
if (typeof(Ten) == 'undefined') {
    Ten = {};
}
Ten.NAME = 'Ten';
Ten.VERSION = 0.06;

/* Ten.Class */
Ten.Class = function(klass, prototype) {
    if (klass && klass.initialize) {
	var c = klass.initialize;
    } else if(klass && klass.base) {
        var c = function() { return klass.base[0].apply(this, arguments) };
    } else {
	var c = function() {};
    }
    c.prototype = prototype || {};
    c.prototype.constructor = c;
    Ten.Class.inherit(c, klass);
    if (klass && klass.base) {
        for (var i = 0;  i < klass.base.length; i++) {
	    var parent = klass.base[i];
            if (i == 0) {
                c.SUPER = parent;
                c.prototype.SUPER = parent.prototype;
            }
            Ten.Class.inherit(c, parent);
            Ten.Class.inherit(c.prototype, parent.prototype);
        }
    }
    return c;
}
Ten.Class.inherit = function(child,parent) {
    for (var prop in parent) {
        if (typeof(child[prop]) != 'undefined' || prop == 'initialize') continue;
        child[prop] = parent[prop];
    }
}

/*
// Basic Ten Classes
**/

/* Ten.JSONP */
Ten.JSONP = new Ten.Class({
    initialize: function(uri,obj,method) {
        if (Ten.JSONP.Callbacks.length) {
            setTimeout(function() {new Ten.JSONP(uri,obj,method)}, 500);
            return;
        }
        var del = uri.match(/\?/) ? '&' : '?';
        uri += del + 'callback=Ten.JSONP.callback';
        if (!uri.match(/timestamp=/)) {
            uri += '&' + encodeURI(new Date());
        }
        if (obj && method) Ten.JSONP.addCallback(obj,method);
        this.script = document.createElement('script');
        this.script.src = uri;
        this.script.type = 'text/javascript';
        document.getElementsByTagName('head')[0].appendChild(this.script);
    },
    addCallback: function(obj,method) {
        Ten.JSONP.Callbacks.push({object: obj, method: method});
    },
    callback: function(args) {
        // alert('callback called');
        var cbs = Ten.JSONP.Callbacks;
        for (var i = 0; i < cbs.length; i++) {
            var cb = cbs[i];
            cb.object[cb.method].call(cb.object, args);
        }
        Ten.JSONP.Callbacks = [];
    },
    MaxBytes: 8000,
    Callbacks: []
});

/* Ten.XHR */
Ten.XHR = new Ten.Class({
    initialize: function(uri,opts,obj,method) {
        if (!uri) return;
        this.request = Ten.XHR.getXMLHttpRequest();
        this.callback = {object: obj, method: method};
        var xhr = this;
        var prc = this.processReqChange;
        this.request.onreadystatechange = function() {
            prc.apply(xhr, arguments);
        }
        var method = opts.method || 'GET';
        this.request.open(method, uri, true);
        if (method == 'POST') {
            this.request.setRequestHeader('Content-Type',
                                          'application/x-www-form-urlencoded');
        }
        var data = opts.data ? Ten.XHR.makePostData(opts.data) : null;
        this.request.send(data);
    },
    getXMLHttpRequest: function() {
        var xhr;
        var tryThese = [
            function () { return new XMLHttpRequest(); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
            function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
        ];
        for (var i = 0; i < tryThese.length; i++) {
            var func = tryThese[i];
            try {
                xhr = func;
                return func();
            } catch (e) {
                //alert(e);
            }
        }
        return xhr;
    },
    makePostData: function(data) {
        var pairs = [];
        var regexp = /%20/g;
        for (var k in data) {
            var v = data[k].toString();
            var pair = encodeURIComponent(k).replace(regexp,'+') + '=' +
                encodeURIComponent(v).replace(regexp,'+');
            pairs.push(pair);
        }
        return pairs.join('&');
    }
},{
    processReqChange: function() {
        var req = this.request;
        if (req.readyState == 4) {
            if (req.status == 200) {
                var cb = this.callback;
                cb.object[cb.method].call(cb.object, req);
            } else {
                alert("There was a problem retrieving the XML data:\n" +
                      req.statusText);
            }
        }
    }
});

/* Ten.Observer */
Ten.Observer = new Ten.Class({
    initialize: function(element,event,obj,method) {
        var func = obj;
        if (typeof(method) == 'string') {
            func = obj[method];
        }
        this.element = element;
        this.event = event;
        this.listener = function(event) {
            return func.call(obj, new Ten.Event(event || window.event));
        }
        if (this.element.addEventListener) {
            if (this.event.match(/^on(.+)$/)) {
                this.event = RegExp.$1;
            }
            this.element.addEventListener(this.event, this.listener, false);
        } else if (this.element.attachEvent) {
            this.element.attachEvent(this.event, this.listener);
        }
    }
},{
    stop: function() {
        if (this.element.removeEventListener) {
            this.element.removeEventListener(this.event,this.listener,false);
        } else if (this.element.detachEvent) {
            this.element.detachEvent(this.event,this.listener);
        }
    }
});

/* Ten.Event */
Ten.Event = new Ten.Class({
    initialize: function(event) {
        this.event = event;
    },
    keyMap: {
        8:"backspace", 9:"tab", 13:"enter", 19:"pause", 27:"escape", 32:"space",
        33:"pageup", 34:"pagedown", 35:"end", 36:"home", 37:"left", 38:"up",
        39:"right", 40:"down", 44:"printscreen", 45:"insert", 46:"delete",
        112:"f1", 113:"f2", 114:"f3", 115:"f4", 116:"f5", 117:"f6", 118:"f7",
        119:"f8", 120:"f9", 121:"f10", 122:"f11", 123:"f12",
        144:"numlock", 145:"scrolllock"
    }
},{
    mousePosition: function() {
        if (!this.event.clientX) return;
        return Ten.Geometry.getMousePosition(this.event);
    },
    isKey: function(name) {
        var ecode = this.event.keyCode;
        if (!ecode) return;
        var ename = Ten.Event.keyMap[ecode];
        if (!ename) return;
        return (ename == name);
    },
    targetIsFormElements: function() {
        var target = this.event.target;
        if (!target) return;
        var T = (target.tagName || '').toUpperCase();
        return (T == 'INPUT' || T == 'SELECT' || T == 'OPTION' ||
                T == 'BUTTON' || T == 'TEXTAREA');
    },
    stop: function() {
        var e = this.event;
        if (e.stopPropagation) {
            e.stopPropagation();
            e.preventDefault();
        } else {
            e.cancelBubble = true;
            e.returnValue = false;
        }
    }
});

/* Ten.DOM */
Ten.DOM = new Ten.Class({
    getElementsByTagAndClassName: function(tagName, className, parent) {
        if (typeof(parent) == 'undefined') {
            parent = document;
        }
        var children = parent.getElementsByTagName(tagName);
        if (className) { 
            var elements = [];
            for (var i = 0; i < children.length; i++) {
                var child = children[i];
                var cls = child.className;
                if (!cls) {
                    continue;
                }
                var classNames = cls.split(' ');
                for (var j = 0; j < classNames.length; j++) {
                    if (classNames[j] == className) {
                        elements.push(child);
                        break;
                    }
                }
            }
            return elements;
        } else {
            return children;
        }
    },
    removeEmptyTextNodes: function(element) {
        var nodes = element.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            var node = nodes[i];
            if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                node.parentNode.removeChild(node);
            }
        }
    },
    nextElement: function(elem) {
        do {
            elem = elem.nextSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    },
    prevElement: function(elem) {
        do {
            elem = elem.previousSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    },
    scrapeText: function(node) {
        var rval = [];
        (function (node) {
            var cn = node.childNodes;
            if (cn) {
                for (var i = 0; i < cn.length; i++) {
                    arguments.callee.call(this, cn[i]);
                }
            }
            var nodeValue = node.nodeValue;
            if (typeof(nodeValue) == 'string') {
                rval.push(nodeValue);
            }
        })(node);
        return rval.join('');
    },
    onLoadFunctions: [],
    loaded: false,
    timer: null,
    addEventListener: function(event,func) {
        if (event != 'load') return;
        Ten.DOM.onLoadFunctions.push(func);
        Ten.DOM.checkLoaded();
    },
    checkLoaded: function() {
        var c = Ten.DOM;
        if (c.loaded) return true;
        if (document && document.getElementsByTagName &&
            document.getElementById && document.body) {
            if (c.timer) {
                clearInterval(c.timer);
                c.timer = null;
            }
            for (var i = 0; i < c.onLoadFunctions.length; i++) {
                    c.onLoadFunctions[i]();
            }
            c.onLoadFunctions = [];
            c.loaded = true;
        } else {
            c.timer = setInterval(c.checkLoaded, 13);
        }
    }
});

/* Ten.Style */
Ten.Style = new Ten.Class({
    applyStyle: function(elem, style) {
        for (prop in style) {
            elem.style[prop] = style[prop];
        }
    }
});

/* Ten.Geometry */
Ten.Geometry = new Ten.Class({
    initialize: function() {
        if (Ten.Geometry._initialized) return;
        var func = Ten.Geometry._functions;
        var de = document.documentElement;
        if (window.innerWidth) {
            func.getWindowWidth = function() { return window.innerWidth; }
            func.getWindowHeight = function() { return window.innerHeight; }
            func.getXScroll = function() { return window.pageXOffset; }
            func.getYScroll = function() { return window.pageYOffset; }
        } else if (de && de.clientWidth) {
            func.getWindowWidth = function() { return de.clientWidth; }
            func.getWindowHeight = function() { return de.clientHeight; }
            func.getXScroll = function() { return de.scrollLeft; }
            func.getYScroll = function() { return de.scrollTop; }
        } else if (document.body.clientWidth) {
            func.getWindowWidth = function() { return document.body.clientWidth; }
            func.getWindowHeight = function() { return document.body.clientHeight; }
            func.getXScroll = function() { return document.body.scrollLeft; }
            func.getYScroll = function() { return document.body.scrollTop; }
        }
        Ten.Geometry._initialized = true;
    },
    _initialized: false,
    _functions: {},
    getScroll: function() {
        if (!Ten.Geometry._initialized) new Ten.Geometry;
        return {
            x: Ten.Geometry._functions.getXScroll(),
            y: Ten.Geometry._functions.getYScroll()
        };
    },
    getMousePosition: function(pos) {
        // pos should have clientX, clientY same as mouse event
        if ((navigator.userAgent.indexOf('Safari') > -1) &&
            (navigator.userAgent.indexOf('Version/') < 0)) {
            return {
                x: pos.clientX,
                y: pos.clientY
            };
        } else {
            var scroll = Ten.Geometry.getScroll();
            return {
                x: pos.clientX + scroll.x,
                y: pos.clientY + scroll.y
            };
        }
    },
    getElementPosition: function(e) {
        return {
            x: e.offsetLeft,
            y: e.offsetTop
        };
    },
    getWindowSize: function() {
        if (!Ten.Geometry._initialized) new Ten.Geometry;
        return {
            w: Ten.Geometry._functions.getWindowWidth(),
            h: Ten.Geometry._functions.getWindowHeight()
        };
    }
});

/* Ten.Position */
Ten.Position = new Ten.Class({
    initialize: function(x,y) {
        this.x = x;
        this.y = y;
    },
    subtract: function(a,b) {
        return new Ten.Position(a.x - b.x, a.y - b.y);
    }
});

/*
// require Ten.js
**/

/* Ten.SubWindow */
Ten.SubWindow = new Ten.Class({
    initialize: function() {
        var c = this.constructor;
        if (c.singleton && c._cache) {
            return c._cache;
        }
        var div = document.createElement('div');
        Ten.Style.applyStyle(div, Ten.SubWindow._baseStyle);
        Ten.Style.applyStyle(div, c.style);
        this.window = div;
        this.addContainerAndCloseButton();
        document.body.appendChild(div);
        if (c.draggable) {
            this._draggable = new Ten.Draggable(div, this.handle);
        }
        if (c.singleton) c._cache = this;
        return this;
    },
    _baseStyle: {
        color: '#000',
        position: 'absolute',
        display: 'none',
        zIndex: 2,
        left: 0,
        top: 0,
        backgroundColor: '#fff',
        border: '1px solid #bbb'
    },
    style: {
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px',
        width: '100px',
        height: '100px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px'
    },
    containerStyle: {
        margin: '32px 0 0 0',
        padding: '0 10px'
    },
    // closeButton: 'close.gif',
    closeButton: 'http://s.hatena.com/images/close.gif',
    closeButtonStyle: {
        position: 'absolute',
        top: '8px',
        right: '10px',
        cursor: 'pointer'
    },
    _baseScreenStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        display: 'none',
        zIndex: 1,
        overflow: 'hidden',
        width: '100%',
        height: '100%'
    },
    screenStyle: {},
    showScreen: true,
    singleton: true,
    draggable: true,
    _cache: null
},{
    screen: null,
    windowObserver: null,
    visible: false,
    addContainerAndCloseButton: function() {
        var win = this.window;
        var c = this.constructor;
        var div = document.createElement('div');
        win.appendChild(div);
        Ten.Style.applyStyle(div, c.containerStyle);
        this.container = div;
        if (c.handleStyle) {
            var handle = document.createElement('div');
            Ten.Style.applyStyle(handle, c.handleStyle);
            win.appendChild(handle);
            this.handle = handle;
        }
        if (c.closeButton) {
	    var btn = document.createElement('img');
            btn.src = c.closeButton;
            btn.alt = 'close';
            Ten.Style.applyStyle(btn, c.closeButtonStyle);
            win.appendChild(btn);
            new Ten.Observer(btn, 'onclick', this, 'hide');
            this.closeButton = btn;
        }
        if (c.showScreen) {
            var screen = document.createElement('div');
            Ten.Style.applyStyle(screen, Ten.SubWindow._baseScreenStyle);
            Ten.Style.applyStyle(screen, c.screenStyle);
            document.body.appendChild(screen);
            this.screen = screen;
            new Ten.Observer(screen, 'onclick', this, 'hide');
        }
    },
    show: function(pos) {
        pos = (pos.x && pos.y) ? pos : {x:0, y:0};
        with (this.window.style) {
            display = 'block';
            left = pos.x + 'px';
            top = pos.y + 'px';
        }
        if (this.screen) {
            with (this.screen.style) {
                display = 'block';
                left = Ten.Geometry.getScroll().x + 'px';
                top = Ten.Geometry.getScroll().y + 'px';
            }
        }
        this.windowObserver = new Ten.Observer(document.body, 'onkeypress', this, 'handleEscape');
        this.visible = true;
    },
    handleEscape: function(e) {
        if (!e.isKey('escape')) return;
        this.hide();
    },
    hide: function() {
        if (this._draggable) this._draggable.endDrag();
        this.window.style.display = 'none';
        if (this.screen) this.screen.style.display = 'none';
        if (this.windowObserver) this.windowObserver.stop();
        this.visible = false;
    }
});

/* Ten.Draggable */
Ten.Draggable = new Ten.Class({
    initialize: function(element,handle) {
        this.element = element;
        this.handle = handle || element;
        this.startObserver = new Ten.Observer(this.handle, 'onmousedown', this, 'startDrag');
        this.handlers = [];
    }
},{
    startDrag: function(e) {
        if (e.targetIsFormElements()) return;
        this.delta = Ten.Position.subtract(
            e.mousePosition(),
            Ten.Geometry.getElementPosition(this.element)
        );
        this.handlers = [
            new Ten.Observer(document, 'onmousemove', this, 'drag'),
            new Ten.Observer(document, 'onmouseup', this, 'endDrag'),
            new Ten.Observer(this.element, 'onlosecapture', this, 'endDrag')
        ];
        e.stop();
    },
    drag: function(e) {
        var pos = Ten.Position.subtract(e.mousePosition(), this.delta);
        Ten.Style.applyStyle(this.element, {
            left: pos.x + 'px',
            top: pos.y + 'px'
        });
        e.stop();
    },
    endDrag: function(e) {
        for (var i = 0; i < this.handlers.length; i++) {
            this.handlers[i].stop();
        }
        if(e) e.stop();
    }
});

/* Hatena */
if (typeof(Hatena) == 'undefined') {
    Hatena = {};
}

/* Hatena.User */
Hatena.User = new Ten.Class({
    initialize: function(name) {
        this.name = name;
    },
    getProfileIcon: function(name) {
        if (!name) name = 'user';
        var pre = name.match(/^[\w-]{2}/)[0];
        var img = document.createElement('img');
        img.src = 'http://www.hatena.ne.jp/users/' + pre + '/' + name + '/profile_s.gif';
        img.alt = name;
        img.setAttribute('class', 'profile-icon');
        img.setAttribute('width','16px');
        img.setAttribute('height','16px');
        with (img.style) {
            margin = '0 3px';
            border = 'none';
            verticalAlign = 'middle';
        }
        return img;
    }
}, {
    profileIcon: function() {
        return Hatena.User.getProfileIcon(this.name);
    }
});

/* Hatena.Star */
if (typeof(Hatena.Star) == 'undefined') {
    Hatena.Star = {};
}

/*
// Hatena.Star.* classes //
**/
if (window.location && window.location.host.match(/hatena\.com/)) {
    Hatena.Star.BaseURL = 'http://s.hatena.com/';
} else {
    Hatena.Star.BaseURL = 'http://s.hatena.ne.jp/';
}
Hatena.Star.Token = null;

/* Hatena.Star.User */
Hatena.Star.User = new Ten.Class({
    base: [Hatena.User],
    initialize: function(name) {
        if (Hatena.Star.User._cache[name]) {
            return Hatena.Star.User._cache[name];
        } else {
            this.name = name;
            Hatena.Star.User._cache[name] = this;
            return this;
        }
    },
    _cache: {}
},{
    userPage: function() {
        return Hatena.Star.BaseURL + this.name + '/';
    }
});

/* Hatena.Star.Entry */
Hatena.Star.Entry = new Ten.Class({
    initialize: function(e) {
        this.entry = e;
        this.uri = e.uri;
        this.title = e.title;
        this.star_container = e.star_container;
        this.comment_container = e.comment_container;
        this.stars = [];
        this.comments = [];
    },
    maxStarCount: 11
},{
    flushStars: function() {
        this.stars = [];
        this.star_container.innerHTML = '';
    },
    bindStarEntry: function(se) {
        this.starEntry = se;
        for (var i = 0; i < se.stars.length; i++) {
            if (typeof(se.stars[i]) == 'number') {
                this.stars.push(new Hatena.Star.InnerCount(se.stars[i],this));
            } else {
                this.stars.push(new Hatena.Star.Star(se.stars[i]));
            }
        }
        if (se.comments && !this.comments.length) {
            for (var i = 0; i < se.comments.length; i++) {
                this.comments.push(new Hatena.Star.Comment(se.comments[i]));
            }
        }
        this.can_comment = se.can_comment;
    },
    setCanComment: function(v) {
        this.can_comment = v;
    },
    showButtons: function() {
        this.addAddButton();
        this.addCommentButton();
    },
    addAddButton: function() {
        if (this.star_container) {
            this.addButton = new Hatena.Star.AddButton(this);
            this.star_container.appendChild(this.addButton);
        }
    },
    addCommentButton: function() {
        if (this.comment_container) {
            this.commentButton = new Hatena.Star.CommentButton(this);
            this.comment_container.appendChild(this.commentButton.img);
        }
    },
    showStars: function() {
        var klass = this.constructor;
        // if (this.stars.length > klass.maxStarCount) {
        //     var ic = new Hatena.Star.InnerCount(this.stars.slice(1,this.stars.length));
        //     this.star_container.appendChild(this.stars[0]);
        //     this.star_container.appendChild(ic);
        //     this.star_container.appendChild(this.stars[this.stars.length - 1]);
        // } else {
        for (var i = 0; i < this.stars.length; i++) {
            this.star_container.appendChild(this.stars[i]);
        }
    },
    showCommentButton: function() {
        if (this.can_comment) {
            this.commentButton.show();
            if (this.comments.length) this.commentButton.activate();
        } else {
            // this.commentButton.hide();
        }
    },
    addStar: function(star) {
        this.stars.push(star);
        this.star_container.appendChild(star);
    },
    addComment: function(com) {
        if (!this.comments) this.comments = [];
        if (this.comments.length == 0) {
            this.commentButton.activate();
        }
        this.comments.push(com);
    },
    showCommentCount: function() {
        this.comment_container.innerHTML += this.comments.length;
    }
});

/* Hatena.Star.Button */
Hatena.Star.Button = new Ten.Class({
    createButton: function(args) {
        var img = document.createElement('img');
        img.src = args.src;
        img.alt = img.title = args.alt;
        with (img.style) {
	    cursor = 'pointer';
	    margin = '0 3px';
            padding = '0';
            border = 'none';
            verticalAlign = 'middle';
        }
        return img;
    }
});

/* Hatena.Star.AddButton */
Hatena.Star.AddButton = new Ten.Class({
    base: ['Hatena.Star.Button'],
    initialize: function(entry) {
        this.entry = entry;
        this.lastPosition = null;
        var img = Hatena.Star.Button.createButton({
            src: Hatena.Star.AddButton.ImgSrc,
            alt: 'Add Star'
        });
        this.observer = new Ten.Observer(img,'onclick',this,'addStar');
        this.img = img;
        return img;
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/add.gif'
},{
    addStar: function(e) {
        this.lastPosition = e.mousePosition();
        var uri = Hatena.Star.BaseURL + 'star.add.json?uri=' + encodeURIComponent(this.entry.uri) +
            '&title=' + encodeURIComponent(this.entry.title);
        if (Hatena.Star.Token) {
            uri += '&token=' + Hatena.Star.Token;
        }
        new Ten.JSONP(uri, this, 'receiveResult');
    },
    receiveResult: function(args) {
        var name = args ? args.name : null;
        if (name) {
            this.entry.addStar(new Hatena.Star.Star({name: name}));
            //alert('Succeeded in Adding Star ' + args);
        } else if (args.errors) {
            var pos = this.lastPosition;
            pos.x -= 10;
            pos.y += 25;
            var scroll = Ten.Geometry.getScroll();
            var scr = new Hatena.Star.AlertScreen();
            var alert = args.errors[0];
            scr.showAlert(alert, pos);
        }
    }
});

/* Hatena.Star.CommentButton */
Hatena.Star.CommentButton = new Ten.Class({
    base: ['Hatena.Star.Button'],
    initialize: function(entry) {
        this.entry = entry;
        this.lastPosition = null;
        var img = Hatena.Star.Button.createButton({
            src: Hatena.Star.CommentButton.ImgSrc,
            alt: 'Comments'
        });
        img.style.display = 'none';
        this.observer = new Ten.Observer(img,'onclick',this,'showComments');
        this.img = img;
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/comment.gif',
    ImgSrcActive: Hatena.Star.BaseURL + 'images/comment_active.gif'
},{
    showComments: function(e) {
        if (!this.screen) this.screen = new Hatena.Star.CommentScreen();
        this.screen.bindEntry(this.entry);
        var pos = e.mousePosition();
        pos.y += 25;
        this.screen.showComments(this.entry, pos);
    },
    hide: function() {
        this.img.style.display = 'none';
    },
    show: function() {
        this.img.style.display = 'inline';
    },
    activate: function() {
        this.show();
        this.img.src = Hatena.Star.CommentButton.ImgSrcActive;
    }
});

/* Hatena.Star.Star */
Hatena.Star.Star = new Ten.Class({
    initialize: function(args) {
        if (args.img) {
            this.img = args.img;
            this.name = this.img.getAttribute('alt');
        } else {
            this.name = args.name;
            var img = document.createElement('img');
            img.src = Hatena.Star.Star.ImgSrc;
            img.alt = this.name;
            with (img.style) {
                padding = '0';
                border = 'none';
            }
            this.img = img;
        }
	new Ten.Observer(this.img,'onmouseover',this,'showName');
	new Ten.Observer(this.img,'onmouseout',this,'hideName');
	if (this.name) {
            this.user = new Hatena.Star.User(this.name);
            this.img.style.cursor = 'pointer';
            new Ten.Observer(this.img,'onclick',this,'goToUserPage');
        }
        if (args.count && args.count > 1) {
            var c = document.createElement('span');
            c.setAttribute('class', 'hatena-star-inner-count');
            Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
            c.innerHTML = args.count;
            var s = document.createElement('span');
            s.appendChild(img);
            s.appendChild(c);
            return s;
        } else {
            return this.img;
        }
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/star.gif'
},{
    showName: function(e) {
        if (!this.screen) this.screen = new Hatena.Star.NameScreen();
        var pos = e.mousePosition();
        pos.x += 10;
        pos.y += 25;
        this.screen.showName(this.name, pos);
    },
    hideName: function() {
        if (!this.screen) return;
        this.screen.hide();
    },
    goToUserPage: function() {
        window.location = this.user.userPage();
    }
});

/* Hatena.Star.InnerCount */
Hatena.Star.InnerCount = new Ten.Class({
    initialize: function(count, e) {
        this.count = count;
        this.entry = e;
        var c = document.createElement('span');
        c.setAttribute('class', 'hatena-star-inner-count');
        Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
        c.style.cursor = 'pointer';
        c.innerHTML = count;
        new Ten.Observer(c,'onclick',this,'showInnerStars');
        this.container = c;
        return c;
    },
    style: {
        color: '#f4b128',
        fontWeight: 'bold',
        fontSize: '80%',
        fontFamily: '"arial", sans-serif',
        margin: '0 2px'
    }
},{
    showInnerStars: function() {
        var url = Hatena.Star.BaseURL + 'entry.json?uri=' +
        encodeURIComponent(this.entry.uri);
        new Ten.JSONP(url, this, 'receiveStarEntry');
    },
    receiveStarEntry: function(res) {
        var se = res.entries[0];
        var e = this.entry;
        if (encodeURIComponent(se.uri) != encodeURIComponent(e.uri)) return;
        e.flushStars();
        e.bindStarEntry(se);
        e.addAddButton();
        e.showStars();
    }
});

/* Hatena.Star.Comment */
Hatena.Star.Comment = new Ten.Class({
    initialize: function(args) {
        this.name = args.name;
        this.body = args.body;
    }
},{
    asElement: function() {
        var div = document.createElement('div');
        with (div.style) {
            margin = '0px 0';
            padding = '5px 0';
            borderBottom = '1px solid #ddd';
        }
        var ico = Hatena.User.getProfileIcon(this.name);
        div.appendChild(ico);
        var span = document.createElement('span');
        with(span.style) {
            fontSize = '90%';
        }
        span.innerHTML = this.body;
        div.appendChild(span);
        return div;
    }
});

/* Hatena.Star.NameScreen */
Hatena.Star.NameScreen = new Ten.Class({
    base: [Ten.SubWindow],
    style: {
        padding: '2px',
        textAlign: 'center'
    },
    containerStyle: {
        margin: 0,
        padding: 0
    },
    handleStyle: null,
    showScreen: false,
    closeButton: null,
    draggable: false
},{
    showName: function(name, pos) {
        this.container.innerHTML = '';
        this.container.appendChild(Hatena.User.getProfileIcon(name));
        this.container.appendChild(document.createTextNode(name));
        this.show(pos);
    }
});

/* Hatena.Star.AlertScreen */
Hatena.Star.AlertScreen = new Ten.Class({
    base: [Ten.SubWindow],
    style: {
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px',
        width: '240px',
        height: '120px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px',
        borderRadius: '6px 6px 0 0',
        MozBorderRadius: '6px 6px 0 0'
    }
},{
    showAlert: function(msg, pos) {
        this.container.innerHTML = msg;
        var win = Ten.Geometry.getWindowSize();
        var scr = Ten.Geometry.getScroll();
        var w = parseInt(this.constructor.style.width) + 20;
        if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
        this.show(pos);
    }
});

/* Hatena.Star.CommentScreen */
Hatena.Star.CommentScreen = new Ten.Class({
    base: [Ten.SubWindow],
    initialize: function() {
        var self = this.constructor.SUPER.call(this);
        if (!self.commentsContainer) self.addCommentsContainer();
        return self;
    },
    style: {
        width: '280px',
        height: '280px',
        overflowY: 'auto',
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px',
        borderRadius: '6px 6px 0 0',
        MozBorderRadius: '6px 6px 0 0'
    },
    containerStyle: {
        margin: '32px 0 0 0',
        textAlign: 'left',
        padding: '0 10px'
    },
    getLoadImage: function() {
        var img = document.createElement('img');
        img.src = Hatena.Star.BaseURL + 'images/load.gif';
        img.setAttribute('alt', 'Loading');
        with (img.style) {
            verticalAlign = 'middle';
            margin = '0 2px';
        }
        return img;
    }
},{
    addCommentsContainer: function() {
        var div = document.createElement('div');
        with (div.style) {
            marginTop = '-3px';
        }
        this.container.appendChild(div);
        this.commentsContainer = div;
    },
    showComments: function(e, pos) {
        var comments = e.comments;
        if (!comments) comments = [];
        this.commentsContainer.innerHTML = '';
        for (var i=0; i<comments.length; i++) {
            this.commentsContainer.appendChild(comments[i].asElement());
        }
        if (e.starEntry && !e.can_comment) {
            this.hideCommentForm();
        } else {
            this.addCommentForm();
        }
        var win = Ten.Geometry.getWindowSize();
        var scr = Ten.Geometry.getScroll();
        var w = parseInt(this.constructor.style.width) + 20;
        if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
        this.show(pos);
    },
    bindEntry: function(e) {
        this.entry = e;
    },
    sendComment: function(e) {
        if (!e.isKey('enter')) return;
        var body = this.commentInput.value;
        if (!body) return;
        this.commentInput.disabled = 'true';
        this.showLoadImage();
        var url = Hatena.Star.BaseURL + 'comment.add.json?body=' + encodeURIComponent(body) +
            '&uri=' + encodeURIComponent(this.entry.uri) +
            '&title=' + encodeURIComponent(this.entry.title);
        new Ten.JSONP(url, this, 'receiveResult');
    },
    receiveResult: function(args) {
        if (!args.name || !args.body) return;
        this.commentInput.value = ''; 
        this.commentInput.disabled = '';
        this.hideLoadImage();
        var com = new Hatena.Star.Comment(args);
        this.entry.addComment(com);
        this.commentsContainer.appendChild(com.asElement());
    },
    showLoadImage: function() {
        if (!this.loadImage) return; 
        this.loadImage.style.display = 'inline';
    },
    hideLoadImage: function() {
        if (!this.loadImage) return; 
        this.loadImage.style.display = 'none';
    },
    hideCommentForm: function() {
        if (!this.commentForm) return;
        this.commentForm.style.display = 'none';
    },
    addCommentForm: function() {
        if (this.commentForm) {
            this.commentForm.style.display = 'block';
            return;
        }
        var form = document.createElement('div');
        this.container.appendChild(form);
        this.commentForm = form;
        with (form.style) {
            margin = '0px 0';
            padding = '5px 0';
            // borderTop = '1px solid #ddd';
        }
        //if (Hatena.Visitor) {
        //    form.appendChild(Hatena.Visitor.profileIcon());
        //} else {
        //    form.appendChild(Hatena.User.getProfileIcon());
        //}
        var input = document.createElement('input');
        input.type = 'text';
        with (input.style) {
            width = '215px';
	    border = '1px solid #bbb';
            padding = '3px';
        }
        form.appendChild(input);
        this.commentInput = input;
        var img = this.constructor.getLoadImage();
        this.loadImage = img;
        this.hideLoadImage();
        form.appendChild(img);
        new Ten.Observer(input,'onkeypress',this,'sendComment');
    }
});

/* Hatena.Star.EntryLoader */
Hatena.Star.EntryLoader = new Ten.Class({
    initialize: function() {
        var entries = Hatena.Star.EntryLoader.loadEntries();
        this.entries = [];
        for (var i = 0; i < entries.length; i++) {
            var e = new Hatena.Star.Entry(entries[i]);
            e.showButtons();
            this.entries.push(e);
        }
        this.getStarEntries();
    },
    createStarContainer: function() {
        var sc = document.createElement('span');
        sc.setAttribute('class', 'hatena-star-star-container');
        sc.style.marginLeft = '1px';
        return sc;
    },
    createCommentContainer: function() {
        var cc = document.createElement('span');
        cc.setAttribute('class', 'hatena-star-comment-container');
        cc.style.marginLeft = '1px';
        return cc;
    },
    scrapeTitle: function(node) {
        var rval = [];
        (function (node) {
            if (node.tagName == 'SPAN' &&
                (node.className == 'sanchor' ||
                 node.className == 'timestamp')) {
                     return;
            } else if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                return;
            }
            var cn = node.childNodes;
            if (cn) {
                for (var i = 0; i < cn.length; i++) {
                    arguments.callee.call(this, cn[i]);
                }
            }
            var nodeValue = node.nodeValue;
            if (typeof(nodeValue) == 'string') {
                rval.push(nodeValue);
            }
        })(node);
        return rval.join('');
    },
    headerTagAndClassName: ['h3',null],
    getHeaders: function() {
        var t = Hatena.Star.EntryLoader.headerTagAndClassName;
        return Ten.DOM.getElementsByTagAndClassName(t[0],t[1],document);
    },
    loadEntries: function() {
        var entries = [];
        //var headers = document.getElementsByTagName('h3');
        var c = Hatena.Star.EntryLoader;
        var headers = c.getHeaders();
        for (var i = 0; i < headers.length; i++) {
            var header = headers[i];
            var a = header.getElementsByTagName('a')[0];
            if (!a) continue;
            var uri = a.href;
            var title = '';
            // Ten.DOM.removeEmptyTextNodes(header);
            var cns = header.childNodes;
            title = c.scrapeTitle(header);
            var cc = c.createCommentContainer();
            header.appendChild(cc);
            var sc = c.createStarContainer();
            header.appendChild(sc);
            entries.push({
                uri: uri,
                title: title,
                star_container: sc,
                comment_container: cc
            });
        }
        return entries;
    }
},{
    getStarEntries: function() {
        var url = Hatena.Star.BaseURL + 'entries.json?';
        for (var i = 0; i < this.entries.length; i++) {
            if (url.length > Ten.JSONP.MaxBytes) {
                new Ten.JSONP(url, this, 'receiveStarEntries');
                url = Hatena.Star.BaseURL + 'entries.json?';
            }
            url += 'uri=' + encodeURIComponent(this.entries[i].uri) + '&';
        }
        new Ten.JSONP(url, this, 'receiveStarEntries');
    },
    receiveStarEntries: function(res) {
        var entries = res.entries;
        if (!entries) entries = [];
        for (var i = 0; i < this.entries.length; i++) {
            var e = this.entries[i];
            for (var j = 0; j < entries.length; j++) {
                var se = entries[j];
                if (!se.uri) continue;
                if (encodeURIComponent(se.uri) == encodeURIComponent(e.uri)) {
                    e.bindStarEntry(se);
                    entries.splice(j,1);
                    break;
                }
            }
            if (typeof(e.can_comment) == 'undefined') {
                e.setCanComment(res.can_comment);
            }
            e.showStars();
            e.showCommentButton();
        }
    }
});

/* Hatena.Star.WindowObserver */
Hatena.Star.WindowObserver = new Ten.Class({
    initialize: funct


  

2007-07-18

シロクマの屑籠(汎適所属) - インターネットを楽しむ人達って、そんなにお利口なんですか?(?B)

鳥瞰のつもりが雲量計と高射砲照準にばっちりとらえられてました、と。

ま、ブクマのとおりかと。

2007-06-08

http://d.hatena.ne.jp/TERRAZI/20070515/p3

今さながら突っ込んでみる。

とりあえずニコニコ動画微妙に救うのはOpera

オペレーターキャッシュを使って、微妙に再ダウンロードに防げて、転送量を防ぐ役に立つぞ。

とか。

http://bmky.net/diary/log/1529.html

http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/TERRAZI/20070515/p3

??BTの弱点??

>BTファイルの先頭から順番にダウンロードされるわけではない。

見ながらと、落とす用に分割する。って手は?

BTは、一つじゃないからプロトコル拡張してみる。

クライアントには、プロトコルの違いがあるので

前からダウンロードする、オリジナルクライアントを開発・・・・。

の前に、もっと重要な事がある。

マイナー動画転送量が多数だったら?

メジャー動画は常に上げる人が存在するので、

転送量の削減にはなるが、

マイナー動画が多数を占める場合は、上げる人が少ない・・。

または全く居ないので、焼け石に水。

ログイン ユーザー登録
ようこそ ゲスト さん