「Name」を含む日記 RSS

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

2008-08-30

増田ブコメ非表示

<meta name="Hatena::Bookmark" content="nocomment" />

って出来るのかな。テストしてみる

出来なかったよ、ママ

2008-08-28

http://anond.hatelabo.jp/20080828094153

ドレミの歌は

サウンド・オブ・ミュージック」という有名なミュージカルで歌われていたもので、

英語の歌詞は普通だけど、日本語訳ですごいことになっているだけ。

英語の歌詞はこんなかんじ

Doe, a deer, a female deer

Ray, a drop of golden sun

Me, a name I call myself

Far, a long long way to run

Sew, a needle pulling thread

La, a note to follow sew

Tea, I drink with jam and bread

That will bring us back to do.

訳すと

ドは牝ジカのド

レは太陽の光

ミは名前、私のこと

ファは遠くに遠くに走る

ソは針に通す糸

ラはソのすぐ近く

シ(ティ)はジャムと一緒に飲むの

またドに戻りましょ

ってなかんじ

余談ですが「サウンド・オブ・ミュージック」には「ドレミノ歌」以外にも

エーデルワイス」や「私のお気に入り(「そうだ京都に行こう」のCM)」などの有名な歌がありますよ。

2008-08-03

予告in犯罪予告スクリプトメモ

<body onload="document.frm.submit()">
<form name="frm" method="post" action="http://yutori.2ch.net/test/bbs.cgi?guid=ON">
<input value="書き込む" name="submit" type="submit">
<input name="FROM" size="19">
<input name="mail" size="19"><br>
<textarea rows="5" cols="70" wrap="off" name="MESSAGE">てst</textarea>
<input name="bbs" value="news4vip" type="hidden">
<input name="key" value="key" type="hidden">
<input name="time" value="time" type="hidden">
</form>

ニコニコ動画を快適化するvimperator設定まとめ

.

8/27追記

本記事末尾のローカルkey mappingを実現するコードを改良してプラグインにしました。

Vimperatorローカルkey mappingを実現するプラグイン local_mappings.js を書いた。

http://anond.hatelabo.jp/20080826124641


まずnicontroller.jsを入れる。

2008-07-14 - やぬすさんとこの日記

http://d.hatena.ne.jp/janus_wel/20080714

→n秒後/前に移動するkey mappingも忘れずに!

vimperatorrcにこれを書く。

Re: autocmd が分からない - hogehoge

http://d.hatena.ne.jp/teramako/20080731/p1

コードをいじった。

" --- autocmd ---

" nicovideo
" cでコメント入力、Cでコマンド入力、sでシーク、lでボリューム調整、
" pで停止/再生、mでミュートのon/off、vでコメの表示トグル、zでズームjavascript <<EOM
liberator.plugins.nicomap = function(){
  // no args
  var list=[
    ["p","nicopause"],
    ["m","nicomute"],
    ["v","nicomementvisible"],
    ["z","nicosize"],
    ["s","nicoseek"],
  ];
  // has args
  var list2=[
    ["c","nicomment"],
    ["C","nicommand"],
    ["l","nicovolume"],
    ["s","nicoseek"],
  ];
  if(buffer.URL.indexOf("http://www.nicovideo.jp/watch") == 0){
    for (var j=0; j<list.length; j++){
      let i = j;
      liberator.mappings.addUserMap([1],[list[i][0]],list[i][1],
        function(){
          liberator.execute(list[i][1]);
        },{
          rhs:":"+list[i][1]+"<CR>"
        }
      );
    }
    for (var j=0; j<list2.length; j++){
      let i = j;
      liberator.mappings.addUserMap([1],[list2[i][0]],list2[i][1],
        function(){
	  liberator.execute('normal :'+list2[i][1]+'<Space>');
	},{
	  rhs:":"+list2[i][1]+"<Space>"
	}
      );
    }
  } else {
    for (var i=0; i<list.length; i++){
      liberator.mappings.remove(1,list[i][0]);
    }
    for (var i=0; i<list2.length; i++){
      liberator.mappings.remove(1,list2[i][0]);
    }
  }
};
liberator.autocommands.add('LocationChange','.*','js liberator.plugins.nicomap()');
EOM

フォーカスプレーヤーに奪われないようにするグリモン

2008-08-02 - 地獄の猫日記

http://d.hatena.ne.jp/nokturnalmortum/20080802#1217633913

→→これで超快適すぎるニコライフの幕開け!

.

補足

現在マウスカーソル位置でクリックイベント発生するkey mappingを設定できればより快適なんだが・・・。

(「コメントする」ボタンDOMノードが取得できれば、dispatchEventでいけそうだけど)

追記: ちょっと改良してみた。
" ************* local key mappings ****************
javascript <<EOM
 (function(){
function setlocalmap(obj){
    var list = obj.list;
    var list2 = obj.list2;
    var exp = obj.exp;
    if(list.constructor != Array || list2.constructor != Array){
      echr("invalid argument: array argument required");return;
    }
    if(exp.constructor != RegExp){
      echr("invalid argument: regex argument required");return;
    }
    if(exp.test(liberator.buffer.URL)){
      for (var j=0; j<list.length; j++){
        let i = j;
        liberator.mappings.addUserMap([1],[list[i][0]],list[i][1],
          function(){
            liberator.execute(list[i][1]);
          },{
            rhs:":"+list[i][1]+"<CR>"
          }
        );
      }
      for (var j=0; j<list2.length; j++){
        let i = j;
        liberator.mappings.addUserMap([1],[list2[i][0]],list2[i][1],
          function(){
  	  liberator.execute('normal :'+list2[i][1]+'<Space>');
  	},{
  	  rhs:":"+list2[i][1]+"<Space>"
  	}
        );
      }
    } else {
      for (var i=0; i<list.length; i++){
        liberator.mappings.remove(1,list[i][0]);
      }
      for (var i=0; i<list2.length; i++){
        liberator.mappings.remove(1,list2[i][0]);
      }
    }
}
/** 
 * Add Key Mappings to Specific Web Pages
 * @param obj : has following properties
 *  list : commands that take no args
 *  list2 : commands that take args
 *  exp : target page's URL (regex)
 * @see Re: autocmd が分からない - hogehoge
 * http://d.hatena.ne.jp/teramako/20080731/p1
 */
liberator.plugins.addLocalUserMap = function(obj){
  liberator.plugins[obj.name + "MapSetter"] = function(){
    setlocalmap(obj);
  }
  liberator.autocommands.add(
  	'LocationChange', '.*', 'js liberator.plugins.' + obj.name + 'MapSetter()'
  );
};

// nicovideo
// cでコメント入力、Cでコマンド入力、sでシーク、lでボリューム調整、
// pで停止/再生、mでミュートのon/off、vでコメの表示トグル、zでズーム。
var nicovideo = {
	name : 'nico',
	exp : /^http:\/\/www.nicovideo.jp\/watch/,
	list : [
	    ["p","nicopause"],
	    ["m","nicomute"],
	    ["v","nicomementvisible"],
	    ["z","nicosize"],
	    ["s","nicoseek"],

	],
	list2 : [
	    ["c","nicomment"],
	    ["C","nicommand"],
	    ["l","nicovolume"],
	    ["s","nicoseek"],
	],
};
liberator.plugins.addLocalUserMap(nicovideo);
})();
EOM

