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

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

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

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

ちっこいライブラリ

Greasemonkeyとかから使えるように、よく使う関数を小さくまとめて javascripter's gist: 54503 — Gist に置いた。

疑似ハッシュ

ハッシュのようにアクセスできるけどコンパイル(マクロ展開)時にvectorのインデックスに置き換えられるようにする。 (define-macro (let-pseudo-hashtable accessor-name key&value . body) (let ((key-table (make-eq-hashtable)) (value-vector (gensym)))…

document.readyState

Firefoxでdocument.readyStateがサポートされていた。確認したバージョンはMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre) Gecko/20090124 Minefield/3.2a1pre。 document.readyStateで、document.readyStateがどのような値になる…

非決定性計算

4つの数字から10になる式を探すプログラム(切符の問題とも呼ばれる)を書いた。choose関数とfail関数は、404 Not Foundをypsilon上で動くように少し直した物。 (define *paths* '()) (define *fail* (gensym)) (define (choose choices) (if (null? choices) …

CSSを追加する関数

の39番目とGM_addStyleの実装と最適化 - 0xFFについて。 まず、style要素を使う方法。 function addStyle(css) { var style = document.getElementsByTagName('style').item(0); if (!style) { style = document.createElement('style'); style.type = 'text…

正規表現にコメントをつける

Perl風 RegExp.prototype.__defineGetter__( 'x', function () { if ('__x' in this) return this.__x; var source = this.source; var flags = ''; var re; source = source.replace(/([^\\]) +/g, '$1'); // trim spaces source = source.replace(/([^\\])…

コードの整形

追記:Twitter / 10th543: あ・・・ボタンが��で指摘されたのでmetaタグを追加した。どちらにしろ、script要素のdefer属性を使っているので、Firefox3.1以降じゃないと動かないと思う。 FIrefoxだと、Function#toSourceに数値を渡せばきれいにインデントして…

スタイル

最近はこう書いている。 /* copyrightやlicense情報は必要だったら最初に複数行コメントで書く */ // グローバル変数を初めにvarで宣言する var global = window; // 関数を使用する前に関数本体を書く function times(func, n, self) { // var宣言は最初に…

static

これは便利。 var counter = function () { var static = /(^o^)/; return ('i' in static)? ++static.i: static.i = 0; }; console.log(counter()); // 0 console.log(counter()); // 1 console.log(counter()); // 2 console.log(counter()); // 3 正規表…

Firefox3でttp://から始まるURLに飛べるようにする(navigator.registerProtocolHandler)

ttp://google.co.jp/等の不完全なリンクをロケーションバーにペーストしてサイトに移動したり、リンクをクリックして移動できるようにする。 ttp_processor.cgi等の名前にして保存し、CGIとして動かす。 #!/usr/bin/env ruby require "webrick/cgi" class TT…

classList、relList

追記:2 Common infrastructure — HTML Standardを見て少し直した。 HTML5 differences from HTML4を見ながら、HTMLElement#classListと#relListを作った。 戻り値や毎回同じclassListオブジェクトを返すべきなのかどうかが不明なので、好きなようにした。 v…

Callオブジェクト

JavaScript第5版を見ていたら、結構覚えてない物があったのでメモ。 まず、関数実行される時に、varで宣言された変数は、Callオブジェクトという物に登録される。 var f = function (a, b) { var c, d; }; f(1, 2); の場合だと、 var callObject = { c: unde…

Flash 10でもFlash 9を名乗る

Flash 10 でも「はてなダイアリー」の「バックアップ機能」を使えるようにするグリースモンキー - IT戦記を見て、ユーザーエージェントを切り替えるように、Flashのバージョンも嘘を付けるようにできるといいと思った。 Firefoxだと、 navigator.plugins['Sh…

gensym

new Stringの用途を考え、ユニークなキーを生成するgensymを書いた。toString()があるのでobjectのキーとして使用でき、オブジェクトなので===で比較する時は絶対に重ならない。 var gensym = function () { var prefix = 'gensym_'; var id = 0; return fun…

Brainfuckのインタプリタ

前から作ってみたいと思っていた、Brainfuckのインタプリタを作った。 JavaScript Brainfuck interpreterに置いた。 id:lizanにデバッグを手伝ってもらったり、実装についてアドバイスを貰いながら、けっこう苦労して作った。 var brainfuck = function (sou…

CSSを編集するブックマークレット

SafariにはStylish相当のものがないので自分で書く。 リアルタイムに編集できるようにするとかなり動作が重くなるので、少し工夫してる。 javascript:(function () { var css_edit = document.getElementsByClassName('_css_edit'); if (css_edit.item(0)) {…