「Name」を含む日記 RSS

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

2007-08-01

せっかくだから公開するよ

長年日記じゃないけどそれっぽい機能

// ==UserScript==
// @name	AnonymousDiary for Pages
// @namespace	http://anond.hatelabo.jp/
// @description	Like Naganen nikki (of hns and tDiary) function
// @include	http://anond.hatelabo.jp/
// ==/UserScript==
GM_xmlhttpRequest({
	method: "GET",
	url: "http://anond.hatelabo.jp/?page=2666",
	onload: function(result) {
		var src = result.responseText.match(/  <h3>(.|\s)*?\n<\/div>/g);
		var dst = document.evaluate("//div[@class='section']",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
		for (var i=0; i<dst.snapshotLength; i++) {
			if (src.length<=i) {break}
			dst.snapshotItem(i).innerHTML += '<\/div>\n<div class="section">\n'+src[i].replace(/<\/div>$/, "");
		}
	}
});

一つおきに過去エントリを入れます。意図的に過去エントリと特別分かるようにはしていません。時間をみれば分かりますけど。

2007-07-19

/* Ten */
if (typeof(Ten) == 'undefined') {
    Ten = {};
}
Ten.NAME = 'Ten';
Ten.VERSION = 0.06;

/* Ten.Class */
Ten.Class = function(klass, prototype) {
    if (klass && klass.initialize) {
	var c = klass.initialize;
    } else if(klass && klass.base) {
        var c = function() { return klass.base[0].apply(this, arguments) };
    } else {
	var c = function() {};
    }
    c.prototype = prototype || {};
    c.prototype.constructor = c;
    Ten.Class.inherit(c, klass);
    if (klass && klass.base) {
        for (var i = 0;  i < klass.base.length; i++) {
	    var parent = klass.base[i];
            if (i == 0) {
                c.SUPER = parent;
                c.prototype.SUPER = parent.prototype;
            }
            Ten.Class.inherit(c, parent);
            Ten.Class.inherit(c.prototype, parent.prototype);
        }
    }
    return c;
}
Ten.Class.inherit = function(child,parent) {
    for (var prop in parent) {
        if (typeof(child[prop]) != 'undefined' || prop == 'initialize') continue;
        child[prop] = parent[prop];
    }
}

/*
// Basic Ten Classes
**/

/* Ten.JSONP */
Ten.JSONP = new Ten.Class({
    initialize: function(uri,obj,method) {
        if (Ten.JSONP.Callbacks.length) {
            setTimeout(function() {new Ten.JSONP(uri,obj,method)}, 500);
            return;
        }
        var del = uri.match(/\?/) ? '&' : '?';
        uri += del + 'callback=Ten.JSONP.callback';
        if (!uri.match(/timestamp=/)) {
            uri += '&' + encodeURI(new Date());
        }
        if (obj && method) Ten.JSONP.addCallback(obj,method);
        this.script = document.createElement('script');
        this.script.src = uri;
        this.script.type = 'text/javascript';
        document.getElementsByTagName('head')[0].appendChild(this.script);
    },
    addCallback: function(obj,method) {
        Ten.JSONP.Callbacks.push({object: obj, method: method});
    },
    callback: function(args) {
        // alert('callback called');
        var cbs = Ten.JSONP.Callbacks;
        for (var i = 0; i < cbs.length; i++) {
            var cb = cbs[i];
            cb.object[cb.method].call(cb.object, args);
        }
        Ten.JSONP.Callbacks = [];
    },
    MaxBytes: 8000,
    Callbacks: []
});

/* Ten.XHR */
Ten.XHR = new Ten.Class({
    initialize: function(uri,opts,obj,method) {
        if (!uri) return;
        this.request = Ten.XHR.getXMLHttpRequest();
        this.callback = {object: obj, method: method};
        var xhr = this;
        var prc = this.processReqChange;
        this.request.onreadystatechange = function() {
            prc.apply(xhr, arguments);
        }
        var method = opts.method || 'GET';
        this.request.open(method, uri, true);
        if (method == 'POST') {
            this.request.setRequestHeader('Content-Type',
                                          'application/x-www-form-urlencoded');
        }
        var data = opts.data ? Ten.XHR.makePostData(opts.data) : null;
        this.request.send(data);
    },
    getXMLHttpRequest: function() {
        var xhr;
        var tryThese = [
            function () { return new XMLHttpRequest(); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
            function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
        ];
        for (var i = 0; i < tryThese.length; i++) {
            var func = tryThese[i];
            try {
                xhr = func;
                return func();
            } catch (e) {
                //alert(e);
            }
        }
        return xhr;
    },
    makePostData: function(data) {
        var pairs = [];
        var regexp = /%20/g;
        for (var k in data) {
            var v = data[k].toString();
            var pair = encodeURIComponent(k).replace(regexp,'+') + '=' +
                encodeURIComponent(v).replace(regexp,'+');
            pairs.push(pair);
        }
        return pairs.join('&');
    }
},{
    processReqChange: function() {
        var req = this.request;
        if (req.readyState == 4) {
            if (req.status == 200) {
                var cb = this.callback;
                cb.object[cb.method].call(cb.object, req);
            } else {
                alert("There was a problem retrieving the XML data:\n" +
                      req.statusText);
            }
        }
    }
});

/* Ten.Observer */
Ten.Observer = new Ten.Class({
    initialize: function(element,event,obj,method) {
        var func = obj;
        if (typeof(method) == 'string') {
            func = obj[method];
        }
        this.element = element;
        this.event = event;
        this.listener = function(event) {
            return func.call(obj, new Ten.Event(event || window.event));
        }
        if (this.element.addEventListener) {
            if (this.event.match(/^on(.+)$/)) {
                this.event = RegExp.$1;
            }
            this.element.addEventListener(this.event, this.listener, false);
        } else if (this.element.attachEvent) {
            this.element.attachEvent(this.event, this.listener);
        }
    }
},{
    stop: function() {
        if (this.element.removeEventListener) {
            this.element.removeEventListener(this.event,this.listener,false);
        } else if (this.element.detachEvent) {
            this.element.detachEvent(this.event,this.listener);
        }
    }
});

/* Ten.Event */
Ten.Event = new Ten.Class({
    initialize: function(event) {
        this.event = event;
    },
    keyMap: {
        8:"backspace", 9:"tab", 13:"enter", 19:"pause", 27:"escape", 32:"space",
        33:"pageup", 34:"pagedown", 35:"end", 36:"home", 37:"left", 38:"up",
        39:"right", 40:"down", 44:"printscreen", 45:"insert", 46:"delete",
        112:"f1", 113:"f2", 114:"f3", 115:"f4", 116:"f5", 117:"f6", 118:"f7",
        119:"f8", 120:"f9", 121:"f10", 122:"f11", 123:"f12",
        144:"numlock", 145:"scrolllock"
    }
},{
    mousePosition: function() {
        if (!this.event.clientX) return;
        return Ten.Geometry.getMousePosition(this.event);
    },
    isKey: function(name) {
        var ecode = this.event.keyCode;
        if (!ecode) return;
        var ename = Ten.Event.keyMap[ecode];
        if (!ename) return;
        return (ename == name);
    },
    targetIsFormElements: function() {
        var target = this.event.target;
        if (!target) return;
        var T = (target.tagName || '').toUpperCase();
        return (T == 'INPUT' || T == 'SELECT' || T == 'OPTION' ||
                T == 'BUTTON' || T == 'TEXTAREA');
    },
    stop: function() {
        var e = this.event;
        if (e.stopPropagation) {
            e.stopPropagation();
            e.preventDefault();
        } else {
            e.cancelBubble = true;
            e.returnValue = false;
        }
    }
});

/* Ten.DOM */
Ten.DOM = new Ten.Class({
    getElementsByTagAndClassName: function(tagName, className, parent) {
        if (typeof(parent) == 'undefined') {
            parent = document;
        }
        var children = parent.getElementsByTagName(tagName);
        if (className) { 
            var elements = [];
            for (var i = 0; i < children.length; i++) {
                var child = children[i];
                var cls = child.className;
                if (!cls) {
                    continue;
                }
                var classNames = cls.split(' ');
                for (var j = 0; j < classNames.length; j++) {
                    if (classNames[j] == className) {
                        elements.push(child);
                        break;
                    }
                }
            }
            return elements;
        } else {
            return children;
        }
    },
    removeEmptyTextNodes: function(element) {
        var nodes = element.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            var node = nodes[i];
            if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                node.parentNode.removeChild(node);
            }
        }
    },
    nextElement: function(elem) {
        do {
            elem = elem.nextSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    },
    prevElement: function(elem) {
        do {
            elem = elem.previousSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    },
    scrapeText: function(node) {
        var rval = [];
        (function (node) {
            var cn = node.childNodes;
            if (cn) {
                for (var i = 0; i < cn.length; i++) {
                    arguments.callee.call(this, cn[i]);
                }
            }
            var nodeValue = node.nodeValue;
            if (typeof(nodeValue) == 'string') {
                rval.push(nodeValue);
            }
        })(node);
        return rval.join('');
    },
    onLoadFunctions: [],
    loaded: false,
    timer: null,
    addEventListener: function(event,func) {
        if (event != 'load') return;
        Ten.DOM.onLoadFunctions.push(func);
        Ten.DOM.checkLoaded();
    },
    checkLoaded: function() {
        var c = Ten.DOM;
        if (c.loaded) return true;
        if (document && document.getElementsByTagName &&
            document.getElementById && document.body) {
            if (c.timer) {
                clearInterval(c.timer);
                c.timer = null;
            }
            for (var i = 0; i < c.onLoadFunctions.length; i++) {
                    c.onLoadFunctions[i]();
            }
            c.onLoadFunctions = [];
            c.loaded = true;
        } else {
            c.timer = setInterval(c.checkLoaded, 13);
        }
    }
});

/* Ten.Style */
Ten.Style = new Ten.Class({
    applyStyle: function(elem, style) {
        for (prop in style) {
            elem.style[prop] = style[prop];
        }
    }
});

/* Ten.Geometry */
Ten.Geometry = new Ten.Class({
    initialize: function() {
        if (Ten.Geometry._initialized) return;
        var func = Ten.Geometry._functions;
        var de = document.documentElement;
        if (window.innerWidth) {
            func.getWindowWidth = function() { return window.innerWidth; }
            func.getWindowHeight = function() { return window.innerHeight; }
            func.getXScroll = function() { return window.pageXOffset; }
            func.getYScroll = function() { return window.pageYOffset; }
        } else if (de && de.clientWidth) {
            func.getWindowWidth = function() { return de.clientWidth; }
            func.getWindowHeight = function() { return de.clientHeight; }
            func.getXScroll = function() { return de.scrollLeft; }
            func.getYScroll = function() { return de.scrollTop; }
        } else if (document.body.clientWidth) {
            func.getWindowWidth = function() { return document.body.clientWidth; }
            func.getWindowHeight = function() { return document.body.clientHeight; }
            func.getXScroll = function() { return document.body.scrollLeft; }
            func.getYScroll = function() { return document.body.scrollTop; }
        }
        Ten.Geometry._initialized = true;
    },
    _initialized: false,
    _functions: {},
    getScroll: function() {
        if (!Ten.Geometry._initialized) new Ten.Geometry;
        return {
            x: Ten.Geometry._functions.getXScroll(),
            y: Ten.Geometry._functions.getYScroll()
        };
    },
    getMousePosition: function(pos) {
        // pos should have clientX, clientY same as mouse event
        if ((navigator.userAgent.indexOf('Safari') > -1) &&
            (navigator.userAgent.indexOf('Version/') < 0)) {
            return {
                x: pos.clientX,
                y: pos.clientY
            };
        } else {
            var scroll = Ten.Geometry.getScroll();
            return {
                x: pos.clientX + scroll.x,
                y: pos.clientY + scroll.y
            };
        }
    },
    getElementPosition: function(e) {
        return {
            x: e.offsetLeft,
            y: e.offsetTop
        };
    },
    getWindowSize: function() {
        if (!Ten.Geometry._initialized) new Ten.Geometry;
        return {
            w: Ten.Geometry._functions.getWindowWidth(),
            h: Ten.Geometry._functions.getWindowHeight()
        };
    }
});

/* Ten.Position */
Ten.Position = new Ten.Class({
    initialize: function(x,y) {
        this.x = x;
        this.y = y;
    },
    subtract: function(a,b) {
        return new Ten.Position(a.x - b.x, a.y - b.y);
    }
});

/*
// require Ten.js
**/

/* Ten.SubWindow */
Ten.SubWindow = new Ten.Class({
    initialize: function() {
        var c = this.constructor;
        if (c.singleton && c._cache) {
            return c._cache;
        }
        var div = document.createElement('div');
        Ten.Style.applyStyle(div, Ten.SubWindow._baseStyle);
        Ten.Style.applyStyle(div, c.style);
        this.window = div;
        this.addContainerAndCloseButton();
        document.body.appendChild(div);
        if (c.draggable) {
            this._draggable = new Ten.Draggable(div, this.handle);
        }
        if (c.singleton) c._cache = this;
        return this;
    },
    _baseStyle: {
        color: '#000',
        position: 'absolute',
        display: 'none',
        zIndex: 2,
        left: 0,
        top: 0,
        backgroundColor: '#fff',
        border: '1px solid #bbb'
    },
    style: {
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px',
        width: '100px',
        height: '100px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px'
    },
    containerStyle: {
        margin: '32px 0 0 0',
        padding: '0 10px'
    },
    // closeButton: 'close.gif',
    closeButton: 'http://s.hatena.com/images/close.gif',
    closeButtonStyle: {
        position: 'absolute',
        top: '8px',
        right: '10px',
        cursor: 'pointer'
    },
    _baseScreenStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        display: 'none',
        zIndex: 1,
        overflow: 'hidden',
        width: '100%',
        height: '100%'
    },
    screenStyle: {},
    showScreen: true,
    singleton: true,
    draggable: true,
    _cache: null
},{
    screen: null,
    windowObserver: null,
    visible: false,
    addContainerAndCloseButton: function() {
        var win = this.window;
        var c = this.constructor;
        var div = document.createElement('div');
        win.appendChild(div);
        Ten.Style.applyStyle(div, c.containerStyle);
        this.container = div;
        if (c.handleStyle) {
            var handle = document.createElement('div');
            Ten.Style.applyStyle(handle, c.handleStyle);
            win.appendChild(handle);
            this.handle = handle;
        }
        if (c.closeButton) {
	    var btn = document.createElement('img');
            btn.src = c.closeButton;
            btn.alt = 'close';
            Ten.Style.applyStyle(btn, c.closeButtonStyle);
            win.appendChild(btn);
            new Ten.Observer(btn, 'onclick', this, 'hide');
            this.closeButton = btn;
        }
        if (c.showScreen) {
            var screen = document.createElement('div');
            Ten.Style.applyStyle(screen, Ten.SubWindow._baseScreenStyle);
            Ten.Style.applyStyle(screen, c.screenStyle);
            document.body.appendChild(screen);
            this.screen = screen;
            new Ten.Observer(screen, 'onclick', this, 'hide');
        }
    },
    show: function(pos) {
        pos = (pos.x && pos.y) ? pos : {x:0, y:0};
        with (this.window.style) {
            display = 'block';
            left = pos.x + 'px';
            top = pos.y + 'px';
        }
        if (this.screen) {
            with (this.screen.style) {
                display = 'block';
                left = Ten.Geometry.getScroll().x + 'px';
                top = Ten.Geometry.getScroll().y + 'px';
            }
        }
        this.windowObserver = new Ten.Observer(document.body, 'onkeypress', this, 'handleEscape');
        this.visible = true;
    },
    handleEscape: function(e) {
        if (!e.isKey('escape')) return;
        this.hide();
    },
    hide: function() {
        if (this._draggable) this._draggable.endDrag();
        this.window.style.display = 'none';
        if (this.screen) this.screen.style.display = 'none';
        if (this.windowObserver) this.windowObserver.stop();
        this.visible = false;
    }
});

/* Ten.Draggable */
Ten.Draggable = new Ten.Class({
    initialize: function(element,handle) {
        this.element = element;
        this.handle = handle || element;
        this.startObserver = new Ten.Observer(this.handle, 'onmousedown', this, 'startDrag');
        this.handlers = [];
    }
},{
    startDrag: function(e) {
        if (e.targetIsFormElements()) return;
        this.delta = Ten.Position.subtract(
            e.mousePosition(),
            Ten.Geometry.getElementPosition(this.element)
        );
        this.handlers = [
            new Ten.Observer(document, 'onmousemove', this, 'drag'),
            new Ten.Observer(document, 'onmouseup', this, 'endDrag'),
            new Ten.Observer(this.element, 'onlosecapture', this, 'endDrag')
        ];
        e.stop();
    },
    drag: function(e) {
        var pos = Ten.Position.subtract(e.mousePosition(), this.delta);
        Ten.Style.applyStyle(this.element, {
            left: pos.x + 'px',
            top: pos.y + 'px'
        });
        e.stop();
    },
    endDrag: function(e) {
        for (var i = 0; i < this.handlers.length; i++) {
            this.handlers[i].stop();
        }
        if(e) e.stop();
    }
});

/* Hatena */
if (typeof(Hatena) == 'undefined') {
    Hatena = {};
}

/* Hatena.User */
Hatena.User = new Ten.Class({
    initialize: function(name) {
        this.name = name;
    },
    getProfileIcon: function(name) {
        if (!name) name = 'user';
        var pre = name.match(/^[\w-]{2}/)[0];
        var img = document.createElement('img');
        img.src = 'http://www.hatena.ne.jp/users/' + pre + '/' + name + '/profile_s.gif';
        img.alt = name;
        img.setAttribute('class', 'profile-icon');
        img.setAttribute('width','16px');
        img.setAttribute('height','16px');
        with (img.style) {
            margin = '0 3px';
            border = 'none';
            verticalAlign = 'middle';
        }
        return img;
    }
}, {
    profileIcon: function() {
        return Hatena.User.getProfileIcon(this.name);
    }
});

/* Hatena.Star */
if (typeof(Hatena.Star) == 'undefined') {
    Hatena.Star = {};
}

/*
// Hatena.Star.* classes //
**/
if (window.location && window.location.host.match(/hatena\.com/)) {
    Hatena.Star.BaseURL = 'http://s.hatena.com/';
} else {
    Hatena.Star.BaseURL = 'http://s.hatena.ne.jp/';
}
Hatena.Star.Token = null;

/* Hatena.Star.User */
Hatena.Star.User = new Ten.Class({
    base: [Hatena.User],
    initialize: function(name) {
        if (Hatena.Star.User._cache[name]) {
            return Hatena.Star.User._cache[name];
        } else {
            this.name = name;
            Hatena.Star.User._cache[name] = this;
            return this;
        }
    },
    _cache: {}
},{
    userPage: function() {
        return Hatena.Star.BaseURL + this.name + '/';
    }
});

/* Hatena.Star.Entry */
Hatena.Star.Entry = new Ten.Class({
    initialize: function(e) {
        this.entry = e;
        this.uri = e.uri;
        this.title = e.title;
        this.star_container = e.star_container;
        this.comment_container = e.comment_container;
        this.stars = [];
        this.comments = [];
    },
    maxStarCount: 11
},{
    flushStars: function() {
        this.stars = [];
        this.star_container.innerHTML = '';
    },
    bindStarEntry: function(se) {
        this.starEntry = se;
        for (var i = 0; i < se.stars.length; i++) {
            if (typeof(se.stars[i]) == 'number') {
                this.stars.push(new Hatena.Star.InnerCount(se.stars[i],this));
            } else {
                this.stars.push(new Hatena.Star.Star(se.stars[i]));
            }
        }
        if (se.comments && !this.comments.length) {
            for (var i = 0; i < se.comments.length; i++) {
                this.comments.push(new Hatena.Star.Comment(se.comments[i]));
            }
        }
        this.can_comment = se.can_comment;
    },
    setCanComment: function(v) {
        this.can_comment = v;
    },
    showButtons: function() {
        this.addAddButton();
        this.addCommentButton();
    },
    addAddButton: function() {
        if (this.star_container) {
            this.addButton = new Hatena.Star.AddButton(this);
            this.star_container.appendChild(this.addButton);
        }
    },
    addCommentButton: function() {
        if (this.comment_container) {
            this.commentButton = new Hatena.Star.CommentButton(this);
            this.comment_container.appendChild(this.commentButton.img);
        }
    },
    showStars: function() {
        var klass = this.constructor;
        // if (this.stars.length > klass.maxStarCount) {
        //     var ic = new Hatena.Star.InnerCount(this.stars.slice(1,this.stars.length));
        //     this.star_container.appendChild(this.stars[0]);
        //     this.star_container.appendChild(ic);
        //     this.star_container.appendChild(this.stars[this.stars.length - 1]);
        // } else {
        for (var i = 0; i < this.stars.length; i++) {
            this.star_container.appendChild(this.stars[i]);
        }
    },
    showCommentButton: function() {
        if (this.can_comment) {
            this.commentButton.show();
            if (this.comments.length) this.commentButton.activate();
        } else {
            // this.commentButton.hide();
        }
    },
    addStar: function(star) {
        this.stars.push(star);
        this.star_container.appendChild(star);
    },
    addComment: function(com) {
        if (!this.comments) this.comments = [];
        if (this.comments.length == 0) {
            this.commentButton.activate();
        }
        this.comments.push(com);
    },
    showCommentCount: function() {
        this.comment_container.innerHTML += this.comments.length;
    }
});

/* Hatena.Star.Button */
Hatena.Star.Button = new Ten.Class({
    createButton: function(args) {
        var img = document.createElement('img');
        img.src = args.src;
        img.alt = img.title = args.alt;
        with (img.style) {
	    cursor = 'pointer';
	    margin = '0 3px';
            padding = '0';
            border = 'none';
            verticalAlign = 'middle';
        }
        return img;
    }
});

/* Hatena.Star.AddButton */
Hatena.Star.AddButton = new Ten.Class({
    base: ['Hatena.Star.Button'],
    initialize: function(entry) {
        this.entry = entry;
        this.lastPosition = null;
        var img = Hatena.Star.Button.createButton({
            src: Hatena.Star.AddButton.ImgSrc,
            alt: 'Add Star'
        });
        this.observer = new Ten.Observer(img,'onclick',this,'addStar');
        this.img = img;
        return img;
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/add.gif'
},{
    addStar: function(e) {
        this.lastPosition = e.mousePosition();
        var uri = Hatena.Star.BaseURL + 'star.add.json?uri=' + encodeURIComponent(this.entry.uri) +
            '&title=' + encodeURIComponent(this.entry.title);
        if (Hatena.Star.Token) {
            uri += '&token=' + Hatena.Star.Token;
        }
        new Ten.JSONP(uri, this, 'receiveResult');
    },
    receiveResult: function(args) {
        var name = args ? args.name : null;
        if (name) {
            this.entry.addStar(new Hatena.Star.Star({name: name}));
            //alert('Succeeded in Adding Star ' + args);
        } else if (args.errors) {
            var pos = this.lastPosition;
            pos.x -= 10;
            pos.y += 25;
            var scroll = Ten.Geometry.getScroll();
            var scr = new Hatena.Star.AlertScreen();
            var alert = args.errors[0];
            scr.showAlert(alert, pos);
        }
    }
});

/* Hatena.Star.CommentButton */
Hatena.Star.CommentButton = new Ten.Class({
    base: ['Hatena.Star.Button'],
    initialize: function(entry) {
        this.entry = entry;
        this.lastPosition = null;
        var img = Hatena.Star.Button.createButton({
            src: Hatena.Star.CommentButton.ImgSrc,
            alt: 'Comments'
        });
        img.style.display = 'none';
        this.observer = new Ten.Observer(img,'onclick',this,'showComments');
        this.img = img;
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/comment.gif',
    ImgSrcActive: Hatena.Star.BaseURL + 'images/comment_active.gif'
},{
    showComments: function(e) {
        if (!this.screen) this.screen = new Hatena.Star.CommentScreen();
        this.screen.bindEntry(this.entry);
        var pos = e.mousePosition();
        pos.y += 25;
        this.screen.showComments(this.entry, pos);
    },
    hide: function() {
        this.img.style.display = 'none';
    },
    show: function() {
        this.img.style.display = 'inline';
    },
    activate: function() {
        this.show();
        this.img.src = Hatena.Star.CommentButton.ImgSrcActive;
    }
});

/* Hatena.Star.Star */
Hatena.Star.Star = new Ten.Class({
    initialize: function(args) {
        if (args.img) {
            this.img = args.img;
            this.name = this.img.getAttribute('alt');
        } else {
            this.name = args.name;
            var img = document.createElement('img');
            img.src = Hatena.Star.Star.ImgSrc;
            img.alt = this.name;
            with (img.style) {
                padding = '0';
                border = 'none';
            }
            this.img = img;
        }
	new Ten.Observer(this.img,'onmouseover',this,'showName');
	new Ten.Observer(this.img,'onmouseout',this,'hideName');
	if (this.name) {
            this.user = new Hatena.Star.User(this.name);
            this.img.style.cursor = 'pointer';
            new Ten.Observer(this.img,'onclick',this,'goToUserPage');
        }
        if (args.count && args.count > 1) {
            var c = document.createElement('span');
            c.setAttribute('class', 'hatena-star-inner-count');
            Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
            c.innerHTML = args.count;
            var s = document.createElement('span');
            s.appendChild(img);
            s.appendChild(c);
            return s;
        } else {
            return this.img;
        }
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/star.gif'
},{
    showName: function(e) {
        if (!this.screen) this.screen = new Hatena.Star.NameScreen();
        var pos = e.mousePosition();
        pos.x += 10;
        pos.y += 25;
        this.screen.showName(this.name, pos);
    },
    hideName: function() {
        if (!this.screen) return;
        this.screen.hide();
    },
    goToUserPage: function() {
        window.location = this.user.userPage();
    }
});

/* Hatena.Star.InnerCount */
Hatena.Star.InnerCount = new Ten.Class({
    initialize: function(count, e) {
        this.count = count;
        this.entry = e;
        var c = document.createElement('span');
        c.setAttribute('class', 'hatena-star-inner-count');
        Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
        c.style.cursor = 'pointer';
        c.innerHTML = count;
        new Ten.Observer(c,'onclick',this,'showInnerStars');
        this.container = c;
        return c;
    },
    style: {
        color: '#f4b128',
        fontWeight: 'bold',
        fontSize: '80%',
        fontFamily: '"arial", sans-serif',
        margin: '0 2px'
    }
},{
    showInnerStars: function() {
        var url = Hatena.Star.BaseURL + 'entry.json?uri=' +
        encodeURIComponent(this.entry.uri);
        new Ten.JSONP(url, this, 'receiveStarEntry');
    },
    receiveStarEntry: function(res) {
        var se = res.entries[0];
        var e = this.entry;
        if (encodeURIComponent(se.uri) != encodeURIComponent(e.uri)) return;
        e.flushStars();
        e.bindStarEntry(se);
        e.addAddButton();
        e.showStars();
    }
});

/* Hatena.Star.Comment */
Hatena.Star.Comment = new Ten.Class({
    initialize: function(args) {
        this.name = args.name;
        this.body = args.body;
    }
},{
    asElement: function() {
        var div = document.createElement('div');
        with (div.style) {
            margin = '0px 0';
            padding = '5px 0';
            borderBottom = '1px solid #ddd';
        }
        var ico = Hatena.User.getProfileIcon(this.name);
        div.appendChild(ico);
        var span = document.createElement('span');
        with(span.style) {
            fontSize = '90%';
        }
        span.innerHTML = this.body;
        div.appendChild(span);
        return div;
    }
});

/* Hatena.Star.NameScreen */
Hatena.Star.NameScreen = new Ten.Class({
    base: [Ten.SubWindow],
    style: {
        padding: '2px',
        textAlign: 'center'
    },
    containerStyle: {
        margin: 0,
        padding: 0
    },
    handleStyle: null,
    showScreen: false,
    closeButton: null,
    draggable: false
},{
    showName: function(name, pos) {
        this.container.innerHTML = '';
        this.container.appendChild(Hatena.User.getProfileIcon(name));
        this.container.appendChild(document.createTextNode(name));
        this.show(pos);
    }
});

/* Hatena.Star.AlertScreen */
Hatena.Star.AlertScreen = new Ten.Class({
    base: [Ten.SubWindow],
    style: {
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px',
        width: '240px',
        height: '120px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px',
        borderRadius: '6px 6px 0 0',
        MozBorderRadius: '6px 6px 0 0'
    }
},{
    showAlert: function(msg, pos) {
        this.container.innerHTML = msg;
        var win = Ten.Geometry.getWindowSize();
        var scr = Ten.Geometry.getScroll();
        var w = parseInt(this.constructor.style.width) + 20;
        if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
        this.show(pos);
    }
});

/* Hatena.Star.CommentScreen */
Hatena.Star.CommentScreen = new Ten.Class({
    base: [Ten.SubWindow],
    initialize: function() {
        var self = this.constructor.SUPER.call(this);
        if (!self.commentsContainer) self.addCommentsContainer();
        return self;
    },
    style: {
        width: '280px',
        height: '280px',
        overflowY: 'auto',
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px',
        borderRadius: '6px 6px 0 0',
        MozBorderRadius: '6px 6px 0 0'
    },
    containerStyle: {
        margin: '32px 0 0 0',
        textAlign: 'left',
        padding: '0 10px'
    },
    getLoadImage: function() {
        var img = document.createElement('img');
        img.src = Hatena.Star.BaseURL + 'images/load.gif';
        img.setAttribute('alt', 'Loading');
        with (img.style) {
            verticalAlign = 'middle';
            margin = '0 2px';
        }
        return img;
    }
},{
    addCommentsContainer: function() {
        var div = document.createElement('div');
        with (div.style) {
            marginTop = '-3px';
        }
        this.container.appendChild(div);
        this.commentsContainer = div;
    },
    showComments: function(e, pos) {
        var comments = e.comments;
        if (!comments) comments = [];
        this.commentsContainer.innerHTML = '';
        for (var i=0; i<comments.length; i++) {
            this.commentsContainer.appendChild(comments[i].asElement());
        }
        if (e.starEntry && !e.can_comment) {
            this.hideCommentForm();
        } else {
            this.addCommentForm();
        }
        var win = Ten.Geometry.getWindowSize();
        var scr = Ten.Geometry.getScroll();
        var w = parseInt(this.constructor.style.width) + 20;
        if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
        this.show(pos);
    },
    bindEntry: function(e) {
        this.entry = e;
    },
    sendComment: function(e) {
        if (!e.isKey('enter')) return;
        var body = this.commentInput.value;
        if (!body) return;
        this.commentInput.disabled = 'true';
        this.showLoadImage();
        var url = Hatena.Star.BaseURL + 'comment.add.json?body=' + encodeURIComponent(body) +
            '&uri=' + encodeURIComponent(this.entry.uri) +
            '&title=' + encodeURIComponent(this.entry.title);
        new Ten.JSONP(url, this, 'receiveResult');
    },
    receiveResult: function(args) {
        if (!args.name || !args.body) return;
        this.commentInput.value = ''; 
        this.commentInput.disabled = '';
        this.hideLoadImage();
        var com = new Hatena.Star.Comment(args);
        this.entry.addComment(com);
        this.commentsContainer.appendChild(com.asElement());
    },
    showLoadImage: function() {
        if (!this.loadImage) return; 
        this.loadImage.style.display = 'inline';
    },
    hideLoadImage: function() {
        if (!this.loadImage) return; 
        this.loadImage.style.display = 'none';
    },
    hideCommentForm: function() {
        if (!this.commentForm) return;
        this.commentForm.style.display = 'none';
    },
    addCommentForm: function() {
        if (this.commentForm) {
            this.commentForm.style.display = 'block';
            return;
        }
        var form = document.createElement('div');
        this.container.appendChild(form);
        this.commentForm = form;
        with (form.style) {
            margin = '0px 0';
            padding = '5px 0';
            // borderTop = '1px solid #ddd';
        }
        //if (Hatena.Visitor) {
        //    form.appendChild(Hatena.Visitor.profileIcon());
        //} else {
        //    form.appendChild(Hatena.User.getProfileIcon());
        //}
        var input = document.createElement('input');
        input.type = 'text';
        with (input.style) {
            width = '215px';
	    border = '1px solid #bbb';
            padding = '3px';
        }
        form.appendChild(input);
        this.commentInput = input;
        var img = this.constructor.getLoadImage();
        this.loadImage = img;
        this.hideLoadImage();
        form.appendChild(img);
        new Ten.Observer(input,'onkeypress',this,'sendComment');
    }
});

/* Hatena.Star.EntryLoader */
Hatena.Star.EntryLoader = new Ten.Class({
    initialize: function() {
        var entries = Hatena.Star.EntryLoader.loadEntries();
        this.entries = [];
        for (var i = 0; i < entries.length; i++) {
            var e = new Hatena.Star.Entry(entries[i]);
            e.showButtons();
            this.entries.push(e);
        }
        this.getStarEntries();
    },
    createStarContainer: function() {
        var sc = document.createElement('span');
        sc.setAttribute('class', 'hatena-star-star-container');
        sc.style.marginLeft = '1px';
        return sc;
    },
    createCommentContainer: function() {
        var cc = document.createElement('span');
        cc.setAttribute('class', 'hatena-star-comment-container');
        cc.style.marginLeft = '1px';
        return cc;
    },
    scrapeTitle: function(node) {
        var rval = [];
        (function (node) {
            if (node.tagName == 'SPAN' &&
                (node.className == 'sanchor' ||
                 node.className == 'timestamp')) {
                     return;
            } else if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                return;
            }
            var cn = node.childNodes;
            if (cn) {
                for (var i = 0; i < cn.length; i++) {
                    arguments.callee.call(this, cn[i]);
                }
            }
            var nodeValue = node.nodeValue;
            if (typeof(nodeValue) == 'string') {
                rval.push(nodeValue);
            }
        })(node);
        return rval.join('');
    },
    headerTagAndClassName: ['h3',null],
    getHeaders: function() {
        var t = Hatena.Star.EntryLoader.headerTagAndClassName;
        return Ten.DOM.getElementsByTagAndClassName(t[0],t[1],document);
    },
    loadEntries: function() {
        var entries = [];
        //var headers = document.getElementsByTagName('h3');
        var c = Hatena.Star.EntryLoader;
        var headers = c.getHeaders();
        for (var i = 0; i < headers.length; i++) {
            var header = headers[i];
            var a = header.getElementsByTagName('a')[0];
            if (!a) continue;
            var uri = a.href;
            var title = '';
            // Ten.DOM.removeEmptyTextNodes(header);
            var cns = header.childNodes;
            title = c.scrapeTitle(header);
            var cc = c.createCommentContainer();
            header.appendChild(cc);
            var sc = c.createStarContainer();
            header.appendChild(sc);
            entries.push({
                uri: uri,
                title: title,
                star_container: sc,
                comment_container: cc
            });
        }
        return entries;
    }
},{
    getStarEntries: function() {
        var url = Hatena.Star.BaseURL + 'entries.json?';
        for (var i = 0; i < this.entries.length; i++) {
            if (url.length > Ten.JSONP.MaxBytes) {
                new Ten.JSONP(url, this, 'receiveStarEntries');
                url = Hatena.Star.BaseURL + 'entries.json?';
            }
            url += 'uri=' + encodeURIComponent(this.entries[i].uri) + '&';
        }
        new Ten.JSONP(url, this, 'receiveStarEntries');
    },
    receiveStarEntries: function(res) {
        var entries = res.entries;
        if (!entries) entries = [];
        for (var i = 0; i < this.entries.length; i++) {
            var e = this.entries[i];
            for (var j = 0; j < entries.length; j++) {
                var se = entries[j];
                if (!se.uri) continue;
                if (encodeURIComponent(se.uri) == encodeURIComponent(e.uri)) {
                    e.bindStarEntry(se);
                    entries.splice(j,1);
                    break;
                }
            }
            if (typeof(e.can_comment) == 'undefined') {
                e.setCanComment(res.can_comment);
            }
            e.showStars();
            e.showCommentButton();
        }
    }
});

/* Hatena.Star.WindowObserver */
Hatena.Star.WindowObserver = new Ten.Class({
    initialize: funct


  

2007-07-11

はてなスターソースコードの最後に更新履歴が載ってた

2007-07-11 v1.2 Release version

2007-05-30 v1.1 Added fold stars feature

2007-03-29 v1.0 Changed screens using Ten.SubWindow, you can d&d!

2007-03-28 v0.9 Changed Hatena.* classes to Ten v0.05.

2007-03-25 v0.8 Fixed Safari popup problem

2007-03-22 v0.7 Added active state to comment buttons

2007-03-21 v0.6 Added Comment function

2007-03-05 v0.5 Changed uri to Ridge-based paths.

2007-01-24 v0.4 Added Hatena.Diary.Entry class,

Changed Hatena.Star.Entry methods using class method

Added author parameters.

2007-01-23 v0.3 Added Hatena.Star.User class, added Hatena.js, Hatena.Star.js compatibility

2007-01-06 v0.2 Changed name spaces. Using Hatena.*, Hatena.Star.*

2007-01-05 v0.1 Initial version

4月前に大体出来てたって事かな

2007-06-30

親韓派のための弁明 メモ

気になって調べてみた。

  • 概要

ニコニコ動画にて、動画に批判的なコメントをつけていく人(コテハン)。ひとつの動画につき1時間くらい粘ってコメントをつけているときもある。現在名前欄がなくなったためコメ欄に「弁明:」といれてコメントしている。

(元からコメ欄に名前を入れていた)

  • 人物

ランキング上位にあるニコニコ動画で、自分の嫌いな物にコメントをつける。

大量のアンチがいるが、賛同者もいる(少ないけど)

ニコニコでの主な活動時間は昼から夕方くらい。

別のID動画を作っており、結構が人気ある(自称)。

VIPPER代表(自称・下記)

腐女子(&腐女子動画)が嫌い

らき☆すたが好き。

中川祥子が嫌い (動画へのコメントから)

最近VIPはゆとりがおおい(動画へのコメントから)

中国への抗議デモの計画が、左翼プロ市民の手によって中国への謝罪デモとして利用されそうになりました。で活躍。主催者側として)(ひやかしで)

特に親韓と言うわけでもない様子。(推測)

  • 名前の由来

459 名前: 弁明 ◆.D/zcJW.4g :2007/06/11(月) 03:01:26 ID:kQWhl2h8

やはり、この質問が多いなwもう少し詳しく書くわww

5年前に『親日派のための弁明』の

日本語版(金完燮著、荒木和博・荒木信子訳、草思社刊、2002年)が話題になったことがある。

著者は韓国人でありながら、戦前日韓併合を評価したり、

靖国参拝を容認するなど、およそ韓国人らしからぬことを書いていたわけだ( ^ω^)

内容の是非は置いておくとして、あの国でそんなもの発表したらフルボッコ

それでも発表した心意気に感心&『親韓派のための弁明』さえも

韓国人にも嫌われる韓国人m9(^Д^)プギャー」で終了させる嫌韓厨の当てつけとして、

親韓派のための弁明を名乗り出した( ^ω^)まあ昔の話だwww


動画うpニコニコ人気低下→俺が華麗に批評→糞動画死亡www→ニコニコ人気回復\(^o^)/

動画作者に対する激励(自称)

  • 年齢 25らしい。 

382 名前: no name :2007/06/06(水) 05:48:15 ID:weKXRrUY

べんめいさんってなんさいですか

384 名前: 弁明 ◆.D/zcJW.4g :2007/06/06(水) 08:06:15 ID:Uyi6GdvB

>>382

俺や他の俺の書き込みを見る奴は、どいつも自分より年下だと思うはず( ^ω^)www

強いていうなら2525かな?( ^ω^)ニコニコ

あと他の書き込みからみると、

639 名前: 弁明 ◆.D/zcJW.4g :2007/06/21(木) 08:34:03 ID:gQB3NC7F

>>633

昔、BM98をプレイしていたくらいだぞwwbeatmaniaはほとんどやってねぇ

音ゲーは苦手でな、STGと同じくらいヘタレなんだわw

音自体は好きなのがあるけどな。

古いが、ヴィヴァルディ四季「冬」第一楽章アレンジしたVとかな( ^ω^)www

BM98が出たのは1998年8月。その後開発が継続的に行われ2002年前後まで結構流行っていた。近年ではBMSと言う名前で呼ばれておりBM98と呼称する人は昔の人。2001年中学生のときにやっていたとしても18。高校大学なら20を超える。

またらきすたの好きな理由を聞かれて

376 名前: 弁明 ◆.D/zcJW.4g :2007/06/05(火) 08:04:37 ID:pawir4P/

>>371

こなたヲタ

ToHeartつかさ

白石かわいいよ白石

のようにTo Heart(発売日1997 PSは1998)の名前や他にも、KANON(1999発売)ONE(1998)の名前を使っているので、1998年ごろには18以上、少なくとも高校生であったのではないかと思われる。すると本人が言っているように現在25-28くらいが妥当か。 30を超えている可能性もあるけど。

平日の真昼間からコメントをつけている。またスレには夜来て回答しているので、夜の仕事というわけでもないようだ。

本人はニートと答えている。

716 名前: no name :2007/06/23(土) 03:02:48 ID:WQZLaYi0

で、弁明ってニートなのか?そうじゃないのか?

教えてくれ。

728 名前: 弁明 ◆.D/zcJW.4g :2007/06/24(日) 13:04:15 ID:VMhYrgs2

>>716

この星で生きている俺、地球ニート( ^ω^)www

寄生獣からの引用らしい

932 名前: 弁明 ◆.D/zcJW.4g :2007/07/01(日) 19:56:21 ID:F0+dI5xS

癖になるから直せ( ^ω^)社会人さんwww

この発言からやはり社会人ではない様子。

  • まとめ

25歳なら・・・働いてください。

高校生なら・・学校は? でも年相応

中学生なら・・年相応すぎる で学校は?

大学生なら・・やはりこのあたりなのかなあ

VIPPER代表と言い切るのはすごい。

 コメントに主義主張は無く好き嫌いだけで判断している。 「MAD音楽作成者を尊重しよう」のようなコメントと、「本当の著作権者に」などとコメントをつけるダブルスタンダード

 MADを元にさらにMADを作り直す行為が嫌い。だが、敬意や熱意が払われていたりすればOKのようだ。MAD作成者に敬意や熱意があるかどうかは弁明の中で判断されるものなので他人の意見は聞かない。 一次著作者のことも考えているようなコメントも残しながら、著作権問題でアンチ運動も展開すると話しているので不思議( ^ω^)www

  • その他

ユーザ同士の質問&交流掲示板 弁ちゃんとの語り場

http://bbs.nicovideo.jp/test/read.cgi/question/1179551305/

159 名前: 便銘 ◆VIPPERFLA. :2007/05/21(月) 03:41:34 ID:znneUJn6

( ^ω^)と草の使い方が気持ち悪い

164 名前: 弁明 ◆.D/zcJW.4g :2007/05/21(月) 08:40:15 ID:0YZXfItG

>>159

さーせん( ^ω^)www許してwww( ^ω^)

一応VIPPER代表なんでwwwwwっうぇww

198 名前: no name :2007/05/22(火) 01:50:48 ID:JsbPwgIm

つーか弁明はニコニコを良くしていこうとか言ってるが

ID偽装までして人の動画を貶してるのにニコニコ貢献してると思ってるのか?

199 名前: 弁明 ◆.D/zcJW.4g :2007/05/22(火) 02:03:12 ID:OFeYNImp

>>198

動画うpニコニコ人気低下

→俺が華麗に批評→糞動画死亡www→ニコニコ人気回復\(^o^)/

質問があればどうぞ( ^ω^)

247 名前: 弁明 ◆.D/zcJW.4g :2007/05/22(火) 23:26:55 ID:OFeYNImp

とりあえず当面の予定

オミのID表示、NG機能の停止、偽装再可能になるまでKOOLに活動停止。

正直今回の処置は致命的っすねw一気にNGID・WORD導入なら納得しましたがw

このようなやり方をされるとは怒りを禁じえない(`・ω・´)

糞運営がマナー違反のルールいじりをしたせいで、

ID晒し問題が解決されることは二度とないでしょうww

動画に批判コメントをいれれば、真っ先に作者に晒し者にされ、

他の動画コメントしても罵倒されるニコニコになりますた(´・ω・`)

上位動画らき☆すた以外の糞MAD(厨戯王・ハルヒなど)で埋め尽くされます、

必死に動画を作っている作者さん、あなた達よりずっと短い時間で作った

動画のほうが評価される時代がきました、必死に作るのはやめたほうがいいですよ( ^ω^)www

まあ、まだ全て見ていない動画があるので、別IDで潜ってますw

↑に書いたように、公式にNG機能が搭載されたら

正式に引退しますからwww楽しみにしてくださいねw

最後に、有料化しても俺は絶対に金を払いませんwww

むしろ、著作権関連で粘着的にアンチ運動展開するので覚悟してくださいねw

せっかく今まで擁護してやったのに……糞運営め覚えてろ( ^ω^)www

291 名前: 弁明 ◆.D/zcJW.4g :2007/06/02(土) 15:12:06 ID:R5KoVGOV

さて、5月23日ぶりだな( ^ω^)

潜伏期間普通コメントしていたら、本当誰も気付かないのなww

GID・WORD機能はオミ任せにするようで、導入される気配がなさげ。

というわけで、導入されるまでオミ使えない奴等相手に、もういっちょ遊ぶことにするわ(^ω^)www

また質問受け付けるからよろしくwww( ^ω^)

294 名前: 弁明 ◆.D/zcJW.4g :2007/06/02(土) 15:32:00 ID:R5KoVGOV

>>279

NGされても続けられるが、偽装できなければIDで弾かれるだけの負け戦だよなww

それが嫌だったってのはあるw

だが、ニコニコがNG機能搭載するまで

あるいは、全員がオミ導入して俺を弾くまで続けることにするわwww

潜っている間分かったが、オミ使えないやつらは結構いるしなww

日中友好市民運動観測所 25ヶ所目【平和祈願】

http://tmp4.2ch.net/test/read.cgi/asia/1113724727

謝るべんちゃん この件が釣りでしたと宣言して現場を混乱させたことの謝罪らしい。

566 弁明 ◆.D/zcJW.4g New! 2005/04/17(日) 21:02:51 ID:PffFZWtZ

今回の件は、何回もいっているけれど釣り

主催側の奴等は代表が手続き(許可申請・ダライとか)をしたようにいっていたけれど、

ほとんど副代が取り仕切っていたはず。

それが失敗したのと、代表のメールアドレス職業右翼に突っ込まれたので釣りということにした。

右翼街宣車については本当に知らない、警官は街宣車を見て増員したのだろうな。

代表は塩沢ではないし鶴田でもない、名前を借りただけのP研に怨みのある奴等だと思う。

ただ、これだけはいっておく。

決して、2ちゃんねらー親中に見せかけようとしたわけではない。

本当に平和デモを目指すはずだったらしい。

結果的に、不快感を与えてしまったことは詫びてもいいかなと思っている。

MSNメッセンジャーに関しては本当に関係ないし、

画像のアップは関係のない人に迷惑をかけるのでどうかやめて欲しい。

今回の責任を取って、代表は大規模OFFには姿を現すことはないと思う。

俺も散々煽って申し訳なかった、

ただ、2ちゃんねらー政治利用されることに対する警鐘になれば、

決して悪い事ばかりではなかったと思う。

もう本当に何も起こらないので、皆さんゆっくり休んでください。

この文章が本当に最後です、すみませんでした。

ログが見当たらずこれだけのため真意は不明。本人によると違うらしい。

  • 対応

オミトロン - Google 検索の導入(IE

コメント非表示

コメントを投下して流す

  • もしコメント中にであったらやってみてほしいこと。

仕事は何をしているのか聞いてみる。

・本当はいくつなのか聞いて見る。

・お母さんは元気か聞いて見る。(諸刃の剣

年収を聞いて見る。

VIPPER代表ってすごいですね と褒めてみる。

永井先生と対決してほしい とお願いする。

932 名前: 弁明 ◆.D/zcJW.4g :2007/07/01(日) 19:56:21 ID:F0+dI5xS

・もしコメント中に…… × メモを書き直せwww

あまり聞いてほしくないことのようだ。

  • このメモに対する反応

932 名前: 弁明 ◆.D/zcJW.4g :2007/07/01(日) 19:56:21 ID:F0+dI5xS

>> 俺のメモ を書いている奴へ( ^ω^)www

・概要 ○ 名前欄は元々使っていないけどなw

・人物 △ 大きな間違い1つあり、萎えた。

目的 × 俺以外には分からないことだwww

・年齢 △ 「2525(ニコニコ)→年齢が25」

      「年齢制限を守っている」「発売年にプレイした」の思い込み。

      「好きなキャラ」を質問されたのではない。BMはおk

職業 △ 冗談通じないってのは分かった( ^ω^)www

・まとめ △ いや……不思議で締めくくられてもw

・その他

 ・弁ちゃんとの語り場 △ 引退宣言だけ載せるなw勘違いされるw

 ・市民運動 × 本当に読んだのか?

 ・対応 ○ それしかないwww

 ・もしコメント中に…… × メモを書き直せwww

 ・蛇足 △ 組曲のことだろ? 散々レスしたからもういいよな( ^ω^)

まとめについては、別スレの奴等のほうがうまかったww

読みながら思ったが、全体を読まずに引用しているな。

面倒くさいから、手を抜いているのだと思うが、

癖になるから直せ( ^ω^)社会人さんwww

  • 蛇足

一次著作を無視してつくられた二次著作物を使用した三次著作物で、三次の作者に対して「二次の作者に対して失礼だ」のような文句を言う人たちはちょっと変。 作られた作品に対して文句を言うのは問題ないと思う。

前にまとめた藤崎さん。

http://anond.hatelabo.jp/20070220213817

過去ログ

http://briefcase.yahoo.co.jp/bc/umashika1234/lst?.dir=/%a5%de%a5%a4%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8&.order=&.view=l&.src=bc&.done=http%3a//briefcase.yahoo.co.jp/

2007-06-22

javascriptを理解するためのたった2つの大切なこと:改

9割ぐらいはハッシュ

何がハッシュなのか

javascript存在するほとんどオブジェクトの実体はハッシュだよ。

var arr = [0,1,2,3];

とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。

これは

var has = {0:0,1:1,2:2,3:3};

と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。

ためしに

arr[4] = 4;
arr['x'] = 'string';
arr[-1]  = -1;

としてみよう。

Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。

でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。

それどころかarr.xで'string'がかえってくるんだ。

別の例を見てみよう。

var fx = function(){};
fx[0] = 'somestring';

こうするとfx[0]に'somestring'が束縛される。

つまりfunctionも一つのハッシュだったんだ。

これでほとんどのものがハッシュだということが解ってくれたかな?

ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。

ハッシュへのアクセス

ハッシュへはhash[name]でアクセスすることが出来る。

それ以外にもname演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。

これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。

関数のあれこれ

無名関数

関数には名前を付けなくても使用可能だよ。

function(x){return x+x}(2); -> 4
宣言文

関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?

function funcname(args){ do something};

でもこれはsystax sugerだってことを知ってほしい。

上でも使ってるんだけど。

var funcname = function(args){ do something};

等価になる。もちろんどちらの書き方でもかまわないよ。

ただ、(無名)関数を宣言してそれをfuncnameに束縛しているっていうことを理解しておくと便利だよ。

スコープ closure

javascriptレキシカルスコープを採用してるんだ。

レキシカルスコープなんていうと難しく感じるかもしれないけど、結構単純なんだ。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){var x = 'local';return x}

これの実行結果は以下になるよ。

fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'global'

fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。

でも以下のような場合に注意してほしいな。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){x = 'local';return x}
fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'local'

fx2は自分のスコープ変数xがないからその外側スコープに探しに出かけたんだ。

つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。

別の場合を見てみようね。

var x = 'global';
var fx1 = function(){
  var x = 'local';
  return function(){return x}
};
var fx2 = fx1();
x -> 'global'
fx2() -> 'local'

この例だとfx2()の値がlocalになってるね。

なぜなら外側スコープっていうのは関数を評価した場所じゃなくて、関数を定義した場所の外側なんだ。

関数は返り値として関数ハッシュを指定できるよ。

一つ上の例では実際に関数を返り値にしているね。

戻り値関数を指定するとこんなことが出来るよ。

var fx1 = function(){
  var x = 0;
  return function(){
    x = x+1;
    return x;
  }
};
var fx2 = fx1();
var fx3 = fx1();
fx2() -> 1
fx2() -> 2
fx2() -> 3
fx3() -> 1
fx3() -> 2

fx2とfx3の値が違うのはそれぞれ別の関数が作られるからだよ。

こんな風に関数が状態を持つことも出来るんだ。クロージャーとよんだりするよ。

関数ハッシュを使って複数の関数を返すとこんなことも出来るよ。

var fx = function(){
  var x = 0;
  return {
    'up':function(){
      x = x+1;
      return x;
    },
    'down':function(){
      x = x-1;
      return x;
    }
  }
};
var obj = fx();
obj.up(); -> 1
obj.up(); -> 2
obj.down(); -> 1
obj.down(); -> 0

最後に一度ハッシュについてもうちょっとだけ。thisのはなし。

thisという機能があるよう。ちょっとだけつかってみるね。

var x = 0;
var add = function(n){this.x = this.x + n; return this.x};
var mul = function(n){this.x = this.x * n; return this.x};
var obj = {'x':0,'do':add};
add(1);   -> 1
add(1);   -> 2
mul(2);   -> 4
obj.do(); -> 1
obj.do(); -> 2
obj.do = mul;
obj.do(); -> 4

thisは評価された場所によって値がかわるよ。

objの中にいるときはobj.xを扱うし、グローバルにいるときはグローバルのxを扱うんだ。

http://anond.hatelabo.jp/20070620200618を改訂してみたよ。

このぶんしょうがjavascriptを覚える上の一助になるとうれしいんだ。

あとここでつかってるハッシュ伝統的な意味連想配列のことね。

突っ込みも大歓迎だよ。

2007-06-20

javascriptを理解するためのたった2つの大切なこと

9割ぐらいはハッシュ

何がハッシュなのか

javascript存在するほとんどオブジェクトの実体はハッシュだよ。

var arr = [0,1,2,3];

とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。

これは

var has = {0:0,1:1,2:2,3:3};

と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。

ためしに

arr[4] = 4;
arr['x'] = 'string';
arr[-1]  = -1;

としてみよう。

Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。

でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。

それどころかarr.xで'string'がかえってくるんだ。

別の例を見てみよう。

var fx = function(){};
fx[0] = 'somestring';

こうするとfx[0]に'somestring'が束縛される。

つまりfunctionも一つのハッシュだったんだ。

これでほとんどのものがハッシュだということが解ってくれたかな?

ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。

ハッシュへのアクセス

ハッシュへはhash[name]でアクセスすることが出来る。

それ以外にもname演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。

これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。

関数のあれこれ

スコープ

javascriptレキシカルスコープを採用してるんだ。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){var x = 'local';return x}

これの実行結果は以下になるよ。

fx1() -> 'global'

fx2() -> 'local'

fx1() -> 'global'

fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。

でも以下のような場合に注意してほしい。

var x = 'global';
var fx1 = function(){return x};
var fx2 = function(){x = 'local';return x}

fx1() -> 'global'

fx2() -> 'local'

fx1() -> 'local'

fx2は自分のスコープ変数xがないからその外側スコープに探しに出かけたんだ。結果fx

つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。

宣言文

関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?

function funcname(args){ do something};

でもこれはsystax sugerだってことを知ってほしい。

上でも使ってるんだけど。

var funcname = function(args){ do something};

等価になる。もちろんどちらの書き方でもかまわないよ。

ハッシュを返す関数関数を返す関数。closureとthis

関数は返り値として関数ハッシュを指定できるよ。次のハッシュを返す関数を見てみよう。

var fx = function(){
  var x = 0;
  return {
    'x':x,
    'add1':function(y){this.x = this.x+y;return this.x},
    'add2':function(y){x = x+y;return x}
  }
}
var obj = fx();

実行結果を見てみよう

obj.x -> 0
obj.add1(0) -> 0
obj.add1(0) -> 0

obj.x -> 0
obj.add1(1) -> 1
obj.add1(0) -> 0
obj.x -> 1

obj.x -> 1
obj.add1(0) -> 1
obj.add1(2) -> 2
obj.x -> 1

となる。

add1はthis.xにたいして演算をしている。つまり返された値が変化しているんだ。

add2は関数fxに閉じ込められた値に対して演算している。つまりこれらは別の値なんだ。

とここまでかいたら疲れた。

読んでくれた人ありがとう

追記

落書きのつもりでかいたんだけどブクマがついててびっくり。

ちゃんとまとめてなかったし、自分のブログに描いても見てくれる人はいないから増田に書いてみたよ。

ほかの言語技術についても同じような解説が欲しかったら何らかの方法で言及してくれるとうれしいな。

さらに追記

ここまではてブが300突破してるみたいだけどいま、自分のブログリンクを張ったら増田に書く意味がなくなるんじゃないかと思うんだ。

やらないけど。

こんなのもかいてみたよ、増田で。 http://anond.hatelabo.jp/20070621153600

2007-06-17

増田トラックバックしている増田記事を消すgreasemonkeyスクリプト

最近どうも増田が見にくいのは割とどうでもよさげなトラックバックがいっぱいあるからじゃないだろうか、と思って書いた。

トラックバックを見たい場合は元記事の右下のトラックバッククリックする。

// ==UserScript==
// @name        kill masuda TB
// @description kill masuda TB
// @namespace   http://anond.hatelabo.jp/
// @include     http://anond.hatelabo.jp/
// @include     http://anond.hatelabo.jp/?page=*
// ==/UserScript==

(function(){
  divs = document.getElementsByTagName('div');
  for(i = 0; i < divs.length; ++i){
    if(divs[i].getAttribute('class') == 'section'){
      if(divs[i].getElementsByTagName('h3')[0].innerHTML.match(/Re:/) ||
         divs[i].innerHTML.match(/href=\"http:\/\/anond/) ||
         divs[i].innerHTML.match(/anond:\d{14}/)){
        divs[i].innerHTML = '';
      }
    }
  }
})();

割とどうでもよさげなトラックバック、きみが消えたらますだががらんとしちゃったよ……。

2007-06-15

同人サイトはじめて三年ぐらいだけど

検索避け意識したのは一年ぐらいあとかな。

理由は関係ない一般人がショックを受けないようにするためより、検索で情報を探す人にどうでもいい創作物がかからないようにするためっていう割合の方が大きかったけど。

(作品そのものの情報が欲しいのに、同人サイトサイト名あるいは注意書きに入ったジャンル名で検索上位にきて邪魔なときがある)

検索避けにこだわる人にかぎって、無料鯖メタタグしか知らないサイトも多いんだよなあ。

には同意。

そういう人たちは、表示義務のある広告無駄な改行で下のほうに追いやったり、CSSリンク色を背景色に紛れ込ませたり、#name指定で見えないようにしてしまったりしている率も高い気がする。

http://anond.hatelabo.jp/20070615155505

追記

あと、作品名じゃなくて一般的な語句で検索にかかるのはトップページじゃなくて作品ページそのものだしね。

2007-06-12

言及ボタンをつけるgreasemonkeyスクリプト

http://anond.hatelabo.jp/20070612072957

↑はコメントアウトを外すだけで、いつ使えなくなるかちょっとアレ

というわけでせっかくだから各記事のタイトルの横にリンクを追加するようにした。

下のidをmasudaから自分のものに変えて使う。

タイトルの横に ← が追加されるので、クリックして言及しまくればいいんじゃないでしょうか。

// ==UserScript==
// @name        add masuda reference button
// @description add masuda reference button
// @namespace   http://anond.hatelabo.jp/
// @include     http://anond.hatelabo.jp/*
// @exclude     http://anond.hatelabo.jp/*/edit*
// ==/UserScript==

(function(){
  id = 'masuda';
  titles = document.getElementsByTagName('h3');
  for(i = 0; i < titles.length; ++i){
    d = titles[i].innerHTML.match(/\d{14}/);
    titles[i].innerHTML += '<a href="http://anond.hatelabo.jp/' + id + '/edit?title=Re: [anond:' + d + ':title]" class="edit">\u2190</a>';
  }
})();

http://anond.hatelabo.jp/20070612004853

greasemonkeyにした

// ==UserScript==
// @name        delete masuda comment
// @description delete masuda comment
// @namespace   http://anond.hatelabo.jp/
// @include     http://anond.hatelabo.jp/*
// ==/UserScript==

(function(){
  document.body.innerHTML = document.body.innerHTML.replace(/<!--/g,' ').replace(/-->/g,' ');
})();

2007-06-08

ついカッとなってやった

20070629230000改定

20070702125800バグ発見スクリプト中にある「&&」が、「&amp;&amp;」になっている。増田仕様らしい。

20070827224900改定

// ==UserScript==
// @name	anond pickup
// @namespace	http://anond.hatelabo.jp/20070608230645
// @description	pickup trackback tree top section at Hatelabo::AnonymousDiary
// @include	http://anond.hatelabo.jp/*
// ==/UserScript==
(function() {
	var threshold_bm = 1;
	var threshold_tb = 1;
	var ignoreList = {
		"/20070801172335": 33,
		"/20070806163721": 10,
	};
	var firstPager_l = document.evaluate("//div[@class='pager-l']",document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;

	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);
		if (GM_getValue("visible", 0)) {
			this.visible();
		} else {
			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";
		GM_setValue("visible", 1);
	}
	Hide.prototype.unvisible = function() {
		this.style.innerHTML = "div.hide {display: none}";
		this.a.visible.style.display = "inline";
		this.a.unvisible.style.display = "none";
		GM_setValue("visible", 0);
	}
	Hide.prototype.append = function(section) {
		if (section.className.match(/hide/)) {
			return;
		}
		section.className += " hide";
	}
	Hide.prototype.clear = function(section) {
		section.className = section.className.replace(/ hide/g, "");
	}
	Hide.prototype.is = function(section) {
		return section.className.match(/hide/);
	}
	var hide = new Hide();
	hide.setup();

	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);
			bookmark(tb, 0);
		} else if (! hide.is(tb.parentNode.parentNode)) {
			trackback(tb, 1);
		} else {
			bookmark(tb, 1);
		}
	}

	function trackback(tb, callback) {
		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 < threshold_tb) {
					tb.innerHTML = tb.innerHTML.replace(/\)$/, "/"+n+")");
					if (callback) {
						bookmark(tb);
					}
				} else {
					tb.innerHTML = tb.innerHTML.replace(/\)$/, '/<span style="color: red;">'+n+"</span>)");
				}
			}
		});
	}

	function bookmark(tb, callback){
		GM_xmlhttpRequest({
			method: "GET",
			url: "http://b.hatena.ne.jp/entry/rss/http://anond.hatelabo.jp/" + tb.pathname.match(/\d{14}/),
			onload: function(result) {
				var r = result.responseText.match(/<rdf:li rdf:resource=/g);
				if (r &amp;&amp; r.length >= threshold_bm){
					hide.clear(tb.parentNode.parentNode);
					if (callback) {
						trackback(tb);
					}
				} else {
					hide.append(tb.parentNode.parentNode);
				}
			}
		});
	}
})();

