foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

Firefox GreasemonkeyでXPathResult.prototype is undefined

XPathResultを配列と同様に扱いたかったのでprototypeをいじろうとしたけどできない。
しかも以下の結果はundefinedになってしまう…。

alert(XPathResult.prototype);  // undefined

調べてみたらこんなページがあった。

Firefox GreasemonkeyでXPathResultforeachしたい

GreasemonkeyではXPathResultしたかったのだけどprototypeが変更できなかったので関数を作ることにした。

function each(xs, f){
    if(xs instanceof Array){
        for(var i = 0, n = xs.length; i < n; i++){
            f(xs[i]);
        }
        return;
    }
    
    if(xs instanceof XPathResult){
        for(var i = 0, n = xs.snapshotLength; i < n; i++){
            f(xs.snapshotItem(i));
        }
        return;
    }
}

Firefoxでサイト名を取り除いてページタイトルを短くするGreasemonkeyスクリプト

環境

問題

ブラウザへ登録したブックマークのタイトルが長すぎて見つけるのに苦労する。
特にページ名の先頭にサイト名があると邪魔。

解決

余分な名前を取り除いてくれるスクリプトを作成してみた。
settings に設定追加して使う。

(function (){
    var settings = [
        // Amazon
        {
            url: "http://www.amazon.co.jp/",
            patterns: [
                "^Amazon.co.jp: ",
                ":*$",
            ]
        },
    ];
    
    
    function wildcard_to_regexp(wildcard){
        var s = wildcard;
        s = s.replace(/\./g, "\\.");
        s = s.replace(/\*/g, ".*");
        s = s.replace(/\?/g, "\\?");
        s = s.replace(/\|/g, "\\|");
        s = s.replace(/\(/g, "\\(");
        s = s.replace(/\)/g, "\\)");
        return new RegExp(s);
    }
    
    
    function main(context){
        var href = location.href;
        for(var i = 0, n = settings.length; i < n; i++){
            if(0 <= href.indexOf(settings[i].url)){
                var title = document.title;
                
                for(var j = 0, jn = settings[i].patterns.length; j < jn; j++){
                    var re = wildcard_to_regexp(settings[i].patterns[j]);
                    title = title.replace(re, "");
                }
                
                document.title = title;
            }
        }
    }
    
    main(document);
})();

CentOS標準で入っているApacheの他に別プロセスを起動したい

環境

問題

Apacheプロセスを複数起動したい。

解決

いつか設定ファイルをコピー・編集することで複数起動できる。
まずは設定ファイルをコピーする。

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd2.conf
# cp /etc/httpd/conf.d /etc/httpd/conf2.d

ドキュメント・ルートを別個に用意する場合は作成しておく。

# mkdir /var/www/html2

NICやポートの設定

httpd2.conf、conf2.d/ssl.conf を編集しNICやポートが重ならないようにする。
特にNICを分ける場合は元々の設定ファイルも編集する必要があるので注意する。
httpd2.conf の編集箇所は以下。

Listen 192.168.11.102:80
:
ErrorLog logs/error_log2
:
CustomLog logs/access_log2 combined

conf2.d/ssl.conf の編集箇所は以下。

Listen 192.168.11.102:443
:
ErrorLog logs/ssl_error_log2
TransferLog logs/ssl_access_log2

サーバの起動

# apachectl /f /etc/httpd/conf/httpd2.conf -k start

サーバの停止

# apachectl /f /etc/httpd/conf/httpd2.conf -k stop

サーバ起動時にエラーが発生する

サーバ起動時に下記メッセージが表示される場合がある。
ポート番号は80あるいは443が表示される。

# apachectl -f /etc/httpd/conf/httpd2.conf -k start
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

Listen でポート番号のみを指定すると、Apacheは全てのNICをListenしてしまう様子。
そのため、各サーバの設定ファイルでIPを指定すれば回避できる。
http.conf だけでなく、ssl.conf の設定も忘れやすいので注意。

Windowsのmsysgitでログが見られない

環境

問題

コンソールでgit log すると表示が崩れてしまいログが見られない。

解決

msysgitインストール・パスに入っているgit-bash.exeを使うといい。
そのままbash.exeを起動してしまうとカレント・パスがgit-bash.exeのパスになってしまう。
だからgit-bash.exeのショートカットを作って作業フォルダをチェックアウトしたパスにするといい。

Windowsコマンドラインから空ファイルを作成する

環境

問題

コマンドラインから空ファイルを作成したい。
Linuxのtouch的なことをやりたい。

解決

C:\>type nul > hoge.txt