「CB」を含む日記 RSS

はてなキーワード: CBとは

2013-06-30

Ashley Madisonに登録してみた

基本的に出会い系はほぼ全て登録して色々と試しているオレだが、今回は海外からビッグタイトル上陸、という触れ込みに興奮、すぐに登録してみた。

まあなんというか、サクラしかしない上にBBAばかりという立ち上げ直後というのを差し引いてもちょっと厳しい雰囲気

出会い系写真晒してる奴の殆どは業者(闇デリ)という実情を考えると、これは手を出してはいけない臭いがプンプンする。

あと、入会してすぐに有料チャットに誘われる、というのも非常に萎える。CB目当ての女性(もしくはネカマ)がウヨウヨいますよ、というのをカミングアウトしているようなものではないか

不倫専門と書こうが書くまいが既に出会い系はそんなヤツで溢れてるわけだから特に意味はない。

実際問題、闇デリの営業と援交市場しかないしな、今の出会い系は。

はいものの、この先どう化けるか、たまにはアクセスして様子を見てみようと思う。

2013-06-21

感染胃腸炎から感じた世界との差

-今回のゲーム、まずは前半からの総括をお願いしま

増田「半額で購入後、1日経ったイクラ丼のおかげでピッチコンディションはスリッピーな状態でした。また相手の消化物選手の判断が早く、すぐに下痢選手へいいスルーパスを送る事が出来ていましたね。対してこちらは前半からコンディション不良で、特に小腸・大腸選手の両CBのコンディションが悪かったですね。気温や湿度、仕事ストレス関係もあったかと思います。ただこの最終ラインGKの肛門選手を中心に粘り強く守れました。ヨーグルト選手リポD選手の両ボランチカバーリングも巧みで、前半は何とか守り切れたのかなと思います。」

-後半立ち上がりは下痢選手ミドルシュートから1失点

増田「咀嚼物選手からロングフィードから消化物選手ボールを受けたところで、小腸・大腸選手が管ウォッチャーになってしまい、アナルティエリア下痢選手フリーでした。消化物選手が見逃すはずもなく、消化管をスルーパスからダイレクトボレー。やはり世界で恐れられる選手ですね。」

-どういう気持ちでしたか

増田神様に祈ってたのが半分と、やっぱり出たなっていうのがもう半分です。笑 それぐらいの選手だと思います。前を向いたら誰にも止められません。」

-その後すぐにヨーグルト選手に代えてビオフェルミン選手リポD選手に代えて漢方薬選手トップ下の正露丸選手に代えて抗生物質選手を投入されました。交代の意図としては?

増田「やはりコンディション不良を考慮しても第二の脳みそである小腸・大腸選手は替えのきかない選手です。下痢選手にいいようにやられていたのは、中盤の寄せが甘いところにも原因があり、守備を固めていきたい旨を近所の病院医師相談して決めました。今回スタメンは市販薬組中心でしたが、下痢選手が躍動する時間が長引くようでは、コンディション不良の両CB及び肛門選手負担がかかる事は明白でしたので、こうして主力を投入せざるを得ませんでした。」

-中盤の交代策が功を奏した結果、下痢選手は本来のパフォーマンスからは程遠くなりますイライラが募った下痢選手は、漢方薬選手抗生物質選手に対して立て続けのイエローで退場しました。

増田下痢選手は非常に攻撃的な選手です。両ボランチがバイタルを埋めることで、その先のアナルティエリア内で好きに仕事が出来なくなれば、イライラする事は容易に想像出来ました。ズキズキしなくなればいいかなぐらいに思っていましたが、退場は幸運でした。」

-終盤、職場から電話選手の強烈なミドルシュートで同点になり、1対1で引き分け。健康への道筋がついた訳ではないですが、見切り発車で出社しました。

増田職場から電話選手についてはノーコメントです。私がとやかく言うとか、そういうレベル選手ではありませんので。問答無用試合を決定づける一発はさすがですね。凄すぎてイラッとしますね。」

-次戦の相手は夏風邪選手。次回の体調不良にも期待します。

増田ありがとうございます。今回、堂々と会社休めて良かった感染胃腸炎さんに胸を借りることができ、感謝しています。」

2012-09-03

http://anond.hatelabo.jp/20120903230615

全然関係ないけど、ネット根付いて生息する女の子って小さめガリ気味が多くはないか

そして、たいていの場合、生息するその小さなコミュニティでちやほやされて姫気分になってる。

