タグ

ブックマーク / murky-satyr.hatenadiary.org (18)

  • IIFE - ellaneous

    http://benalman.com/news/2010/11/immediately-invoked-function-expression/ について。 訳 「即時実行関数式」は長いので「即行関数」としたい。 そのまま「IIFE」でもいいが検索性に難あり。 書き方 !function(){}() ~function(){}() + と - 、及び括弧で括るのは ASI を妨げるのでよくない。 void は冗長。new は無駄。 値を返す場合は定義と紛らわしいので括るか new する。 r = (function(){}()) r = new function(){} (function(){})() でもいいが見た目の対称性を考えると上記*1。) { 派の人は末尾も開けて (function () {} ()) とすると対称になってよろしい。 *1:同じ理由で波括弧の前には空白を入れ

    IIFE - ellaneous
    efcl
    efcl 2011/05/23
    即時実行関数、即効関数の名前 new function(){}
  • kc2ks - ellaneous

    keyconfig の設定を KeySnail に引き継ぐ。 https://gist.github.com/858606 2011-03-24 Fx4 を期に乗り換えるつもりで書いたが、若干の変更のみであっさり動いたため結局 keyconfig を使い続けている。そもそも用途が完全に被るわけではないので両方入れておくと便利。

    kc2ks - ellaneous
    efcl
    efcl 2011/03/08
    keyconfig の設定を KeySnail に引き継ぐスクリプト
  • escape(_,0) - ellaneous

    SpiderMonkey の escape() は第二引数にビットフラグを受け取る。 AmazonAPI 用にこんな関数を書いてて気付いた。 function amazEnc(str) encodeURIComponent(str).replace(/[!\'()]+/g, escape).replace(/[*]/g, '%2A'); amazEnc('unescape(_)') //=> Error: invalid string escape mask 8 この 8 は replace() が escape() に渡したマッチ位置。 該当ソースコードを見てみる。 /* * Contributions from the String class to the set of methods defined for the * global object. escape and un

    escape(_,0) - ellaneous
    efcl
    efcl 2011/01/28
    SpiderMonkey の escape() は第二引数にビットフラグを受け取る
  • gist logs - ellaneous

    http://gist.github.com/105913 のおかげでやり方が判ったので Revisions のところに commit log を表示するのを書いた。 http://gist.github.com/107780.txt?.user.jsログ付きで更新してる人が自分以外に見つからず哀しい。

    gist logs - ellaneous
    efcl
    efcl 2011/01/28
    gistにコミットログを表示するGreasemonkey
  • ckup - ellaneous

    https://github.com/satyr/ckup http://satyr.github.com/ckup https://github.com/mauricemach/coffeekup の劣化コピー。 これで JS に続き HTML も書かずに済む。次は CSS かな。

    ckup - ellaneous
    efcl
    efcl 2011/01/08
    CoffeeKupの移植 マークアップをCocoで
  • $n - ellaneous

    mayokaraさんとこで見たノード構築関数を弄ってたら別物に。 function $n(name /*, [[attr], child0, child1, ...] */){ var d = this.createElement ? this : this.document || document, e = d.createElement(name), a = Array.prototype.concat.apply([], arguments), x = a[1], o = {}, l = a.length, i, k; if((i = x ? x.toString === o.toString : 0)) for(k in x) o[k] || e.setAttribute(k, x[k]); while(++i < l) e.appendChild((x = a[i]) && x.

    $n - ellaneous
    efcl
    efcl 2010/11/05
    ノード構築関数。HTMLタグを作成するDOM構築関数
  • CoffeeScript - ellaneous

    少し前*1から格的にちょっかいを出し始め、機能を増やしたり*2独自演算子((? ?. ?[] ?() ?= ||= &&=))の挙動をまともにしたり優先順位を直したり細かいバグを潰したり余分な括弧を外したり必要な括弧を付けたり高速化したりウェブコンソールを作ったりした。 仕組みが判ってきたので、最近は提案したけど却下された機能とか個人的に欲しかった機能を盛り込んだブランチを作って遊んでいる*3。目玉は .= 演算子。 $ coco -bpe 'location.protocol.=replace /^http\b/, "$&s"' location.protocol = location.protocol.replace(/^http\b/, "$&s"); JSer にとって CoffeeScript は読み書きしやすい以上の意味を持つ言語。是非フォークして弄り倒しましょう。 *1:0

    CoffeeScript - ellaneous
    efcl
    efcl 2010/11/02
    CoffeeScriptのウェブコンソールconsole
  • typeof / / - ellaneous

    ECMAScript 4 discussion - Callable RegExp vs. typeof Bug 61911 - typeof(/regExp/) should return "object", not "function" (WebKit) Bug 28117 - Native JSON.stringify does not omit functions Bug 582717 - Make regular expressions not callable engine\code typeof/ / / /(0) Function.call.call(/ /,/ /,0) SpiderMonkey (Fx3.6) "object" null TypeError*1 Carakan (Op10.6) "object" null TypeError*2 v8 (GC5) "fu

    typeof / / - ellaneous
    efcl
    efcl 2010/08/09
    正規表現リテラルはcall可能
  • node4x - ellaneous

    XML/XMLList → Node を愚直に。 function node4x(xml, doc){ doc = doc || document; if(xml.length() === 1) switch(xml.nodeKind()){ case 'attribute': let at = true; case 'element': let {uri, localName: name} = xml.name(); if(at){ at = uri ? doc.createAttributeNS(uri, name) : doc.createAttribute(name); at.nodeValue = xml; return at; } let lm = uri ? doc.createElementNS(uri, name) : doc.createElement(name); f

    node4x - ellaneous
    efcl
    efcl 2010/06/13
    XML/XMLList から Nodeへ変換。 XMLからノードへ。
  • Halt Alert - ellaneous

    http://gist.github.com/418451 alert ループ脱出用 uc.js。commonDialog.xul に checkbox を追加する。 Stop script 親ウィンドウのスクリプト実行を不許可に。setInterval(alert,0) とか onkeydown=onmousemove=alert とかに有効。 Wipe window 親ウィンドウを about:blank に。for(;;)alert(0) とかに有効。

    Halt Alert - ellaneous
    efcl
    efcl 2010/05/30
    alert ループ脱出用userchroms.js
  • insertText - ellaneous

    テキストボックス((textarea, input:-moz-any(:not([type]), [type=text], [type=password]))) tbox のカーソル位置へ文字列 text を挿入したいとき,HTMLTextAreaElement の貧弱な機能で実現するとこんな風になる。 var {value, selectionStart, selectionEnd} = tbox; tbox.value = value.slice(0, selectionStart) + text + value.slice(selectionEnd); tbox.selectionEnd = selectionStart + text.length; 一見うまくいくようだが,スクロール位置がリセットされるしアンドゥも狂う。 自然にやるには chrome 権限が必要。*1 const

    insertText - ellaneous
    efcl
    efcl 2010/05/15
    テキストボックスのカーソル位置へ文字列 text を挿入したいとき,HTMLTextAreaElement の貧弱な機能で実現
  • xqjs - ellaneous

    http://github.com/satyr/xqjs (AMO) 簡易JS実行環境。習作第二弾。 機能 DOMi 風の対象ウィンドウ選択 プリプロセッサ JSマクロ CoffeeScript 入力履歴 単語補完 出力用関数とか は this を参照 作成動機 一々 function を書きたくない。 話題の CoffeeScript を試したい。 行儀の悪い Execute JS を置き換えたい。 既定マクロ #{return this} #(this)function f(x,y,z){return this} function f(x,y,z)(this) #'.selector' #a'.selector'document.querySelector('.selector') Array.slice(document.querySelectorAll('.selector'))

    xqjs - ellaneous
    efcl
    efcl 2010/05/05
    FirefoxのJavaScript実行環境 マクロ、CoffeeScript、Execute JSみたいにChromeとcontent両方扱える。
  • Array.withAll - ellaneous

    JavaScriptでArray.fill - Thousand Years おお,賢い。これなら何でも詰められる。 eval版はこんな感じか。 Array.withAll = function(obj, num){ return (num = Number(num)) > 1 ? eval('0,function($){return['+ Array(num).join('$,') +'$]}')(obj) : [obj]; }; 「withAll」は Smalltalk のメソッド名から拝借。

    Array.withAll - ellaneous
    efcl
    efcl 2010/02/24
    配列をある数字埋める関数
  • ランダムにn個 - ellaneous

    配列からn個の要素を重複無しでランダムに取り出す - m2 後の二つ三つ目は一様にならないし,重複する可能性もあるような。 function shuffle(a, n){ // Fisher-Yates var r = a.concat(), l = r.length, n = n < l ? n : l, i = l, j, t; for(i = l; i;) t = r[j = Math.random()*i--|0], r[j] = r[i], r[i] = t; r.length = n; return r; } 証明済みのアルゴリズムで愚直にやるとこうなるけど,n と a.length の差が大きいときに損するか。 + 勘違いに気付いてみると,元ネタの二つ目はまさに損しないやり方。自分--。

    ランダムにn個 - ellaneous
    efcl
    efcl 2010/02/24
    配列からn個の要素を重複無しでランダムに取り出す
  • ブックマークレット作法 - ellaneous

    今や少し複雑なブックマークレットは外部から読み込むのが当たり前になり,gist やら coderepos やらのおかげで置く場所にも困らない。*1 この際の書き方は人によって結構まちまちだが,やることは同じなのだから「これコピペすれば FA」的なテンプレがあってもいいはずと考え,模索してみた。 方針 変更する所を前方にまとめて共通部分は後方に括り出す まず名前を明記 (↓で自明なら省略) その後にスクリプトの URI 複数読めるように 「%nn」が入ると何かと面倒*2なので空白文字を避ける 汚染しない この3つは単体で動くものを書くときにも気を付けると吉。 成果物 javascript:'{name}',['http://a.b.com/0.js','http://l.m.net/1.js',function(d,i,e){for(i=this.length;--i;d.body.appe

    ブックマークレット作法 - ellaneous
    efcl
    efcl 2010/02/24
    ブックマークレットを書くときの作法。 外部スクリプトを読み込んで実行
  • zEn4X - ellaneous

    Zen Coding 風の記述から E4X を生成するのを書いてみた。 zen4x('dl#id.cla.ss > dt{content} + dd > input[type=radio][name=$]*2') <dl id="id" class="cla ss"> <dt>content</dt> <dd> <input type="radio" name="1"/> <input type="radio" name="2"/> </dd> </dl> 使い途は…。

    zEn4X - ellaneous
    efcl
    efcl 2010/02/24
    Zen Coding 風の記述から E4X を生成するのを書いてみた。 Ubiquityコマンド。
  • {__proto__:null} のススメ - ellaneous

    特に新しい話題でもないけど,使われているところをあまり見ない気がするので。 HashMap/Dictionary として narcissus/jsdefs.js#142 にもあるように,単に {} だと Object.prototype が付いて廻るので役に立たないことがある。辞書として使うなら {__proto__:null} にしておいて損はない。 速度稼ぎ 辿る親が居ないのでプロパティアクセスは少し速い。はず。 if(this.dump) print = function(x){ dump(x +'\n') }; if(this.console) print = function(x){ console.log(x) }; function say(){ print('|'+ [].join.call(arguments, '|') +'|') } ['{}', '{__proto_

    {__proto__:null} のススメ - ellaneous
    efcl
    efcl 2009/12/15
    {__proto__:null}を使い何もプロパティがついてないオブジェクトとして使うテク null か undefinedの判定 プロパティをたどるときにCoffeeScriptの.?ライクな書き方 ((hoge || 0).fuga || 0).piyo;
  • 拙作 0.5 - ellaneous

    0.5 API 対応*1のコマンドフィード。新作含む。随時更新。 Pack はてブ(([http //d.hatena.ne.jp/murky-satyr/20080902/1220311192])):hatebu-it, hatebu-hotentry, hatebu-comments, hatebu-search Google(([http //d.hatena.ne.jp/murky-satyr/20090306/google_plusplus])):google, gimages, gvideos, gbooks, gmaps, gcalendar, gcode, gdictionary, gscholar, gmail, greader, gsidewiki, gcalc, grank, gcache, gshorten, gtrends, glucky, gspeak, gbu

    拙作 0.5 - ellaneous
    efcl
    efcl 2009/07/17
    Ubiquityのスクリプト
  • 1