今はスッキリしているのは古いやつ

/// ==UserScript==
// @name	anond pickup
// @namespace	http://anond.hatelabo.jp/20070608230645
// @description	pickup trackback tree top section at Hatelabo::AnonymousDiary
// @include	http://anond.hatelabo.jp/*?page=*
// ==/UserScript==
(function() {
	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++) {
		target.snapshotItem(i).style.display = "none";
	}

	var trackback = document.evaluate(
		"//p[@class='sectionfooter']/a[2]",
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null);
	for(var i=0; i<trackback.snapshotLength; i++) {
		if (trackback.snapshotItem(i).innerHTML == "\u30c8\u30e9\u30c3\u30af\u30d0\u30c3\u30af(0)") {
			trackback.snapshotItem(i).parentNode.parentNode.style.display = "none";
		} else if (trackback.snapshotItem(i).parentNode.parentNode.style.display != "none") {
			count(trackback.snapshotItem(i));
		}
	}

	function count(tb) {
		GM_xmlhttpRequest({
			method: "GET",
			url: "http://anond.hatelabo.jp/" + tb.getAttribute("href").match(/[0-9]{14}/),
			onload: function(result) {
				var n = result.responseText.replace(/\n/g,"").match(/<a name="tb">.*/)[0].match(/<li>/g).length;
				if (n < 10) {
					tb.innerHTML = tb.innerHTML.replace(/\)$/,"/"+n+")");
				} else {
					tb.innerHTML = tb.innerHTML.replace(/\)$/,'/<span style="color: red;">'+n+"</span>)");
				}
			}
		});
	}
})();