特別かわいいわけじゃなくて、ブスなわけでもない。

人によってはかわいいと評価するかもしれない。

CBIRCミクシィネトゲ各種、最近ではtwitterでも見かけた。

2010-07-04

日本サッカー南米欧州列強に追いつくことができない絶対的な理由。

日本サッカー代表はたまにベスト16に行くことがあっても基本的に南米欧州列強に追い付くことはできません。追いつくためには日本教育制度スポーツ学校依存、究極的には日本社会制度までにメスを入れなければならないからです。

 現在の代表でも、半数以上はサッカーエリートであるクラブ出身ではなく部活サッカー出身だ。普通感覚ならどれだけ「自分はやれる」とおもっても並の高校に行った時点でプロをあきらめてしまうの。とくに偏差値の高い学校にはいった競技者プロを目指すのはよっぽどのかわりものだろう。

 学校部活動は短期間、具体的には2年または2年半で結果を求められる。求めるなというのが無理なのだ。競技者、および指導者(学校教員)の双方にとってそれがメリットだからだ。2年で結果を出せばまた名門サッカー高校に進学できる。また2年半で結果を出せばJリーグ以外では最もメジャーサッカー大会である。「高校サッカー選手権」にでられる。普通の高い才能であればこの大会にピークを持ってくることが目標なのだ。

 南米欧州ではもちろんちがう、クラブのユースではある意味子どもたちは商品なのだ、名門クラブであればそのトップチームに上げることが目標となる。そうでなくとも名門に売れれば大きな金が入る。日本部活のように自分勝手な猛練習はしない。体が壊れたら誰も得をしないのだ。ユースでもジュニアユースでも週に4-5回、一日2-3時間の練習と週に1回の試合日本のように年間練習試合をふくめ100試合もやるようなことはない(中堅校でもこのくらいやるところは少なくない)

 逆に公式戦はリーグ戦が主体で多く、リーグなので絶対的な勝利にこだわることもない。指導者競技者も目指すのはその先なので、個人の技術の向上、戦術理解が優先される。

 また日本ではユース世代は競技者サッカーレベルでチーム分けがされない基本的に「競技者学力」でチーム分けがされる。高校の部活動なのだから当然だが、これがどれだけ異常なことかおわかりだろうか?

 また日本では必ずしもサッカー経験者もしくは指導を志す者がサッカーを指導するわけではない、これまた異常なことなのだが事実だ、ジュニアユース時代に技術的なことを指導されなければどれだけ才能があっても伸び悩む。さらにユース時代も確率的には少ないが必ずしも専門家が指導するわけではない。(例えばわたしは長らく高校サッカー部の顧問をしていたが、なった理由は校務分掌上、若い男性であいているものが私しかその学校にいなかったという理由。当時全くサッカーには興味関心がなかった。)学力別に分けられた競技者がたまたま良い指導者環境に当たればよいが、絶対にそうなるとは限らない。学力が関係なければ、後に日本代表になる可能性がないではないが、学力が高ければ指導者と関係なくそ学力の高校(チーム)にいく。そして高い才能があろうとサッカー選手になる道はほぼなくなるのだ。

 ここで「日本でも、今言ったように、学力と関係ない名門高校があるんだから、そこで注目されるのでは?」とおもうだろう。もちろんそういう選手も多いが、ここで現代表の来歴をみてみる。

 日本代表CBの3人の来歴は非常に異色だ、田中ブラジル人を留学生としてとっているサッカーが盛んな新興名門進学校「渋幕」に留学した。その後、Jリーグに入り帰化した。これは前代表のアレックスサッカーでないが朝青龍もそうだ。

 中沢サッカーエリートとは関係のない道をあゆみ、強豪でない三郷工技の部活動からブラジルクラブに入り、帰ってきて三郷工技で練習していて練習試合ヴェルディとやったあとに練習生としてヴェルディに入った。

  岩政は普通地方進学校から数学の教師になるため東京学芸大に入り、ユニバーシアードなどで活躍して注目され鹿島に入った。

 後者2人は本人のサッカーへの強い意志と偶然により、Jリーグに入り代表になったことになる。偶然がなければこのWカップのメンバーは違う人が入っていたということになる。ということはこの人たち以外にも日本代表に入れる才能を持ちながら途中でなんらかの事情で断念している多くの競技者が、掬いあげられずに、一サッカーファンとしてWカップを見ているはずなのだ。普通フットボールネイションであれば代表に入るような才能であれば小さいころから注目され少なくともプロになる選択を与えられるのは必然でなければならない。

 普通フットボールネイションで岩政のような選択は非常に不可解に感じるだろう。代表になれるような才能があれば、16-7歳でプロ契約するのが普通サッカー能力が非常に高くかつ数学の教師になりたいのであれば、大学サッカープロキャリアを終えたあとに行けばいいわけで、なにも、大好きであるサッカー競技者を断念して教師になる必要はない。岩政の選択は日本では非常に特殊で普通なら数学の教師になりサッカー部顧問になる(もしくは校務分掌の事情でなれない)のが普通だろう。高校で普通の進学高にいった時点でプロサッカー選手になるという選択はない。冷静な頭で考えればリスクとリターンが合わないからだ。

 日本ではあるレールからはずれると修正がきかないとおもわれている。サッカー選手を選択して失敗したら大学目指そうとかそういう選択は普通しないのだ、就職に一番有利なのは何の瑕疵もなく22年で大学卒業した者であり、30歳くらいでサッカープロ経験者であってもいわゆる一流企業正社員になるのは難しいだろう。であれば高い学力があってサッカーの高い才能がある場合リスクをとってサッカー選手になるという選択は普通なくなる。このようなリスクテイカーに冷たい社会ではサッカー選手になるというのはなかなか決断しにくいのだ。岩政は非常にリスクの高いことをやって成功したことになる。

 他にも多くの理由があるが、スポーツ学校依存リスクテイカーに冷たい日本社会制度を変えない限り野球のようなマイナースポーツで一番になることはあってもサッカー大国になることはないだろう。

 部活動の問題についてはまたの機会に書きたいと思います。

