Hatena::Groupsubtech

冬通りに消え行く制服ガールは、夢物語にリアルを求めない。

Jun 11, 2009 (Thu)

jAutoPagerize 03:35 はてなブックマーク - jAutoPagerize - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。

github に移して iframe で読みこむ版をつくってみた (id:javascripter さんの AutoPageLoader とおなじ)。なんで iframe にしなかったんだっけ……と思いつつなのでブランチになってる。google image でも效くようになってうれしいです。

iframe にすると、lazy load されているわけでないならブログパーツとかも全部どうにかなってしまうのでいい感じ。DOMContentLoaded で iframe 削除ってて、はてなスターはつかないので filter でつけてやる必要があった。

いろいろあって Safari 対応のコードとか残ってたけど全部削除した。Chrome が GM_xmlhttprequest に対応したらまた考えよう……

名前も変えて github にうつそうとおもったけど、なんかもうこういう虐げられてます感がでる名前でもういい気がしたのでとりあえずそのままにした。


いつもつかってるテスト用サイト

Jan 18, 2009 (Sun)

jAutoPagerize ブログパーツのたいおう 13:54 はてなブックマーク - jAutoPagerize ブログパーツのたいおう - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。

gist の貼り付けコードとかが見えなくなるのがうざいので手をいれた

http://coderepos.org/share/changeset/28585

document.write だけ想定してるのでダメなときはすごくダメかもしれない……

document.write の書きかえを同期的に局所化できないので、必ず一箇所ずつ読みこんでロードするように loop と Deferred つかってる。

mixi 日記がふっとぶ……

なんか alert いれるとふっとばないんだよなぁ…… 観測者問題かよ……

iframe が分割して出力されるせい? っぽかった http://coderepos.org/share/changeset/28627

ちがうなぁ。まだふっとぶ。なんか真っ白になるんよね。広告の iframe でふっとぶのは確実なんだけど、意味がわからない

Hatena Star Everywhere と併用するとダメってことがわかった。でもなんでダメかわからない。iframe 内で GM 動いててなんかうんこになるっぽいけど

めんどいので Hatena Star Everywhere は mixi 除外にした

通りすがり通りすがり2009/02/28 03:35自動読み込みしたページにyoutubeかniconicoの動画が貼り付けてあると, 読み込み完了と同時にふっとぶみたいです.

tarotaro2009/03/04 14:43Minibuffer+LDRizeを利用していると,googleの検索結果が白と青で交互に表示されます。
jautopagerizeの新版では2ページ目以降がすべて青になってしまう現象が発生するようになりました。

cho45cho452009/03/04 15:25> 通りすがりさん
niconico は再現が確認できないですね…… どこか再現するページはありますか?

> taro さん
ちょっとよくわからないのですが、ストライプになる機能は LDRize の機能か何かでしょうか

tarotaro2009/03/04 16:13こんなページがありました。
■LivedoorReader風のキーボード操作を他のサイトでも使えるスクリプト
http://sleipnirist.blog26.fc2.com/?tag=LDRize

2ページ目以降ストライプにならないようです。

通りすがり通りすがり2009/03/06 18:00私の環境(Firefox3.0.7/アドオンはGMだけ)での再現ケースです.
mixi日記にはyoutubeやniconicoの動画が貼り付けられますが, 貼り付けられた日記の次の日記をひらき, jautopagerizeによって動画が貼り付けられた日記を読み込むと, 真っ白になります.
タブには読み込み中と表示されますが, ステータスバーには停止と表示されます. また, ブラウザで戻って進むと, 広告が表示されたiframeが表示されます.

cho45cho452009/03/06 18:02jautopagerize 以外の userjs を全てオフにしてもなりますか?
こちらでも Hatena Star Everywhere と併用すると再現するのですが全く原因が掴めてません

通りすがり通りすがり2009/03/06 22:18jautopagerizeしかインストールしていない状態で再現しますです.
なんなのでしょうね..

cho45cho452009/03/31 15:25http://nicovideo.g.hatena.ne.jp/cho45/ こんなページでたまに再現することがあることを確認しました。確実に再現しないのがかなりやっかいで対処に時間がかかると思います……すいません

Jan 13, 2009 (Tue)

jAutoPagerize が一部ページでクソ重い現象の解消 04:20 はてなブックマーク - jAutoPagerize が一部ページでクソ重い現象の解消 - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。

fotolife の編集ページを jAutoPagerize させるとクソ重くてどうしようもないので、野生の勘で体感速度を向上させるハックを入れた。