2007-06-01

トラックバックツリートップのエントリ以外を表示しない

っていうユーザースクリプト作ったよ。これ使うととってもすっきり。Re: 増田の読み方ってどうしてますか?と組み合わせればめちゃめちゃすっきり。

// ==UserScript==
// @name	anond unvisualizer with innerlink
// @namespace	http://anond.hatelabo.jp/
// @description	unvisualize specific section at Hatelabo::AnonymousDiary
// @include	http://anond.hatelabo.jp/*
// ==/UserScript==
(function() {
	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++) {
		target.snapshotItem(i).style.display = "none";
	}
})();

仕組みは増田エントリへのリンクがあるエントリを日表示にしてるだけだよ。xpath超便利。

だから、ツリートップのエントリリンクを追記すると消えちゃう!でも気にしない!!

2007-05-28

Re: 増田の読み方ってどうしてますか?

// ==UserScript==
// @name	anond unvisualizer
// @namespace	http://anond.hatelabo.jp/
// @description	unvisualize specific section at Hatelabo::AnonymousDiary
// @include	http://anond.hatelabo.jp/*
// ==/UserScript==
(function() {
	var target = document.evaluate(
		"//p[@class='sectionfooter']/a[2]",
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null);
	for(var i=0; i<target.snapshotLength; i++) {
		if (target.snapshotItem(i).innerHTML == "\u30c8\u30e9\u30c3\u30af\u30d0\u30c3\u30af(0)") {
			target.snapshotItem(i).parentNode.parentNode.style.display = "none";
		}
	}
})();

