Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録

「com.a」を含む日記RSS

はてなキーワード:com.aとは

2022-09-16

com.apple.diskmanagement.disenterエラー 49153

MacDVD認識できねえなぁとググった結果。

付属ディスクの多くはMac環境に対し「Mac標準(HFS)」形式

制作されており、2016年リリースされたMacOSmacOS10.12Sierra」より

MacOS標準フォーマット(HFS)」のサポートを終了したため、そのままではこの形式ディスクが読み込めなくなったそうです。

ほえ〜、そういうことなのかっ!!!

昔買った素材集DVDとか必要だったので取り込もうと思ってできなくてググった結果こういうことみたい

こんなことなら買ってすぐHDDかに入れときゃよかったわ・・・

https://discussionsjapan.apple.com/thread/251181377

Permalink |記事への反応(1) | 17:33

このエントリーをはてなブックマークに追加ツイートシェア

2021-03-20

anond:20210320174526

7と8。

技術的なところが気になる人はこれだけ読んでくれたらいい

7.アプリケーションコード自体はRocketChatのものとほぼ同じ

最後技術的な観点からエアレペルソナが純国産ではないということを指摘する。

結論から先に述べると、このアプリは純国産ではない。

RocketChatという海外で開発されたOSSチャットアプリフォーク、改変したもののよう。

ttps://github.com/RocketChat/Rocket.Chat.ReactNative

ttps://rocket.chat

フォーク元はバリバリ多国籍外資である。(RocketChat自体問題のないアプリであり、このエアレペルソナとはフォーク関係を超える関係はないと思われる)

冒頭のこの部分に関してである

ttps://play.google.com/store/apps/details?id=chat.airlex.reactnative

Google Playで公開されているエアレペルソナAndroidアプリリバースエンジニアリングして調べてみた。

ちなみに、エアレペルソナには利用規約のようなものは見当たらず、リバースエンジニアリング禁止条項も無いようだった。

ttps://apps.evozi.com/apk-downloader/

ttps://github.com/pxb1988/dex2jar

この辺を使ってapkダウンロードし、apk解凍し、chat.airlex.reactnative/classes.dexjar fileに変換した。

classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダパッケージが見つかる。

このパッケージ内のファイル(.classクラス)がエアレペルソナの処理を行うもののようである

特徴的なクラスにEjsonという名前のものがある。

このクラスJadを使い、デコンパイルしてみた。その結果が以下である

ttp://www.javadecompilers.com

ちなみにここからapkアップロードするとdex2jarをしなくてもJavaソースコードにまでデコンパイルしてくれた。便利。

