83's

Top > Tags > JavaScript

JavaScript

タイトル一覧を表示 | 本文を表示

スパム2 March 12, 2007 05:37

某サイトのコメントスパムやトラックバックスパムの件だけど、 コメントのほうはprototype.jsによるpostだけ通すようにした。Rails的にはxhr?。 これはリクエストに以下のヘッダがあるかないかをただ見てる。

X-Requested-With: XMLHttpRequest

すでにJavaScript必須な部分があるからこれでいいや。 今まで来てたスパムは完全に蹴ることができた。 まあ仕様変更直後だから当り前だけど……><

スパマーがこれを偽装するのは簡単だけど、 そしたら独自のヘッダ使えばいいだろうし。

そのときのためにメモっとくか……。最近記憶力ないんだ……。

new Ajax.Request(path, { method: 'post', requestHeaders: [ 'key', 'value', ... ], ...});

なんでrequestHeadersは配列なんだろうね……。

あとトラックバックスパムは参照リンクの有無を見るようにした。 これでも稀にくるみたいだけど、まあ効果はかなりある。

この歳になって==と=を間違えるとは March 09, 2007 15:40

はてブでタグを除外して絞りこむgreasemonkeyで ==と書くところが=となっていたために、 そのページにあるキャプチャ画像のように編集アイコンとかいろいろゴソっと消えてました。

ちょっと前に直したんだけど、もし使ってくれてる人がいた場合 そういうことですのですみませんでしたという告知エントリ。

$break, $continue November 24, 2006 07:28

ん、prototype.jsのeachとかでbreakとかすんのはどうすんのかとか思ったら、 $breakとか$continueをthrowするのか。とかいうメモ。

JavaScriptでmapにインスタンスメソッド直接渡したい October 18, 2006 22:47

JavaScriptってこう書けてクールだよね。

// JavaScript(with prototype.js)
[ 1, 2, 3 ].each(print);

;; Scheme
(for-each print (list 1 2 3))    ; Schemeタンひさしぶり…

# Ruby
[ 1, 2, 3 ].each {|a| puts a }   # 少々いけてない

インスタンスメソッドについてもこういう書き方ができないかなと思った。 でもprototype.jsはmapやeachに渡した関数を実行するときthisが期待している インスタンスとは違うのでうまくいかない。

// prototype.js is included

var A = Class.create();
A.prototype = {
  initialize: function(value) { this.value = value },
  getValue: function() { return this.value },
  show: function() { console.debug("value: " + this.value) }
  };

array = [ new A(1), new A(2), new A(3) ];
console.debug(array.map(A.prototype.getValue));    // [undefined, undefined, undefined]
array.each(A.prototype.show);                      // value: undefined

thisがリストの要素を参照するようにしてやればいいので、 そうなるようにprototype.jsを変更してみる。

  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator.bind(value)(value, index++);   // .bind(value)を追加
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },

  ……

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.bind(value)(value, index));   // .bind(value)を追加
    });
    return results;
  },

prototype.jsはほとんど読んでないんで変更がほかのところに影響しちゃうかもしれないけど、 とりあえずこれで上のmap(collect)とeachはうまくいく。 あとはEnumerableな関数にちまちまとbindしてけば良さそう。

Rubyの

array.map(&:getValue)

より断然いけてる気がするんだけど。

にしてもJavaScriptはthisが文脈中でころころ変わってなかなか慣れない。

prototype.js便利(何ヶ月遅れ?) September 08, 2006 02:09

なんてこった。mapがねーとか愚痴ってたけど、なんか言われてみればRubyからメソッドぱくったJavaScriptライブラリなんて話をさらっと見た記憶が。すっかり忘れてた。それってprototype.jsだったのか。「今頃かよ」って感じだけど、興味ないものについての知識なんてこんなもんです……。しっかし、これ使ってたら今週はもうちょっとイライラしないですんだなー。

JavaScriptはもっとストレスフルなのかと思ってできるだけ避けてきたけど、意外と面白いな。てか、ただのバイトプログラマってだけのオレに必要なのはリスト処理関数とlambdaとオブジェクトだけなんでそんだけあればなんでも快適に感じるわ……薄いなーオレの技術。

ひさびさにまともにJavaScript書いた September 07, 2006 21:18

なんかせっかくrails.vimのヘルプを読んだのに(w、今週のバイトはひたすらJavaScriptでした。Railsはテンプレートくらいしか触ってない。そしてそのテンプレート開いて書いてるのはJavaScriptだったりするww

JavaScriptはオレのプログラミングの原点なんだけど、ブラウザに依存するところが嫌いでほとんどやらずに来た。でもね、今週触ってて気づいたんだけど、functionってlambdaじゃん! おかげでちょっと好きになれました。この点についてはRubyよりもScheme(LISP)色が強い使用感だった。あー、括弧が書きたくなってきたー……。

ただね、lambdaはあってもmapとかfilterとかそういうのないような。ダメじゃん。結局配列はインデックスごろごろ回してめんどくさいことになる。あとreturnて長い。邪魔。書き忘れてもエラーにならないから余計に邪魔。