2008/01/31


んー。
// ==UserScript==
// @name           Speedtest Ikasama
// @namespace      Speedtest.Ikasama
// @include        http://speedtest.10-fast-fingers.com/
// ==/UserScript==

var w=document.getElementById('eingabe');
var v=document.getElementById('vorgabe');
var s = 0;
var z = unsafeWindow.pruefstring;
var f1 = unsafeWindow.welchedown;
var f2 = unsafeWindow.welcheup;
unsafeWindow.wort = (z+z+z+z+z).split(' ');
(function go() {
    clearTimeout(s);
    var t = v.innerHTML.replace(/<[^>]+>/g, '');
    if (t){
        var i=0;
        while(true){
            t = v.innerHTML.replace(/<[^>]+>/g, '');
            var e = document.createEvent('KeyboardEvent');
            e.initKeyEvent('keypress', true, true, window, false, false, false, false, 0, t.charCodeAt(i));
            w.dispatchEvent(e);
            f1(e);f2(e);
            if (++i >= t.length) break;
        }
    }
    s = setTimeout(go, 0);
})();
こんなの使っても
typing-fast
8位って事は、1位の人もHackingやん!www
こんな速度、人間じゃありえん!
speedtest.ikasama.user.js
# 10-fast-fingers.com - Speedtest


ちなみにこのスクリプト、なんでこんな変な事しているかといいますと...
まずど頭で、「z+z+z+ ...」ってやってる部分は、あまりにタイプスピードが速すぎて、内部の配列がオーバーフローしてしまっているのでキャパを取り直しています。次にループ内で再度「t」を取り直しているのは、このSpeedtestがイカサマ防止の為にタイプ中にワードを増やす処理が入っており、それをハンドリングする為に入っています。
Posted at by




Firefoxをshellの様に扱えるグリモン「Minibuffer ? Userscripts.org」で使える、Fuck!コマンド「fuck」書いた。 使い方は、はてなブックマークコマンドとほぼ同じ。
目障りな記事を見つけたら :fuck とすれば良い。 もしくはpinを付けて :pinned-link | fuck とすればpinを付けたリンクが全部「Fuck!」になる。
なお :pinned-node | fuck とすれば、pinが指すノード自体が削除される。
例えばtwitterなんかで
minibuffer-fuck1
followerの発言をpinしてfuckしようもんなら
minibuffer-fuck2
こんなんになっちゃう!
※followerの皆様ごめんなさい。

ソースはこんな感じ // ==UserScript==
// @name           Minibuffer Fuck Command
// @namespace      Minibuffer.Fuck.Command
// @description    add fuck command to Minibuffer.
// @include        http://*
// @include        https://*
// ==/UserScript==

window.Minibuffer.addCommand({
  name: 'fuck',
  command: function(stdin){
    if (stdin.length == 0) {
      document.open();
      document.write('<h1>Fuck!</h1>');
      document.close();
    } else {
      stdin.forEach(function(obj){
        if (("" + obj).match(/^https?:.*/)) {
          var links = document.getElementsByTagName('a');
          for(var n = 0; n < links.length; n++) {
            if (links[n].href == obj) {
              links[n].href = 'javascript:void(0);';
              links[n].addEventListener('click', function() {alert(this.innerHTML)}, false);
              links[n].innerHTML = 'Fuck!';
            }
          }
        } else if (typeof obj == 'object') {
          try {
            obj.parentNode.removeChild(obj);
          } catch(e) { }
        }
      });
    }
    return stdin;
  }
});

インストール:minibuffer.fuck.user.js

てか使い道なくね?
Posted at by




その1 3桁ごとに区切る - PleasureDelayerDiary はてなブックマーク数


Number.prototype.split3_1 = function() {
    var r = ""; 
    var s = this.toString().split("").reverse();
    for(var i = 0; i < s.length; i++) {
        if(i % 3 == 0 && i != 0 && s[i] != "-") {
            r = s[i] + "," + r
        } else {
            r = s[i] + r;
        }
    }  
    return r;
}

その2 iandeth. - javascriptで数値をカンマ区切り文字列に変換する関数メモ はてなブックマーク数


Number.prototype.split3_2 = function () {
    var to = String(this);
    var tmp = "";
    while (to != (tmp = to.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))){
        to = tmp;
    }
    return to;
}

その3 JavaScriptで数値を3桁ごとに区切る - 0x集積蔵 はてなブックマーク数


Number.prototype.split3_3 = function() {
    var m = (this &lt; 0) ? -1 : 1;
    var str = String(this*m).split('.');
    var arr = String(str[0]).split(''), len = Math.ceil(arr.length/3), res = [];
    for (var i =0;i&lt;len;++i) res.push(arr.splice(-3,3).join(''));
    return (m == -1 ? '-' : '') + res.reverse().join(',') + (str[1] ? '.' + str[1] : '');
};

その4 [JavaScript]数値を3桁ごとに区切る はてなブックマーク数


Number.prototype.split3_ore = function() {
  ('' + this).match(/(-?)([0-9]+)(\.[0-9]*)?/);
  var sp = [RegExp.$1, RegExp.$2, RegExp.$3];
  var x = Math.floor(sp[1].length / 3) * 3;
  var len = sp[1].length;
  return sp[0] + (sp[1].substr(0, len - x)) + (len - x == 0 ? '' : ',') +
         (sp[1].substr(len - x, x).match(/[0-9]{3}/g).join(',')) + sp[2];
}
私ならこう書く。
Number.prototype.split3 = function() {
  var r = "", s = this.toString().split("").reverse().join("").replace(/\d{3}/g,
    function(v){r+=v+',';return ''});
  return (r + s).split("").reverse().join("");
}
alert((1000000).split3()) // 1,000,000
文字列を逆にして、replaceに指定した関数で3桁毎にカンマを入れた結果と、空で置換したsubstituteの結果(あまった結果)を足す。その後文字列を逆にして戻す。
マイナスもたぶんOK。


追記1
しまった。チェック甘すぎ。
Number.prototype.split3 = function() {
  var r = "", s = this.toString().split("").reverse().join("").replace(/\d{3}/g,
    function(v){r+=v+',';return ''});
  if (!s.match(/\d/)) r = r.substr(0, r.length-1);
  return (r + s).split("").reverse().join("");
}
計測してみる!
mattnおそ!www
関数呼び出しコストか?
追記2
うむ。小数か...
Number.prototype.split3_mattn2 = function() {
  var r = '', s = this.toString();
  s.match(/(-?)([0-9]+)(\.[0-9]*)?/);
  var sp = [RegExp.$1, s = parseInt(RegExp.$2), RegExp.$3];
  while(s >= 1000) {
    r = ',' + (s%1000) + r;
    s = parseInt(s/1000);
  }
  return sp[0] + s + r + sp[2];
}
-12345678.2356を3桁ごとに区切るテスト

タイム測定



うむ。それでも遅い。
Posted at by