2008-07-31

全部 public でいい!

よく、クラスのメンバ変数を private にして、setter と getter 関数を作れといいますよね。こんな風に。

class Person {
    private $_name;
    public function setName($name)
    {
        if (empty($name)) {
            throw new IllegalArgumentException();
        }
        $this->_name = $name;
    }
    public function name()
    {
        return $this->_name;
    }
}

でも、明らかにバカっぽい!! public なら1行じゃないか!!

誰しも、1度ならず10度ぐらいは考えたことがあると思います。

我々崇高なるプログラマはこんなコードを書くために時間を費やしていいはずがない。

そこで、私はあえて、もう全部 public でいい!と推します。関数も。

上記がメインの理由ですが、他の理由もこねくりだしてみます。

なんでこの関数が private !?

オープンソースプロジェクトコードを見ていて、

中々便利そうな関数があるじゃないか、と思ったら private ! なんてことが実は結構あります。

(それを正式に使いたいとなったら、パッチを投げて議論を交わし導入されるのを待たなければいけません。)

コードコミットした人は上級者といっていいプログラミングレベルの人です。

そんな人でも、private にしたほうが意図せず外からアクセスされなくて安心、の理論で、

とりあえず private 関数にしてしまうのです。なぜか?

考えたくないからです。

他から利用されたりすることが完全にないと言い切れるのか、などと悩みたくないからです。

この作業は単純なようでいておそろしく時間がかかります。

ありとあらゆる可能性をつぶしていかなければならないからです。

「あとはコードに直すだけ」

なんて言葉を上級者から聞いたことはありませんか?

彼らにとっては、本当に時間がかかるのはアルゴリズムだったり、このようなコード設計なのです。

このコード設計の時間を短縮できれば彼らの崇高なる脳力を有効活用できるのです。

もう、全部 public にすればいいじゃん!

この private 変数覗きたいんですけど!

確かに、設計上、その変数は他所から覗かれることはない変数でしょう。

でも、デバグ目的だったりで、メンバ変数の値を覗きたい、なんていうことは良くあります。

UnitTest をやっていて、途中経過の値を見たい、なんて実はよくあるんじゃないですか?皆さん。

UnitTest は関数仕様テストするもので、途中経過がどんな値であろうか問題ではない?

知るか!!オレが今やりたいのはデバグなんだよ!!

なんて実はよくあるんじゃないですか?皆さん。

そんな時、メンバ変数が private だと、わざわざリフレクションを使ったトリックを使ってアクセスしたりと、

本来必要のない時間の使い方をしちゃったりします。

我々崇高なるプログラマはこんなコードを書くために時間を費やしていいはずがない。

2008-07-22

[]関連エントリーのツリーをたどれるグレモン

結局概要表示機能追加した。unsafeWindow使いまくり大丈夫かいな。