2010-06-09

http://anond.hatelabo.jp/20100607121955

大川隆法

なぜか重複キーワードを必死で保守。話が通じていません。

http://d.hatena.ne.jp/keyword/%C2%E7%C0%EE%CE%B4%CB%A1?kid=296274

* e-231kon 2010/05/29 19:48 重複しています。

* herecy8 2010/05/31 02:48 既にhttp://d.hatena.ne.jp/keyword/%C2%E7%C0%EE %CE%B4%CB%A1?kid=187790が登録されており、同じ項目が重複しています。後から登録された方を削除します。

* hikarinobosatu 2010/06/07 06:36 最新の情報です。

* hikarinobosatu 2010/06/07 06:37 最新の情報です。

* viron 2010/06/07 14:05 重複項目を理由に再三削除されているが、削除理由とは全く関係ない説明で復帰されている。

* hikarinobosatu 2010/06/08 08:01 後から登録したものの方が、より詳しいから。

* e-231kon 2010/06/08 19:05 重複。

* kobomaru 2010/06/09 10:58 何故、そんなにムキになって削除したがるのでしょうか?

* viron 2010/06/09 11:12 同一項目を重複登録する理由がない。

* kobomaru 2010/06/09 14:41 重複していても、より詳しいから。

* 大川隆法@20100609144107 (2010/06/09 14:41:07)kobomarukobomaru change category to 一般 CommentsAdd Star

* 大川隆法@20100609111221 (2010/06/09 11:12:21)vironviron change category to 削除予定キーワード CommentsAdd Star

* 大川隆法@20100609105801 (2010/06/09 10:58:01)kobomarukobomaru change category to 一般 CommentsAdd Star

* 大川隆法@20100608190535 (2010/06/08 19:05:35)e-231kone-231kon change category to 削除予定キーワード CommentsAdd Star

* 大川隆法@20100608080120 (2010/06/08 08:01:20)hikarinobosatuhikarinobosatu change category to 一般 CommentsAdd Star

* 大川隆法@20100607140530 (2010/06/07 14:05:30)vironviron change category to 削除予定キーワード CommentsAdd Star

* 大川隆法@20100607063754 (2010/06/07 06:37:54)hikarinobosatuhikarinobosatu change category to 一般 CommentsAdd Star

* 大川隆法@20100531024851 (2010/05/31 02:48:51)herecy8herecy8 change category to 削除予定キーワード CommentsAdd Star

* 大川隆法@20100531024209 (2010/05/31 02:42:09)kobomarukobomaru change category to 一般 CommentsAdd Star

* 大川隆法@20100529194812 (2010/05/29 19:48:12)e-231kone-231kon change category to 削除予定キーワード CommentsAdd Star