http://coderepos.org/share/changeset/28350

L245 に追加した行をコメントアウトしたりインしたりして http://f.hatena.ne.jp/*/edit みたいなページをロードすると劇的に差を体感できる……

なんでこうなるかっていうのはいまいちよくわからないけど

  • 画像が読みこまれると周りの要素がつらつらと再フローされる (width/height がかいてないから?)
    • あとこのサムネイルに設定されてるセンタリングのための onload ハンドラが重い?
  • 画像が多いのでこれがめっちゃ走りまくる

なのかなぁと思ったので、それを解消できそうな感じのことをしてる。思惑通りにいってるかは微妙なんだけど、少なくとも早くなったことは確かなのでとりあえずよかった

Fx のスクロールはブラウザのパフォーマンスおちに敏感すぎる。flickr も早くなるかと思ったけどよくわからなかった

Dec 05, 2007 (Wed)

Deferred 01:20 はてなブックマーク - Deferred - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。

jQuery Deferred とか言っていますがコアは全く jQuery に依存しないので (いい名前がおもいつかないから jQuery バインディングのほうのなまえでよんでる) http://svn.coderepos.org/share/lang/javascript/jquery-deferred/jquery-deferred.js の Deferred 関数と必要な関数をコピペしたら GM でもうごきます。setTimeout/clearTimeout にだけ依存してるのでその実装があるならどこでもうごくはず。

他の非同期なやつを Deferred 化するのは jQuery Deferred だと

function wait (n) {
	var d = new Deferred(), t = new Date();
	var id = setTimeout(function () {
		clearTimeout(id);
		d.call((new Date).getTime() - t.getTime());
	}, n * 1000)
	d.canceller   = function () { try { clearTimeout(id) } catch (e) {} };
	return d;
}

こんな感じになってます。Deferred#call がコールバック起動で、Deferred#fail がエラーバック起動です。

MochiKit のコードだと (機能がちょっと違いますが)

    /** @id MochiKit.Async.wait */
    wait: function (seconds, /* optional */value) {
        var d = new MochiKit.Async.Deferred();
        var m = MochiKit.Base;
        if (typeof(value) != 'undefined') {
            d.addCallback(function () { return value; });
        }
        var timeout = setTimeout(
            m.bind("callback", d),
            Math.floor(seconds * 1000));
        d.canceller = function () {
            try {
                clearTimeout(timeout);
            } catch (e) {
                // pass
            }
        };
        return d;
    },

引数 (value) をわたすためにチェインつかってるのがおもしろいすね。


ついでに jAutoPagerize でつかっているやつ。

function CachedResource (uri, convertfun, expire) {
	var d   = Deferred(); // new なしでいける。
	var key = uri;
	var v   = {};
	try { v = eval(GM_getValue(key)) || ({}) } catch (e) { log("parse error: may be uneval bug") }
	d.clear = function () {
		GM_setValue(key, "");
		return this;
	};
	if (v.time && v.time > (new Date).getTime() - expire) {
		log("Cache Hitted: " + key);
		setTimeout(function () { d.call(v.body); }, 10);
	} else {
		log("Cache expired; getting... " + key);
		GM_xmlhttpRequest({
			method  : "GET",
			url     : uri,
			onload  : function (req) { try {
				var res = convertfun(req.responseText);
				GM_setValue(key, uneval({time:(new Date).getTime(), body:res}));
				log(key, uneval({time:(new Date).getTime(), body:res}));
				log("Cached: " + key);
				d.call(res);
			} catch (e) { d.fail(e) } },
			onerror : function (e) {
				d.fail("HTTPError:"+e);
			}
		});
	}
	return d;
}

Nov 30, 2007 (Fri)

jAutoPagerize / はてなスター 03:17 はてなブックマーク - jAutoPagerize / はてなスター - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。

フィルタの適用方法を変えて、importNode されたノード個々に対してフィルタを適用するようにした。本家と挙動が違うかもしれない。(フィルタ書いたことなくてよくわからない)

でもってはてなスターがロードされているページではデフォでスターをロードするようにした。Hatena.Star に特定ノード以下に制限してロードするのがあったのでそれつかってみた。(はてダのクイックページャのソースからたどった)

Commented
Calendar
2006 07 08 09 10 11 12
2007 01 02 03 04 05 06 07 08 09 10 11 12
2008 01 02 03 04 05 06 07 08 09 10 11 12
2009 01 02 03 04 05 06 07 08 09 10 11 12
2010 01 02