あと、ツリー元検索時、同じくユーザスクリプトで外部リンクを強調すると読み飛ばしが減るかも知れない。←そのうちやるかも

2007-05-17

Re: NGワードを含むエントリをあぼんするGreasemonkey

// ==UserScript==
// @name	unvisualizer
// @namespace	http://anond.hatelabo.jp/
// @description	unvisualize section including specific word at Hatelabo::AnonymousDiary
// @include	http://anond.hatelabo.jp/*
// @exclude	http://anond.hatelabo.jp/hatena/*
// ==/UserScript==
(function() {
	var target = document.evaluate(
//		"//div[@class='section' and contains(descendant::text(),'\u3042\u307c\u3093')]",
		"//div[@class='section' and descendant::*[contains(text(),'NG') or contains(text(),'2ch')]]",
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null);
	for(var i=0; i<target.snapshotLength; i++) {
		target.snapshotItem(i).style.display = "none";
	}
})();

キーワードべた書きだけど、とりあえずこんな感じで。

ただ、日本語がよくわからん。xpathって日本語だめ?'\u3042\u307c\u3093'って「あぼん」だよね?

コメントアウトしてあるやつもなんで駄目なのかわかんない。xpathよくわからん。

おして!エロイ人><

[追記]

念のため、excludeに自分のID以下のページを入れといた方が良いかもね。