* 大川隆法@20100529090856 (2010/05/29 09:08:56)hikarinobosatuhikarinobosatu upload image CommentsAdd Star

* 大川隆法@20100529084943 (2010/05/29 08:49:43)hikarinobosatuhikarinobosatu upload image CommentsAdd Star

* 大川隆法@20100529084826 (2010/05/29 08:48:26)hikarinobosatuhikarinobosatu editCommentsAdd Star

* 大川隆法@20100529084759 (2010/05/29 08:47:59)hikarinobosatuhikarinobosatu editCommentsAdd Star

* 大川隆法@20100529084409 (2010/05/29 08:44:09)hikarinobosatuhikarinobosatu appendCommentsAdd Star

大川隆法総裁 http://d.hatena.ne.jp/keyword/%C2%E7%C0%EE%CE%B4%CB%A1%C1%ED%BA%DB

大川隆法総裁先生 http://d.hatena.ne.jp/keyword/%C2%E7%C0%EE%CE%B4%CB%A1%C1%ED%BA%DB%C0%E8%C0%B8

尊称のインフレ信者の盲信っぷりがうかがわれます。ほかにも

エル・カンターレ http://d.hatena.ne.jp/keyword/%A5%A8%A5%EB%A1%A6%A5%AB%A5%F3%A5%BF%A1%BC%A5%EC

主エル・カンターレ http://d.hatena.ne.jp/keyword/%BC%E7%A5%A8%A5%EB%A1%A6%A5%AB%A5%F3%A5%BF%A1%BC%A5%EC

とか、無意味に登録を増やすことに邁進しています。

法身 http://d.hatena.ne.jp/keyword/%CB%A1%BF%C8

これも重複登録かな。

2009-10-19

http://anond.hatelabo.jp/20091019103826

子供の頃「原発の話」とか読みたくてCB買ってたよ。

腐女子ヲタク向けにエロパロ発行してることは知ってたし、当時はふゅーじょんだけが特出してたけど、

だから、なに?って感じだ。

でもつげ義春とかガロとかも”同様に”興味ない。

良いものは良いだろうし、マーケットがあるなら、それがヲタク向けだろうが、アングラだろうが、サブカルだろうが、入り込んでやれ、って商魂たくましいのがふゅーじょんだろうと思ってる。

腐女子だろうが、オタクだろうが、ガロだろうが、全く同じ。

それぞれのファンがそれぞれを認識して、理解しあう必要なんてどこにあるの?

ガロとかのファンが、腐女子マーケットを理解して、どうするの?

どっちも爆発的にマーケットに乗るような物じゃないのに、持ち上げた事で今の地位を得てると思ってる。

少なくとも、ガロ読者とかは、”恐ろしく漫画アニメの知識が偏って”るだろうに。

その偏りをちゃんと理解してるはずだ。(だから、ガロは特殊な分野でいられる)

そして、偏りにたいして、公平にしようなんて思ってもいないだろう。

しろ、と言われても、毎週ジャンプもサンデーも読みます、理解します、とはならないはずだ。

2009-03-04

http://anond.hatelabo.jp/20090304024805

CBの限定条件で楽しんでる趣味の人と、(合法)改造の種機として使う人と、違法改造して使う人の3種類がいる。

決して違法奨励ではなくて、それなりの価値を漬けてくれる店・オークションに出せば、いい値段が付くと思うよ。

でもなんで、倉庫から8台も出てくるの?親父さんか親戚の人がそういう趣味だったとか?

2008-12-07

http://anond.hatelabo.jp/20081207233141

昔ながらの電気街BCLラジオCB無線のいろいろを探していた世代の俺に言わせてもらえば(ry)。

2007-12-10

大学学歴ランキング



Sa級  東京

Sb級  京都

===============================

Aa級 一橋 東京工業

Ab級 大阪 東北 名古屋 九州 慶應 早稲田 東外語

===============================

Ba級 北海道 神戸 お茶の水 筑波 横国 上智 ICU 阪市 同志社 

Bb級 千葉 金沢 東京農工 京都工繊 豊田工業 阪府 岡山 広島 阪外語 首都 東京理科 

Bc級 名工業 横市 熊本 明治 中央 東学芸 立教 立命館 学習院 津田

=============================== ========

Ca級 電通 九工 帯広畜産 名古屋市立 京都府 奈良女 青学 関学 

Cb級 埼玉 新潟 静岡 小樽 滋賀 信州 法政 関大 三重 成蹊 南山

================================== ========

