http://members.at.infoseek.co.jp/cssbug/index.html
特に IE について、けっこうな量の不具合があるのだなぁと改めてびっくりです。
例えば vertical-align 周りの動作の怪しさはずっと気になっていたので、検証コードで確認できてすっきりしました。
参考:
– CSS テクニックコミュニティ(mixi)
作者別: ino
Apache パフォーマンスチューニング
パフォーマンスのために必要なモジュールを削る、とか、DSO をやめる、というのは各所で書かれていますが、あんまり例がなかったので書いておきます。
/configure –prefix=/usr/local/apache \
–disable-module=all \
–enable-module=access \
–enable-module=log_config \
–enable-module=dir \
–enable-module=mime \
–enable-module=auth \
–enable-module=status
もう一件、Apach 1.x における MaxClients の限界ですが、
src/include/httpd.h:
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 256
#endif
#endif
という部分で、HARD_SERVER_LIMIT が MaxClients に設定する値以上になるように編集してやればいいです。
参考:
– Apacheパフォーマンス・チューニングの実践(@IT)
– ステップバイステップでApacheをセキュアに(愛の死体安置所)
セキュリティの話ですが、必要なモジュールを削る際に参考になります。
– Apache1.3.33+PHP4.3.10 (cubic9.com)
外部モジュール(サイトにあるのは PHP4)を静的に組み込む例。
configure –help にある、
–add-module=FILE on-the-fly copy & activate a 3rd-party Module
–activate-module=FILE on-the-fly activate existing 3rd-party Module
という設定ですね。
–activate-module=src/modules/php4/libphp4.a
みたく、リンクライブラリを指定するとそれを一緒にビルドしてくれます。
追記 (2006-02-22):
– PHP4 + Apache1.3 チューニング
– Apache設定ファイルをチューニング
Awk マニュアル日本語版
gawk マニュアル
見覚えのある書き方だなと思ったら、拙訳 GNU Make と似ているんですね。さすが RMS 著。
sed, awk は頻繁に使ってるんですが、次のように
cat access_log | sed -e ‘/googlebot/d’ -e ‘/\/robots\.txt /d’ | awk ‘{ print $(11); }’ # access_log で googlebot や /robots.txt を含まない行のうち 11 列目の要素を出力
とか、ただ列を抽出するだけというかわいそうな使い方しかしていなかったのでなかなか目から鱗です。
匿名でユーザ名, 所属グループ名を一覧表示してくれるグループウェア
サイボウズ(R) Office 6 は、設定によらずユーザ一覧、グループ一覧を誰でも閲覧できるようになっているようです。
ag.cgi?page=RMOfficeUserSync
でユーザ一覧の CSV を表示する機能があります。
フォーマットは次のとおりです。
UID,ユーザ名,以下所属グループGIDの列挙
例:
192,”山田 太郎”,100,102,103
194,”山田 花子”,100
NOERROR
以下フッタ HTML 。
(ログイン名ではなく)UID とパスワードでログインすることも可能です。
GID は ag.cgi?page=LoginGroup で一覧で表示されるものと同じです。
検索するとでてくるサイボウズ Office 利用団体は、この機能を知らずに公開してるんでしょう(最初からログインユーザを選択できるようにしているサイトは別として)。
さて、是とするか非とするか。
bind8/bind9 設定の基本
named.conf 全体設定、zone の項目でゾーン(ドメイン、逆引き時の IP アドレス)を定義し、実際の DNS レコードについては、ゾーンごとにゾーンファイルに記述していく。
named.conf:
options {
directory “/etc/named”;
// 任意のディレクトリ名。ここで設定したものが、
// ゾーンファイルなど設定ファイルのルートディレクトリになる。
};
// 正引き(ドメイン -> IP アドレス)用。
zone “example.org” { // example.org ドメインについての定義
type master; // 他の DNS サーバを参照するのではなく、自分で
// DNS レコードを定義する場合は master。
// 他のサーバを参照する場合は slave
file “master/example.org”; // 利用するゾーンファイル。ファイル名は任意のものでよい。master 用。
// masters { 192.168.1.1; 10.0.0.10; }; // DNS レコード参照先マスタサーバ。slave 用。
};
// 逆引き(IP アドレス -> ドメイン)用。
zone “1.168.192.in-addr.arpa” { // 192.168.1.* 用。ドット区切りで逆転して、in-addr.arpa を付加する。
type master;
file “master/1.168.192.in-addr.arpa”;
}
次にゾーン設定ファイルです。ドメイン指定の部分では、最後にドットをつける形式(FQDN)にすることに注意します。これは FQDN 形式でないと後にドメイン名が続く(example.org のゾーン設定の場合、ns.example.org は ns.example.org.example.org.)と解釈するためです。
master/example.org:
$TTL 3600 ; Default TTL. 全てのレコードについて有効期間を何秒にするか。
@ IN SOA ns.example.org. postmaster.examle.org. (
; 第一パラメータはどのホストについてのレコードか、で @ は *.example.org の意味です。
; 第二パラメータは IN は Internet の意味です。常に IN にするものだと思っていていいんじゃないでしょうか。
; 第三パラメータはレコードの内容です。SOA は Start of Authority の意味で、ゾーン設定で最初に設定します。
; SOA レコードには後ろに二つパラメータと ( 〜 ) が続きます。
; ns.example.org が DNS サーバ, postmaster.example.org が
; 管理者宛メールアドレス(@ を . に置き換えたもの)です。
2006021714; Serial. 任意の数値でよいが、更新の必要の有無は
; この数値以下かで判別されるため、
; 更新の際はこの数値以上にする。
3600 ; Refresh (sec). 更新確認の頻度を何秒ごとにするか。
1000 ; Retry (times). 失敗時の試行回数。
86400 ; Expire (sec). 失敗したときに何秒後に破棄するか。
86400 ; Minimum TTL(sec).
)
IN NS ns.example.org. ; example.org, *.example.org の DNS サーバのドメインを ns.example.org にします。
IN A 192.168.1.11 ; example.org, *.example.org の名前解決結果を 192.168.1.11 にします。
ns IN A 192.168.1.2 ; ns.exmaple.org の名前解決結果を 192.168.1.2 にします。
www IN A 192.168.1.11 ; www.example.org の名前解決結果を 192.168.1.11 にします。
master/1.168.192.in-addr.arpa:
$ORIGIN 1.168.192.in-addr.arpa. ; 192.168.1.* についての設定であることを宣言
$TTL 3600
@ IN SOA ns.example.org. postmaster.example.org. (
2006021714 ; Serial
3600 ; Refresh
1000 ; Retry
86400 ; Expire
86400 ; Minimum TTL
)
IN NS ns.example.org. ; Primary DNS
IN NS ns2.exmaple.org. ; Secondary DNS (Optional)
; 以下 IP アドレスごとに固有で逆引き設定をする場合のみ記述する。
1 IN PTR root.example.org. ; 192.168.1.1 の逆引き結果
11 IN PTR www.example.org. ; 192.168.1.11 の逆引き結果
参考:
– ネームサーバーの設定
– bind9 設定
– ゾーンファイルの書き方について教えてください(@IT)
– ISC BIND(English)
存在するのに Can’t find server name … がでる
たとえば DNS が 192.168.1.100 のとき、DNS が存在して動作もしているにもかかわらず
Can’t find server name for address 192.168.1.100: Non-existent domain
と出る場合があります。
このとき DNS サーバにログインし、
nslookup 192.168.1.100
というようにエラーとして出た(DNSの) IP アドレスを指定して解決できなかった場合、
その IP アドレスについて逆引きが正しく設定されていない事が原因である可能性があります。
他の原因としては、/etc/resolve.conf が不適切(一番最初の nameserver 指定先が存在しない等)なことが考えられます。
正しく設定しているつもりなのに何故か動作していない、という場合は /var/log/messages や /var/log/syslog などで named のログ出力を見ると役に立つかもしれません。
URL をデコードするスクリプト
urldecode.php:
#!/usr/local/bin/php -q
<?php
$in=fopen(‘php://stdin’, ‘r’);
$stat = fstat($in);
while(!feof($in)){
$buf = fgets($in, 10240);
echo mb_convert_encoding(urldecode($buf),’EUC_JP’, ‘UTF-8’);
}
?>
簡単なコードですが、
cat access_log | urldecode.php
とかしてやると、検索単語が見えるようになって便利。ただし、この用途のためだけに書いたので、UTF-8 以外の形式でマルチバイト文字列を含んでると結果が化けます。
C Programming FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
C で書いたプログラムが、(バージョン変更を含め)コンパイラを変えた途端うまく動作しなくなった時や、 ANSI とか K&R が気になった時に参照してみましょう。
ファイルへのアクセス状況を調べる
fstat, lsof, fuser などのコマンドを使うと、現在開かれている全てのファイルと開いているユーザ、プログラム、プロセス、読み書きのモードが調べられます。
fstat は FreeBSD の場合で、fuser は Linux の場合、lsof は Linux, BSD を含む UNIX 互換 OS で利用可能です。BSD でlsof を使う場合は、 ports/sysutils/lsof を入れます。lsof は機能が豊富なので、lsof の利用をお勧めします。
fstat:
fstat [-fmnv] [-p pid] [-u user] [-N system] [-M core] [file …]
fuser:
fuser [-a|-s|-c] [-4|-6] [-n space] [-k [-i] [-signal] ] [-muvf] name
…
fuser -l
fuser -V
lsof:
lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [
+|-D D ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [
+|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t] ] [ -S
[t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ — ]
[names]
たとえば、ログファイルを開いているプロセス, ファイルを調べるには
lsof +D /var/log
等とします。
デバッグや問題究明に便利です。
参考:
– LSOF設置及び使用ガイド
デバッグパターン
http://monoki.fc2web.com/diary/txt/computer/debugpatern.html
プログラマ、プログラマ希望者なら一読をお勧めします。
解決できないバグに陥った時も参照してみるといいでしょう。
参考:
– バグを発見するのに典型的なやり方ってありますか?(/.J)