twitterに張られたニコニコのリンクをサムネ(というかiframe)展開するぐりもん

とりあえず公開ー

// ==UserScript==
// @name mata saume
// @namespace	http://d.hatena.ne.jp/noboruhi
// @description matemiteru samuneiru
// @include http://twitter.com/*
// @author	noboruhi
// @version	 0.1
// ==/UserScript==


(
function() {
	var entry = $X("//tr[@class='hentry']//a[starts-with(@href,'http://www.nicovideo.jp/watch/')]").forEach(function (a) {
		a.href.match(/http:\/\/www\.nicovideo\.jp\/watch\/(sm\d+)/);
		var id = RegExp.$1;
	  var br =$N('br',{},'');
		var iframe = $N('iframe',{
			'width' : '312',
			'height' : '176',
			'src' : 'http://www.nicovideo.jp/thumb/' + id,
			'scrolling'	: 'no',
			'style' : 'border:solid 1px #CCC;',
			'frameborder' : '0'
		},'');
		a.parentNode.appendChild(br);
		a.parentNode.appendChild(iframe);
		iframe.appendChild(a);
		a.parentNode.removeChild(a);
	});


// cho45 san toko no inyou
function $N(name, attr, childs) {
		var ret = document.createElement(name);
		for (k in attr) {
			if (!attr.hasOwnProperty(k)) continue;
			v = attr[k];
			if (k == "class") {
				ret.className = v;
			} else {
				ret.setAttribute(k, v);
			}
		}
		switch (typeof childs) {
			case "string": {
				ret.appendChild(document.createTextNode(childs));
				break;
			}
			case "object": {
				for (var i = 0, len = childs.length; i < len; i++) {
					var child = childs[i];
					if (typeof child == "string") {
						ret.appendChild(document.createTextNode(child));
					} else {
						ret.appendChild(child);
					}
				}
				break;
			}
		}
		return ret;
	}
	
	function $X(exp, context) {
		if (!context) context = document;
		var resolver = function (prefix) {
			var o = document.createNSResolver(context)(prefix);
			return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
		}
		var exp = document.createExpression(exp, resolver);

		var result = exp.evaluate(context, XPathResult.ANY_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.UNORDERED_NODE_ITERATOR_TYPE: {
				result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
				var ret = [];
				for (var i = 0, len = result.snapshotLength; i < len ; i++) {
					ret.push(result.snapshotItem(i));
				}
				return ret;
			}
		}
		return null;
	}
})();

ぐりもんは初めて書いたんで無駄・無理な所があるやもしれません。ツッコミ・添削などお待ちしております。

追記:ツッコミきました!なんか不具合直ってるっぽいんでコッチ使ってくださいな。
http://blog.fulltext-search.biz/articles/2008/01/29/re-mata-samune

第2次Winny危機

最近のWinny事件を見て思ったネタをひとつ。

Winnyによって情報が流出する事が良くも悪くも当然になってしまった今。どこも必死になって個々のシステムや個人情報なんかを守っているけれども、ちょっと逆に考えてみる。もし信頼を落とす目的でWinnyに特定の企業の重要情報を「偽装」した情報が流されたら。

ちょっと前にメールであんな事になるぐらいだし、そもそも今の状況でそれが「偽装」と信じてもらえるかどうか。

結局、winnyを排除しましたってだけではダメな気がするんですよ。ハイ。

ついカッとなって

本を3冊も購入してしまった。

後悔はまったくもってしていません。ハイ。

その昔アンテナ中毒だった私。

自分の50%ははてブで出来ています。 自分の50%はRSSリーダーで出来ています。 ・・・って成分解析じゃないけど、最近の自分の生活ってホントそんな感じ。

ちょうど5年くらい前にあるコミュニティ界隈の日記をチェックするアンテナにはまっていた時も同じだった。いやー、怖い怖い。
何が怖いって同意して考えが完了してしまうこと。あの時は本当に異常だった。