その他、好きにして。

2007-05-08

http://anond.hatelabo.jp/20070508231143

あらら。.tv ドメインって救済処置ちゃんとしてたっけ? .jp とか .com とかはちゃんとしてるけど。まあそれでもレジストリの話であって、レジストラがクソだとすぐに対応してくれなかったりするんだよな。VALUE DOMAIN で .name を取ってうっかり失効させちゃって、えらい目にあったことがある。

2007-04-20

[]RubyRuby on Rails

Ruby RDoc Documentation

rubyとは - はてなダイアリー Rubyとは - はてなダイアリー

はてなブックマーク - はてな - Rubyとは

「ruby」を含む日記 - はてなダイアリー

Ruby

「Ruby」に関する画像、動画、ブログ記事のタグ検索結果

Google ブログ検索

買売システム開発記録とか何とか

Rubyで投資システムを作る日記

spacecadetの日記

RubyForge: One-Click Ruby Installer: Project Info

RDE(Ruby Development Environment) - Ruby??J??????????

#!/usr/bin/ruby -Ks

# print "Content-Type: text/html;charset=UTF-8\n\n"

p "表示"


Rails Rails Framework Documentation

http://127.0.0.1/mysql/

http://127.0.0.1:3000/ http://127.0.0.1:3000/recipe/list

