Decade0nce

MacOSX10.3用のメモとか。気がつけば10.13。いつになったら11に

指定タグ間をキー入力で移動

2010-06-25 | メモ
次の画像/前の画像、ブックマークレットをベースにちょこちょこ弄った。

●主な変更点
・画像以外の見出しタグ(h2,h3等)にも対応(させたつもり)
・途中でy軸座標が折り返してるhtml構造(マルチカラムなブログ等)に対応(させry
・前処理として次の移動ポイントを示すテーブルを作成
 → メリット: 実行速度向上(前処理を除く)
 → デメリット: スクリプト実行後のウィンドウ/ページサイズ変更に非対応

●概要
・Firefox2.0用のブックマークレット
・指定タグ間をj/kキーで上下に移動できるようにするモノ
(デフォでは総ピクセル数 ImgMin 以上の画像が指定されてる)

●使い方
・ブックマークにキーワード(jkなど)を指定して
 ロケーションバーに jk h2 といった感じで入力

javascript:
var TgNm='%s',OfSt=8,ImgMin=320*240;
if(TgNm=='%25s')TgNm='img';

with(document){

function at(e,t){
	if(!e)return t;
	return at(e.offsetParent,t+e.offsetTop)
}

var v=compatMode.match('1')?documentElement:body, is=v.getElementsByTagName(TgNm),
	sT='scrollTop', op, p=[[]];

for(i=0,j=0,n=0;i<is.length;i++){
	ci=is[i];
	if(ci.width*ci.height >= ImgMin ||TgNm!='img'){
		ct=at(ci,0);
		q=p[j];

		if(ct==q[n-1]){
		}else if(ct<q[n-1]){
			p[++j]=[ct];
			n=1;
		}else{
			q[n++]=ct;
		}

	}
}

for(j=p.length-1; j>0; j--){
	pf=p[0], x=0, lf=p[0].length, 
	pj=p[j], y=0, lj=p[j].length;
	tmp=[], z=0;
	
	while(x<lf&&y<lj) tmp[z++]=pf[x]<pj[y]?pf[x++]:pj[y++];
	while(x<lf) tmp[z++]=pf[x++];
	while(y<lj) tmp[z++]=pj[y++];

	p[0] = tmp;
}
tp=p[0], l=tp.length;

var pMin=tp[0], pMax=tp[l-1],
	IdxRng=Math.floor((pMax-pMin)/l)+1;

var DB=[[0]], Np=[[],[]];
i=0, j=0, pre=pMin, nxt=pMax;

while(j<l){
	ct = tp[i];
	idx = Math.floor((ct-pMin)/IdxRng);
	Dj = DB[j];

	if(idx==j){
		if(Dj[0]>0){
			Dj[++Dj[0]] = ct;
		}else{
			Np[0][j]=pre;
			Dj = [1,ct];
		}
		pre = ct;
		DB[j] = Dj;
		i++;
	}else{
		Np[0][++j] = pre;
		DB[j] = [0];
	}
}

for(j=l-1; j>=0; j--){
	Np[1][j] = nxt;

	Dj=DB[j];
	if(Dj[0]>0)nxt=Dj[1];
}


var f=function(e){
	e=(e||event);
	k=e.keyCode;

	if(k==74)op=1;
	else if(k==75)op=-1;
	else return;


	vi=Math.floor((v[sT]-pMin+OfSt)/IdxRng);

	while(0<=vi&&vi<l){
		n=DB[vi][0];
		for(i=1;i<=n;i++){
			ct=DB[vi][op>0?i:n-i+1]-OfSt;
			if((ct-v[sT])*op>0){
				v[sT]=ct;
				return;
			}
		}
		v[sT] = Np[op>0?1:0][vi]-OfSt;
		return;
	}

	if(op*vi<0)v[sT]=op>0?pMin-OfSt:pMax-OfSt;

};

onkeydown=f;
f({keyCode:74});

}



最近JavaScript触り始めたんだけど
Firebugって死ぬほど便利だな

アクティビティモニタの不具合

2010-06-09 | メモ
(Mac OS X 10.3.9)

現象:
アクティビティモニタ(以降AM)を起動してもCPU使用率グラフ以外の項目が何一つ表示されない
・その間のCPU使用率は常にユーザとシステム半々で100%に達してる状態

試行:
・一度ログアウトすれば収まる(根本的な解決法では無い)
・AMが起動できない場合の対処法としてよく見かける「% sudo chmod u+s」は効果無し

観察:
・ターミナルからプロセスを監視(% ps aux等) → pmTool(AMの中の人)が起動とクラッシュを繰り返してるご様子
・ターミナルから直接pmToolを実行し表示されたエラー文でぐぐる → 同様の現象と対処方法を発見!

参考ページ:
隅つつき/BugTrack - OSX10.3上での動作について(Activity Monitorとのバッティング)
> どうも実行バイナリのファイル名が日本語になっているとよろしくないようで。

究明:
・ターミナルから実行ファイル名がマルチバイト臭い問題のプロセスを探す → % killで不具合が収まる。原因特定。
・犯人は「ATOK16手書き文字入力」(またATOKか……

対処:
/Library/Components/ATOK16.component/Contents/JUSTSYSTEM/ATOK16手書き文字入力/Contents/MacOS/
にある実行ファイル「ATOK16手書き文字入力」を「ATOK16_tegaki_moji_nyuryoku」にリネーム。

一つ前の階層にある「Info.plist」をProperty List Editorで開き
CFBundleExecutableのValueをリネーム後の実行ファイルと同じ文字列に置き換えて保存

結果:
・ATOK16メニューから「手書き文字入力」を実行。特に問題なし。
・続いてAMを起動。同じく問題なく表示され、プロセス「ATOK16手書き文字入力」が確認できた。

考察等:
・そもそも「ATOK16手書き文字入力」ウィンドウを閉じてもプロセスが常駐し続けるのが問題なような・・・
・世間がiPadiPhoneだで盛り上がってる中それが使えないOSの話題とかいまさらだよね