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

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

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

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

プロパティアクセスの速度

に置いた。 A: 13 B: 55のように、メンバが静的な場合には最適化がかかってかなり高速になる(Firefox、Safari、Opera)。jQueryとかはインスタンスを配列風に使っているせいでブラウザの最適化が適用できなくなって損しているんじゃないだろうか。 ここらへん…

XPathEvaluator

var XPath = { cache: null, reset: function () { this.cache = {__proto__: null}; }, get: function (context, expr, type) { var cache = this.cache, evaluator; if (expr in cache) { evaluator = cache[expr]; } else { evaluator = cache[expr] = XP…

WebKitのバグ

こういうコードを書いた。 function inspect(evaluator) { var title = "code:", code; while ((code = prompt(title)) !== null) { title = evaluator(code); } } (function () { var i = 0; inspect(function (code) {return eval(code);}); })(); Firefox…

Firebugのパッチ

だいぶ前からFirebugのコンソールをenabledにしてても"Firebug cannot find _firebugConsole element"というエラーが出てリロードしないと動かなかったりしたので、応急処置をした。 Index: console.js ===================================================…

括弧の対応

c

#include <stdio.h> int brackets(char *str) { int bra = 0; for (; *str; str++) { if (*str == '(') { ++bra; } else if (*str == ')') { if (--bra < 0) return 0; } } return !bra; } int main(int argc, char **argv) { puts(brackets(argc > 1? argv[1]: "")? </stdio.h>…

RubyでJavaScriptのプロトタイプもどき

prototype - 素人がプログラミングを勉強するブログの続き。RubyユーザがJavaScriptのオブジェクト指向を学ぶ時に使えるかもしれない。 =begin JavaScriptのようなオブジェクトの実装。 JSObject.newがJavaScriptのnew Object()相当であり、プロパティへの代…

オブジェクトをハッシュテーブルとして使う場合に注意すべき事

javascripter's gist: 64615 — Gist をテストしている時に気がついたこと。 最も一般的な var hashtable = {}; var key = "foo"; if (key in hashtable) { // has key } hashtable[key]; // lookup hashtable[key] = "bar"; // add は、keyがObject.prototyp…

REPL

JavaScript REPLに置いた。OperaのDragonflyは一行しか入力できなくて窮屈なのでこういうのを用意しておくと便利。 いくつかユーティリティ関数を書いておくと快適。 function keys(object) { var keys = []; for (var k in object) keys.push(k); } functio…

printfの可変長引数と型

c

printfの第二以降の引数にいろいろな型の物を渡せる仕組みについて。 まず、可変長引数を使うためにstdarg.hを#includeする。 #include <stdarg.h> で、 void myprintf(char *format, ...); のようにプロトタイプを宣言する。 関数の可変部はどんな型でも受け取ること</stdarg.h>…

プロパティ名と予約語

javascript:try{eval("top.if"),alert(!0)}catch(e){alert(!1)} を実行してtrueになるのはFirefoxだけで、Opera、Safariではfalse。 JavaScript1.7からサポートされているらしい。 getterやsetterを作る時に使うget、set等のキーワードは、どのブラウザでも(…

データ構造等のメモ

Schemeにあるデータ構造についてのメモ。よく分かってない。 数値 1 0.1 99999999999999999999999 ; 大きい数が扱える (* 1 6) ; 6 (= (0.1 * 6) 0.6) ; # #f 小数が絡むと演算の誤差が入る (/ 1 7) ; 有理数が扱える Schemeでは正確数と不正確数に分かれて…

コンパイル時FizzBuzz

http://anond.hatelabo.jp/20081025202001(via b:id:qnigy)で、こういうのはやっぱりSchemeだなと思って書いた。よく考えれば、ファイルに書き出すまでをあらかじめしておけばよかった。

liveイベント

jQueryでサポートされたliveなイベントがどういう風に実現されているのか調べた。かなり複雑だったので詳細は追わなかったが、このようにしているようだ。 var live = function (selector, type, fun) { document.addEventListener( type, function (e) { va…

マクロ

(define-macro (alias new-name old-name) `(define-macro (,new-name . body) `(,,old-name ,@body))) (alias -> 'lambda) (alias identity 'values) (alias いふ 'if) old-nameをシングルクオートで括っているのは、特殊形式に対応するため。 マクロを定義…