// ==UserScript==
// @name	Hatena Bookmark Tree Expander
// @namespace	http://anond.hatelabo.jp/
// @include	http://b.hatena.ne.jp/entry/*
// ==/UserScript==
// <div class="info">
//   <ul id="similar_entries" class="bookmarklist">
//     <li></li>
//   </ul>
// </div>
// <div class="info">
//   <ul id="referred_entries" class="bookmarklist">
//     <li id="referred-entry-\d+"></li>
//   </ul>
// </div>
// <div class="info">
//   <ul id="relation_diary" class="bookmarklist">
//     <li id="diary-{id}-\d+"></li>
//   </ul>
// </div>
(function() {

function main() {
	loadBookmarkCommentViewer();
	similar.prototype.rootAppend();
	referred.prototype.rootAppend();
}

function HBTM(target) {
	this.target = target;
	this.targetXPath = "//ul[@id='"+target+"']/li";
	this.targetRegExp = new RegExp('<ul id="'+target+'"(.|\\s)*?</ul>');
}
HBTM.prototype = {
	openIcon:
		'<img width="15" height="15" class="icon" style="opacity: 0.6" src="http://anond.hatelabo.jp/images/common/open.gif"/>',
	closeIcon:
		'<img width="15" height="15" class="icon" style="opacity: 0.6" src="http://anond.hatelabo.jp/images/common/close.gif"/>',
	loadingIcon:
		'<img width="13" height="13" class="icon" src="http://anond.hatelabo.jp/images/common/loading.gif"/>',
	commentIcon: function(url) {
		return '<img class="hatena-bcomment-view-icon" src="http://r.hatena.ne.jp/images/popup.gif" onclick="iconImageClickHandler(this, \''+url+'\', event);">'
	},
	create: function() {
		this.comment = document.createElement("span");
		this.comment.innerHTML = this.commentIcon($X("string(descendant::a/@href)", this.node).value());
		this.open = document.createElement("a");
		this.open.href = "javascript:void(0)";
		this.open.innerHTML = this.openIcon;
		this.close = document.createElement("a");
		this.close.href = "javascript:void(0)";
		this.close.innerHTML = this.closeIcon;
		this.close.style.display = "none";
		this.loading = document.createElement("span");
		this.loading.innerHTML = this.loadingIcon;
		this.loading.style.display = "none";
		this.node.appendChild(this.comment);
		this.node.appendChild(document.createTextNode(" "));
		this.node.appendChild(this.open);
		this.node.appendChild(this.close);
		this.node.appendChild(this.loading);
		this.open.addEventListener("click", bind(this.openAct, this), false);
		this.close.addEventListener("click", bind(this.closeAct, this), false);
	},
	openAct: function() {
		this.open.style.display = "none";
		if (this.tree) {
			this.tree.style.display = "block";
			this.close.style.display = "inline";
		} else {
			this.loading.style.display = "inline";
			this.load();
		}
	},
	closeAct: function() {
		if (this.tree) {
			this.tree.style.display = "none";
			this.close.style.display = "none";
			this.open.style.display = "inline";
		}
	},
	load: function() {
		var url = $X("string(descendant::a[starts-with(@href, '/entry/')]/@href)", this.node).value();
		GM_xmlhttpRequest({
			method: "GET",
			url: "http://b.hatena.ne.jp"+url,
			onload: bind(this.loadCallback, this)
		});
	},
	loadCallback: function(result) {
		var match = result.responseText.match(this.targetRegExp);
		if (match) {
			var sandbox = document.createElement("div");
			sandbox.innerHTML = match[0].replace(this.target,"");
			this.tree = sandbox.firstChild;
		} else {
			this.tree = document.createElement("ul");
		}
		this.append();
		this.loading.style.display = "none";
		this.close.style.display = "inline";
	},
	append: function() {
		this.tree.style.backgroundColor = "transparent";
		this.tree.style.listStyleType = "circle";
		this.node.appendChild(this.tree);
		$X("li", this.tree).each(function(n) {
			var a = $X("a",n).node();
			var c = $X("count(//li/a[@href='"+a.href+"'])").value();
			if (c > 1) n.parentNode.removeChild(n);
		});
		$X("li", this.tree).each(bind(function(node){new this.constructor(node)}, this));
	},
	rootAppend: function() {
		$X(this.targetXPath).each(bind(function(node){new this.constructor(node)}, this));
	}
};

function similar(node) {
	this.node = node;
	this.create();
}
similar.prototype = new HBTM("similar_entries");
similar.prototype.constructor = similar;

function referred(node) {
	this.node = node;
	this.create();
}
referred.prototype = new HBTM("referred_entries");
referred.prototype.constructor = referred;

function loadBookmarkCommentViewer() {
	var head = document.getElementsByTagName("head")[0];
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = "http://b.hatena.ne.jp/js/BookmarkCommentViewerAllInOne.1.2.js";
	head.appendChild(script);
	var css = document.createElement("link");
	css.rel="stylesheet";
	css.href="http://d.hatena.ne.jp/css/base.css";
	css.type="text/css";
	css.media="all";
	head.insertBefore(css, head.firstChild);
	window.addEventListener("load",function(){
		var BCV = unsafeWindow.BookmarkCommentViewer;
		BCV.options['screenshot'] = true;
		var asyncCommnetView = BCV.asyncCommnetView;
		BCV.asyncCommnetView = function(url, onCompleteCallback) {
			var div = asyncCommnetView(url, function(){
				onCompleteCallback.apply(this, arguments);
				new unsafeWindow.Ten.XHR("http://b.hatena.ne.jp/entry/rss/"+url, {}, function(result) {
					if (! result.responseText.match(/<description>(.*?)<\/description>/))
						return;
					if (! RegExp.$1)
						return;
//					var desc = document.createTextNode("desc: "+RegExp.$1);
					var desc = document.createElement("li");
					desc.appendChild(document.createTextNode("desc: "+RegExp.$1));
					div.lastChild.insertBefore(desc,div.lastChild.getElementsByTagName("li")[0]);
				});
			});
			return div;
		};
		BCV.asyncCommnetView.origin = asyncCommnetView;
	}, false);
}

function bind(f,o) {return function() {return f.apply(o, arguments)}}

function $X(xpath, context) {
	if (!(this instanceof $X))
		return new $X(xpath, context);
	this.xpath = xpath;
	this.context = context || document;
}
$X.prototype = {
	evaluate: function() {
		var result = document.evaluate(this.xpath, this.context, null, this.type, null);
		switch (result.resultType) {
			case XPathResult.STRING_TYPE : return result.stringValue;
			case XPathResult.NUMBER_TYPE : return result.numberValue;
			case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
			case XPathResult.FIRST_ORDERED_NODE_TYPE: return result.singleNodeValue;
		}
		return result;
	},
	node: function() {
		this.type = XPathResult.FIRST_ORDERED_NODE_TYPE;
		return this.evaluate();
	},
	value: function() {
		this.type = XPathResult.ANY_TYPE;
		return this.evaluate();
	},
	each: function(func) {
		this.type = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE;
		var result = this.evaluate();
		for (var i=0; i<result.snapshotLength; i++)
			func(result.snapshotItem(i));
	}
};

main();

})();

2008-07-11

http://b.hatena.ne.jp/entry/http://anond.hatelabo.jp/20080710141416

ちょ、おまえら嬉しがってんじゃねぇ。なんで入ってるのかわかってんのか?http://b.hatena.ne.jp/entry/http://anond.hatelabo.jp/20080709220323 もホッテント入りしてるからって増々増えてるんじゃねぇ!http://anond.hatelabo.jp/20080710141416 とまとめて消毒しる!!

abc1cba|altana11|Amerikan|andalusia|API|as365n2|atoh|b_say_so|berry_co|BEW|BigHopeClasic|cedama|chinocci|ciro|corpvs|cubed-l|dj19|enemyoffreedom|EvilGood|filinion|F-name|frog78|F-SQUARE|FunnyBunnyDizzy|furukatsu|gnt|gomis|goronyann240|guldeen|harutabe|hashigotan|hatebu_music|helpline|himagine_no9|I11|iroiroattena|ita|jksy|John_Kawanishi|junta1999|Kamekiti|kitakyudai|kmiura|knnn4321r|kowji|kyoumoe|laislanopira|lliorzill|mame-tanuki|medapan|metalmax|m-matsuoka|mokemoke2|morimori_68|morita_non|mori-yoshiro|motunabetarou|Nean|nitoyon|norton3rd|ohkami3|onigiri_srv|pc_nagomu|R30|raihuru|retlet|rna|rxh|ryankigz|ryokusai|satromi|saya_fujitani|sdv|sekirei-9|series|shoot_c_na|sirouto2|takafumioka|takerunba|tender_apricot|toar|tororo-imo|ukidousan|umiusi45|Vichy|wartanenemon|weep|welldefined|wiseler|xr0038|yellowlabel|yoshiaki21|yuiseki|yumizou|zaikabou|zaji999|zu2