package chat.airlex.reactnative;importandroid.content.Context;importcom.ammarahmed.mmkv.SecureKeystore;import com.facebook.react.bridge.ReactApplicationContext;import com.tencent.mmkv.MMKV;publicclass Ejson {privateString TOKEN_KEY ="reactnativemeteor_usertoken-";String cardId;String host;String messageId;String messageType;/*access modifiers changed from: private */public MMKV mmkv;String msg;String notificationType;String rid;    Sender sender;String senderName;String type;public Ejson() {        ReactApplicationContext reactApplicationContext = CustomPushNotification.reactApplicationContext;if (reactApplicationContext !=null) {            MMKV.initialize((Context) reactApplicationContext);new SecureKeystore(reactApplicationContext).getSecureKey(C0617Utils.toHex("com.MMKV.default"),new RNCallback() {publicvoidinvoke(Object... objArr) {if (objArr[0] ==null) {                        MMKV unused = Ejson.this.mmkv = MMKV.mmkvWithID("default",1, objArr[1]);                    }                }            });        }    }publicString getAvatarUri() {if (this.type ==null) {returnnull;        }return serverURL() +"/avatar/" +this.sender._id +"?rc_token=" + token() +"&rc_uid=" + userId();    }publicString token() {String userId = userId();        MMKV mmkv2 =this.mmkv;return (mmkv2 ==null || userId ==null) ?"" : mmkv2.decodeString(this.TOKEN_KEY.concat(userId));    }publicString userId() {String serverURL = serverURL();        MMKV mmkv2 =this.mmkv;return (mmkv2 ==null || serverURL ==null) ?"" : mmkv2.decodeString(this.TOKEN_KEY.concat(serverURL));    }publicString privateKey() {String serverURL = serverURL();        MMKV mmkv2 =this.mmkv;if (mmkv2 ==null || serverURL ==null) {returnnull;        }return mmkv2.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY"));    }publicString serverURL() {Stringstr =this.host;return (str ==null || !str.endsWith("/")) ?str :str.substring(0,str.length() -1);    }publicclass Sender {String _id;String username;public Sender() {        }    }}

フィールド名を見てみると、cardId, host, messageId, messageType, mmkv, msg, notificationType, rid, sender, senderName, typeが存在する。

メソッドには、getAvaterUri、token、userId、privateKey、severURLが存在する。

ところで、RocketChatというOSSチャットアプリ存在する。

ttps://rocket.chat

そのRoketChatのAndroid実装の中に同名のEjsonというクラス存在する。

ttps://github.com/RocketChat/Rocket.Chat.ReactNative

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/android/app/src/play/java/chat/rocket/reactnative/Ejson.java

見比べてみると、フィールドにcardIdが追加されている以外はフィールドメソッド名、そしてその処理の内容まで一致している。

他にもReplyBroadcastなど、同様のクラスがエアレペルソナに見つかる。

以上のことからエアレペルソナはRocketChatをフォークして、パッケージ名を変えて作られたチャットアプリであり、開発の大部分はRocketChat社の努力と多数のOSSコントリビュータによってなされたものであると思われる。

これを純国産日本製と呼ぶには大分無理がある気がする。

そもそもこのOSS時代に純だの何だの言っている時点で怪しい。

8.OSSライセンスに関して

さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである

RocketChatのOSSライセンスMITライセンスである

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE

MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。

現状エアレペルソナログインできておらず(2要素認証コード送信されないといった問題が起きている模様)、使用している各OSSライセンス表示が適切に行われているかまでは調べられていない。

Permalink |記事への反応(1) | 17:48

このエントリーをはてなブックマークに追加ツイートシェア

2020-06-06

WHOゥ!

なぜ 君が機会を得られたにもかかわらずPHEICの宣言を一度見送ったのか!

なぜ渡航制限を推奨しなかったのか!

なぜ中国露骨に媚びるのか!

その答えは

なぜPHEICの宣言を一度見送ったのか?

IHR緊急委員会(15名 from 13ヶ国[1])が国際的懸念される公衆衛生上の緊急事態(PHEIC)宣言に足るだけのエビデンスを見出せなかったから。

1月21、22日時点では中国外の感染者数が4~6人だけであり[2]、ヒト‐ヒト感染の強さも不明で、暫定的にR0は1.4〜2.5(季節性インフルエンザ新型インフルエンザくらい)と推定されていた。(後の研究で、R0は4.7~6.6(天然痘風疹レベル)くらいだと推定されている[3]。)

また、ちょうどWHO専門家武漢入りして調査を開始したところであり、その結果を待つ意味もあった。

そういうわけで「今はデータが足りないから保留。10日以内にもっかい検討するからその時にまた呼んで」との結論に至ったわけだ。

この見送り中国への忖度と呼ぶ向きもあるが、過去のPHEIC宣言比較してもそこに特別な違いは見られない。

また、「PHEIC宣言は時期尚早」というのは当時の緊急委員会が至った結論であり、それに同意たからといってテドロス局長を責めるのもお門違いであろう。

また個人的感想だが、PHEIC見送りに関する非難には、人々のPHEICに対する認識もかかわっているのではないか

「PHEIC宣言がなされなければ各国は対策の取りようがない」等々、PHEICを疫病対策の“起点”としてとらえるような認識だ。

一方のWHO、PHEICは“最後の切り札”と考えている模様[4]

データ提供する、ガイドラインも制定する、ガイダンスだって発布するから、あとは各国で適切な対応をしてくれ。もし怠るようならPHEIC宣言でケツ蹴っ飛ばしたる」と、そんな感じ。

エビデンスは無いけど念のため」程度で宣言できるほどPHEICは軽くないのだ。

ただし、そういう時に使える“軽い警告”を制定するべきだとの議論は以前からあったため、それはそれでWHOの怠慢と言えなくもない。

なぜ渡航制限を推奨しなかったのか?

長年のWHO方針である2009年に初めてPHEICを宣言した際も渡航制限を推奨していない[5]

その理由は、渡航制限パンデミックの防止に寄与するというエビデンスが乏しく、むしろ条件によっては有害ですらあるからだ(※)。

複数研究[6][7][8][9][10]――2014年にはWHO自身23研究を用いたレビュー論文を出している[11]――によれば、厳しい渡航制限(全渡航の90~99%をシャットダウン)は感染拡大を数週間ほど遅らせる可能性があるが、最終的な感染者数と規模は据え置きである

※ PHEICが宣言されるような状況に限れば。感染発生の最初期であれば話は別。例えば昨年11月末に全世界渡航制限が行われていれば新型コロナ流行はなかっただろう。

研究をまとめると、

渡航制限メリット

患者の総数が変わらないとしても、時間当たりの患者数は減るため、対応能力の低い国においてキャパシティオバーを緩和できる。

予防接種治療薬が存在している場合、それらの準備を整えるまでの時間稼ぎになる。(今回のコロナ禍には当てはまらない)

渡航制限デメリット

流行期間が延びるため、社会的対応(ロックダウン等)の継続時間も延びる。

サプライチェーン(特に医療品)の深刻な寸断、専門家交流の途絶、国際支援の遅延または減少。

・↑2つと部分的に被るが、経済コストが非常に高くなる。

感染の発生を隠ぺいするインセンティブが働く。

WHO的に、渡航制限は高い経済コスト、低い効果、そしていくつかのデメリット存在から推奨されない。

全く無意味というわけではないが、より有効政策――手洗い等の徹底、適切なスクリーニング及び隔離ソーシャルディスタンシング(社会的距離をもたせるような政策ロックダウンも含む)――にその分のリソースを振り分けるのが好ましい。

これらはあくま過去エビデンスに基づいており、将来の研究にて今回の新型コロナについては渡航制限有効であったとのエビデンスが出るかもしれない。

しかし、“エビデンスに基づき結果的に間違った”対処を貶め、“エビデンスに基づかないが結果的に正しかった”対処を褒めることには同意できない。


なぜ中国露骨に媚びるのか?

諸君は↑の2項目について「中国への媚」と思っていたのだろうが(あとは台湾への対応か)、実際のところエビデンスベース判断であり、発生国中国以外でもWHO対応は同じだった可能性が高い。

しかし、中国への批判を控えたり、台湾冷遇、ちょくちょくあるリップサービス等、WHO医学とは別の領域において中国へ甘い対応をしているのは事実

なぜか?

テドロス局長場合簡単だ。政治的支持基盤が主にアフリカ系とアジア系であり中国存在が非常にでかい。なので中国批判はあまりしないし、リップサービスもする。中国を称賛した回数はトランプのがテドロスより多いのだが[12]

WHO全体でみるとどうか。金に媚びてることはない。チャイナマネーとは比べ物にならないほどのアメリカマネーゲイツマジェスティWHOに注ぎ込まれている。

では何がWHO中国寄りにしているのか?

データである中国から提供される疫病情報である

WHOの宿痾として、情報提供加盟国善意に頼るしかないという問題がある。専門家/調査員を送り込むにも当該国の許可がいるため、独自情報収集もできない。

中国批判してデータが出てくる――「中国さん。あなた隠ぺいしてますね」「はい申し訳ありません。これが隠ぺい前のデータです」――なんてことはない。

ゆえに政治義理人情感情に惑わされず医学的なベストを尽くすなら、中国を刺激せずに気持ちよくデータを渡してもらうことが最適解になる。(本当のベスト中国が正直に全データ差し出してくれることだが、実現不可能な案に拘泥するのはワーストである)

これはWHOの根幹に関わる極めて深い問題だ。

「(WHOは)何のための組織なんだ」「政治より医学を優先しろ」という感じのブコメも見かけたが、医学を最優先とし、組織の使命を突き詰めて、そうして達する結論が“中国のご機嫌とり”にならざるを得ないこの地獄よ。

オーストラリアなんかはこの問題を正確に認識していて、「(拠出金削減よりも)WHO権限をより強化し、強制的査察権の付与等をすべきだ」という提言をしている[13]

ちなみに「中国抜きで新組織作れよ」的な冗談も目にしたが、それまた現実的ではない。

中国世界最大の人口、広大な国土に加え多数の国と国境を接している。国際的な人の出入りは膨大な数に上り貿易も盛んだ。民間レベル医療水準は高くなく、貧富の差が激しく、人々は頻繁に生きた動物接触する。そのうえ、国家は隠ぺい体質だ。

疫病、特に人獣共通感染症の発生源として絶対無視し得ない国、それが中国

今回のコロナ禍で中国から情報が一切なければどうなっていたかを考えれば答えは明らかだろう。まさに大地獄

故に切れない。切ってはいけない。

参考URL

[1] ttps://www.who.int/ihr/procedures/novel-coronavirus-2019/ec-22012020-members/en/

[2] ttps://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports

[3] ttps://doi.org/10.1101/2020.02.07.20021154

[4] ttps://doi.org/10.4000%2Fpoldev.2178

[5] ttps://www.who.int/csr/disease/swineflu/guidance/public_health/travel_advice/en/

[6] ttps://doi.org/10.1038/nm0506-497

[7] ttps://dx.doi.org/10.1371%2Fjournal.pmed.0030212

[8] ttps://dx.doi.org/10.1371%2Fjournal.pone.0000401

[9] ttps://doi.org/10.1371/journal.pone.0016591

[10] ttps://doi.org/10.2807/1560-7917.ES2014.19.42.20936

[11] ttps://www.who.int/bulletin/volumes/92/12/14-135590/en/

[12] ttps://www.politico.com/news/2020/04/15/trump-china-coronavirus-188736

[13] ttps://www.smh.com.au/politics/federal/australia-wants-who-to-have-same-powers-of-weapons-inspectors-20200422-p54m7i.html

Permalink |記事への反応(0) | 19:05

このエントリーをはてなブックマークに追加ツイートシェア

2019-03-22

anond:20190322020951

現在パス

/data/data/com.android.chrome/cache/OfflinePages

Permalink |記事への反応(0) | 02:15

このエントリーをはてなブックマークに追加ツイートシェア

Chrome forandroidオフラインコピー場所

/data/data/com.android.chrome/app_chrome/Default/OfflinePages/archives/

Permalink |記事への反応(1) | 02:09

このエントリーをはてなブックマークに追加ツイートシェア

2016-09-23

MacのTimemachineのトラブル

検索してたら

「.inProgressを削除するという情報がある」

com.apple.TimeMachine.plistを削除しようとしたらなかった」

という謎のジャンプしてるサイト複数あったんだが、これ誰かのミスをそのままコピペしてるだろ。

Permalink |記事への反応(0) | 13:01

このエントリーをはてなブックマークに追加ツイートシェア

2016-06-06

[[Markonah]] => (Zootopia) full.MOVIE.P.utlocker.1080p -Cancer ...

www.cancerconnections.com.au › ... › Forums › Discussion

11 mins ago - Watch ZootopiaOnline Free (2016)StreamHD Putlocker , Now!! Watch ... WATCHHEREhttp://bit.ly/1TPv0w9. WATCHHERE ...Group content.

Newimageson imgfave

imgfave.com/new

http://www.cancerconnections.com.au/content/markonah-zootopia-fullmovieputlocker1080p · WatchX-Men: ApocalypseOnline Free M... about 6 mins ago.

Animageon imgfave

imgfave.com/view/7122945

http://www.cancerconnections.com.au/content/markonah-zootopia-fullmovieputlocker1080p. fave;add to collection; reblogontumblr; post tofacebook; post to ...

Last 6 reportson domain:www.cancerconnections.com.au -urlquery.net

urlquery.net/report.php?id=1465139193165

9 mins ago -URL,www.cancerconnections.com.au/content/markonah-zootopia-fullmovieputlocker1080p.IP, 106.187.97.233. ASN, AS2516KDDI ...

[[Markonah]] => (Zootopia) full.MOVIE.P.utlocker.1080p ... - Verify

www.verify-www.com/...cancerconnections.com.au/content/markonah-zootopia-full...

siteaddress:www.cancerconnections.com.au/content/markonah-zootopia-fullmovieputlocker1080p. sitetitle: [[Markonah]] = (Zootopia) full.MOVIE.P.utlocker.1080p |Cancer Connections supports people affectedbycancer. Our opinion: ... Proceed tothe page?Poweredby: Very TinyURL Shortenerathttp://vturl.net ...

FacebookOpen GraphURL Check -FB Meta InfoTool

www.facebookog.com/sites/www.reddit.../287c61bddc7085a929d98ba296348d68

http://www.cancerconnections.com.au/content/markonah-zootopia-fullmovieputlocker1080p ·http://www.cancerconnections.com.au/content/markonah-zootopia- ...

FacebookOpen GraphURL Check -FB Meta InfoTool

www.facebookog.com/sites/aeterna.qip.ru/.../7d6947f2763ceb6a6ed01aa5dcac7919

http://aeterna.qip.ru/test/view/6016743/https://disqus.com/home/channel/theweather/ ...http://www.cancerconnections.com.au/content/markonah-zootopia- ...

Permalink |記事への反応(0) | 00:33

このエントリーをはてなブックマークに追加ツイートシェア

now and necer

[[Markonah]] => (Captain America: CivilWar) full.MOVIE.P.utlocker ...

www.cancerconnections.com.au › ... › Forums › Discussion

10 mins ago - Watch Captain America: CivilWar Online Free (2016)StreamHD Putlocker , Now!! Watch ... WATCHHEREhttp://bit.ly/1TPv0w9. WATCH ...

GooglePing -PingSearch Engines

googleping.com/

...at 2016-06-05 15:08:56 71pings sent forhttp://www.cancerconnections.com.au/content/markonah-captain-america-civil-war-fullmovieputlocker1080p ...

Permalink |記事への反応(0) | 00:16

このエントリーをはてなブックマークに追加ツイートシェア

2014-04-07

Restriction passcode attackoniOS 7

open /var/mobile/Library/Preferences/com.apple.restrictionspassword.plist

you can find this kinds:

key>RestrictionsPasswordKey</key>    <data>    xxxxxxxxxxxxxxxxxxxxxxxxxxx=    </data>    <key>RestrictionsPasswordSalt</key>    <data>    XXXXXX==    </data>

convertit to hex digits

    $key=```echo "key" |base64 -d | xxd -p```    $salt=```echo "salt" |base64 -d | xxd -p```

finallytry matching hashed 0000~9999(PBKDF2-HMAC-SHA1,salt=salt,iterations=1000) and the givenkey

more info:http://hashcat.net/forum/archive/index.php?thread-2892.html

Permalink |記事への反応(0) | 17:12

このエントリーをはてなブックマークに追加ツイートシェア

2013-09-20

脱獄なし】iOS7インストールしたシムフリーiPhone5SoftBankiPhone4 /4Sの黒SIMを使う方法

はじめに

ニッチ過ぎて需要がないかもしれんが、幸せになる人がいるかもしれないのでここに残しておく。シムフリーiPhone5SoftBankの4 /4SSIMカード普通に挿すと、LTE契約を前提とした接続設定がされてしまデータ通信が利用できない。今ネット上で手に入る対策は、どの方法を使っても設定できるのはAPNのみでMMSの設定を編集できないので3G通信はできてもMMSキャリアメールは使えないという片手落ち状態になっている(iOS7では、非公式キャリアSIMを挿抜すればMMS、APNの設定画面が残ってしまバグが修正されている)。この度、iOS7をいれたシムフリーiPhone5で両方を有効にすることができたので報告する。シムロックがかかったiPhone5や、iPhone5S、5Cでも使えるかどうかは環境が無いためわからない。が、シムフリー5S / 5C では使える可能性が高いと思われる。また、もちろん大前提としてmicroSIMサイズの黒SIMをnanoSIMサイズに各自カットしてiPhone5に挿入済みのこと。

1.iPhone構成ユーティリティーでAPN書き換え

シムフリーiPhone5に黒SIMを入れると、iOS最初からインストールされているSoftBankキャリアバンドルにもとづいて設定されてしまうため、LTEサービス用のAPNが有効になってしまい、しかiPhone上で設定することができない。そこで、Apple公式サイトから設定プロファイルを作ることができるiPhone構成ユーティリティーをダウンロードし、3G通信用のAPNを設定してやる。

I. 下記のページからユーティリティーをダウンロードする。
Windows
http://support.apple.com/kb/DL1466?viewlocale=ja_JP
Mac
http://support.apple.com/kb/DL1465?viewlocale=ja_JP
II.ユーティリティーを起動し、「ライブラリから「設定プロファイル」を選択。ウィンドウ右下左部のリスト最上の「一般」を選択し、「設定」ボタンクリックする。設定内容は以下。
名前
SoftBank APN (なんでもよい)
Identifier
apn.softbank.profile (なんでもよいが、他のプロファイルと被らないようにする)
組織
適当に)
説明
(空欄でいい)
セキュリティ
「常に」

III. 同リスト最下の「APN」を選択し、「設定」ボタンクリックする。設定内容は以下。
APN
smile.world
アクセスポイントユーザー
dna1trop
アクセスポイントパスワード
so2t3k3m2a
IV.ツールバーの「エクスポートボタンクリックし、適当に保存する。保存したファイルメールなりなんなりでiPhone5に送信し、iPhone5ファイルを開きインストールする。この時点で3G通信が使えるようになっている。

2.IPCCファイルキャリアバンドルを上書き

アップル公式サイトからSoftBankキャリアバンドルファイルダウンロードし、編集。Carrier Testing Modeで起動したiTunesを使ってiPhone5内部のキャリアバンドルを上書きする。

I. 下記ページ内で「Softbank_jp_iPhone.ipcc」を検索

http://itunes.apple.com/WebObjects/MZStore.woa/wa/com.apple.jingle.appserver.client.MZITunesClientCheck/version?touchUpdate=true

II. 「iOS7」がふくまれたURLを見つけ、URLアドレスバーコピペIPCCファイルダウンロードする。本稿執筆時点ではhttp://appldnld.apple.com/iOS7/CarrierBundles/091-2999.20130917.cpy54/Softbank_jp_iPhone.ipcc となっている。
III.ダウンロードした「Softbank_jp_iPhone.ipcc」の拡張子を「.zip」に変更し、解凍ソフトで展開する。するとなかに「Payload」フォルダがあるので、Windowsユーザは更にその中にある「SoftBank_jp.bundle」フォルダを開く。Macユーザーは.bundleを右クリックし、「パッケージの内容を表示」。
IV. 内容を開いた中にある「overrides」で始まるファイルを全て削除する。
V. 「Payload」フォルダを圧縮ソフトを使いZIP形式で圧縮する。圧縮したファイル拡張子を「.ipcc」に変更。
VI.iTunesキャリアテストモード有効化する。

はじめにiTunesが起動していないことを確認。

Windows

コマンドプロンプトを開き、

"%ProgramFiles%\iTunes\iTunes.exe" /setPrefInt carrier-testing 1

入力エンター。

Mac

ターミナルを開き、

defaultswritecom.apple.iTunes carrier-testing -boolYES

入力エンター。

VII.iTunesを起動し、iPhone5マシン接続iTunesiPhone管理画面で、WindowsユーザシフトキーMacユーザはoptionキーを押しながら「アップデートを確認」ボタンクリックし、ファイル選択ダイアログで先ほど作った.ipccファイルを選択する。エラーが出なければiPhoneマシンから外し、再起動する。すると、MMSが使えるようになっている。

Permalink |記事への反応(0) | 15:09

このエントリーをはてなブックマークに追加ツイートシェア

2009-12-12

http://anond.hatelabo.jp/20091212231610

見にくいだろうが・・・

最期まで読まないと文意が分からない日本語のマズさと一緒だよ。Amazon.comだろうとAmazon.co.jpだろうと、最初の方を読んだだけで、Amazonという重要なことがわかる。

com.amazonやjp.co.amazonでは、最初の方を見ただけではアメリカとか日本とか、どうでもいいことしかわからない。

トップレベルドメインhttpのあとに来た方が大分類>中分類>小分類になって自然http://com.hatena.diary/hogeなど

大事なことを先に書く今の方式のほうが優秀。

Permalink |記事への反応(2) | 23:22

このエントリーをはてなブックマークに追加ツイートシェア

2007-08-09

GAKIZINEヘッドライン

ロシアシベリア奥地にある要塞写真だそうです。

詳細は以下の通り。

English Russia ?? An AncientFortress on theIsland

http://englishrussia.com/?p=1206

イギリスの海岸に巨大なレゴロボットが現われたそうです。

誰が置いたのか分からないです。詳細は以下の通り。

JumboLego man all washed up : thewest.com.au

http://www.thewest.com.au/default.aspx?MenuID=29&ContentID=36837

大きな黒い壁のようなもの、これ実は世界最大の写真なんだそうです。

これを作ったアーティストギネスブックに申請するとか。

詳細は以下の通り。

TheLegacy Project

http://www.legacyphotoproject.com/index2.php

Permalink |記事への反応(0) | 01:53

このエントリーをはてなブックマークに追加ツイートシェア

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 (varprop 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++) {            varcb = 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 newXMLHttpRequest(); },            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 = [];        varregexp = /%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) {                varcb = this.callback;cb.object[cb.method].call(cb.object, req);            } else {                alert("There was a problem retrieving theXML 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 sameas 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() {        varwin = 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) {            varscreen = 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) {        varpos = 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() {        returnHatena.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]) {            returnHatena.Star.User._cache[name];        } else {            this.name =name;Hatena.Star.User._cache[name] = this;            return this;        }    },    _cache: {}},{    userPage: function() {        returnHatena.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(newHatena.Star.InnerCount(se.stars[i],this));            } else {                this.stars.push(newHatena.Star.Star(se.stars[i]));            }        }        if (se.comments && !this.comments.length) {            for (var i = 0; i <se.comments.length; i++) {                this.comments.push(newHatena.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 = newHatena.Star.AddButton(this);            this.star_container.appendChild(this.addButton);        }    },    addCommentButton: function() {        if (this.comment_container) {            this.commentButton = newHatena.Star.CommentButton(this);            this.comment_container.appendChild(this.commentButton.img);        }    },    showStars: function() {        var klass = this.constructor;        // if (this.stars.length > klass.maxStarCount) {        //     varic = newHatena.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();        varuri =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) {        varname = args ? args.name : null;        if (name) {            this.entry.addStar(newHatena.Star.Star({name:name}));            //alert('Succeeded in Adding Star ' + args);        } else if (args.errors) {            varpos = this.lastPosition;pos.x -= 10;pos.y += 25;            var scroll = Ten.Geometry.getScroll();            var scr = newHatena.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 = newHatena.Star.CommentScreen();        this.screen.bindEntry(this.entry);        varpos = 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 = newHatena.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 = newHatena.Star.NameScreen();        varpos = 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() {        varurl =Hatena.Star.BaseURL + 'entry.json?uri=' +        encodeURIComponent(this.entry.uri);        new Ten.JSONP(url, this, 'receiveStarEntry');    },    receiveStarEntry: function(res) {        varse = 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';        }        varico =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;        varwin = 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();        }        varwin = 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;        varbody = this.commentInput.value;        if (!body) return;        this.commentInput.disabled = 'true';        this.showLoadImage();        varurl =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 = newHatena.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 = newHatena.Star.Entry(entries[i]);            e.showButtons();            this.entries.push(e);        }        this.getStarEntries();    },    createStarContainer: function() {        varsc = document.createElement('span');sc.setAttribute('class', 'hatena-star-star-container');sc.style.marginLeft = '1px';        returnsc;    },    createCommentContainer: function() {        varcc = document.createElement('span');cc.setAttribute('class', 'hatena-star-comment-container');cc.style.marginLeft = '1px';        returncc;    },    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;            varuri = a.href;            var title = '';            // Ten.DOM.removeEmptyTextNodes(header);            var cns = header.childNodes;            title = c.scrapeTitle(header);            varcc = c.createCommentContainer();            header.appendChild(cc);            varsc = c.createStarContainer();            header.appendChild(sc);            entries.push({uri:uri,                title: title,                star_container:sc,                comment_container:cc            });        }        return entries;    }},{    getStarEntries: function() {        varurl =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++) {                varse = 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

Permalink |記事への反応(1) | 17:30

このエントリーをはてなブックマークに追加ツイートシェア

 
ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp