IP アドレスを格納するのに最適なカラム型

MySQL4.x で IP アドレスを保存するには、int にして、関数で変換して利用してやると文字列よりも加工がしやすい。

mysql> SELECT INET_ATON(“209.207.224.40”);
       -> 3520061480

mysql> SELECT INET_NTOA(3520061480);
       -> “209.207.224.40”

ネットマスクは例えば次のようにチェックできる。

mysql> select INET_ATON(“192.168.0.255”) & INET_ATON(“192.168.0.0”) = INET_ATON(“192.168.0.0”);
       -> 1
 
mysql> select INET_ATON(“192.167.255.1”) & INET_ATON(“192.168.0.0”) = INET_ATON(“192.168.0.0”);
       -> 0

自動的にリソースを開放する構文

System.IDisposable を実装していると、using(obj){ /* … */ }という構文が使える。たとえば

Graphics g;
Brush b;
try{
g = pictureBox1.CreateGraphics();
b = new SolidBrush(Color.Black);
g.FillRectangle(b, 10, 0, 100, 100);
}finally{
b.Dispose();
g.Dispose();
}

は,

using(Graphics g = pictureBox1.CreateGraphics()){
using(Brush b = new SolidBrush(Color.Black)){
g.FillRectangle(b, 10, 0, 100, 100);
}
}

と等しい。
標準クラスライブラリでは多くのクラスがこのインターフェイスを実装しているため、ファイルアクセス、データベースアクセスなどでも利用できてなかなか便利。
参考:
– C# Tips −usingを使え、使えったら使え(^^)
– .NET Framework クラスライブラリ – IDisposable インターフェイス

マウスの中ボタンの押下を検出する

Key.isDown(4) で状態を取得できる。

this.bPrev = false;
this.onEnterFrame = function() {
    var bState = Key.isDown(4);
    if (bState != this.prev) {
        if (bState) {
            trace(“pressed!!”); // onPress
        } else {
            trace(“released!!”); // onRelease
        }
        prev = bState;
    }
};

Java で簡単に使える SMTP サーバパッケージ

Dumbster
Java 用のメール受信ができるパッケージ。
– メール送信処理の単体テストに使える。

SimpleSmtpServer server = SimpleSmtpServer.start(); // ローカルポート25 を Listen
// テストする処理: localhost 宛のメール送信処理
server.stop();
 
// 受信メール数
assertEquals(1, server.getReceivedEmailSize());
// 一通目のメールを取得する。
SmtpMessage email = server.getReceivedEmail().next();
// タイトル
assertEquals(“Test Subject”, email.getHeaderValue(“Subject”));
// 本文
assertEquals(“Test Body”, email.getBody());

HTTP プロトコルの POST リクエストサンプル

POST /path/to/file.cgi HTTP/1.0
host: example.com
Content-Length: 13
 
foo=1&boo=abc
 

POST Request のときは HTTP Response と同じように、空行を挟んで header, content に分かれる。
GET で ? 以降に与えていたものを、Content 部分に入れる。
Content-Length ヘッダに、Content 部分の長さ(パラメータ文字列のバイト数)を指定すること。

SSH でよく接続が切れる場合の対処

sshd_config で

# Setting timeout of connections.
# Default is..
# ClientAliveInterval 0
# ClientAliveCountMax 3
# 2 minites (10sec * 12 times = 120 sec)
ClientAliveInterval 10
ClientAliveCountMax 12

とかして、2 分間は猶予を与えることにした。
 
– ClientAliveInterval – 生存チェックをする間隔(デフォルトでは一切チェックしない)
– ClientAliveCountMax – 生存チェックする回数(デフォルトは 3 回)
 
サーバ側がいじれない場合はクライアントサイドの ssh_config で

>

ServerAliveInterval 10
ServerAliveCountMax 12

とすれば同じ効果があるらしい。
 
参考:
– OpenSSH FAQ – 2.12 なにもしないで N 分たつと ssh 接続が固まるか、切れるかするんだけど。
– MAN – sshd_config.0
– MAN – ssh_config.0

PHP + MnogoSearch について

– FreeBSD の ports で入れられた mnogosearch が気になったので調べてみた。
– PHP4, PHP5.0.x では configure オプションで –with-mnogosearch=/usr/local みたくすれば利用可能だが、PHP5.1 からは PECL に移動していた。また Windows では PHP での MnogoSearch は非対応とのこと。
<http://jp2.php.net/manual/en/ref.mnogosearch.php>

    Note: This extension has been moved to the PECL repository and is no longer bundled with PHP as of PHP 5.1.0.
    
    Note: This extension is not available on Windows platforms.

PHP5.0.x までのバージョンについては、PHPマニュアルの User Contributed Notes を見ると例がある。
 
PEAR の Search_Mnogosearch を使うと便利そう。
 
PHP5.1 ではメンテナンスされてないようで、PECL のパッケージ一覧(pecl.php.net)で見当たらなかった。
 
代替ライブラリは Namazu かな..

Windows 2000/XP をリモートからシャットダウンする

http://www.atmarkit.co.jp/fwin2k/win2ktips/374rmtshutdown/rmtshutdown.html

shutdown -s -m \\hostname

なんてコマンドがある、と。RPC 使ってるのかなー

shutdown /?

を参照。
追記(2006-03-14): リモートからではないが、cygwin に UNIX 系 の shutdown プログラムが付属するのでそちらを使うのもよい。

shutdown -s now