2008-07-10

BF社・有償交換の流れ。送金まで。

PF有償交換の送金までの経緯を書いてみます。

1:インタQ&A掲示板

  • 「PF初期肌の子が黄変してしまった。有償交換できるか?」といくつかの内容質問を

書き込み。

2:担当者より返信

「有償交換・可能」とのこと。

「公式メールアドレスに詳細等は問い合わせる」か

掲示板のQ&Aに書き込んで欲しい」とのこと。

  • 申し込みの際に記入して欲しいものは

::: Bluefairy AS Request :::

Name :

Doll Type :

Exchange Type : Full Body / Full Body + Make up

Your Address :

Zipcode:

Bank transfer Payment by :

  • BFより「送金が届いた」と連絡が来るまで交換する人形をインタに送ってはいけない。
  • 交換に伴う送料は全て客個人の負担である。
  • 初期肌を交換すると現行の肌になってしまう。
  • 素体を送るときは、ウィッグ・服・アイなどつけないで欲しい。それらが紛失したときに責任は持てない。
  • 素体を返送する住所はインタ公式の右下にある住所。
  • 代金支払いは国際送金(銀行送金)のみ、とのこと。
  • 現在の交換代金(送金する金額)は

PFの素体交換+メイク+返送料で

「PF Full exchange + make up 150 USD + Shipping fee to Japan 26 USD」

= Total 176 USD

掲示板担当者より返信。

3:自分はメールで申し込みすることにした。

「Application for service (Bluefairy AS Request )」

と書いてあったので、メールタイトル欄にそう記入してみた。

記入してメール送信。(6月末日)

4:ゆうちょ銀行でここの過去ログを参照しつつ、初めての国際送金。

自分の場合は2で書いてある金額を送金。

送金用紙が変更になってから初国際送金だったらしい、ゆうちょ銀行で結構時間がかかり終了。

口座宛なので送金完了まで短くて3日、長くて5日は待って欲しいと銀行で説明を受ける。

