はてなキーワード: classとは
LiveDoor認証がでたらしいので、とりあえず寝際にちゃちゃっと書こうとしたのだけどなんかうまくいかない。
「ログインURLの有効期限が切れています」とかでちゃうんだ。
なにか間違ってるかな?
<?php // LiveDoor認証に必要なリンクの生成 // 定数がクラス内に切ってあるので環境にあわせ変更してください include_once('authlivedoor.class.php'); // Livedoor認証用クラス $obj_auth = new AuthLiveDoor(LIVEDOOR_APIKEY, LIVEDOOR_SECRET); $livedoorloginurl = $obj_auth->getLoginUrl(); ?> <div style="border:solid 1px #666666;"> <a href="<?= $livedoorloginurl ?>">ライブドア認証を利用してログインする<br /> <img src="http://auth.livedoor.com/img/cmn/head_livedoor.gif" border="0"> <img src="http://auth.livedoor.com/img/cmn/head_logo.gif" border="0"> </a><br />
<?php // this code is writen by utf-8 & lf //http://auth.livedoor.com/login/?app_key=<app_key>&perms=<perms>&t=<time>&v=1.0&userdata=<userdata>&sig=<sig> // LiveDoor外部認証APIを利用する // キーは各開発者ごとに取得が必要です。 http://auth.livedoor.com/ ここより取得できます。 // コールバックURLには authlivedoor.php を指定してください // --- 下記宣言を環境に合わせて変更してください。 --- define("LIVEDOOR_APIKEY" ,""); // アプリケーションキー define("LIVEDOOR_SECRET" ,""); // LiveDoor認証秘密キー // --- ここまで --- class AuthLiveDoor { const LIVEDOOR_AUTH_PORT = 80; // ポート const LIVEDOOR_AUTH_TIMEOUT = 10; // タイムアウト const LIVEDOOR_AUTH_VERSION = '1.0'; // 認証APIのプロトコルバージョン const LIVEDOOR_AUTH_PERMS = 'id'; // 認証APIのアクセス権 const LIVEDOOR_AUTH_FORMAT = 'xml'; // 認証APIの取得フォーマット const LIVEDOOR_AUTHURL = "auth.livedoor.com"; // LiveDoor認証URL private $login_state = false; private $login_id = ""; private $err_msg = ""; private $apikey = ""; private $secret = ""; public function __construct($apikey, $secret) { $this->apikey = $apikey; $this->secret = $secret; } // // $cert = $_GET['token']; public function getAuth($token) { if ($token == "" ) { return; } $api_time = date('U'); // エポック秒で $param_ary = array($this->apikey ,AuthLiveDoor::LIVEDOOR_AUTH_FORMAT ,$token ,api_time ,AuthLiveDoor::LIVEDOOR_AUTH_VERSION ); sort($param_ary); $api_sig = hash_hmac('sha1',implode('',$param_ary),$this->secret); $param = "app_key=".$this->apikey ."&format=".AuthLiveDoor::LIVEDOOR_AUTH_FORMAT ."&token=".$token ."&t=".$api_time ."&v=".AuthLiveDoor::LIVEDOOR_AUTH_VERSION ."&sig=".$api_sig; $fp = fsockopen(AuthLiveDoor::LIVEDOOR_AUTHURL , AuthLiveDoor::LIVEDOOR_AUTH_PORT , $errno , $errstr , AuthLiveDoor::LIVEDOOR_AUTH_TIMEOUT); if (!$fp) { $this->err_msg = "$errstr ($errno)<br />\n"; } else { $out = "POST /rpc/auth?$param HTTP/1.1\r\n"; $out .= "Host: auth.livedoor.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $ret = ""; while (!feof($fp)) { $ret .= fgets($fp, 2048); } fclose($fp); } // LiveDoorの認証XMLのパターン $pattern = '/(\s*<livedoor_id>)(.*)(<\/livedoor_id>)/'; preg_match_all($pattern,$ret,$getAry); $livedooruserid = $getAry[2][0]; // ユーザーIDを取得できた場合 if ($livedooruserid != "") { // ログイン成功 $this->login_state = true; $this->login_id = $livedooruserid; return ture; } } public function getLoginState(){ return $this->login_state; } public function getLoginId(){ return $this->login_id; } public function getLoginUrl() { # http://auth.livedoor.com/guide/ # http://auth.livedoor.com/login/?app_key=<app_key>&perms=<perms>&t=<time>&v=1.0&userdata=<userdata>&sig=<sig> # app_key 必須 登録時に発行されたアプリケーションキー # perms 必須 要求するアクセス権、現状userhashとidの2種類がある # t 必須 URLが生成された時間をエポック秒で表したもの # v 必須 プロトコルバージョン、現在は1.0で固定 # userdata 任意 コールバックURLに引き継ぎたい値を255バイトまで自由に設定できる # sig 必須 このURLの正当性を確認するためのシグネチャ // ログインURLの有効期限が切れています // ヾ(。o、゜)ノ ここらへんがわからん!! // $api_time = time()+32400; // エポック秒で $api_time = date('U')+32400; // エポック秒で // $api_time = date('U'); // エポック秒??もしかして、それはポエティック病ではありませんか? $param_ary = array($this->apikey ,AuthLiveDoor::LIVEDOOR_AUTH_PERMS ,api_time ,AuthLiveDoor::LIVEDOOR_AUTH_VERSION // ,data ); sort($param_ary); $api_sig = hash_hmac('sha1',implode('',$param_ary),$this->secret); $loginurl = "http://auth.livedoor.com/login/" ."?app_key=".$this->apikey ."&perms=".AuthLiveDoor::LIVEDOOR_AUTH_PERMS ."&t=".$api_time ."&v=".AuthLiveDoor::LIVEDOOR_AUTH_VERSION // ."&userdata=" ."&sig=".$api_sig; return $loginurl; } }
もう疲れたので寝る。ライブドアなんてーーーー!!!
訂正。
秘密キーとか、そのままのっけちゃった (ーωー|||)
そしてなかなか訂正できなくてあせった。。
>http://www.geocities.co.jp/SiliconValley/8916/Macintosh/rimo.tv.screensaver.html>
rimo.tv.screensaverは、YouTube に掲載されている人気の動画から約1日おきに新しい番組プログラムを生成・配信する はてなのサービスである http://rimo.tvを表示するMacOSX用スクリーンセーバです。
<<
勝手にclass-dumpとstringsとotoolで調べたよ。概ね間違っていないと思う。
取り上げるのは下の3つ。便宜的に上からapng、alphafilter、ie6pngとする。
IT戦記 - 僕も半透明 png を使うためのライブラリ作った!
アルファ画像を扱うalphafilter.jsライブラリ-とあるWEBクリエイターのblog
ウノウラボ Unoh Labs: IE6でアルファチャンネルを含むPNGを表示する
特になし。ごめんなさい。
new AlphaChanneledPNG("imageId1","/blank.gif").show(); new AlphaChanneledPNG("imageId2","/blank.gif").show(); ...
MTASCでFlash Lite 2のSharedObjectを使う
http://anond.hatelabo.jp/20070118224057
↑に「リスナーを設定する必要があります。」とあるのでhaXeの↓に
(インストールフォルダ)\std\flash\SharedObject.hx
↓を追加する
#if flash static function addListener(objectName:String, notifyFunction:Dynamic) :Void; static function removeListener(objectName:String):Void; #end
サンプルの内容は1でカウントアップ、3でカウントの表示。
でサンプル↓をSharedObjectHaxeRei.hxと名前をつけて保存。
import flash.MovieClip; import flash.SharedObject; import flash.Stage; import flash.Key; class SharedObjectHaxeRei { static function main () { var sor : SharedObjectHaxeRei = new SharedObjectHaxeRei (flash.Lib._root); } var Prefs : SharedObject; public function new (mc: MovieClip) { mc.createTextField ("tf", mc.getNextHighestDepth () , 0, 0, Stage.width, Stage.height); mc.tf.text = "SharedObjectHaxeRei\r"; SharedObject.addListener ("Prefs", loadCompletePrefs ); // 共有オブジェクトを作成することができる Prefs = SharedObject.getLocal ("Prefs"); //キーリスナーの指定 Key.addListener (this); } //キーアップイベントの処理 public function onKeyUp () : Void { switch (Key.getCode ()) { case 49 ://1 セーブ if (Prefs.getSize() == 0) { Prefs.data.count = 0; } else { Prefs.data.count++; } case 51 ://3 ロード if (Prefs.getSize() == 0) return; flash.Lib._root.tf.text = Prefs.data.count + "\r" + flash.Lib._root.tf.text; default : } } function loadCompletePrefs (mySO : SharedObject) { flash.Lib._root.tf.text = "call loadCompletePrefs: " + "\r" + flash.Lib._root.tf.text; } }
コンパイルするにはSharedObjectHaxeRei.hxmlを作成して↓を記述
# SharedObjectHaxeReiのコンパイル用 -swf SharedObjectHaxeRei.swf -swf-header 240:320:10 -swf-version 7 -main SharedObjectHaxeRei
上記を↓でコンパイルする。
haxe SharedObjectHaxeRei.hxml
ま、そういう事なんだけどね。
で、なんで直さないかというと原因が特定されてなかったからじゃないかな?
バグフィクスでめんどくさい事の1つがバグの位置の特定なんだよな。どのくらい時間がかかるかわからないし、わからない時はわからない。生産的でもないから食手が伸びないんだよ。ま、私はパズルを解くみたいで好きだけど。
で、不具合カテゴリのやつはほとんどが同じ根をもってるっぽい。以下憶測なんだけど増田の投稿処理フロー。
ってながれかなと。で3番でアンカー文字列がキーワードだとキーワードリンク(2で作られたリンク)ではなくても書き換えちゃうと。たぶんそんな所かと思った。
あと、キーワードに記号が含まれているとうまくマッチしないで d.hatena.ne.jp を向いたキーワードリンクが残るとか、こけて500を返すとかも起こってるんじゃないかな。
で、対策としてはキーワードリンク生成時にあらかじめclass属性を付加して、それを3のキーワードリンク書き換え条件にすればよいんじゃないかと思った。
という推測をしたんですが、あってますでしょうか?>わんぱーく先生
そうそう、やっぱり
- <a>キーワード</a> - <a name="keyword>>キーワード</a>
ってのもありみたいで。
あと、まさかとは思うけど
http://anond.hatelabo.jp/20070127170633
ではトラックバックとんだりしないよねー。でも
- <span title="http://anond.hatelabo.jp/20060924031809">_</span>
はどうかなー?
かと思ったけど、あんまりやってる人いないね。
ってか、ぼくだけ><
ところで、class="hatena-bcomment-view"が、display:noneだね。
display:noneそのままだと使えないから、これは便利。
ソース見ないと見れないように書くときに使えそう。
■
・Flash Lite 2.x ActionScript Language Reference > ActionScript classes > SharedObject
・Flash Lite 2.x ActionScript リファレンスガイド > ActionScript クラス > SharedObject
との事なのでMTASCの↓に
(インストールフォルダ)\std\SharedObject.as
↓の行を追加する
static function addListener(objectName:String, notifyFunction:Function) :Void;
でサンプル
class SharedObjectRei { static function main () { var sor : SharedObjectRei = new SharedObjectRei (_root); } public function SharedObjectRei (mc: MovieClip) { mc.createTextField ("tf", mc.getNextHighestDepth () , 0, 0, Stage.width, Stage.height); mc.tf.text = "SharedObjectRei\r"; SharedObject.addListener ("Prefs", loadCompletePrefs ); // 共有オブジェクトを作成することができる var Prefs : SharedObject = SharedObject.getLocal ("Prefs"); } function loadCompletePrefs (mySO : SharedObject) { if (0 == mySO.getSize ()) { // サイズが 0 の場合、データを初期化する必要がある mySO.data.name = "Sigismund"; mySO.data.email = "siggy@macromedia.com"; } else { // mySO のすべてのデータをトレースする _root.tf.text+= "Prefs: " + "\r"; for (var idx in mySO.data) { _root.tf.text+= " " + idx + ": " + mySO.data [idx] + "\r"; } } } }
コンパイルは↓を参考に
・ActionScript 2.0メモ
■ウェブで長文書いて議論してるのを見ると 改行Ver.
いや、本人同士がそれでいいならいいんですけどね、どっちかが長文うぜーなーとか思ってたりする場合も多いわけじゃないですか。ただの野次馬である傍観者にとっては特にそうだと思うんですけど。
はてブに「長い」とかコメントされてるエントリとかを想起していただけるとありがたいんですけど。
どうもそういうのを見るとついついフォード・ピント事件なんかを思い出してしまうわけですよ。
知らない人はググって下さいね。一応映画にもなってたりするんでお暇なら観てみるのもいいんじゃないかとオススメしますですよ、ハイ。(邦題『訴訟』原題『The Class Action』)そんなのめんどくせーよーという人の為には解説してるアドレス貼っときますね。(http://www.fps.chuo-u.ac.jp/~cyberian/Ford_Pinto.html) んでリンク踏むのさえめんどくせーとかacドメインとか読んでもわかんねーよという先入観をお持ちのあなたの為に適当に解説しちゃいますと、フォードが日本車に押され始めた時代にこれじゃいかんってわけでコンパクト・カーを売り出したの、ピントっていう。しかしまぁリーズナブルなだけあって結構売れちゃったりしたんだけども安全設計もリーズナブルだったのが問題になって訴訟起こされちゃいました。
ちなみにアメリカの訴訟制度ってのはなかなか面白いもので、この手の訴訟だとあの有名な懲罰的損害賠償(企業が痛いな、と思う範囲まで賠償金額上げちゃっていいよ制度)と、Class Action 制度(同様の被害を受けた人は先人の訴訟結果にタダ乗り出来ちゃう制度、日本だと訴訟提起後結審前までは参加が許されたんだっけ、詳しくは知らないんでゴメンネ)のおかげで絶対負けられないんよね。
損して得取れなんて無理無理無理無理かたつむり、松下幸之助も中内功もビックリな制度。
ここら辺はまぁどうでもいいんで次行きますけど、訴訟開始前にディスカバリーって制度があるんですよ。
この手の訴訟の場合被告の企業側に証拠ってあるもんですしね。それを原告側が請求できる制度なんですよ。
といっても原告側もそんなに詳しく企業内事情を知ってるわけじゃあないんで請求内容がある程度曖昧にならざるを得ないわけでね、それを逆手に利用して、被告企業がそれこそ倉庫が一杯になる位の量の内部文書を送りつけるって行動に出るわけです。
そんなことされたら困るよねー。
原告側は何と言っても少数者であるわけだし、精査しようにも人件費が酷いことになっちゃうし、いかんともし難い状況になったよってお話(この先は映画見てね)。
ちなみにこのテクニック割とメジャーなようで僕が講義を受けた国際取引法の先生(商社出身)もやったことあるって言ってたよ。
んでこれを最初の話に無理矢理つなげると、長々と文章書いて相手に対応してる人って、誠実に答えてるようでいて実は単に目晦まししてるんじゃないの?って疑問が湧いたよってお話。
2chでよく言われるように3行までしか読めない、ってのは少々極端に過ぎると思うのだけれど、しかしそうそう長い文章を時間コストをかけて読めるわけではないよね、ってところはなんとなく理解してもらえるんじゃないかなぁ。
世の中には楽しい事やしたい事ってのが一杯あって(セックル(恋人とならタダだと思ってても多分風俗の方が安くて気持ちいいよ、次々入れ替わるから新鮮だし)とか食べ歩き(ってよりこんなところで食事してる俺/私って素敵欲望ドライブなんじゃないの)とかもっと寝たい(偽装請負ご苦労様です。所得隠ししなけりゃ設備投資費用も捻出できない世界有数の好景気大企業の下請じゃポイズン)とかデイトレード(まだやってる人いるの?)とか自己啓発(はてなとFPNってこういう腐臭がするよね、どうでもいいけど。Lifehuckだってw)とか宗教儀式(明治天皇の声が聞こえる!!とかグーグルの狂気とか)とかさ)、ネットで議論なんてモノはそのうちの一つでしかないわけだし。
しかもディスプレイとかブログっていうアーキテクチャはほんと長文読むのに適さない環境なんじゃないかとオールドタイプな僕は思ってしまうわけですけども。
A4一枚分以上は紙で読みたい。
こういう人って結構いるんじゃないかなぁと思うわけですよ。
そういう人に対して誠実にあるにはどうしたらいいのかねぇって所はこの発達した世の中でも解決されてないんじゃなかろーか。
これってビジネスチャンス?ニートのボクでも起業してお金持ちになってセックル三昧(ここまでjkondo)、金で女は買えると豪語した挙句に証券取引法違反で国策捜査の上つかまってあれやこれや的展開が期待できるかもーうはーすげー。
あ、ごめん妄想入った。
文章なんてのは長くしようとすればどこまででも長く出来るし、短くしようと思えば結構な割合で短くなるものだと思うんですよ。
お前2時間でいいじゃんみたいな。
ただ、短く書く時には削ぎ落とされた部分を読む側が理解してないといけないという条件は付きますが。
ってことは長々と文章書いてる人ってのは読み手の力量を信用してない、ってことになるんですかね。
まぁはてブ衆愚とかネットイナゴなんてのが流行ってる昨今さもありなんな発想ではあるわけですが、エントリ書く奴が偉くて読み手は衆愚だからこんなことまでわざわざ書いてやらねばならん、みたいな。
そんな目で見ないでお願い。
それならいっそやde√blog終風先生みたいにわからん奴はもういいよ的に放置されるほうがまだマシじゃね? ってか終風先生=紫式部か。
終風日記や極東ブログは省略省略で貴族たり得ない衆愚である受験生を困惑させる源氏物語か。
挙句にシステムスルーカですか、イナゴはイナゴらしくオマニーでも見てればいいですかそうですか。
切ないなぁ、ああ切ない。
大島弓子ばりに切ないよ。
伝われこの思いの8頭身の心境ですよ。
大体あれだ、平野啓一郎もあれだよな、『日触』しか読んだことないけど漢字難しいよな、初手からお前ら文学イナゴは寄ってくんなオーラ全開だよな。
昔の日本文学読んでりゃ理解出来るとか言われてもそりゃ無理っすよ、旧字体で読んでる人っているのかね。
あんなのに造詣が深いのってめっちゃレアモンスターだと思うんですけど。
なんかはてな内には散見されるのが面白いといえば面白いのかもしれないが。
しかしまぁあんな小難しい本読むくらいならあれだね、同じ京大出身でも森見登美彦の方が全然面白いと感じちゃうね。
あ、ここでいう「非モテ」っていうのはある程度の文化資本をもった、顔面や身体に不都合があったり拗れた精神構造持ってる人ね。
(PCなんて気にしねぇ)だってボクの後ろでウメダモチオとかessaがグーグルとか権力論とかビジネスモデルとかを語れない期間工みたいな奴ははてなーではない、って囁いて来るんだもん。ここはてなだし仕方ないよね。
しかしまぁスルーってのも寂しいもんだよね。
皆が皆スルーし合って出来上がる世界ってアレだよね、なんつーかちょっとつまらんよね。
ってかこれって物象化じゃないのか。
マルクスの亡霊は未だ徘徊してるのか。
ごめんちょっと難しい言葉使ってみたかった。
中二病といいたければ言うがいいさ。
でも心の隙間に大阪のおばちゃんを忘れないでいて欲しいなぁと。
さてもう収拾がつかなくなったのでこの辺で終わりにするけど、長文批判のためにはじめたこのエントリがやたら長くなった事を心より詫びる。
どうせスルーされるんだろうなぁ。
いや、本人同士がそれでいいならいいんですけどね、どっちかが長文うぜーなーとか思ってたりする場合も多いわけじゃないですか。ただの野次馬である傍観者にとっては特にそうだと思うんですけど。はてブに「長い」とかコメントされてるエントリとかを想起していただけるとありがたいんですけど。どうもそういうのを見るとついついフォード・ピント事件なんかを思い出してしまうわけですよ。知らない人はググって下さいね。一応映画にもなってたりするんでお暇なら観てみるのもいいんじゃないかとオススメしますですよ、ハイ。(邦題『訴訟』原題『The Class Action』)そんなのめんどくせーよーという人の為には解説してるアドレス貼っときますね。(http://www.fps.chuo-u.ac.jp/~cyberian/Ford_Pinto.html) んでリンク踏むのさえめんどくせーとかacドメインとか読んでもわかんねーよという先入観をお持ちのあなたの為に適当に解説しちゃいますと、フォードが日本車に押され始めた時代にこれじゃいかんってわけでコンパクト・カーを売り出したの、ピントっていう。しかしまぁリーズナブルなだけあって結構売れちゃったりしたんだけども安全設計もリーズナブルだったのが問題になって訴訟起こされちゃいました。ちなみにアメリカの訴訟制度ってのはなかなか面白いもので、この手の訴訟だとあの有名な懲罰的損害賠償(企業が痛いな、と思う範囲まで賠償金額上げちゃっていいよ制度)と、Class Action 制度(同様の被害を受けた人は先人の訴訟結果にタダ乗り出来ちゃう制度、日本だと訴訟提起後結審前までは参加が許されたんだっけ、詳しくは知らないんでゴメンネ)のおかげで絶対負けられないんよね。損して得取れなんて無理無理無理無理かたつむり、松下幸之助も中内功もビックリな制度。ここら辺はまぁどうでもいいんで次行きますけど、訴訟開始前にディスカバリーって制度があるんですよ。この手の訴訟の場合被告の企業側に証拠ってあるもんですしね。それを原告側が請求できる制度なんですよ。といっても原告側もそんなに詳しく企業内事情を知ってるわけじゃあないんで請求内容がある程度曖昧にならざるを得ないわけでね、それを逆手に利用して、被告企業がそれこそ倉庫が一杯になる位の量の内部文書を送りつけるって行動に出るわけです。そんなことされたら困るよねー。原告側は何と言っても少数者であるわけだし、精査しようにも人件費が酷いことになっちゃうし、いかんともし難い状況になったよってお話(この先は映画見てね)。ちなみにこのテクニック割とメジャーなようで僕が講義を受けた国際取引法の先生(商社出身)もやったことあるって言ってたよ。んでこれを最初の話に無理矢理つなげると、長々と文章書いて相手に対応してる人って、誠実に答えてるようでいて実は単に目晦まししてるんじゃないの?って疑問が湧いたよってお話。2chでよく言われるように3行までしか読めない、ってのは少々極端に過ぎると思うのだけれど、しかしそうそう長い文章を時間コストをかけて読めるわけではないよね、ってところはなんとなく理解してもらえるんじゃないかなぁ。世の中には楽しい事やしたい事ってのが一杯あって(セックル(恋人とならタダだと思ってても多分風俗の方が安くて気持ちいいよ、次々入れ替わるから新鮮だし)とか食べ歩き(ってよりこんなところで食事してる俺/私って素敵欲望ドライブなんじゃないの)とかもっと寝たい(偽装請負ご苦労様です。所得隠ししなけりゃ設備投資費用も捻出できない世界有数の好景気大企業の下請じゃポイズン)とかデイトレード(まだやってる人いるの?)とか自己啓発(はてなとFPNってこういう腐臭がするよね、どうでもいいけど。Lifehackだってw)とか宗教儀式(明治天皇の声が聞こえる!!とかグーグルの狂気とか)とかさ)、ネットで議論なんてモノはそのうちの一つでしかないわけだし。しかもディスプレイとかブログっていうアーキテクチャはほんと長文読むのに適さない環境なんじゃないかとオールドタイプな僕は思ってしまうわけですけども。A4一枚分以上は紙で読みたい。こういう人って結構いるんじゃないかなぁと思うわけですよ。そういう人に対して誠実にあるにはどうしたらいいのかねぇって所はこの発達した世の中でも解決されてないんじゃなかろーか。これってビジネスチャンス?ニートのボクでも起業してお金持ちになってセックル三昧(ここまでjkondo)、金で女は買えると豪語した挙句に証券取引法違反で国策捜査の上つかまってあれやこれや的展開が期待できるかもーうはーすげー。あ、ごめん妄想入った。文章なんてのは長くしようとすればどこまででも長く出来るし、短くしようと思えば結構な割合で短くなるものだと思うんですよ。それこそ昨年末のK-1みたいな。お前2時間でいいじゃんみたいな。ただ、短く書く時には削ぎ落とされた部分を読む側が理解してないといけないという条件は付きますが。ってことは長々と文章書いてる人ってのは読み手の力量を信用してない、ってことになるんですかね。まぁはてブ衆愚とかネットイナゴなんてのが流行ってる昨今さもありなんな発想ではあるわけですが、エントリ書く奴が偉くて読み手は衆愚だからこんなことまでわざわざ書いてやらねばならん、みたいな。そんな目で見ないでお願い。それならいっそやde√blog終風先生みたいにわからん奴はもういいよ的に放置されるほうがまだマシじゃね? ってか終風先生=紫式部か。終風日記や極東ブログは省略省略で貴族たり得ない衆愚である受験生を困惑させる源氏物語か。挙句にシステムスルーカですか、イナゴはイナゴらしくオマニーでも見てればいいですかそうですか。切ないなぁ、ああ切ない。大島弓子ばりに切ないよ。伝われこの思いの8頭身の心境ですよ。大体あれだ、平野啓一郎もあれだよな、『日触』しか読んだことないけど漢字難しいよな、初手からお前ら文学イナゴは寄ってくんなオーラ全開だよな。昔の日本文学読んでりゃ理解出来るとか言われてもそりゃ無理っすよ、旧字体で読んでる人っているのかね。あんなのに造詣が深いのってめっちゃレアモンスターだと思うんですけど。なんかはてな内には散見されるのが面白いといえば面白いのかもしれないが。しかしまぁあんな小難しい本読むくらいならあれだね、同じ京大出身でも森見登美彦の方が全然面白いと感じちゃうね。非モテでわーわー言ってる人は『太陽の塔』でも読むといいよ。あ、ここでいう「非モテ」っていうのはある程度の文化資本をもった、顔面や身体に不都合があったり拗れた精神構造持ってる人ね。(PCなんて気にしねぇ)だってボクの後ろでウメダモチオとかessaがグーグルとか権力論とかビジネスモデルとかを語れない期間工みたいな奴ははてなーではない、って囁いて来るんだもん。ここはてなだし仕方ないよね。しかしまぁスルーってのも寂しいもんだよね。皆が皆スルーし合って出来上がる世界ってアレだよね、なんつーかちょっとつまらんよね。ってかこれって物象化じゃないのか。マルクスの亡霊は未だ徘徊してるのか。ごめんちょっと難しい言葉使ってみたかった。中二病といいたければ言うがいいさ。でも心の隙間に大阪のおばちゃんを忘れないでいて欲しいなぁと。さてもう収拾がつかなくなったのでこの辺で終わりにするけど、長文批判のためにはじめたこのエントリがやたら長くなった事を心より詫びる。どうせスルーされるんだろうなぁ。
以下の二つに留意、つまり乱用禁止。
取説未満
// ==UserScript== // @name anond pickup of the day // @namespace http://anond.hatelabo.jp/ // @description pickup section of the day at Hatelabo::AnonymousDiary // @include http://anond.hatelabo.jp/2* // ==/UserScript== (function(){ var trackbackThreshold = 10; var ignoreList = { "/20070801172335": 33, "/20070806163721": 10, }; // only section of the day if (! location.pathname.match(/^\/\d{8}$/)) { return; } // regist ancher that kick main routine var a = document.createElement("a"); a.href = "#"; a.innerHTML = "pickup of the day"; a.addEventListener("click", grab, false); var firstPager_l = document.evaluate("//div[@class='pager-l']",document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; firstPager_l.appendChild(a); function Outline() { this.outline = document.createElement("ul"); this.text = document.createElement("textarea"); this.text.style.overflow = "auto"; this.text.style.width = "100%"; this.text.style.height = "15em"; this.text.innerHTML = "</ul><\n><ul>\n"; this.list = new Array(); } Outline.prototype.setup = function() { var parent = document.getElementById("body"); parent.insertBefore(this.outline, parent.firstChild); parent.insertBefore(this.text, parent.firstChild); } Outline.prototype.append = function(section) { var h3 = section.getElementsByTagName("h3")[0]; var sectionName = h3.firstChild.pathname.replace(/\//,""); var sectionText = h3.textContent.replace(/\s*$/,""); if (sectionText == "\u25a0") { sectionText = sectionName; } this.text.innerHTML += '<h2>[http://anond.hatelabo.jp/'+sectionName+ ":title="+sectionText.replace(/^\u25a0/,"").replace(/]/g,"&#93;")+"] "+ '<a href="http://b.hatena.ne.jp/entry/http://anond.hatelabo.jp/'+sectionName+'">'+ '<img src="http://b.hatena.ne.jp/entry/image/http://anond.hatelabo.jp/'+sectionName+'">'+ "</a></h2>\n"; h3.firstChild.name = sectionName; var li = document.createElement("li"); li.innerHTML = '<a href="#'+sectionName+'">' + sectionText.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">") + "</a>"; var nextSibling = 0; for (var i in this.list) { if (nextSibling < i && i < sectionName) { nextSibling = i; } } if (nextSibling) { this.outline.insertBefore(li, this.list[nextSibling]); } else { this.outline.appendChild(li); } this.list[sectionName] = li; } var outline = new Outline(); function CC(day) { this.li = document.createElement("li"); this.li.innerHTML = '<a href="/'+day+'" target="_blank">' + day + "</a>"; this.day = day; this.n = new Array(); } CC.prototype.pp = function(id) { this.n.push(id); if (this.n.length > 10) { this.li.innerHTML = '<a href="/'+this.day+'" target="_blank">' + this.day + "</a> " + this.n.length; } else { this.li.innerHTML += ' <a href="/'+id+'" target="_blank">*</a>'; } } function Count() { this.count = document.createElement("ul"); this.list = new Array(); } Count.prototype.setup = function() { var parent = document.getElementById("body"); parent.insertBefore(this.count, parent.firstChild); } Count.prototype.append = function(day, id) { var nextSibling = 0; for (var i in this.list) { if (nextSibling < i && i <= day) { nextSibling = i; } } if (nextSibling == day) { this.list[nextSibling].pp(id); } else { var cc = new CC(day); if (nextSibling) { this.count.insertBefore(cc.li, this.list[nextSibling].li); } else { this.count.appendChild(cc.li); } this.list[day] = cc; cc.pp(id); } } Count.prototype.appendSection = function(section) { var id = section.getElementsByTagName("h3")[0].firstChild.pathname.replace(/\//,""); var today = id.match(/\d{8}/)[0]; var anchors = section.getElementsByTagName("a"); for (var i=0; i<anchors.length; i++) { if (anchors[i].href && anchors[i].host == "anond.hatelabo.jp" && anchors[i].pathname.match(/\/(\d{8})\d{6}/) && RegExp.$1 != today) { this.append(RegExp.$1, id); } } } var count = new Count(); function Hide(){} Hide.prototype.setup = function() { this.style = document.createElement("style"); this.style.id = "hide"; this.style.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(this.style); var self = this; this.a = new Object(); this.a.visible = document.createElement("a"); this.a.visible.id = "visible"; this.a.visible.href = "#"; this.a.visible.innerHTML = "visible hide section"; // this.a.visible.setAttribute("onclick","document.getElementById('hide').innerHTML = 'div.hide {display: block}';document.getElementById('visible').style.display = 'none';document.getElementById('unvisible').style.display = 'inline';"); this.a.visible.addEventListener("click", function(){self.visible()}, false); firstPager_l.parentNode.insertBefore(this.a.visible, firstPager_l); this.a.unvisible = document.createElement("a"); this.a.unvisible.id = "unvisible"; this.a.unvisible.href = "#"; this.a.unvisible.innerHTML = "unvisible hide section"; // this.a.visible.setAttribute("onclick","document.getElementById('hide').innerHTML = 'div.hide {display: none}';document.getElementById('visible').style.display = 'inline';document.getElementById('unvisible').style.display = 'none';"); this.a.unvisible.addEventListener("click", function(){self.unvisible()}, false); firstPager_l.parentNode.insertBefore(this.a.unvisible, firstPager_l); this.unvisible(); } Hide.prototype.visible = function() { this.style.innerHTML = "div.hide {display: block}"; this.a.visible.style.display = "none"; this.a.unvisible.style.display = "inline"; } Hide.prototype.unvisible = function() { this.style.innerHTML = "div.hide {display: none}"; this.a.visible.style.display = "inline"; this.a.unvisible.style.display = "none"; } Hide.prototype.append = function(section) { if (section.className.match(/hide/)) { return; } section.className += " hide"; count.appendSection(section); } Hide.prototype.is = function(section) { return section.className.match(/hide/); } var hide = new Hide(); // main routine function grab(){ if (! document.body.innerHTML.match(/<div class="pager-r">(\d+)/)) { return; } var pages = RegExp.$1 -0; if (pages <= 0 || pages > 40) { // check error and limit 1000 entry return; } //pages = 2; firstPager_l.style.display = "none"; outline.setup(); hide.setup(); count.setup(); var mainbody = document.evaluate("//div[@class='body']", document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue; mainbody.innerHTML = "\n"; for (var i=1; i<=pages; i++) { cat(mainbody, i); } } // page load and concatenate function cat(container, page) { container.innerHTML += "<!-- page " + page + " -->\n"; GM_xmlhttpRequest({ method: "GET", url: "http://anond.hatelabo.jp" + location.pathname + "?page=" + page, onload: function(result) { result.responseText.match(/<div class="body">((.|\s)*?)\s*<\/div>\s*<\/div>\s*<div class="pager-l">/); container.innerHTML = container.innerHTML.replace("<!-- page " + page + " -->", RegExp.$1); if (! container.innerHTML.match(/<!-- page \d+ -->/)) { // document.documentElement.innerHTML = document.documentElement.innerHTML.replace(/(src|href)=\"\//mg, "$1=\"http://anond.hatelabo.jp/"); pickup(); } } }); } // pickup section at last cat() concatenate after function pickup() { var target = document.evaluate( "//div[@class='section' and child::*[not(@class='sectionfooter') and descendant::a[starts-with(@href,'http://anond.hatelabo.jp/2') or starts-with(@href,'/2') and not(child::span[@class='sanchor'])]]]", document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for (var i=0; i<target.snapshotLength; i++) { hide.append(target.snapshotItem(i)); } var tbs = document.evaluate( "//p[@class='sectionfooter']/a[2]", document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for (var i=0; i<tbs.snapshotLength; i++) { var tb = tbs.snapshotItem(i); if (tb.innerHTML == "\u30c8\u30e9\u30c3\u30af\u30d0\u30c3\u30af(0)") { hide.append(tb.parentNode.parentNode); } else if (! hide.is(tb.parentNode.parentNode)) { trackback(tb); } } } // count trackbacks function trackback(tb) { GM_xmlhttpRequest({ method: "GET", url: "http://anond.hatelabo.jp/" + tb.pathname.match(/\d{14}/), onload: function(result) { var link = result.responseText.match(/<a name="tb">(.|\s)*/)[0].match(/<li>\s*<a href="http:\/\/anond.hatelabo.jp\/\d{14}"/g); var n = link.length; for (var l in link) { var m = "/" + link[l].match(/\d{14}/); if (m in ignoreList) { n -= ignoreList[m]; } } if (n < trackbackThreshold) { hide.append(tb.parentNode.parentNode); } else { tb.innerHTML = tb.innerHTML.replace(/\)$/, "/"+n+")"); outline.append(tb.parentNode.parentNode); } } }); } })();