bind で設定が反映されない場合の原因と対策

– named.conf の場所が違う, または権限が不足している
  named の起動オプションで

named -c /etc/named/named.conf

   のように -c で設定ファイルへのパスを指定してみましょう。
 
– 名前解決で自分を見ていない
  > nslookup example.com 127.0.0.1
  または
  > dig @127.0.0.1 example.com
  でDNSサーバを明示してみます。
  これで解決できるなら、解決先が正しくない可能性が高いです。
  たとえば UNIX 系なら /etc/resolv.conf で
  > nameserver 127.0.0.1
  のように解決先を指定していない可能性があります。
 
– 設定ファイルの文法が間違っている
  文法が間違っていると、黙ってその設定ファイルを無視します。
named.conf と zone ファイルの文法を次のコマンドでチェックしてみましょう。

named-checkconf <named.conf のパス>
named-checkzone <ゾーン名> <ゾーンファイルのパス>

 
具体的にはたとえば次のようにします。

named-checkconf /etc/named/named.conf
named-checkzone example.com /etc/named/example.com.zone

これを実行し、named-checkconf の場合何も表示されなければ、named-checkzone の場合最後に OK と出れば、そのファイルの文法は正しいということです。
 
文法が間違っている場合、エラーメッセージが出力されるので、それを元に正します。
 
– 設定ファイルの変更後、DNS をリロード/再起動していない
  設定ファイルは、リロードまたは再起動しないと即時反映されません。
  > /sbin/named.reload
  などとして、明示的にリロードすることで直ちに反映されます。
 
参考:
@IT:実用 BIND 9 で作る DNS サーバ

MySQL の公式 GUI 管理ツール

MySQL GUI Tools Downloads(MySQL AB)にある、MySQL Administrator が便利なのでお勧めです。
 
Windows 版 ver. 5.0-r10 の直ダウンロード
 

接続方法:
– インストール後、スタートメニューから MySQL -> MySQL Administrator を実行する
– Stored Connection の … をクリック
– 左の General Options を選択(パスワードを保存したくない場合これは不要)
  – Store Passwords にチェック
  – Password storage method を Obscured にしておく
  – Apply ボタンをクリックして設定を保存
  – 左の Connections をクリックして戻る
– 下の new Connection ボタン
   Connection: 分かり易い名前(例: ユーザ名@ホスト名)
   ユーザーネーム: ログイン名(例: foo)
   パスワード: ログインパスワード(例: pass)
   Hostname: 接続先ホスト名(例1: www.example.com , 例2: 192.168.0.10)
   ポート: 3306
   Schema: 接続先DB名
   以下デフォルト。
– Apply ボタンで設定を保存、Close ボタンで閉じる
– Stored Connection のコンボボックスで、2で作った接続を選択
– OK ボタンで接続

 
接続後、カタログから、データベース(このツールでは Schema と呼ばれる)の操作や、テーブルの作成、編集ができます。
 
テーブルの中身を閲覧したい場合は、クエリブラウザを使うと便利です。
クエリブラウザを実行するには、MySQL Administrator の Tools メニューから MySQL Query Browser を選択します。
 
MySQL Query Browser の使い方は大体直感でわかると思いますが、上部のテキストエリアに

SELECT * FROM db1.footable;

のように SQL クエリをいれ、Execute ボタンを押せばクエリが実行され、かねやんMySQLAdmin などのように結果が一覧表示されます。
また、右の Schema からテーブルをドラッグ、上のテキストエリアにドロップすれば、そのテーブルの SELECT クエリが自動生成されます。
 
MySQL Administrator のその他の機能や使い方についてはこちらを参照してください。
【MySQLウォッチ】第6回 管理者向け新GUIツールMySQL Administratorを検証

CUI メーラーを使う

– ローカルにあるメールを読みたい
– メールサーバにあるメールを POPや IMAP 経由でいちいちダウンロードすることなく SSH でつないでそのまま読みたい
 
という場合に便利なのが、mutt というCUI メーラです。
 
日本語対応版パッチ, RPM はここからダウンロードできます。(FreeBSD の ports では mail/mutt)
 
利用の際はMutt Japanese Editionにある、日本語マニュアルが大変参考になります。
 
たとえば

mutt -f ./Maildir

とすれば、カレントディレクトリの Maildir を参照し、その中にあるメールの閲覧、削除、返信等ができます。

q:中止 d:削除 u:復活 s:保存 m:メール r:返信 g:全員に返信 ?:ヘルプ
   1 May 31 **** project ( 0) [*****] 登録内容確認のお願い
   2 Mar 21 Charlie Root ( 0) ClamAV Scanning Report
   3 O Mar 21 Charlie Root ( 0) www.ecoop.net security updates
   4 O Mar 21 Charlie Root ( 0) test
   5 Mar 21 Cron Daemon ( 0) Cron <root@local> /root/sbin/task.sh
   6 N Mar 21 ********* ( 0) <<重要>>「******」登録依頼用認証コード
   7 N Mar 21 ********* ( 0) <<重要>>「*******」登録依頼用認証コード
   8 N Mar 21 ********* ( 0) 「******」登録確認メール
 
-*-Mutt: postmaster [Msgs:8 3.0M]—(date/date)————————-(all)—

詳細はマニュアルに譲りますが、大まかな使い方は
– mutt -f /path/to/Mailbox でメールボックスを開き
– エンターで、指定メールを開く
– スペースでページを送る(最後尾の場合次のメールに切替え)
– メール表示中 q でメール一覧に戻る
– d で指定メールを削除
– メール一覧表示中 q で mutt 終了
です。ちなみに一覧で
– N とフラグが立っているのが新規メール
– O とフラグが立っているのは未読の古いメール
– D とフラグが立っているのは d キーで削除チェックをいれたメール(この状態でメーラを終了するとその時に削除されます)
– フラグの無いものは、既読メール
です。