http://127.0.0.1:3001/ http://127.0.0.1:3001/recipe/list

http://127.0.0.1:3001/account/signup http://127.0.0.1:3001/test

http://127.0.0.1:3001/item

Hot Chips (delete) Snacks 2004-11-11

Ice Water (delete) Beverages 2004-11-11

Killer Mushrooms (delete) Snacks 2005-09-13

満足せる豚。眠たげなポチ。:Rolling with Ruby on Rails - Japanese Translation - p1

満足せる豚。眠たげなポチ。:Rolling on Ruby on Rails - Japanese Translation - p5

BookmarkOnInstantRails

ITmedia エンタープライズ:第1回 Instant Railsで始めるWindows環境のRails (1/2)

developerWorks Japan

developerWorks Japan

DROP TABLE IF EXISTS `items`;

CREATE TABLE items (

id int(11) NOT NULL auto_increment,

login varchar(80) default NULL,

password varchar(40) default NULL,

PRIMARY KEY (id)

);

えぇてるのぉと:Railsでログイン認証 - livedoor Blog(ブログ)

8 app/views/test/index.rhtmlの編集

<h1>Test#index</h1>

Welcom <%= @session['user'].login %>!

Login Generator (1) - Nowhere Near

config/environment.rb に以下の行を追加する。

