setTimeout() vs ハッカー、仁義なき戦いによると function isNativeFunction(func, name) { for (var o in func) { if (o === "toString") return false; } var match = func.toString().match(/^function (\S+)\(\)\s*{\s*\[native code\]\s*}$/); return (match && match[1] === name); } setInterval = function(){}; isNativeFunction(setInterval, 'setInterval'); // false でsetIntervalが偽装されているか調べられると書いてあるが、そんなことはない。 自分が普段使っているブラウザはSa
PHPのコレクション処理ライブラリUnderbar.phpの紹介 こんにちわちわ。 以前に便利なVimのOperatorをマスターするを書きましたemonkakです。 今回は私が個人的に開発を進めていて以前に社内勉強会で発表しました、PHPのコレクション処理ライブラリのUnderbar.phpの紹介をしたいと思います。 PHPのarrayなんとか関数は使い勝手が悪い PHPには配列処理のための関数がたくさんありますが、array_map()の引数の順番が変だったりarrayがそもそもオブジェクトではないのでメソッドチェインができなかったり使い勝手が良くありません。 $xs = range(1, 10); $twice = function($n) { return $n * 2; }; array_slice(array_map($twice, $xs), 0, 3); // [2, 4,
Monads All the code for this post are available here.https://github.com/santoshrajan/monadjs Consider the map functor from the last chapter. We could use map to iterate over two arrays adding each element of the first to the second. var result = [1, 2].map(function(i) { return [3, 4].map(function(j) { return i + j }) }) console.log(result) ==>> [ [ 4, 5 ], [ 5, 6 ] ] The type signature of the inne
Unserscore.jsや互換ライブラリのLo-Dashを使うと関数合成が出来ます。 複数個の関数があって、関数を呼び出した結果を使って関数を呼び出して…っていうのを1個の関数にします。 ドキュメントの例を見れば分かるかと。 簡略化のために関数合成の対象になる関数を1引数・戻り値ありの関数とします。 これを非同期処理をする関数に当てはめるとcallbackを含む2引数・戻り値なしの関数が当てはまるでしょう。 この場合のcallbackは1引数の関数とします。 まず、logを出力するcallback関数を定義しましょう。 function log(result){ console.log(result); } 次にcallbackを含む2引数・戻り値なしの関数を定義します。別に非同期処理はやっていないです。 // 1を足す function add1(callback,arg){ call
JavaScriptのクロージャを一言で言うと、「自身が定義されたスコープにおいて変数を解決する関数」となります。 少し複雑ですが、マスターすれば何かと便利な概念なので、解説したいと思います。 ちなみに、JavaScript未経験なFlex開発者にオススメしたいClosure ToolsのClosure Toolsとは別物です。まぎらわしくてすみません。 例 var f = function() { var i = 0; return function() { return i++; } }(); console.log(f());// 0を出力 console.log(f());// 1を出力 console.log(f());// 2を出力 変数iは、匿名関数のローカルスコープに定義されています。ローカルスコープの変数は、関数の処理が終わると無くなってしまうのが普通ですが、関数fの出力
ご無沙汰してます、nazomikanです。 最近、趣味でフラクタルとかで遊ぶことが多く、フラクタル特有な計算量の多さに日々ブラウザが悲鳴をあげています。 そんなこともあってUI-Blockをさせないようにあれこれやった手法を紹介 まず最初に何も考えずに描画するコード 描画コード (github) ディレクトリ構成 (github) 結果(ブラウザ落ちるかもしれないので新しいウィンドウで見ることをおすすめします) http://nazomikan.com/archive/20121007/001/ まぁ当然大きな画像で、かつ1pxごとに計算して色を決めてるわけなので940*940ともなると死ぬほど処理がブロックされてブラウザ固まります。 残念ですね、非常に残念ですね、もはやブラクラです。 昔から大きな処理をするときはasyncにしなさいというのでlazyLoop(非同期なループ処理)を適用さ
JavaScript has been described as a Functional Oriented Language (this as opposed to Object Oriented Language). The reason is because functions in JavaScript do more than just separate logic into execution units, functions are first class citizens that also provide scopeL1 and the ability to create objects. Having such a heavy reliance upon functions is both a blessing and a curse: It's a blessing
http://events.html5j.org/conference/2012/09/ function hoge () { alert('ECMAScript valid'); } URLそのまま貼っちゃった!
partial = (f) -> require_length = f.length partialized = (args...) -> if require_length <= args.length # 関数に必要な引数がすでに足りている g = f.apply(null, args.slice(0, require_length)) # 適用して結果を取り出す if typeof g is "function" # 結果、関数が返ってきた # args の余りから、次の関数を更に部分適用して返す partial(g).apply(null, args.slice(require_length))) else g # 関数以外のものがきたら、適用しきった事にしてオブジェクトを返す else # 引数が足りてない場合、足りない引数を待ち受ける関数を返す partial_apply =
2012年01月06日23:15 カテゴリLightweight Languages javascript - 比較(comparison)と変換(coercion) JavaScript: The Good Parts Douglas Crockford / 水野貴明訳 [原著:JavaScript: The Good Parts] 大事なことなので何度でも言うべきでしょうか。 [javascript]true or false 論理値の挙動については、いまいち感覚的に理解しにくい印象です Crockfordの言う通り、===と!==を使いましょう。 Demo ==と!=がいかに挙動不審かを、実際に表にします。textareaには表に入れたい値を入力してみてください。void(0)と1/0とparseInt('nan')は、確実にundefinedとInfinityとNaNを得るための方
2011年12月27日17:15 カテゴリ algorithm - 重みをつけて乱択する 数学ガール/乱択アルゴリズム 結城浩 同意なのだけど… Perlで生でrand関数をごちゃごちゃ使うコードはもう嫌だ | hirobanex.net とにかく、プログラムッチクというとなにかとランダムという要件が多いし、こんなコードばかりグチャグチャ書くのはもういやですね。 これを一般化するという問題はアルゴリズムの実習にちょうど手頃なサイズなので。 JavaScriptによる実装 頻度を高い順に並べて、乱数<合計頻度となったところでそれを選択します。O(n)ですが選択肢を頻度順に並べることでその分ループが回る確率を抑えています。 (function(global){ var make_random_picker = function(picks){ var choices = Array.proto
http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming にて大変有用な書き方を身に着けた。 Function.prototype.bindとFunction.prototype.callの黒魔術的なもの。 obj.hasOwnProperty("prop"); と書くところをcallで書くと var func = Object.prototype.hasOwnProperty; func.call(obj, "prop"); と書ける。さらにcallをbindしてみると var func2 = func.call.bind(func); func2(obj, "prop"); となる。さらに、bindをbindすると var func3 = func.bind.bind(func.call)(func
2012年01月04日21:00 カテゴリLightweight Languages algorithm - mapBetween - 配列の隣接する2項にそれぞれ演算を施した配列 言語を増やしたかったのと、そういう関数に名前を付けたかったのとで1 entry割くことにしました。 等差数列 - タイトル 配列の隣接する2項にそれぞれ演算を施した配列を得たい。つまり、 f (+) [1,2,3,4,5] = [3,5,7,9] のような f が欲しい。 名前 もちろん等差数列を作るのにもこの関数は使えるのですが、この一般的に使える関数に使う名前としてはあまりに局所的。というわけで mapBetween としてみました。使いどころはかなり多そうです。各言語に標準装備されていないのがちょっと不思議なほど。 JavaScriptによる実装 Array.prototype.mapで滅多に使われない第
JavaScriptとprivateの見果てぬ夢 (JavaScript Advent Calendar 2011 オレ標準コース 6日目) JavaScript Advent Calendar 2011(オレ標準コース)6日目です。他の方々のレベルが高すぎてビクビクしながら書いてます。 JavaScriptのオブジェクト指向は若干クセがあります。他のオブジェクト指向言語を使ってきた人にとって気になるのは、privateが作れないことでしょう。JSで教科書通り素直にクラス(もどき)を書くと、オブジェクトのプロパティは全てpublic、完全にオープンなものになってしまいます。 var Klass = function(){}; Klass.prototype = { methodA: function(){ ... }, methodB: function(){ ... } }; //---
JavaScript Advent Calendar 2011 (オレ標準コース) : ATNDの11日目の記事です。 HTML5ではArrayBuffer、TypedArray、BlobBuilderなどのバイナリを扱うのに適したAPIがあります。というわけで、試しにMP4の動画からAACを抽出してみました。ソースコードはgithubを参照してください。 MP4ファイルからAACを抽出する手順は以下のようになります。 1.MP4ファイルをパースする 2.パースした情報を元に、音声部分を連結する じゃ、まずMP4ファイルをパースしてみます。 MP4や、その派生である携帯電話向けの3GPP、3GPP2などのファイルフォーマットはボックス(あるいはその基になったQuickTimeでの用語のAtom)と呼ばれるデータブロックで構成されます。ボックスによってはその内部にさらにボックスが入れ子になる
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く