2010-02-01から1ヶ月間の記事一覧

エラーの補足とalert

htmlのファイルの一番上にscriptタグで以下を書いておくとJavaScriptのエラーがあった場合、ファイル名、エラーのあった行、エラーの内容が補足できる。alertは別ウインドウで表示されたくなかったのとループでalert入れると厄介なので、一回しか実行されな…

とあるJSの正規表現

正規表現にマッチした物をハイライトする。デモ var Class = {}; Class.create = function() { var cl = function() { this.initialize.apply(this, arguments); }; cl.extend = function(method) { for (var i in method) { this.prototype[i] = method[i];…

アッカーマン関数

JavaScriptでもアッカーマン関数を書いてみた。 (function(m, n) { if (m == 0) return n + 1; else if (n == 0) return arguments.callee(m - 1, 1); else return arguments.callee(m - 1, arguments.callee(m, n - 1)); })(3, 7);

Ruby1.9でのダンプの仕方

1.9ではVMの命令にダンプできます。 puts RubyVM::InstructionSequence.new('puts "hoge"').disasm ほかにeval、to_aとかが使える。 == disasm: <RubyVM::InstructionSequence:<compiled>@<compiled>>========== 0000 trace 1 ( 1) 0002 putnil 0003 putstring "hoge" 0005 send :puts, 1, nil, 8, <ic> 0011 leave</ic></compiled></rubyvm::instructionsequence:<compiled>…

forEach

JavaScriptだとブロックでスコープ切れないのでforEachとかmapとかを頻繁に使うので、 ブラウザによって使えないのがあるのでその対策。 Array.prototype.forEach = function(func, thisObject) { for (var i = 0, len = this.length; i < len; i++) func.ca…

関数を遅延して実行する

Function.prototype.delay = function(n) { var self = this; var args = Array.prototype.slice.call(arguments, 1); var id = setTimeout(function() { self.apply(self, args); }, n * 1000); return function() { clearTimeout(id); }; } 1秒後に実行 va…

Ruby1.9を使うにあたり1.8と違う部分

エンコーディングの指定1.9だと内部のエンコーディングが固定されてないので、文字列のエンコーディングを指定します。 #!/usr/bin/env ruby # encoding: utf-8 p "あいうえabcd" 文字列のサイズRuby1.8 p "あいうえabcd".size #=> 16 Ruby1.9 p "あいうえab…

Rubyで複数のバージョンを共存して使う方法

コンパイルする時prefixを別な所に指定してインストールする方法は、 あまり綺麗なやり方じゃないので、Ruby Version Managerを使いましょう。 rvmを使うとコマンドでバージョン指定するだけで切り替えることができます。 環境はDebian sidです。rvmのインス…

オブジェクト指向プログラミングをしやすくする

普通の書き方。 var Apple = function() { this.initialize(); }; Apple.prototype.initialize = function() { alert("init"); }; new Apple(); applyを使ってみる。var Appleに入るのはprototype.jsのCrass.create()で渡されるクロージャと同じ。 var Apple…

デバッグ

alert使えばいいんだけど、いちいちダイアログが出てくるのがうっとうしいのと、あとループの中に入れると厄介なので。htmlの方に以下を追加して。 <div id="debug"></div> この関数を使う。alertOnceはループとかに入れたりして使う。 var debug = document.getElementById("debug…

文字列リテラル展開

String#replaceの第二引数に関数を入れると加工して返せる string.replace(reg, function replacer(str, p1, p2, p3....., offset, s) { }); str: regにマッチした部分文字列 p1, p2, p3........: strがRexExpオブジェクトの場合の()のマッチ結果 offset: マ…

ビットの数え上げ

ハッカーのたのしみに載ってた。x &= (x - 1)が凄いね。 これは、x-1でxが0以外だとxを下位ビットからみていって一番最初に1になってるビットが0になる。 それを元の値に対してかければその場所の位置だけを0にできる。 全部が0になるまで繰り返せば終了、こ…

変更があったらブラウザを自動リロードするブックマークレット(2)

フックするファイルの指定をなくして、ロケーションのhtml本体と、そのhtmlにリンクしてるjsとcssがローカルにある場合フックするように修正した。 javascript: (function () { if (location.href.indexOf("file:///")) { alert("not local file"); return; …

カラーピッカー

カラービッカーを作ってみた。とりあえず試作。 デモ var ColorPicker = {}; ColorPicker.HSVtoRGB = function(h, s, v) { var r, g, b; if (s == 0) { var i = Math.round(v * 255); return [i, i, i]; } var hi = Math.floor(h / 60); var f = h / 60 - hi…

変更があったらブラウザを自動リロードするブックマークレット

複数のファイルを指定してどれかが変更されてればリロードできるようにした。 キャンセルを押すまでファイル指定して使う。 javascript: (function () { if (!location.href.indexOf("http://")) { alert("not local file"); return; } var func = function …

文字列を切り分けて検索をする

function find(reg, data) { var tmp = reg.exec(data); if (tmp == null) return null; var start = data.lastIndexOf("\n", tmp.index) + 1; var end = data.indexOf("\n", start); var r = data.slice(start, end); reg.lastIndex = end + 1; return r; }…

補完付きのテキストボックス

デモ var Suggest = function(input, suggest, dic) { this.idInput = document.getElementById(input); this.idSuggest = document.getElementById(suggest); this.dic = dic this.idx = -1; this.serchWord = ""; this.init(); }; Suggest.Key = { UP: 38,…

livedoor Readerのメッセージを移動するGreasemonkeyスクリプト

常に上部分非表示にして使ってるので移動した。 インストール // ==UserScript== // @name move message // @namespace http://d.hatena.ne.jp/f96q/ // @include http://reader.livedoor.com/reader/ // ==/UserScript== var m = document.getElementById("…

jQueryを使えるようにするブックマークレット

javascript: (function(src) { var s = document.createElement("script"); s.type = "text/javascript"; s.src = src; document.getElementsByTagName("head")[0].appendChild(s); setTimeout(function() {document.title += "(jQuery" + jQuery.fn.jquery …

livedoor ReaderからはてなブックマークにポストするGreasemonkeyスクリプト

ユーザー名とパスワード設定して使う。はてなブックマークにbでコメントなしで登録、Shift+bでコメントを書いて登録する。 インストール // ==UserScript== // @name postbhatena // @namespace http://d.hatena.ne.jp/f96q/ // @include http://reader.live…

livedoor Readerを広くして使うGreasemonkeyスクリプト

インストール // ==UserScript== // @name ldr resize // @namespace http://d.hatena.ne.jp/f96q/ // @include http://reader.livedoor.com/reader/ // ==/UserScript== var style = document.createElement("style") style.type = "text/css"; style.inner…

CSSを編集するGreasemonkeyスクリプト

ほかのサイトのCSSをブラウザから変更。デモ インストール // ==UserScript== // @name CSSEdit // @namespace http://d.hatena.ne.jp/f96q/ // @include http://* // ==/UserScript== function cssEdit() { function gid(id) { return document.getElementB…

HTMLの構造ダンプ

HTMLの構造をダンプして表示。 function dumpNode(node, data, deep) { for (var i = 0; i < node.childNodes.length; i++) { var e = node.childNodes[i]; if (e.nodeType != 1) continue; var r = { deep: deep, tag: e.tagName.toLowerCase(), id: ((e.id…