Da級 西南 日女 高崎経済 岩手 群馬 岐阜 徳島 長崎 東京海洋 鹿児島 東京女子

Db級  山形 福島 茨城 宇都宮 山梨 富山 鳥取 山口 愛媛 大分 宮崎 兵庫県

=============================== ================

Ea級  北教育 室工 弘前 福井 香川 高知 佐賀  日大 東洋 駒沢 専修 京都産業 近大 甲南 龍谷

Eb級  北見  秋田 和歌山 島根 琉球 

=============================== ================

以下多数


出典  5000万アクセスの超有名サイト  http://gakureki.nobody.jp/

ニコニコ動画を見ててアニメってやっぱ流行ってないんだなと思った

ランキングで本編が載ることはあっても、MADは載るのが少ない。本編としては今日あたりは「みなみけ」がランクに入っていたし、他の日なら「ひぐらし」や「バンブーブレード」がランクインする。しかしMADは少ない。最近知ってるのはガンダム00の「武力介入できないCB」ぐらい。調べてみるとMAD自体はあるんだが、あまり見られてない。本編の人気とこうしたMADを含めた同人活動は正比例しているから、MADへの注目が少ないってことはやっぱり人気がないってことなんだろう。

それかニコニコ動画で見てる人はファンというよりは暇つぶしで見る人たちなんだろうな。ファンだったらいちいち画面の小さいニコニコ動画で見る意味ないしね。

2007-10-11

天声人語メーカー URLhttp://taisa.tm.land.to/tensei.html

作ってみた

http://taisa.tm.land.to/tensei.php?a=%C4%AB%C6%FC%BF%B7%CA%B9&b=2ch&c=11%CB%FC%BF%CD%A4%C8%BC%E7%C4%A5&d=%D9%D4%C2%A4%A4%C0%A4%C8%BC%E7%C4%A5&e=%A5%A2%A5%B5%A5%D2%A4%EB&f=%A5%A2%A5%D9%A4%B9%A4%EB