module LoginEngine

config :salt, "your-salt-here"

end

Engines.start :login

http://techno.hippy.jp/rorwiki/?Wiki%A4%F2%BA%EE%A4%C3%A4%C6%A4%DF%A4%EB%2F%A5%E6%A1%BC%A5%B6%A1%BC%A4%F2%C7%A7%BE%DA%A4%B9%A4%EB

パパブログ: RoR : login_generator : login中のユーザ情報の取得

@session['user'].id

@session['user'].login

@session['user'].password

で、idやloginが取得できる。

ちなみにidActiveRecordおなじみのidで、

loginがログイン名、passwordパスワードになる。


MySQL-Front download

環境変数

;C:\nonidata\InstantRails\ruby\bin;

cd C:\nonidata\InstantRails\ruby\bin

C:\nonidata\InstantRails\ruby\bin>gem install login_generator

Successfully installed login_generator-1.2.2

C:\nonidata\InstantRails>cd C:\nonidata\InstantRails\rails_apps\cookbook

C:\nonidata\InstantRails\rails_apps\cookbook>ruby script/generate login Account

create lib/login_system.rb

C:\nonidata\InstantRails\rails_apps>cd C:\nonidata\InstantRails\rails_apps\cookbook

C:\nonidata\InstantRails\rails_apps\cookbook>ruby script/generate controller test

exists app/controllers/

[Ruby] Rails(ActiveRecord)の多対多関連 - yuum3のお仕事日記

has_one

has_many

belongs_to

has_and_belongs_to_many

habtm と has_many :through (ActiveRecord)

ヽ( ・∀・)ノくまくまー(2006-01-20)

ActiveRecord の歩き方 - Association 編(1) - Rails で行こう! - Ruby on Rails を学ぶ has_many :comments

developerWorks Japan  has_one :address

Rubyist Magazine - RubyOnRails を使ってみる 【第 3 回】 ActiveRecord

create メソッドを使うこともできます。create は new したあと save (DB に格納) します。


Rubyist Magazine - RubyOnRails を使ってみる 【第 4 回】 ActionPack

find(:all, :conditions => ["user_name = ?", user_name])

find_all(["user_name = ?", user_name])

find_all_by_user_name(user_name)


Part2 Rubyに学ぶ「Ruby on Railsの正体」:ITpro

book = Product.find_or_create_by_name_and_price('book', 2079)

リスト7●productsテーブルからnameが'book',priceが2079であるようなProductオブジェクトを読み取り,存在しなかった場合はデータベースレコードを新規作成する処理


RoR Wiki 翻訳 Wiki - HowToUseLegacySchemas

恣意的で複雑なクエリや、主キーを持たないテーブルにはfind_by_sqlを使う

テーブルが論理的な主キーを持たないなら、

find_by_sqlを使えば主キーを全く指定しない曖昧で複雑なクエリを実行も実行できる。

Post.find_by_sql ["SELECT * FROM posts WHERE author = ? AND created > ?", author_id, start_date]


エディタ utf8

文字化け

ヽ( ・∀・)ノくまくまー(2006-10-11)

チュートリアルを動かしてみる - 肩書「シニアコンサルタント」のつぶやき

Railsでソーシャルブックマークを作ってみようか(第1回) - 坊やがゆく

ようこそ<%= @session['user'].login %>さん

@session['user'].id


Railsでソーシャルブックマークを作ってみようか(第2回) - 坊やがゆく

Railsでお馴染み37signalsのURLが凄い件について:TKMR.blog.show

URLにキーワードを含めことでSEO対策になるかも、でもそれだけ:TKMR.blog.show

http://127.0.0.1:3001

http://127.0.0.1:3001/recipe/list

tetraの外部記憶箱 - Instant Railsのインストール , 追記:phpMyAdminの日本語環境設定 , 未踏ソフト記事

[Ruby]PHP VS Rails (Ruby on Rails)

2007-04-14

いまブラウザで見てるサイトURL自動的にtwitterに登録するgreasemonkeyスクリプト

// ==UserScript==
// @name           web footmark twitter
// @description    web footmark twitter
// @namespace      http://anond.hatelabo.jp/
// @include        *
// @exclude        http://twitter.com/*
// ==/UserScript==

(function(){
  GM_xmlhttpRequest({
    method : 'POST',
    url    : 'http://twitter.com/statuses/update.json',
    headers: {'Content-type': 'application/x-www-form-urlencoded',},
    data   : 'status=' + location.href,
    onload : function(res){ message('twittered!');},
    onerror: function(res){ message('Failed - ' + res.status + ': ' + res.statusText);},
  });
})();

上記内容でwebfootmarktwitter.user.jsみたいなファイル(拡張子user.jsなら名前は何でもいい)を作って、

Firefoxドラッグアンドドロップすると使えるようになる。

以降、Firefoxで表示したサイトURL勝手twitterに登録される。

初回登録時にユーザー名とパスワード入力するダイアログが出るのでtwitterのそれを入力すること。

有効にしていることを忘れてエロサイトばっか見ていることをおおっぴらにしてしまってギニャー!

みたいな事態にならないように気をつけてね!

2007-04-13

ASPファイル受信