(7月1日

5:「送金完了」メールをインタに送信。

同日の夕方時刻付で

Dear ***

Hello. Thank you for your AS application.

When we receive your payment, we'll send you an e-mail to notify you.

Have a good day~

Best regards,

Bluefairy

メールが来たので待機。

そして、現在に至る、です。

音沙汰無しなのでメールで7/8に問い合わせしてみた所で放置プレイです。

レポというか、だらだらになってしまい申し訳ないです。

次段階としては

  • インタから送金受領したと確認が来る
  • PFをインタに送る

ぽいです。

2008-07-09

hp2133 xpインストール

いるもの

  1. Windows XP Professional SP2
  2. microSD
  3. 内蔵光学ドライブ
  4. USB<->IDE変換ケーブル
  5. USBフラッシュメモリ(ドライバインスト時に必要)

準備

  1. ドライバHPサイトからダウンロード
  2. ドライバmicroSDコピー
  3. Documents and Settings/[User name]/直下のファイルZIPして、microSDコピー
  4. D:\App\DYNA\DYNA.ini(または[username].ini)をSDコピー
  5. 以下は最新版を取得してSDコピー
  6. E:\shell\bblean_116をZIPSDコピー

手順

  1. 光学ドライブUSB-IDE変換ケーブルでPCにつなぐ
  2. XPインストールCDをセット
  3. PC再起動
  4. 起動時にF9でセットドライブUSBドライブに変更
  5. インストーラーが起動するまで待つ
  6. パーティションの設定画面でC->15360MB,F->20480MB,G->残り となるように分割(Dはリカバリ領域,Eは光学ドライブ)
  7. Cにインストール

2008-07-07

もん毛スター for firefox

動作未確認。すんげー冗談半分。

// Hatena Monge Star user script
// 2008-07-07
// by masda. (http://anond.hatelabo.jp/20080707043247)

// ==UserScript==
// @name           Hatena Monge Star
// @namespace      http://anond.hatelabo.jp/20080707043247
// @description    Hatena Monge Star
// @include        http://b.hatena.ne.jp/entry/*
// @version        0.3.1
// ==/UserScript==

// deriving from [http://d.hatena.ne.jp/Hamachiya2/20080707/HatenaBlackStar2] ver Firefox
//               [http://f.hatena.ne.jp/hatenacinnamon/20070109001332]
// Thx! and CUTE!


location.href = 'javascript:(' + function() { (function (w) {

	if (typeof(w.Ten) == 'undefined') {
		return;
	}

	HatenaBookmarkMongeStar = new Ten.Class({
		initialize: function(li, entryTitle) {
			var comment = '';
			var tags    = '';
			var commentSpans = Ten.DOM.getElementsByTagAndClassName('span', 'comment', li);
			if (commentSpans.length > 0) {
				comment = Ten.DOM.scrapeText(commentSpans[0]);
			}

	        var tagsSpans = Ten.DOM.getElementsByTagAndClassName('span', 'user-tag', li);
			if (tagsSpans.length > 0) {
				$A(tagsSpans[0].getElementsByTagName('a')).each(function(a) {
					tags += '[' + Ten.DOM.scrapeText(a)+ ']';
				});
			}

			var title = tags + comment;
			if (title.length == 0) {
				var name = Ten.DOM.scrapeText(li.getElementsByTagName('a')[1]);
				title = name + 'のブックマーク';
	        }

			// this.uri   = 'http://b.hatena.ne.jp/keyword/' + li.getElementsByTagName('a')[1].href;
			var u = li.getElementsByTagName('a')[1].href;

			if (u.indexOf('#') == -1) {
				this.uri = u + '#_HatenaMongeStar';
			} else {
				this.uri = u + '_HatenaMongeStar';
			}

			this.title = title + ' - ' + entryTitle;

			this.comment_container = Hatena.Star.EntryLoader.createCommentContainer();
			var target = commentSpans[0] || li;
			target.appendChild(this.comment_container);

			this.star_container = Hatena.Star.EntryLoader.createStarContainer();
			this.star_container.className = 'hatena-star-star-container MongeStarContainer';
			target.appendChild(this.star_container);
		}
	});


	var tryCount = 0;
	var tryMax = 300;
	function waitForHatenaStar() {
//		if (Hatena.Star.EntryLoader.loaded) {
//			Hatena.Star.EntryLoader.loaded = false;
		var s = document.getElementsByClassName('hatena-star-add-button');
		if (s.length) {

			Hatena.Star.EntryLoader.loaded = false;

			Hatena.Star.EntryLoader.loadEntries = function() {
				var entries = [];
				var title = Ten.DOM.scrapeText(Ten.DOM.getElementsByTagAndClassName('span', 'title', document.body)[0]);
				var ul = document.getElementById('bookmarked_user');
				if (ul) {
					$A(ul.getElementsByTagName('li')).each(function(li) {
						if (li.className != 'more') {
							entries.push(new HatenaBookmarkMongeStar(li, title));
						}
					});
				}
				return entries;
			}
			new Hatena.Star.EntryLoader();

		} else {
			if (++tryCount > tryMax) {
				setTimeout(waitForHatenaStar, 400);
			}
		}
	}

	setTimeout(waitForHatenaStar, 500);

})(window); }.toString() + ')()';



GM_addStyle(<><![CDATA[

	.MongeStarContainer {
		margin-left: 4px;
	}

	.MongeStarContainer .hatena-star-add-button {
		background-color: #fc6 ! important;
	}

	.MongeStarContainer a {
		text-decoration: none ! important;
		color: #f80 ! important;
		font-size: 10px;
		position: relative;
	}

	.MongeStarContainer a:before {
		content: '毛';
		font-size:small;
	}

	.MongeStarContainer a .hatena-star-star {
		filter: alpha(opacity=00);
		-moz-opacity:0.00;
		opacity:0.00;

		position: absolute;
		top: 0;
		left: 0;
	}

	.MongeStarContainer .hatena-star-inner-count {
		color: #f90 ! important;
	}

]]></>);

動いたらいいな-

2008-07-04

javascript継承

javascriptスーパークラスのメソッドを簡単に呼び出したかった。それだけだった。

思いのほか長くなった。車輪を再発明した気がする。

var Class = inherit(SuperClass, {hoge: ...});

のように使い、スーパークラス継承したクラスを作る。

作ったクラスprototypeに、第二引数オブジェクトコピーされたスーパークラスインスタンスを持つ。

第一引数がnullだと、スーパークラスObjectを用いる。つまり、

var Class = inherit(null, {hoge: ...});

var Class = inherit(Object, {hoge: ...});

と同等となる。

また、第一引数が"prototype"をメンバに持たない普通オブジェクト、つまり、

var Class = inherit({hoge: ...});

だと

var Class = inherit(Object, {hoge: ...});

と同等となる。

var obj = new Class({hoge: ...});

インスタンスを作ると、引数オブジェクトコピーを持つオブジェクトとなる。

また、メソッド"initialize"が自動的に実行される。

ただし、コンストラクタ引数を渡さなかった場合は、initializeは実行されない。

オーバーイドしたメソッド内では

this.superapply(arguments);

としてスーパークラスのメソッドを呼べる。第一引数は呼び出すメソッドの引数配列とする。

このとき、呼び出し側のメソッドはコンストラクタやinheritでオーバーイドしたメソッドでなくてはならない。これは呼び出し側のメソッド名を記録する必要があるためである。

そうでない場合は第二引数にメソッド名を渡す必要がある。

var obj = new Class({});
obj.foo = function(){
        this.superapply(arguments);         // X
        this.superapply(arguments, "foo");  // O
};

<html><head>
<script type="text/javascript">
function inherit(superclass, override) {
	if (!superclass)
		superclass = Object;
	if (! "prototype" in superclass) {
		override = superclass;
		superclass = Object;
	}
	var that;
	var func;
	function superapply(arg, name) {
		var prev = {that: that, func: func};
		try {
			var my = this.superapply;
			if (!arg)
				arg = [];
			if (!name)
				name = arguments.callee.caller.caller.methodName;
			if (that &amp;&amp; func &amp;&amp; (!name || name == func.methodName)) {
				that = that.superapply.obj;
				name = func.methodName;
			} else if (name) {
				that = my.obj;
				func = arguments.callee.caller.caller;
				func.methodName = name;
			} else {
				throw new Error("methodName is null");
			}
			var result;
			if (func === that[name]) {
				result = this.superapply(arg, name);
			} else {
				func = that[name];
				func.methodName = name;
				result = func.apply(this, arg);
			}
		} finally {
			that = prev.that;
			func = prev.func;
		}
		return result;
	};
	var prototype = new superclass();
	prototype.superapply = function(){superapply.apply(this, arguments)};
	prototype.superapply.obj = superclass.prototype;
	if (override)
		for (var i in override) {
			prototype[i] = override[i];
			if (typeof override[i] == "function")
				prototype[i].methodName = i;
		}
	var subclass = function(obj) {
		this.superapply = function(){superapply.apply(this, arguments)};
		this.superapply.obj = prototype;
		if (obj) {
			for (var i in obj) {
				this[i] = obj[i];
				if (typeof obj[i] == "function")
					this[i].methodName = i;
			}
			this.initialize();
		}
	};
	subclass.prototype = prototype;
	subclass.prototype.constructor = subclass;
	return subclass;
}
var C1 = inherit(Object, {
fn: "C1",
initialize:
	function(){
		alert("C1.initialize");
		this.second(this.fn);
	},
second:
	function(a){
		alert("C1.second: "+a);
	}
});
var C2 = inherit(C1, {
fn: "C2",
initialize:
	function(){
		alert("C2.initialize");
		this.superapply();
//	},
//second:
//	function(a){
//		alert("C2.second: "+a);
//		this.superapply([a]);
	}
});
var C3 = new C2({
fn: "C3",
//initialize:
//	function(){
//		alert("C3.initialize");
//		this.superapply();
//	},
second:
	function(a){
		alert("C3.second: "+a);
		this.superapply([a]);
	}
});
</script>
</head><body>
</body><html>

methodNameなんとかならんもんか。

2008-06-20

JavaScript楽しい

Event.add=function(_element,_name,_func){
 if(_name=="load") { Event.onload.add(_func); return; }
 if(ua.name.indexOf("IE")>0 &amp;&amp; _name=="keypress") _name="keydown";
 if(window.addEventListener) _element.addEventListener(_name, _func, false);
 else if (window.attachEvent) {
  if(_element==window) _element=document;
  _element.attachEvent("on"+_name,function(){
   var e=arguments[0];
   e.target=e.srcElement;
   e.pageX=document.body.scrollLeft+e.clientX;
   e.pageY=document.body.scrollTop+e.clientY;
   _func.apply(_element,arguments);
  });
 }
};

はじめてのラッパー

2008-06-11

http://anond.hatelabo.jp/20080611142215

とりあえずGreasemonkeyでも書いてみた

でもproxomitronの方が軽いような気がする

あと、適当移植しただけだから誤爆があるかも

// ==UserScript==
// @name           simple reply
// @namespace      aomid
// @include        http://anond.hatelabo.jp/
// ==/UserScript==

document.body.innerHTML = document.body.innerHTML.replace(/<!--\s(<a.*href=".*edit\?title.*\/a>)\s-->/g,"$1");

追記:firefox拡張MR Tech Link Wrapper」と干渉して、日記編集時、日記の確認画面から編集画面に戻った時、本文に<wbr>タグが付加されるバグを確認。

とりあえずの対処法として、MR Tech Link Wrapperを増田では無効にしておくことで回避可能。

[][] この記事について書く リンクの追加

増田ソースを眺めてたら、「この記事について書く」って機能のリンクコメントアウトされてたのでproxomitronを使って復活させてみた。

何でコメントアウトしてんだろう、結構便利なのに。

greasemonkeyあたりで書けば需要あるかね?

[Patterns]
Name = "masuda:simple reply"
Active = TRUE
Multi = TRUE
URL = "anond.hatelabo.jp/*"
Limit = 256
Match = "<!--\s($NEST(<a*,href=$AV(*edit\?title*)*,/a>))\1\s-->"
Replace = "\1"

2008-05-26

<META name="y_key" content="7e0caae152ad40da">

2008-05-13

GuiceSeasar2 を連携させてみたよ

[参考文献]

    S2 は、.dicon ファイルで定義をだいぶ簡略化できる。パフォーマンスはどうなんだろう。誰かテストしてくれいw

    app.dicon

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">

    <components namespace="client">

    <include path="hello.dicon" />

    <component class="org.seasar.guice.Client" />

    </components>

    hello.dicon

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"

    "http://www.seasar.org/dtd/components24.dtd">

    <components initializeOnCreate="false">

    <component class="org.seasar.guice.HelloServiceImpl" />

    </components>

    HelloService.java、HelloServiceImpl.java は、上記 ITPro と内容が同じなので省略。

    Module.java

    package org.seasar.guice;

    import org.seasar.framework.container.S2Container;

    import org.seasar.framework.container.SingletonS2Container;

    import org.seasar.framework.container.factory.S2ContainerFactory;

    import com.google.inject.AbstractModule;

    import com.google.inject.name.Names;

    public class Module extends AbstractModule {

    S2Container container = null;

    public Module(S2Container container){

    this.container = container;

    }

    @Override

    protected void configure() {

    bind(S2ContainerFactory.class).annotatedWith(Names.named(container.getPath()));

    bind(Client.class).toInstance(SingletonS2Container.getComponent(Client.class));

    }

    }

    Client.java

    package org.seasar.guice;

    public class Client {

    private HelloService helloService = null;

    public void setHelloService(HelloService helloService) {

    this.helloService = helloService;

    }

    public void execute() {

    helloService.sayHello();

    }

    }

    Main.java

    package org.seasar.guice;

    import org.seasar.framework.container.S2Container;

    import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

    import com.google.inject.Guice;

    import com.google.inject.Injector;

    public class Main {

    private static final String PATH = ".\\app.dicon";

    public static void main(String[] args) {

    SingletonS2ContainerFactory.setConfigPath(PATH);

    SingletonS2ContainerFactory.init();

    S2Container container = SingletonS2ContainerFactory.getContainer();

    Module module = new Module(container);

    Injector injector = Guice.createInjector(module);

    Client client = injector.getInstance(Client.class);

    client.execute();

    }

    }

    実行結果

    java -cp ?? org.seasar.guice.Main

    2008/05/13 21:19:22 org.seasar.framework.log.Logger info

    情報: Running on [ENV]product, [DEPLOY MODE]Normal Mode

    Hello, world!

    実行環境JDK 7 (build 1.7.0-ea-b24)

    2008-04-27

    無念 Name としあき 08/04/27(日)20:36:40 No.7417141

    画像掲示板エロ絵あさってるハタチ未満の人間

    未来なんて無いけどさ、建前上はまだ希望があるってことになってんだから

    ブラウザ閉じて今しかできないことをやってくれよ

    本格的に手遅れになってからまたおいでとしか言えない

    そんときゃ仲間だ。遊ぼうぜ

    http://jun.2chan.net/b/res/7415119.htm

    2008-04-17

    VistaHTML エディタを変更するまで

    今回の Windows では関連付けが関連付けしか出来なくなるなどカスタマイズ周辺機能の劣化が甚大この上なく、レジストリを直接変更する他に手がないらしい。

    ですので、 regedit で HKEY_CLASSES_ROOT\htmlfile\shell\Edit\command の既定値を編集。 "full path" "%1" で、full path部分にはエディタのフルパスを書くとよいですね。

    また、 Ver7 にもなってソース表示エディタに notepad を採用しているブラウザ改善する為にも、インターネットオプションHTML エディタを変更します。

    該当するレジストリキーが無いなどの理由(推測)でなぜか変更されない場合は HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name の既定値を "full path" にします。よかったですね。

    2008-04-11

    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="205" id="flvplayer" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="http://g.hatena.ne.jp/tools/flvplayer.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="FlashVars" value="moviePath=http://www.youtube.com/watch?v=eMrC8tt1UCU" /> <embed src="http://g.hatena.ne.jp/tools/flvplayer.swf" FlashVars="moviePath=http://www.youtube.com/watch?v=eMrC8tt1UCU" quality="high" bgcolor="#ffffff" width="320" height="205" name="flvplayer" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>

    2008-04-07

    Proxomitronでやってみた

    こっちのほうが処理が軽くていいや

    filter name masuda tag abone

    URL match anond.hatelabo.jp/*

    matching expression

    (<font*>)$SET(0=)|

    (<i[^m]++>)$SET(0=)|

    (<strike*>)$SET(0=)

    Replacement Text

    しっかしコピペとはいえひとつの投稿に900組以上のfont i strikeタグを突っ込むとかよーやるねぇ。

    2008-04-05

    さくらの旧(?)専用サーバ CentOS 4.6 を Linux-Vserver に入れ替えてみた

    前置き

    契約直後の初期状態

    • ホスト名をsakura2とした。
    • sshd と vsftpd が動いていた。
    [admin@sakura2 ~]$ uname -a
    Linux sakura2 2.6.9-67.0.4.ELsmp #1 SMP Sun Feb 3 07:08:57 EST 2008 i686 athlon i386 GNU/Linux
    [admin@sakura2 ~]$ cat /etc/issue.net
    CentOS release 4.6 (Final)
    Kernel \r on an \m
    

    CentOS 5 へのアップグレード(?)

    中身の整理
    • なるべく最小構成に近い最新のCentOS4.6にしてみる。
    # yum update
    # yum remove emacs emacspeak emacs-leim emacs-common
    # yum remove NetworkManager
    # yum remove bluez-bluefw bluez-hcidump bluez-libs bluez-utils
    # yum remove cups cups-libs
    # yum remove irda-utils isdn4k-utils pcmcia-cs wireless-tools
    # yum remove wpa_supplicant gpm xinetd
    # yum remove ppp nfs-utils lksctp-tools autofs
    # yum remove xorg-x11-libs
    # yum remove selinux-policy-targeted
    # yum remove vsftpd
    # yum clean all
    
    CentOS 5 にアップグレード(?)してみる
    [admin@sakura2 ~]$ uname -a
    Linux sakura2 2.6.9-67.0.7.ELsmp #1 SMP Sat Mar 15 06:54:55 EDT 2008 i686 athlon i386 GNU/Linux
    
    # rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.1.0-2.i386.rpm \
    http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-1.0.el5.centos.1.i386.rpm
    [root@sakura2 admin]# cat /etc/issue.net
    CentOS release 5 (Final)
    Kernel \r on an \m
    
    # yum update glib procps udev iptables
    # rpm -Uvh --nodeps http://mirror.centos.org/centos/5/os/i386/CentOS/initscripts-8.45.17.EL-1.el5.centos.1.i386.rpm \
    http://mirror.centos.org/centos/5/os/i386/CentOS/mkinitrd-5.1.19.6-19.i386.rpm
    # rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-1.39-10.el5.i386.rpm \
    http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-libs-1.39-10.el5.i386.rpm \
    http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-devel-1.39-10.el5.i386.rpm
    
    # rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/kernel-2.6.18-53.el5.i686.rpm
    
    [admin@sakura2 ~]$ uname -a
    Linux sakura2 2.6.18-53.el5 #1 SMP Mon Nov 12 02:22:48 EST 2007 i686 athlon i386 GNU/Linux
    
    # yum clean all
    
    [root@sakura2 admin]# yum --version
    Loading "fastestmirror" plugin
    2.4.3
    [root@sakura2 admin]# rpm --version
    RPM version 4.3.3
    
    # yum update
    Error: Missing Dependency: python-abi = 2.3 is needed by package python-elementtree
    
    • 解決法がわからないので放置

    Linux-Vserver の導入

    # vi /etc/ssh/sshd_config
    # /etc/init.d/sshd restart
    
    # vi /etc/yum.repos.d/dhozac-vserver.repo
    
    # yum update kernel
    # yum install util-vserver{,-core,-lib,-sysv,-build}
    
    [admin@sakura2 ~]$ uname -a
    Linux sakura2 2.6.22.19-vs2.3.0.34.1 #1 SMP Mon Mar 17 05:32:04 EDT 2008 i686 athlon i386 GNU/Linux
    

    ホストOS環境の整備

    # yum update bash screen rsync
    # /etc/init.d/iptables save
    # /etc/init.d/iptables start
    # cat /etc/sysconfig/iptables
    
    # Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
    **filter
    :INPUT ACCEPT [1067:96557]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [63680:6208436]
    :e0 - [0:0]
    -A INPUT -i eth0 -j e0
    -A e0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A e0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
    -A e0 -p tcp -m tcp --dport 22 -j ACCEPT
    -A e0 -p tcp -m tcp --dport 80 -j ACCEPT
    -A e0 -p tcp -m tcp --dport 443 -j ACCEPT
    -A e0 -j REJECT --reject-with icmp-port-unreachable
    COMMIT
    # Completed on Mon Mar 24 19:57:07 2008
    # Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
    **nat
    :PREROUTING ACCEPT [179:10642]
    :POSTROUTING ACCEPT [213:13895]
    :OUTPUT ACCEPT [251:16220]
    -A PREROUTING -s ! 10.0.0.0/255.255.255.0 -p tcp -m tcp --dport NNNN -j DNAT --to-destination 10.0.0.1:22
    -A POSTROUTING -s 10.0.0.0/255.255.255.0 -d ! 10.0.0.0/255.255.255.0 -j SNAT --to-source AAA.BBB.CCC.DDD
    COMMIT
    # Completed on Mon Mar 24 19:57:07 2008
    

    ゲストOSの設定

    [root@sakura2 ~]# /usr/sbin/vserver-stat
    CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
    40013   27 301.5M  73.8M  30m36s31  56m38s90  11d06h56 one
    40015    5  10.8M   4.4M   0m28s33   0m12s68   9d04h23 two
    40016    2   4.2M   1.3M   0m00s47   0m00s64   0m01s97 three
    

    追記

    2008-03-27

    やったー!ツンブヨたんgreasemonkeyスクリプトできたよー\(^o^)/

    // ==UserScript==
    // @name            tsun-buyo
    // @include         http://b.hatena.ne.jp/*
    // ==/UserScript==
    
    (function(){
      buyobuyo = document.getElementById('bookmark-user-buyobuyo');
      buyobuyo.innerHTML = buyobuyo.innerHTML.replace(/あたまがわるい/g,'もうっバカッ/////').replace(/あとでDISる/g,'そんなことばっかり言って……。後で覚えてなさいよ……!').replace(/これはひどい/g,'これってひっどーい!ぷんぷん!').replace(/意味がわからない/g,'なにわけわかんないこと言ってんの!!!/////').replace(/死ねばいいのに/g,'バカッ!変態!もう、○○なんか、し、しんじゃえ///');
    })();
    

    参考: http://d.hatena.ne.jp/mujin/20080326/p3

    ブックマークレットクリックするのが面倒だったので作った。

    buyobuyoという人のことはよく知らないし、ツンデレなんて好きでもなんでもないんだからねっ!

    2008-03-21

    []Python 2.5のdistutilsで、Visual Studio 2005を使いたい!

    目的

    Visual Studio 2005しかインストールしてない場合、Python 2.5だとdistutilsが正しく動かないっぽいので、どうにかしたいYO!

    なんでVisual Studio 2005だと、distutilsが動かないんかな?

    distutilsでVisual Studioを使うときのコンパイル環境は、sysモジュールのversionプロパティを参照して環境を選択をしているようです。Pythonインタプリタを起動して、以下のような命令を実行してみると、sys.versionプロパティが確認できます。

    import sys;print sys.version
    

    Python 2.5.2だと、以下のようになっています。Visual Studio 2003の環境が使われるようです。

    2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)]
    

    Python 2.6a1だと、以下のようになっています。Visual Studio 2008の環境が使われるようです。

    2.6a1 (r26a1:61155, Mar  1 2008, 12:11:56) [MSC v.1500 32 bit (Intel)]
    

    以上から察するに、Python 2.5.2とPython 2.6のどちらでも、Visual Studio 2005の環境が選択されることはないっぽいです。うーん、困った!

    解決策

    Python 2.6とVisual Studio 2008をインストールしよう!」というのを真っ先に思いつきましたが、あんまり環境を変えたくないんだよなー。というわけで、環境の変更を最低限に抑えてどうにかしてみました。簡単に言うと、distutilsだけの置き換えをしました。

    Python 2.6 をインストールする

    Python 2.6の公式ダウンロードページから、Windows版のインストーラーをダウンロードして、適当な場所にインストールしてください。

    distutilsだけ置き換える

    "Python-2.5.2/Lib/distutils"を別の場所に移動し、"Python-2.6a1/Lib/distutils"を"Python-2.5.2/Lib"以下にコピーしてください。以降はPython 2.6は必要ないので、アンインストールして構いません。

    ファイルの修正
    • 例外をPython 2.5.2で許されている形式に変更。
    • get_build_version()関数で強制的に8を返すように変更。

    上記の2点の変更を行います。distutilsディレクトリに、以下のパッチをあててください。

    Index: msvccompiler.py
    ===================================================================
    --- msvccompiler.py
    +++ msvccompiler.py
    @@ -170,6 +170,7 @@
         if majorVersion == 6:
             minorVersion = 0
         if majorVersion >= 6:
    +        return 8
             return majorVersion + minorVersion
         # else we don't know what version of the compiler this is
         return None
    Index: msvc9compiler.py
    ===================================================================
    --- msvc9compiler.py
    +++ msvc9compiler.py
    @@ -128,7 +128,7 @@
                                    "sdkinstallrootv2.0")
                 else:
                     raise KeyError("sdkinstallrootv2.0")
    -        except KeyError as exc: #
    +        except KeyError, exc: #
                 raise DistutilsPlatformError(
                 """Python was built with Visual Studio 2008;
     extensions must be built with a compiler than can generate compatible binaries.
    @@ -172,6 +172,7 @@
         if majorVersion == 6:
             minorVersion = 0
         if majorVersion >= 6:
    +        return 8
             return majorVersion + minorVersion
         # else we don't know what version of the compiler this is
         return None
    @@ -455,7 +456,7 @@
                     try:
                         self.spawn([self.rc] + pp_opts +
                                    [output_opt] + [input_opt])
    -                except DistutilsExecError as msg:
    +                except DistutilsExecError, msg:
                         raise CompileError(msg)
                     continue
                 elif ext in self._mc_extensions:
    @@ -482,7 +483,7 @@
                         self.spawn([self.rc] +
                                    ["/fo" + obj] + [rc_file])
     
    -                except DistutilsExecError as msg:
    +                except DistutilsExecError, msg:
                         raise CompileError(msg)
                     continue
                 else:
    @@ -495,7 +496,7 @@
                     self.spawn([self.cc] + compile_opts + pp_opts +
                                [input_opt, output_opt] +
                                extra_postargs)
    -            except DistutilsExecError as msg:
    +            except DistutilsExecError, msg:
                     raise CompileError(msg)
     
             return objects
    @@ -520,7 +521,7 @@
                     pass # XXX what goes here?
                 try:
                     self.spawn([self.lib] + lib_args)
    -            except DistutilsExecError as msg:
    +            except DistutilsExecError, msg:
                     raise LibError(msg)
             else:
                 log.debug("skipping %s (up-to-date)", output_filename)
    @@ -598,7 +599,7 @@
                 self.mkpath(os.path.dirname(output_filename))
                 try:
                     self.spawn([self.linker] + ld_args)
    -            except DistutilsExecError as msg:
    +            except DistutilsExecError, msg:
                     raise LinkError(msg)
     
             else:
    
    manifestファイルを作る

    python.exeと同じディレクトリに、以下のXMLを"python.exe.manifest"として保存してください。

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type='win32'
            name='Microsoft.VC80.CRT'
            version='8.0.50608.0'
            processorArchitecture='x86'
            publicKeyToken='1fc8b3b9a1e18e3b'
            />
        </dependentAssembly>
      </dependency>
    </assembly>
    

    これで終わりです。

    2008-03-20

    気持ち悪い

    普通銀行カードローンのページ

    http://www.bk.mufg.jp/kariru/card/banquic/index.html

    申し込みをクリックすると、

    http://www.loan-alliance.com/banquic/nyuukai/apply_1.html

    違うドメインのページへ飛ぶ。

    なんか気持ち悪い。ついでにドメインのトップはもっと気持ち悪い。

    http://www.loan-alliance.com/


    怪しすぎるのでwhois

    ACOM CO., LTD.

    1-1, Marunouchi 2-chome

    Chiyoda-ku, Tokyo 100-8307

    Japan

    phone : 0355330861 fax :

    Domain Name : LOAN-ALLIANCE.COM

    ドメインの所有者は子会社消費者金融のようだ。

    2008-03-16

    http://anond.hatelabo.jp/20080316144402

    1. あぼーん機能
    2. 誰かのエントリレスする時に、簡単に出来る機能(タイトルURLを入れる、タイトルに「Re:」とするなど、形式も選べるとよい)

    UIなしだけど両方ともgreasemonkeyがある。この二つだけならユーザスクリプトクライアント側でやる方が効率はよいだろうね。ただ、一番問題なのはUIが面倒、ってことだ。

    とりあえずリストアップ

    こんなところか?その他、キーワードgreasemonkeyとかnameとかタグ[[greasemonkey]]とかで色々あったりする。でも探すのははてブの方が良いかな?

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