処理に時間がかかるけれども、一定時間は結果が変わらないような関数の結果をキャッシュしたい。 例えばgetElementsByTagName("*")なんかを頻繁に呼び出すようなコードがあったとして、結果をキャッシュしたいけれど画面描画が発生すると使えなくなってしまう。setTimeoutで0ミリ秒後にキャッシュを消す処理を入れておいて、画面描画と関係のある処理はタイマーで実行するような制約を付けてコードを書けばDOMが絡む処理の結果もキャッシュすることができる。というようなケースに使えるような気がする。 Function.prototype.timed_memoise = function(ms){ var self = this; ms = ms || 0; var memo = {}; var clear_q = false; function clear_cache(){memo={
ExternalInterface.addCallback で定義された関数は apply できない http://d.hatena.ne.jp/nitoyon/20070214/p1 っていう記事に書いてあるコードを手直し。Flashをいじってないんで、上手く動くかどうかよくわかんないですが、こんな感じでいけると思います。 function applySwf(swf, method, args){ if(swf && typeof swf[method] == "function"){ var params = []; for(var i=0;i<args.length;i++) params[i] = "_"+i; Function( params.join(','), "this("+params.join(',')+")" ).apply(swf[method], args); }
The encoding known today as UTF-8 was invented by Ken Thompson. UTF-8 is a variable-length character encoding for Unicode. It can represent any character in the Unicode standard, yet is backwards compatible with ASCII. Use this Javascript to encode decode UTF-8 data. Don’t forget to set the page encoding to UTF-8 (Content-Type meta tag). Source code for webtoolkit.utf8.js /** * * UTF-8 data encode
Deferrdはまだ見てないんだけど、適当に作ってみた。 function execWhen(cond, proc, opt) { var opt = opt ? opt: {} var limit = opt.limit || 10000 var interval = opt.interval || 500 var current = 0 var timer = null intervalProc() function intervalProc() { if (cond()) { proc() clearTimeout(timer) } else if (current < limit) { timer = setTimeout(intervalProc, interval) current += interval } else { clearTimeout(timer) throw n
http://d.hatena.ne.jp/shot6/20070115#1168832742の場合、jsでgetElementByIdでどうやって取得したらいいのか? ってお話 かなり有名な話なのでいまさらって感じだけど。 高速で複数要素を拾い上げる場合に使うテクニックなんだけど var nodes = []; var elem = document.getElementById(v); while(elem){ nodes.push(elem); elem.id = ""; elem = document.getElementById(v); } で取得できる。 idは処理後戻す方が良い。 元ネタはAlexたんとこ。 (アソコかも知れないけど。) dojo.behaviorに実際使われてる(はず)ので見てみるといいかも。 (kumu.ajaxでも使われてるけど) うくく。
GT Nitro: Car Game Drag Raceは、典型的なカーゲームではありません。これはスピード、パワー、スキル全開のカーレースゲームです。ブレーキは忘れて、これはドラッグレース、ベイビー!古典的なクラシックから未来的なビーストまで、最もクールで速い車とカーレースできます。スティックシフトをマスターし、ニトロを賢く使って競争を打ち破る必要があります。このカーレースゲームはそのリアルな物理学と素晴らしいグラフィックスであなたの心を爆発させます。これまでプレイしたことのないようなものです。 GT Nitroは、リフレックスとタイミングを試すカーレースゲームです。正しい瞬間にギアをシフトし、ガスを思い切り踏む必要があります。また、大物たちと競いつつ、車のチューニングとアップグレードも行わなければなりません。世界中で最高のドライバーと車とカーレースに挑むことになり、ドラッグレースの王冠
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
空繰再繰 - Javascriptでオブジェクトの生成をフックするを見ていてどっかで書いたことのあるコードだなーと思っていたら、そうそうjavascriptのプロファイルを作るときにフックしたなーと。 最近だと(new Hatena).blog() - JavaScript でプロファイリング (シンプル版)で書かれているみたいなヤツ。 まぁjavascriptの場合prototypeからslot(property ?)を探せばfunctionにフックは簡単にできるので、プロファイリングとかで結構使える手段です。 たぶん、これはAOPでいうところのAdviceみたいなもので、前処理、後処理に関してfunc = function()とorigin.apply(dest, arg)といかにもわかりやすい文法が使える上にクロージャが使えるjavascriptはある意味凄い。 だって、こんなコ
DOM APIを使用して作ったDOMツリー、うまく生成されているか見てみたい事は多々ある。少なくともオイラはある。簡単にテキスト表示してくれると嬉しいなぁと常々思っていたのだが発見した。 Firefox(というかMozilla系かな)限定だろうけどXMLSerializerがあるのだ。 使い方は簡単。 var serializer = new XMLSerializer(); //略 var root = document.createElement('div'); var anchor = document.createElement('a'); var aText = document.createTextNode('はてな'); anchor.setAttribute('href','http://www.hatena.ne.jp/'); anchor.appendChild( aT
無名の遺跡15 建物が解体された土地を訪れると、時々、塀やコンクリートの基礎などが撤去されずに放置されているのを見かける。 このような過去の痕跡が残されている空き地を、本ブログでは"無名の遺跡"と呼んでいる。 無名の遺跡が生み出される原因の多くは、解体や撤去費用を抑え…
JavaScript MochiKit.Async.Deferredは、「現時点ではまた利用できない値」を扱うためのクラスです。 以下のように、コールバックを並べ、イベントを発火させると、各々の返り値が次のコールバックへ渡され実行されていきます。 function increment(value){ alert(value); return value+1; } var d = new Deferred(); d.addCallback(increment); // alert(1) d.addCallback(increment); // alert(2) d.addCallback(increment); // alert(3) d.callback(1); この時、コールバックは以下のようにチェーンを形成しています。(本当はエラーバックも合わせて一つのチェーンを形成しているのですが、
javascriptはFunction.prototypeに追加したメソッドで元の関数の挙動を変更することができる。 later 最速インターフェース研究会 :: Function.prototypeを拡張して遅延実行を実現する 関数の実行を指定時間後に行なう。 var func = function(v){alert(v)}; func.later(1000)("1秒後に警告"); func.later(2000)("2秒後に警告"); func.later(1000).later(2000)("3秒後に警告"); (function(v){alert(v);arguments.callee.later(1000)(v)}).later(1000)("1秒ごとに実行") callTimeout, callInterval Kazuho@Cybozu Labs: setTimeout をオ
最新版はこちら → JavaScriptで外部ライブラリを読み込むためのスクリプトをCodeRepos.orgに上げた。 - ヒルズで働く@robarioの技ログ 改良に伴い、エントリーを全面的に書き換えました。 後から再利用できるように名前を付けました(ScriptRunner) 外部JavaScriptを読み込むタイミングを最初に持ってきました。今まで外部JavaScriptを読み込むだけの場合でもScriptRunner({...}) ();と書かないといけなかったのですがScriptRunner({...});と書けるようになりました。 外部JavaScriptの読み込み後、arguments.calleeを返すようにしました。これにより、ScriptRunner({...}) () () () () () () ;と書いても動くようになりました。 外部JavaScriptの読み込
この前の続き。 Function.prototype.cached = function() { var f = this; var args = arguments; f._cache = new Cache(function_name(f) || "", args[0] || 10, args[1] || function(){return 1}, args[2] || function(){return 1}); return function() { var cache = f._cache.get(arguments); if (cache) { return cache; } else { cache = f.apply(f, arguments); f._cache.set(arguments, cache); return cache; } }; }; // via htt
「IT戦記 - JavaScript で遅延評価」より。遅延評価といえばたらいまわし関数と相場が決まっている、ような気がする。 function tak(x, y, z) { return (x <= y) ? y : tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y)); } これを元記事に従って書き直すとこうなる。 // from http://d.hatena.ne.jp/amachang/20061204/1165180769 Function.prototype.lazy = function () { return { valueOf: this }; }; function takL(x, y, z) { return (x <= y) ? y : takL(takL(x - 1, y, z), takL(y -
関数を非同期化する関数を作ってみた。 Function.prototype.asynchronize = function() { var f = this; return function() { var resultcb = function() {}; var failcb = function(e) { throw e }; if (typeof arguments[arguments.length - 1] == 'function') { resultcb = Array.prototype.pop.apply(arguments); if (typeof arguments[arguments.length - 1] == 'function') { failcb = Array.prototype.pop.apply(arguments); } } try { var re
岡村 直樹(にゃるら)『輝かしい青春』なんて失なかった人。 2023年10月現在、アルバイトが退職となったので次に備えて待機中。 ※なおゲームのシナリオ・企画を担当された『にゃるら』さんとは別の人間です 略歴1988 年代の早生まれ。『輝かしい青春』なんて失なかった人。 2003 年代後半の高校生時代、自滅的にメンタルを病み、そこから 2023年 10月現在も治療中。 とはいえ 2019年 9月頃に N 高等学校を卒業し、 その後 2022年 8月から 2023年 9月末まで Web アプリケーションエンジニアとしてアルバイト就職をするなどした。 2023年 10月現在、次回の備えて精神科でリハビリに通う日々を送っている。 プログラミングスキルは 2005 年頃、 blosxom のために Perl を扱う事を通じて修得し、 そこから 2023年 10月に至るまで継続して腕を磨いている。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く