2008-01-01から1年間の記事一覧
def fake_string(str) str.split(//).map{|s| rand < 0.3 ? s.tr( 'abcdefghijklmnopqrstuvwxyz', 'odrbafanlibinmeqpnzjvyvxus') : s }.join('') end puts fake_string('digital native') # => "diaitai nojiva" ハッシュテーブルをつくらずString#trを使っ…
h['hoge']はちょっと長いなと思って、JavaScriptみたいに、キーが単純な場合はh.hogeやh.hoge = :valのようにできるようにしてみた。 class Hash def method_missing(name, val=nil) if name[-1] == '=' self[name.to_s[0..-2].to_sym] = val else self[name…
function deepCopy(orig) { var clone = {}; return (function (orig, clone, visited, ref) { for (var k in orig) { var v = orig[k]; if (v instanceof Object) { var i = visited.indexOf(v); if (i == -1) { var o = {}; visited.push(v); ref.push(o);…
追記2:2007-10-11 - hoshikuzu | star_dust の書斎を見ると、下に書いてるような対策では不十分なようだ。 追記:エスケープすべき文字は、Re: JavaScript内(文字列)にデータを出力する場合の適切なエスケープ手順|freeml byGMOなどを参考に。シングルク…
class Array def unique ret = [], done = {} each{|i| unless done.key?(i) done[i] = :done ret.push(i) end } return ret end end Rubyおもしろいなあ。ハッシュのキーにオブジェクトも指定できて、selfがスコープチェインに入ってる。 Array#uniq!みたい…
AutoPagerize for SeaHorseをwedata互換形式に変換する - 素人がプログラミングを勉強するブログをRuby使って書き直した。RubyのオブジェクトをJSONにするのライブラリはRuby 用 JSON パーサーを更新、 JSON への変換も追加 - WebOS Goodiesを使っていて、si…
ArrowじゃなくてjQueryでもいいけど、下のようなものを動かしておくとFirebugのconsoleで動かせるようになって便利。 // ==UserScript== // @name ArrowLoader // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // @resource script ht…
RubyのObject#tapがすごく便利。tapかわいいよtap - (rubikitch loves (Emacs Ruby CUI Books))に書いてある。これを使うと、selfを返さないメソッドを使ってもチェインできる。JavaScriptだと、こんな感じ。 Object.prototype.tap = function (fn) { fn.cal…
__proto__プロパティにnullを代入すると、Object.prototypeのメソッドを継承しないクリーンなオブジェクトを手に入れることができる。 var o = {__proto__: null}; console.log(typeof o.toString); // undefined console.log('__proto__' in o); // false c…
console.log.call(null, 'hoge'); のように、thisをconsole以外にした時にthis.notifyFirebugが存在しないというエラーになるので、それを直す。 --- consoleInjected.js.backup 2008-11-04 22:17:10.000000000 +0900 +++ consoleInjected.js 2008-11-04 22:…
追記:最速インターフェース研究会 :: Firefoxでの開発を高速化する自動リロードスクリプトで既出でした。デモを 2008-11-03_1209 - javascripter's library に置いた。 ライブラリ本体は javascripter's gist: 21788 — Gist にある。 (function () { var la…
Function.prototype.cut = function (order) { var self = this; return function () { var args = []; order.forEach(function (i, j) { args[j] = this[i]; }, arguments); return self.apply(null, args); }; }; Array.cut([1, 0, 2])('b', 'a', 'c'); //…
a b c a dを、 a b c a dのようにする。問題は単純なのに、きれいに書こうとすると難しいな。 function stripIndent(str) { var strs = str.split('\n'), a = []; for (var i = 0; i < strs.length; ++i) { var s = strs[i]; var n = s.match(/^\s*/)[0].len…
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だとControlキーがShiftの上にあるので、キーバインドが見た目と反対になっちゃってる。 javascripter's gist: 3740 — Gist var o = Keybind._keyfunc; [o["shift+ctrl"], o["ctrl+shift"]] = [o["ctrl+shift"], o["shift+ctrl"]];
こんな感じにすればいい。 あとは、jQueryか、か、404 · GitHubあたりを@requireで取り込めば、Greasemonkey版のAutoPagerizeとSeaHorse版のSITEINFOの橋渡しができそう。 const SITEINFO_URLS = [ 'http://wikiwiki.jp/958/?cmd=source&page=AutoPagerize%2…
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 - MDNの使い方。 var span = document.createElement("span"); span.appendChild( document.createTextNode('aiu')); span.appendChild( document.createTextNode('eo')); span.childNodes[0].replaceWholeText("foo"); alert(span.te…
モンテカルロ法使って円周率を確率的に計算するやつでベンチマークを取ったら、何故か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…
ページの下のほうを見てるのに、sキー押すだけでページが上部に移動しちゃうのは、不便。 // ==UserScript== // @name GitHubKeyHack // @namespace http://d.hatena.ne.jp/javascripter/ // @include http://github.com/* // ==/UserScript== location.href…
// ==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…
毎回手動で直してるのも面倒だから、パッチの作りかたを調べた。 肉少なめ | Item - Firebugのコンソールでjavascript 1.8を使うで練習する。 まず、下のような感じにして、 /Users/javascripter/fbug/content/firebug% cp lib.js lib.js.orig /Users/javasc…
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…
indexOf - MDNによると、Array#indexOfの第二引数を指定すると、途中から検索できるらしい。 これを使って、Array#removeを実装すると、毎回、全部をindexOfで探索するよりかなり速くすることができる。 Array.prototype.remove = function remove() { var s…
はてブユーザのストーキングを加速させるgreasemonkey(はてブしてるひとのダイアリーへのリンクを付加する) - Cherenkovの暗中模索にっきを勝手に添削する。まず、気をつけたほうがいいもの。 // ==UserScript== // @name hateb_link_user_diary // @names…
???㡼???ѿ?(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))…