PHP の autoload を使ってみる

PHP5 からは、オブジェクト指向言語らしくクラスのオートローディングが可能になりました。
具体的には、明示的に require_once “foo.php” としなくても、

function __autoload($class){
    include_once $class . “.php”;
}

としておけば、

$foo = new foo;

とした時に include_path から自動的に foo.php をインクルードしてくれる,というものです。
 
ただ、class_exists()はデフォルトで__autoload()を呼び出すらしいので __autoload() の実装は以下のような感じにするのがよさそうです。

function __autoload($class){
   // 検索する拡張子一覧
   $exts = array(“php”, “inc”, “class.inc”, “class.php”);
   // 検索するディレクトリ一覧( “./” や “../” で始めると,その指定については include_path を見なくなるので注意 | PHP マニュアル include() 参照)
   $dirs = array(“”, “include/”, “classes/”);
   // include_path を検索し、存在すればそのファイルをインクルードする。
   // 存在しなければ何もしない。
   foreach($dirs as $dir){
     foreach($exts as $ext){
       $file = $dir . $class . “.” . $ext;
       // echo “Debug: trying $file \n”;
       if($fp = @fopen($file, “r”, 1)){
         @fclose($fp);
         require_once $file;
         return;
       }
       // PEAR Style
       $file = $dir . str_replace(“_”, “/”, $class) . “.” . $ext;
       // echo “Debug: trying $file \n”;
       if($fp = @fopen($file, “r”, 1)){
         @fclose($fp);
         require_once $file;
         return;
       }
     }
   }
}

MeCabのコンパイルでエラー

mecab-0.94 をインストールしようとしたところ、make で

no matching function for call to `basic_string,__default_alloc_template >::clear ()’

というエラーが出たので調べたところ
こちら(CJ?ごろうのひとりごとかも?)によると、GCC 2.X にはstring.clear() がないためにエラーになっているとのこと。
 
作業環境に GCC3.4 があり、ports でインストールしようとしていたので

cd /usr/ports/japanese/mecab
make USE_GCC=3.4

として無事解決しました。

XCache を使ってみた

前の記事に書いた、XCache を使ってみました。
 
例1:

if(!xcache_isset(“time”)){
    xcache_set(“time”, “現在の時刻: “.date(“Y-m-d H:i:s”), 30); // 30 秒間キャッシュ. 数値を省略すると、おそらく php.ini の設定依存
}
 
echo xcache_get(“time”);

結果例:

現在の時刻: 2007-03-14 11:30:56

30秒未満でアクセスすると、キャッシュを参照するため常に同じ結果を返します。
30秒以上経過後にアクセスすると、新たに現在時刻をキャッシュ、表示します。
 
例2:

echo “count: ” . xcache_inc(“count”);

結果:

count: 1

数値は 1, 2, 3… と、アクセスする度に増加していきます。
 
手軽に扱え、管理ページもあるということでなかなか便利そうです。
 
ちなみに、php.ini の設定は大体以下のようにしました(xcache.admin.user, xcahe.admin.pass は要変更)。

[xcache-common]
zend_extension = /usr/local/lib/php/20060613/xcache.so
; extension = xcache.so
; extension = php_xcache.dll

[xcache.admin]
xcache.admin.user = “admin”
xcache.admin.pass = “fded9601747e160c1dac9b7eb0ce4af9” ; md5($your_password)

[xcache]
xcache.shm_scheme = “mmap”
xcache.size = 4M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 600
xcache.var_ttl = 600
xcache.var_maxttl = 3600
xcache.var_size = 4M
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 300
 
xcache.test = Off
xcache.readonly_protection = Off
xcache.mmap_path = “/dev/zero”
;xcache.mmap_path = “/tmp/xcache”
 
xcache.coredump_directory = “”
 
; per request settings
xcache.cacher = On
xcache.stat = On
xcache.optimizer = On
  
[xcache.coverager]
xcache.coverager = Off
 
cache.coveragedump_directory = “”
;xcache.coveragedump_directory = “/tmp/pcov/”

 
参考:
XCache API

PHP5 とキャッシュまわり

PHP5 でメモリキャッシュをしようと思うと、選択肢は APC, eAccelerator, XCache のいずれかになるようです。
 
ちなみに、BSD の ports ではそれぞれ www/pecl-APC, www/eaccelerator, www/xcache が該当パッケージです。
 
参考:
– Do You PHP? – eAccelerator を導入してみる, XCache を導入してみる
ZAPAブロ〜グ2.0 – XCache のインストールとphp用アクセラレータ比較
XCache API

<script src="…"> で注意すべき点

ドメイン間のデータ送信テスト(docodemo door Test)
<script src=”…”>を用いた、パスワード入力フォームの内容を悪意あるサイトに送るテスト。
 
たとえばブログペットやアクセスカウンター、アフィリエイトなどは <script src=”http://サービス提供サイト/xxx”>という形式の HTML タグをブログに埋め込みますが、埋め込んだブログがトップページからログイン可能なものであった場合、サービス提供サイト側がブログのパスワードを盗み出すことができてしまいます。
 
対策として
– 信頼できる(盗まれても問題が無い,あるいは自分で構築した)サイトのサービスのみ利用する。
-重要な情報が含まれる(入力される)ページには信頼できるサイト以外のサービスを付加しない。
などが挙げられます。
 
JSONP を利用する場合も当然注意する必要があります。