天声人語】 (朝日新聞

朝日新聞は11万人と主張している。しかしちょっと待って欲しい。11万人と主張するには早計に過ぎないか。

朝日新聞の真摯な姿勢が、今ひとつ伝わってこない。

例えば2chからは捏造だと主張するような声もある。

このような声に朝日新聞は謙虚に耳を傾けるべきではないか▲

思い出してほしい、過去にも何度も朝日新聞2chの叫びを無視している。

朝日新聞2ch捏造だという主張を間違いであるかのような発言をして、批判を浴びた。

確かに2chにはアベするという問題もある。だが、心配のしすぎではないか

朝日新聞の主張は一見一理あるように聞こえる。

しかし、だからといって本当に朝日新聞は11万人と主張できるのであろうか?

それはいかがなものか。的はずれというほかない▲

事の本質はそうではではない。その前にすべきことがあるのではないか。

朝日新聞は、未来を担う一員として責任があることを忘れてはならない。

朝日新聞の主張には危険なにおいがする。各方面の声に耳を傾けてほしい。▲

朝日新聞に疑問を抱くのは私達だけだろうか。

11万人と主張したことに対しては2chの反発が予想される。捏造だという主張を支持する声も聞かれなくもない▲

朝日新聞もそれは望んでいないはず。しかし朝日新聞アサヒるである。

11万人と主張する事はあまりに乱暴だ。朝日新聞は再考すべきだろう。

繰り返すが朝日新聞アサヒるである▲

朝日新聞の11万人と主張したことは波紋を広げそうだ。今こそ冷静な議論が求められる。

2007-08-26

mixiヤバイ

2ちゃんねる ソーシャルネット板より 【通報しても無駄】mixiから業者が減らない理由

1 :練乳:2007/08/22(水) 17:32:57 ID:a/3is8Cg
    今まで何度通報しても消えてない業者の副垢が多数ある件、
    運営が業者撲滅コミュを強制削除しようとしている件、
    業者と運営の間になにか特別な関係があるとしか思えません。

    これを見つけてしまったので、納得しました。
    ▼スポンサーサイト
    mixi月93万円の不労所得 www.hkys.com
    石田和善のmixi月93万円の 不労所得を得た男はこちらから!
    http://mixi.jp/search_diary.pl?submit=search&keyword=%B7%EE93%CB%FCスポンサーサイト
    ミククエ2で豪華特典をゲット mixiquest.com
    ミククエ2を購入すると今だけ 豪華特典ゲットミククエで100万
    http://mixi.jp/search_diary.pl?submit=search&type=dia&keyword=%A5%DF%A5%AF%A5%AF%A5%A8
    ねずみ講も巡回ツールもスポンサーサイトでお世話になってねって
    ことですか。

    業者の商用利用はミクシィでは公認ってことですか?
    通報しても無駄なわけですね^^ 

実際にグルかどうかは不明だけど、これで18歳未満に開放して大丈夫なのか

スパム業者と戦うはてなとか超偉い。もっとがんばれ。超がんばれ。

2007-07-26

敗因の主たる物は「疲労」

ベトナム戦でもフルメンバーだったり、豪州戦で90分で蹴りつけようとしなかったオシム采配が敗因の2/3を占める。

それなのに試合後のコメントでスタミナを口にするとは…あんただろあんたのせいだろ!

今までも言われてきたCBの異常な層の薄さが足を引っ張ってしまった。

ただ「走る」選手ではなく、本当に実力ある選手を「走らせて」欲しいのだオシムには。

http://anond.hatelabo.jp/20070726001427

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-06-16

日曜日は週始め?週末?

友人と軽く討論になったので改めて書いてみる

きっかけはこんな会話から

友「じゃあ来週の日曜ね」

俺「おk・・・って来週?」

友「そう17日」

俺「それは今週末じゃないのか?」

友「ええーカレンダーだと・・・」

曰く、大概のカレンダーは日曜から始まって土曜で折り返り

次の段へ行くので一週間の区切りは「日曜から土曜」らしい。

おいおい「月曜から日曜」だろ常識的に考えて・・・・。

念のため調べてみた。

goo 辞書

http://dictionary.goo.ne.jp/search.php?MT=%BD%B5%CB%F6&kind=jn&mode=0&base=1&row=0>

一週間の末。土曜日から日曜日にかけてをいう。ウイークエンド。〔金曜日を含めていうこともある〕

Yahoo!辞書

http://dic.yahoo.co.jp/dsearch?dtype=2&p=%BD%B5%CB%F6

> 金・土曜から日曜日にかけてのころ

日曜日は『週末』ですか?『週始め』ですか?日曜日から始まるカレンダーもあるし

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1010421490

月曜から日曜」優勢ながらも

日曜から土曜」もアリ、

というか元々は「日曜から土曜」だったらしい

結論としては

「週末」の範囲は? NHK放送文化研究所

http://www.nhk.or.jp/bunken/research/kotoba/kotoba_qq_04040101.html

>「週末」は、指す範囲があいまいです。放送では、なるべく「今度の土曜日・○日」などと

> 具体的に「曜日」や「日にち」を示したほうがよいでしょう。

このあたりが適切か。


秋葉原へ行く約束が一週間延びるところだったぜ。

あ、かがみは俺の嫁

2006-11-12

サッカーの話

4バック(DFが4人いるフォーメーション)と3バック(DFが3人いるフォーメーション)はどちらが攻撃的か?と訊ねられたら、サッカーをよく知らない人は「4バックはDFが4人いるんだから、そちらの方が守備的なんじゃないの?」と答えると思う。でも「3バックは攻撃的」「4バックは守備的」とは一概には言えない。

サイドバック(=SB)……あー、SBってのは4バックの外側に位置するポジションなんだけど。

図にすると↓

● ○ ○ ●

黒丸がSBで、白丸センターバック(=CB)。現代サッカーSBは、ガンガン攻め上がっていくことが多い。敵陣までオーバーラップしていっては、また自陣まで戻って守備をする、みたいなね。SBの基本位置がセンターライン付近ってこともざらで、両SBが攻撃的な場合は、システム上は4バックでも実質2バック状態ということもありうる。つまり、4バックは3バックよりも攻撃的だ、と言えることになる。

・・・という話を、「見た目の数字に騙されちゃダメだぞ」的な話として使えないだろうか。

もちろん4バックの全員が守備的な役目を担っているということもありうるし、逆に3バックでもCBガンガンオーバーラップしていくチームもある。さらに言うと、守備の堅さというのは、たぶんCBボランチの数なんだと思う。3バックで3センターだったりすると中央は鉄壁だろうし、4バックでワンボランチだったりするとボランチは過労で死ぬ。それだけでなく、いまはFWにも前線からプレスをかけていくことが求められている。だから攻撃的とか守備的とかをDFの数で判断すること自体がナンセンスなんだろうな。

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