ufw@Ubuntu でRuleを削除する

初期構築したあとは、ファイアウォールに手を入れることがあまりないので、
ufw でルールの追加・削除する構文はつい忘れがち。
今回は Rule を削除するときに簡単な?覚えやすい?方法を知ったのでメモ。
コマンドラインで numbered をつけると、行頭に番号が振られます。

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 80                         ALLOW IN    Anywhere

そして、以下のように、削除したい Rule を指定すれば削除できます。

$ sudo ufw delete 2
広告

JavaScript の Array クラスを拡張してオブジェクトが含まれているか検索する

配列の中に要素が含まれているか検索したい時に、

var sample = ["foo", "bar"];
if ("bar" in sample)
    ... 

みたいな使い方をしたかったんだけど、
if-in はオブジェクトのプロパティ検索には使えても配列には使えないので、
Array クラスを拡張してみた。

/**
 * 配列にオブジェクトが含まれているか検索する
 *
 * @param {Object} オブジェクト
 * @return boolean 含まれていれば true
 *
 * @example
 * >>> var test = [1, 2, [3, 4], {foo: "bar"}, [5, 6]];
 * >>> test.contains([3, 4]);
 * true
 * >>> test.contains([1, 2]);
 * false
 * >>> test.contains({foo: "bar"});
 * true
 */
Array.prototype.contains = function(value) {
    for (var i in this)
        if (this.hasOwnProperty(i) && this[i].toString() === value.toString())
            return true;
    return false;
};

JavaScript の Array クラスを拡張して要素番号を指定せずに削除する

JavaScript の配列の要素を削除するには、delete や splice を使う方法がありますが、この場合は要素番号を指定する必要があります。

削除対象である要素の要素番号を求めるのが面倒だったので、削除したい要素の値を与えることで削除ができるように Array クラスを拡張することにしました。
拡張した Array クラスは、与える要素が文字や数値だけでなく、配列や連想配列にも対応しています。

/**
 * 配列に対象オブジェクトが含まれていたら削除する
 *
 * @param {Object} 削除したいオブジェクト
 * @return {Object} 削除したオブジェクト。含まれていない場合は false
 *
 * @example
 * >>> var test = [1, 2, [3, 4], {foo: "bar"}, [5, 6]];
 * >>> test.remove([3, 4]);
 * >>> console.log(test)
 * [1, 2, {foo: "bar"}, [5, 6]]
 * >>> test.remove({foo: "bar"});
 * >>> console.log(test);
 * [1, 2, [5, 6]]
 * 
 */
Array.prototype.remove = function(value) {
    for (var i in this)
        if (this.hasOwnProperty(i) && this[i].toString() === value.toString())
            return this.splice(i, 1)[0];
    return false;
};

JavaScript の String クラスを拡張して文字列を一括置換する

コーディング中に、(@tell_kみたいに) ついカッとなって、
JavaScript の Stringクラスを拡張してしまった。
引数に、文字列だけでなく配列や連想配列を渡せます。

/**
 * 文字列を一括置換します。
 *
 * @example
 * >>> "Hello World!!".replaceAll("o", "x")
 * "Hellx Wxrld!!"
 *
 * >>> "%s: %s (by %s)".replaceAll("%s", ["2012/03/03", "こんにちは世界!", "ryuzi"])
 * "2012/03/03: こんにちは世界! (by ryuzi)"
 *
 * >>> var data = {$date: "2012/03/03", $msg: "こんにちは世界!", $user: "ryuzi"};
 * >>> "$date: $msg (by $user)".replaceAll(data)
 * "2012/03/03: こんにちは世界! (by ryuzi)"
 */
String.prototype.replaceAll = function() {
    if (arguments.length == 2) {
        var src = arguments[0];
        var dist = arguments[1];
        if (typeof src == "string") {
            if (typeof dist == "string") {
                return this.split(src).join(dist);
            } else if (typeof dist == "object" && typeof dist.length == "number") {
                var result = this;
                for (var i=0; i<= dist.length; i++)
                    result = result.replace(src, dist[i]);
                return result;
            }
        }
    } else if (arguments.length == 1) {
        var dist = arguments[0];
        if (typeof dist == "object") {
            if (typeof dist.length == "undefined") {
                var result = this;
                for (key in dist)
                    result = result.replace(key, dist[key]);
                return result;
            }
        }
    }
    return Error("replaceAll の引数指定が正しくありません");
};

pythonbrew で Python をインストールするときのオプションメモ

Python をインストールするときの configure オプションを指定しないと、SSLサポートしなかったりといろいろ面倒なので、よく指定するオプションを、ここでメモとして残しておきます。

以下は、Python 2.7.2 をインストールする場合

$ pythonbrew install --configure=' \
  --with-zlib \
  --with-ssl \
  --with-readline \
  --with-ncurses \
  --with-sqlite3 \
  --with-crypt \
  --with-md5 \
  --with-sha' \
  2.7.2

参考までに、pythonbrew install の構文はこんな感じ。
時間掛けたくない場合は –no-test オプションを付けてもいいでしょう。

$ pythonbrew install --help
Usage: pythonbrew install [OPTIONS] VERSION

Options:
  -h, --help            show this help message and exit
  -f, --force           Force installation of python.
  -n, --no-test         Skip `make test`.
  -v, --verbose         Display log information on the console.
  -C CONFIGURE_OPTIONS, --configure=CONFIGURE_OPTIONS
                        Options passed directly to configure.
  --no-setuptools       Skip installation of setuptools.
  --as=ALIAS            Install a python under an alias.
  -j JOBS, --jobs=JOBS  Enable parallel make.
  --framework           Build (MacOSX|Darwin) framework.
  --universal           Build for both 32 & 64 bit Intel.
  --static              Build static libraries.