素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

2008-10-01から1ヶ月間の記事一覧

RGB

233,123,33のような文字を見つけたら、対応する色を表示する。 /(?:(?:[1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(?:(?!\d)|,)){3}/が、カンマで区切られた0〜255の数字三つにマッチする正規表現。 document.normalize(); var span = document.createElement('span'…

円周率いろいろ

*使うより、Math.pow使うほうが遅い。 var PI = function () { var sum = 0, n = 100000, d = 1 / n; for (var i = 0;i <= n; ++i) { var x = i * d, f = Math.sqrt(1 - Math.pow(x, 2)); if (i == 0 || i == n) sum += f; else if (i % 2) sum += f * 4; el…

MacとLDRのキーバインド

MacだとControlキーがShiftの上にあるので、キーバインドが見た目と反対になっちゃってる。 javascripter's gist: 3740 — Gist var o = Keybind._keyfunc; [o["shift+ctrl"], o["ctrl+shift"]] = [o["ctrl+shift"], o["shift+ctrl"]];

AutoPagerize for SeaHorseをwedata互換形式に変換する

こんな感じにすればいい。 あとは、jQueryか、か、404 · GitHubあたりを@requireで取り込めば、Greasemonkey版のAutoPagerizeとSeaHorse版のSITEINFOの橋渡しができそう。 const SITEINFO_URLS = [ 'http://wikiwiki.jp/958/?cmd=source&page=AutoPagerize%2…

Firefox3のnightlyでサポートされたJSON.parseとJSON.stringify

JSON.parseとJSON.stringifyがサポートされた。 これは、JSON in JavaScriptのネイティブ実装と言える。これからWebサイトでJSONを使う時は、 <head> <script type="text/javascript"> if (typeof JSON != "object") document.write('<script type="text/javascript" src="http://www.json.org/jso</script></head>…

Text#replaceWholeText

Text.replaceWholeText - MDNの使い方。 var span = document.createElement("span"); span.appendChild( document.createTextNode('aiu')); span.appendChild( document.createTextNode('eo')); span.childNodes[0].replaceWholeText("foo"); alert(span.te…

Tracemonkey、ベンチマーク

モンテカルロ法使って円周率を確率的に計算するやつでベンチマークを取ったら、何故かJITをオンにしたほうが速度が落ちた。こういうプログラムは、JITをオンにしたら速くなりそうな気がしてたので意外。 console.time("pi"); var n = 300000, hit = 0; for (…

黄金比

var [a, b] = (function fib(a, b) b < 10000000000000000 ? fib (b, a + b) : [a, b] )(1, 1); alert(b / a); // 1.6180339887498947 Rubyだとこんな感じかなあ def sum(a) a.inject(0) {|sum, n| sum + n} end fib = (1..1000).inject([1, 1]) {|a, b| a.p…

GitHubのショートカットを潰す

ページの下のほうを見てるのに、sキー押すだけでページが上部に移動しちゃうのは、不便。 // ==UserScript== // @name GitHubKeyHack // @namespace http://d.hatena.ne.jp/javascripter/ // @include http://github.com/* // ==/UserScript== location.href…

はてなブックマークのidコールのリンククリックで該当の人の所に飛ぶGreasemonkeyスクリプト

// ==UserScript== // @name HatenaBookmarkIdCall // @namespace http://d.hatena.ne.jp/javascripter/ // @include http://b.hatena.ne.jp/entry/* // ==/UserScript== GM_addStyle( '[id^=bookmark-user-]:target {\ background-color: #e0e0f0;\ }'); va…

Firebug、パッチ

毎回手動で直してるのも面倒だから、パッチの作りかたを調べた。 肉少なめ | Item - Firebugのコンソールでjavascript 1.8を使うで練習する。 まず、下のような感じにして、 /Users/javascripter/fbug/content/firebug% cp lib.js lib.js.orig /Users/javasc…

embed要素とtypeof

var embed = document.getElementsByTagName("embed")[0]; alert(typeof embed); // "function" alert(embed instanceof Function); // false try { embed(); } catch (error) { alert(error); // Error: Error calling method on NPObject! } 何故か、typeo…

Array#remove(Array#indexOfの第二引数の使いかた)

indexOf - MDNによると、Array#indexOfの第二引数を指定すると、途中から検索できるらしい。 これを使って、Array#removeを実装すると、毎回、全部をindexOfで探索するよりかなり速くすることができる。 Array.prototype.remove = function remove() { var s…

はてブにダイアリーのリンク付けるグリモンの添削

はてブユーザのストーキングを加速させるgreasemonkey(はてブしてるひとのダイアリーへのリンクを付加する) - Cherenkovの暗中模索にっきを勝手に添削する。まず、気をつけたほうがいいもの。 // ==UserScript== // @name hateb_link_user_diary // @names…

無限リストとFizzBuzz、yield

???&#14460;???&#1151;?(sharp variables) - oct inaoduで、リテラルに循環したオブジェクトを書けることを知ったので、 JSEnumerator – CodeRepos::Share – Trac のサンプルのFizzBuzzを、それを使って書き直してみた。 function cycle(list) { var ret = […

継続むずかしい…

関数を実行するたびに値を増やすカウンタを作ろうと思って、継続つかえないかなと思ったけど、むずい。 下の場合だと、一度(counter)した時、(define counter (make-counter))までのぼるので、counter自体が再定義されちゃう(defineで再定義してるから実行結…

関数を定義するマクロ

マクロおもしろいなあ。 #!/usr/bin/env gosh (define-macro (ca..r n) (string->symbol (make-string n #\a)) `(define ( ,(string->symbol (string-append "c" (make-string n #\a) "r")) lis) (define (/lis lis i) (if (> i 0) (/lis (car lis) (- i 1))…

マクロとか

マクロ展開後に変数を漏らす必要がない場合?は、define-syntaxを使う。 #!/usr/bin/env gosh (define-syntax ++ (syntax-rules () ((++ var) (begin (set! var (+ var 1)) var)))) (let ((i 0)) (print i) ; 0 (print (++ i)) ; 1 (print (++ i))) ; 2 JSみ…

Gaucheのお勉強

Schemeをそれとなくやろうと思って、SICPとかは難しいなーと思って、簡単そうなのを探したら、R5RS (Revised^5 Report on Algorithmic Language Scheme) 日本語訳がよさそうなので、見ながらちょこちょこ書いた。再帰を使ってリストのサイズを出す。末端再帰…

ニコニコ動画を前みたいに自動で再生するGreasemonkeyスクリプト

追記:からインストールできるようにした。wnp/nicovideo_wnp.js at master · miya2000/wnp · GitHubを参考に、Flashを毎回クリックしなくても勝手に再生されるようにした。 // ==UserScript== // @name NicoVideoAutoPlay // @namespace http://d.hatena.ne…

OS XでPython 2.6のインストール

Download Pythonから、Python 2.6 for Macintosh OS Xをダウンロード。 すでに入れていたPython 2.5を/Applications/から削除する。 で、普通にインストール。 Terminalから、 % python -V して、Python 2.6と出ればOK。 僕の場合、Python 2.5と出たので、 %…

map、filterなどを使う時の便利な関数(__noSuchMethod__)

Array#mapなどを使う時、配列の要素に対して要素のメソッドを適用したいことがよくあるけど、普通はこう書かなきゃいけない。 [1, 2, 3, 4, 5].map(function (n) { return n.toString() }); こう書きたい。 [1, 2, 3, 4, 5].map(expand.toString()); // expa…

instanceofとか===とかtypeofとかをまとめる

JavaScriptは、typeof nullが"object"だったり、typeof new String("foo")が"object"だったり、"foo" instanceof Stringがfalseだったりする。 なので、それらをまとめて下のような関数にして、ビットマスクを使って目的の型かどうかを確認できるようにする…