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

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

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

2010-01-01から1年間の記事一覧

近況

9月からオーストラリアに留学に来ていてとても忙しい。コンピュータに触れる時間もないし、日本語自体あまり使う機会がない。 最近、IE9 Betaが出たりとかiPod系がリニューアルされたりとかを聞いたけど、細かいニュースを追うのは時間の無駄かなと思い始め…

インデックスを増大/減少させるループとunsigned

c

for (int i = 0; i < N; i++) { /* array[i]を使う */ } というコードについて、iの型はC言語ではsize_tを使うほうが良いのか?という議論から発展して、size_tを使うと減少(降下)ループがきれいに書けなくなる、という問題があがった。 下の話では、size_…

jQuery.fn.$each

(function ($) { $.fn.$each = function (callback) { return this.each(function () { return callback.call($(this)); }); }; })(jQuery); こういうのを定義しておくと便利。 $("a").$each(function () { /\.jpg/.test(this.attr("href")) && window.open(…

Safari5の拡張を試した

Chromeみたいに必要なときだけステータスバーを表示するSafari5拡張を書いた。 javascripter/smart-status-bar · GitHubに置いた。 同様の拡張はSafari Extensions by Daniel BergeyのInvisible Status Barがあるが、.safariextzをzipとして解凍して中身を確…

幅優先探索

昔流行ったやつ。幅優先探索で迷路の経路を出す時は、ノードをリストにして逆算していくか、マップを0で初期化して、通るたびに0, 1, 2…というように徐々に増やしていって、ゴールについたら一つずつ減っていくような道を探す、という方法が使える。 それぞ…

history.pushState、history.replaceState

HTML5のhistory.pushState、history.replaceStateを試した。 HTML5 pushState/replaceState demoで動かせる。 Minefieldだと完全に意図した通りに動くがWebKitだとURLまわりがうまくいかない。 メインのソースコードは下記の通り。 canvasで適当に壁紙用画像…

long long int

c

Problem 3 † 13195 の素因数は 5、7、13、29 である。600851475143 の素因数のうち最大のものを求めよ。 http://odz.sakura.ne.jp/projecteuler/index.php?Problem%203 これを解こうとしたら600851475143ってintには収まらないしlongはどれくらいの大きさな…

某パッ@マン風ゲーム

http://tsukkun.net/tsu/に置いた。メインのプログラムはhttp://tsukkun.net/tsu/main.js。id:uupaaさんのuuCanvas.jsをライブラリとして使用していてIEでも動くが、かなり重い。敵がユーザーを追いかけてくる部分は幅優先探索を使っていて、ようするに、迷…

配列から最小値、最大値を検索する

=begin Reducer 配列等のイテレータから適切な値をスキャンして抜き出すクラス。O(n)である。 Reducer#reduce(iter) iterはempty?とeachメソッドを実装している必要がある。 Reducer#update?(left, right) 抽象メソッドである。 サブクラスでオーバーライド…

.sort.call(null)の深淵

発端は javascript:alert([].sort.call(null)) これで window オブジェクト取れるのなんで? http://twitter.com/edvakf/status/9222713572 という投稿。この不可解な挙動を説明することは案外難しい。 まず、ES5のstrict mode以前(つまり、今普通にJavaScri…

FirefoxでのJavaScriptデバッグテク等

obj.watch("prop", function (id, older, newer) { console.log(id, older, newer, arguments.callee.caller); return newer; });obj.propに値を代入してる関数を調べるテクニックの紹介。 下のスクリプトはFC2Blogではてな記法を使えるようにする(デバッグ…

faviconでライフゲーム

The Game Of Lifeに置いた。FirefoxとOperaではfaviconを動的にセットできるが、Safariでは不可能。 単にhrefを変えれば良いというものではなく、appendChild等でDOMツリー上の位置を現在のfaviconより下?にしなければ認識されない。 <html> <head> <title>The Game Of Life</title> </head></html>

JSON判定(構文解析の練習)

そういえばこういうのまともに書いたことないなと思って練習がてらJSONのシンタックスが正しいか判定する関数を作った。 だいたいhttp://www.ietf.org/rfc/rfc4627.txt?number=4627: JavaScript Object Notation (JSON)に沿って書いた。 minus記号を判定する…

ルビをつける

WebKitにrubyタグのレンダリングのサポートが入ったので、新聞社のサイトなどで狡猾(こうかつ)な犯行などと書いてあるものをrubyタグで包むスクリプトを書いた。 // console.time("benchmark"); var r = document.evaluate( './/text()[contains(., "(")]…

HTML5のcanvasでテトリス

canvas thisに置いた。 JavaScriptの部分は下記の通りで、テトリスの画面の二次元配列とブロックの二次元配列を保存して、画面の上にブロックを重ねるように描画するというごく普通の実装。 画面の端を壁にしておくことで、はみだしチェックなどを省くことが…

棒倒し法による自動生成の迷路

JavaScriptによる自動生成迷路に置いた。 function rand(n) { return Math.floor(Math.random() * n); } const width = 33, height = 33; var wall = (1 << (width - 2)) - 1 << 1; var table = [1 << (width - 2)]; var stripe = 0; var i, j; for (i = 1; …

WebKitにObject.getOwnPropertyNamesが入った

ES5のObject.getOwnPropertyNamesが入った。これは何をするメソッドかと言うと、enumerableでないプロパティを含めて全てのプロパティを列挙する物である。 つまり、 alert(Object.getOwnPropertyNames(Array.prototype).join("\n")); /* length,constructor…