'/** Requestオブジェクトから受信したデータを取り出します。
' * @return byte配列を格納した連想配列を返します。
' */
Function getRequestItem()

  If Request.TotalBytes <= 0 Then
    getRequestItem = Null
    Exit Function
  End If

  Dim data
  Dim separator
  Dim dataArray
  Dim buffer
  Dim filePath
  Dim fileName
  Dim ix
  Dim stringIndex
  Dim myCrLf
  Dim items
  Dim itemName

  myCrLf = convertAsc(vbCrLf)
  Set items = Server.CreateObject("Scripting.Dictionary")

  data = Request.BinaryRead(Request.TotalBytes)
  data = LeftB(data, UBound(data) - 3) & myCrLf

  separator = MidB(data, 1, InStrB(1, data, myCrLf) + 1)

  dataArray = SplitB(data, separator)

  For ix = 2 To UBound(dataArray) Step 1
   '1行読み込み
    buffer = MidB(dataArray(ix), 1, InStrB(1, dataArray(ix), myCrLf) - 1)

   'アイテム名の取得
    stringIndex = InStrB(1, buffer, convertAsc("name="))
    If stringIndex > 0 Then
      itemName = convertUnicode(MidB(buffer, stringIndex + 6, InStrB(stringIndex, buffer, ChrB(34)) - stringIndex))
     Else
      itemName = ""
    End If

   'ファイル名の取得
    stringIndex = InStrB(1, buffer, convertAsc("filename="))
    If stringIndex > 0 Then
      filePath = MidB(buffer, stringIndex + 10, InStrB(stringIndex, buffer, ChrB(34)) - stringIndex)
      fileName = RightB(filePath, LenB(filePath) - LastInStrB(0, filePath, convertAsc("\")))
     Else
      fileName = ""
    End If

   'データ部の取得、改行コードの切り捨て
    buffer = RightB(dataArray(ix), LenB(dataArray(ix)) - InStrB(1, dataArray(ix), myCrLf & myCrLf) - 3)
    buffer = LeftB(buffer, LenB(buffer) - 2)

    items.Item(itemName) = parseBytes(buffer)
  Next

  Set getRequestItem = items
  Set items = Nothing

End Function

'/** 文字列の最後尾から指定文字を検索します。
' * @param Start 検索する開始文字位置を指定します。
' * @param String1 検索対象の文字列を指定します。
' * @param String2 検索する文字列を指定します。
' */
Function LastInStrB(ByRef Start, ByRef String1, ByRef String2)

  Dim ix
  Dim lastIndex
  Dim searchLength

  searchLength = LenB(String2)
  lastIndex = LenB(String1) - searchLength + 1
  If Start > 0 And Start < lastIndex Then
    lastIndex = Start
  End If
  For ix = lastIndex To 1 Step -1
    If MidB(String1, ix, searchLength) = String2 Then
      LastInStrB = ix
      Exit Function
    End If
  Next

  LastInStrB = 0

End Function

'/** アスキー文字列に変換します。
' * @param String 対象の文字列を指定します。
' */
Function convertAsc(Byref String)

  Dim ix
  Dim ascii

  ascii = ""
  For ix = 1 To Len(String) Step 1
    ascii = ascii & ChrB(AscB(Mid(String, ix, 1)))
  Next

  convertAsc = ascii

End Function

'/** Unicode文字列に変換します。
' * @param AscString 対象のアスキー文字列を指定します。
' */
Function convertUnicode(Byref AscString)

  Dim ix
  Dim unicode

  unicode = ""
  For ix = 1 To LenB(AscString) Step 1
    unicode = unicode & Chr(AscB(MidB(AscString, ix, 1)))
  Next

  convertUnicode = unicode

End Function

'/** バイナリ対応版Split関数です。
' * @param String 対象の文字列を指定します。
' * @param Delimiter 区切り文字を指定します。
' */
Function SplitB(Byref String, Byref Delimiter)

  Dim ix
  Dim lastIndex
  Dim searchLength
  Dim start
  Dim datas()
  Dim dataIndex

  dataIndex = 1
  start = 1
  delimiterLength = LenB(Delimiter)
  lastIndex = LenB(String) - delimiterLength + 1

 '最初から1文字ずつ繰り返します。
  For ix = 1 To lastIndex Step 1
   'データを比較します。
    If MidB(String, ix, delimiterLength) = Delimiter Then
     'データを取り出せたら配列に格納します。
      ReDim Preserve datas(dataIndex)
      datas(dataIndex) = MidB(String, start, ix - start)
      dataIndex = dataIndex + 1
      start = ix + delimiterLength
    End If
  Next

  SplitB = datas

End Function

'/** Byte配列を返す関数です。
' * @param data 対象のデータを指定します。
' */
Function parseBytes(Byref data)

  Const adLongVarBinary = 205
  Dim recordset

  If LenB(data) <= 0 Then
    parseBytes = CByte(0)
    Exit Function
  End If

  Set recordset = Server.CreateObject("ADODB.Recordset")
  recordset.Fields.Append "UpLoadBinary", adLongVarBinary, LenB(data)
  recordset.Open
  recordset.AddNew
  recordset.Fields("UpLoadBinary").AppendChunk data
  recordset.Update

  parseBytes = recordset.Fields("UpLoadBinary").Value
  recordset.Close
  Set recordset = Nothing

End Function

2007-04-06

自分の名前のドメイン

自分の下の名前+.jp / .biz / .info / .name を持っている。

でも、.com / .net / .org は既に取られてる。

.comと.netは、sedoっていうドメイン売買会社が持っているみたいなんだけど、

買わない限り、期限切れで放出されるとかは無さそうな感じ。

.netが$488だそうな。悩むなー。.comと.net欲しいなー。

2007-04-03

FC6でXendom-Uを自動起動する方法

FC6で電源投入時にXendom-Uを自動起動する方法

xenの設定ファイルを/etc/xen/autoにシンボリックリンクする。

#ln -s /etc/xen/winxp /etc/xen/auto

ただし、設定が

vnc=0

sdl=1

だと起動しませんでした。

vnc=1

sdl=0

だときちんと起動しました。

実際に何をやっているのかは、

/etc/init.d/xendomains

/etc/sysconfig/xendomains

の中をを見てください。

今使っている設定です。参考までにどうぞ。

name = "winxp"

builder = "hvm"

memory = "1000"

disk = [ 'file:/images/winxp0.img,ioemu:hda,w','phy:/dev/sdb,hdc,w']

vif = [ 'type=ioemu, mac=00:16:3e:32:23:85, bridge=xenbr1', ]

uuid = "4e845bfa-ab42-9cbe-ff02-ff877a83ef25"

device_model = "/usr/lib/xen/bin/qemu-dm"

kernel = "/usr/lib/xen/boot/hvmloader"

vnc=1

apic=1

acpi=1

pae=0

sdl=0

vcpus=1

serial = "pty" # enable serial console

on_reboot = 'restart'

on_crash = 'restart'

boot='c'

#/etc/xen/autoで検索すると同じようなページが見つかる orz.

2007-03-28

Why?

Why are there a lot of people who bookmark blogs with a damn comment. And why they don't use their real name for it?

2007-03-24

[]今昔

anond:20070218150508のあと、 機能変更、お知らせなど - はてなブックマーク日記 - 3/19(月) のはてなブックマークのメンテナンスについて とかあったので、変化を調べてみた。

% diff resolve.old resolve.txt | grep '[<>]' | sort
< 125.206.202.66:       mgw.hatena.ne.jp.
< 61.196.246.69:        b.hatena.ne.jp.
< 61.196.246.70:        b.hatena.ne.jp.
> 59.106.108.71:        mgw.hatena.ne.jp.
> 59.106.108.72:        b.hatena.ne.jp.

?Bの他、関連のmgwも。着々と移転は進む。次はcounter辺りだろうか、それとも?Gとかだろうか。何にせよ、?Dの移転が最大の山場でしょうな。

以下メモ

% dig -f host.txt | grep '^[^;]' | awk '{print $5, $1}' | sort | uniq | sed 's/ /:        /' > resolve.txt

host.txt

a.hatena.ne.jp
anond.hatelabo.jp
b.hatena.ne.jp
counter.hatena.ne.jp
d.hatena.ne.jp
f.hatena.ne.jp
g.hatena.ne.jp
graph.hatena.ne.jp
hatelabo.jp
hatena.ne.jp
i.hatena.ne.jp
mail.hatelabo.jp
map.hatena.ne.jp
mgw.hatena.ne.jp
mobile.hatena.ne.jp
music.hatelabo.jp
q.hatena.ne.jp
r.hatena.ne.jp
red.hatena.ne.jp
red3.hatena.ne.jp
rimo.tv
ring.hatena.ne.jp
screenshot.hatena.ne.jp
search.hatena.ne.jp
searchplus.hatelabo.jp
serif.hatelabo.jp
sns.hatelabo.jp
sv.hatelabo.jp
sv.hatena.ne.jp
wordlink.hatelabo.jp
world.hatelabo.jp
www.hatelabo.jp
www.hatena.ne.jp

resolve.txt

125.206.202.66:	graph.hatena.ne.jp.
125.206.202.66:	i.hatena.ne.jp.
125.206.202.66:	map.hatena.ne.jp.
125.206.202.66:	q.hatena.ne.jp.
125.206.202.82:	search.hatena.ne.jp.
125.206.202.83:	d.hatena.ne.jp.
216.52.184.230:	dns2.name-services.com.
219.99.160.180:	ns0.future-s.com.
219.99.160.181:	ns1.future-s.com.
221.186.129.146:	d.hatena.ne.jp.
221.186.129.147:	counter.hatena.ne.jp.
221.186.129.147:	ring.hatena.ne.jp.
221.186.129.148:	g.hatena.ne.jp.
221.186.146.26:	mail.hatelabo.jp.
221.186.146.26:	sv.hatena.ne.jp.
221.186.146.27:	hatena.ne.jp.
221.186.146.27:	www.hatena.ne.jp.
221.186.146.28:	a.hatena.ne.jp.
221.186.146.28:	anond.hatelabo.jp.
221.186.146.28:	hatelabo.jp.
221.186.146.28:	music.hatelabo.jp.
221.186.146.28:	searchplus.hatelabo.jp.
221.186.146.28:	serif.hatelabo.jp.
221.186.146.28:	sns.hatelabo.jp.
221.186.146.28:	sv.hatelabo.jp.
221.186.146.28:	wordlink.hatelabo.jp.
221.186.146.28:	world.hatelabo.jp.
221.186.146.29:	d.hatena.ne.jp.
59.106.108.67:	red.hatena.ne.jp.
59.106.108.67:	red3.hatena.ne.jp.
59.106.108.68:	mobile.hatena.ne.jp.
59.106.108.69:	f.hatena.ne.jp.
59.106.108.70:	rimo.tv.
59.106.108.71:	mgw.hatena.ne.jp.
59.106.108.72:	b.hatena.ne.jp.
61.196.246.67:	d.hatena.ne.jp.
61.196.246.68:	r.hatena.ne.jp.
61.196.246.68:	screenshot.hatena.ne.jp.
63.251.92.193:	dns3.name-services.com.
64.74.96.242:	dns4.name-services.com.
69.25.142.1:	dns1.name-services.com.
70.42.37.1:	dns5.name-services.com.
dns1.name-services.com.:	rimo.tv.
dns2.name-services.com.:	rimo.tv.
dns3.name-services.com.:	rimo.tv.
dns4.name-services.com.:	rimo.tv.
dns5.name-services.com.:	rimo.tv.
ns0.future-s.com.:	hatelabo.jp.
ns0.future-s.com.:	hatena.ne.jp.
ns1.future-s.com.:	hatelabo.jp.
ns1.future-s.com.:	hatena.ne.jp.
sv.hatelabo.jp.:	www.hatelabo.jp.

2007-03-05

ぜんぶかいてみた

http://anond.hatelabo.jp/20070305101151

見出し関連】

見出し記法

みだしきほうをとなえた

◆時刻付き見出し記法

t*じこくつきみだしきほうをとなえた

name属性付き見出し記法

name*ねいむぞくせいつきみだしきほうをとなえた

カテゴリー記法

[はてな]かてごりーきほうをとなえた

小見出し記法

こみだしきほうをとなえた

◆小々見出し記法

ここみだしきほうをとなえた

【その他入力支援】

リスト記法

  • hogehoge
    • hogehoge
  • hogehoge
    1. hogehoge

◆定義リスト記法

hoge
fuga

◆表組み記法

hoge fuga
hoge fuga

引用記法

hoge

◆pre記法

hoge

スーパーpre記法

hoge

スーパーpre記法シンタックスハイライト

$There's @More %Than &amp;One \$Way \@To \%Do *It.

aa記法

                 _,,,.. --- ..,,,__
              ,, r''"        `ヽ、
            /     , .∧     `'、
            //  , i  / ,/ 'i i,  ,   'i
           ',i' ,  /フ'メi_/   '、i_i,_L,, i  ',
       _,,_   ,/ ,,i / ,,r==、,,''  _,,,ニ,,i 'i,i i i,
      ./  'i ./ i. レ'i             `' i/レ'! ',    幸 運 を !
      |.  i i  '、 i    r─---┐    i  i ',
     _,,L,,_ i, i   `'i,.   i      i   ,' /  ',
   ,r''"    `'i'、!    /ヽ,   '、    ノ  ./''"    i
 / -─'''''''‐く ト-、,/   フ-、`ー‐ '",,_-''" ',      i
 i   _,,,,,__ノ ,i.i.  `'ヽー" 'ヽ,  ̄ ̄''ー0'i   ヽ    i
 'i        )i i     `ヽ  `ヽ,,`>、,,,,,,L_  \,,,j
  '、   ─--r' i i          i       ヽ,
   \,,__,,ノ-,i,i           i   0 i ',
    i,    //      ,, -'   i 0    ', i
     \,__//   _,, -ァ'''"       i   0 ', i
        ̄゛゛゛ ̄  i           i 0     ', ',

脚注記法

(( hoge ))

◆改行記法

----ここから----

1行目

2行目

----ここまで----

◆pタグ停止記法

----ここから---- < hoge fuga >

----ここまで----

tex記法

<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?e^{i\pi}~=~-1" class="tex" alt="e^{i\pi} = -1">

ウクレレ記法

[uke:D7 D7@0202 C C@3345]

http記法

http://www.hatena.ne.jp/

はてな

<img src="http://d.hatena.ne.jp/barcode?str=http%3a%2f%2fwww%2ehatena%2ene%2ejp%2f" class="barcode" alt="http://www.hatena.ne.jp/">

http://www.hatena.ne.jp/

◆mailto記法

mailto:info@hatena.ne.jp

google記法

google:はてな

google:image:はてな

google:news:はてな

amazon記法

[amazon:はてな]

自動リンク停止記法

http://www.hatena.ne.jp/

id記法

id:1234567890

id:1234567890:archive

id:1234567890:about

id:1234567890:image

id:1234567890:detail

question記法

question:1234567890:title

question:1234567890:detail

question:1234567890:image

search記法

search:はてな

search:keyword:はてな

search:question:はてな

search:asin:はてな

search:web:はてな

◆antenna記法

a:id:1234567890

bookmark記法

b:id:1234567890

[b:id:1234567890:t:1234567890]

b:t:1234567890

b:keyword:はてな

◆diary記法

d:id:hatena

d:keyword:はてな

fotolife記法

f:id:hatena:hatena:image

f:id:hatena:favorite

◆group記法

g:hatena

g:hatena:id:hatenadiary

g:hatena:id:hatenadiary:20040501

g:hatena:id:hatenadiary:archive

g:hatena:keyword:はてなダイアリー利用可能タグ

idea記法

idea:182

idea:182:title

i:id:sample

i:t:タグ

rss記法

r:id:sample

◆graph記法

graph:id:sample

graph:id:sample:しなもんの体重

<img src="http://graph.hatena.ne.jp/sample/graph?graphname=%e3%81%97%e3%81%aa%e3%82%82%e3%82%93%e3%81%ae%e4%bd%93%e9%87%8d" class="hatena-graph-image" alt="しなもんの体重" title="しなもんの体重">

graph:t:体重

map記法

map:x139.6983y35.6514

keyword記法

[[はてな]]

[keyword:はてな]

[keyword:はてな:map]

[keyword:はてな:map:satellite]

[keyword:はてな:map:hybrid]

isbn/asin記法

ISBN:9784798110523

ISBN:4798110523

asin:B0009WHOMG

ISBN:9784798110523

◆rakuten記法

[rakuten:rdownload:10285260:image:small]

jan/ean記法

jan:4981254610640:barcode

続きを読む記法

====

スーパー続きを読む記法(これ大丈夫かな…ないと思うけど、以下のエントリ隠れたらごめんなさい)

=====

以上。

(追記)波線が??になっちゃってたので、hoge等に変更しました。

(追記:20070412) 引用記法の書き方間違ってたので修正しました。

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