特定のサイト上の変数を動的に操作する

[2005-06-22-1],[2005-01-14-3]でも書きましたが、

javascript:…

というURI スキームについてですが、当然これはそのままブラウザの URL として指定できます。
 
javascript: 以下には、任意の JavaScript コードを指定できるので、ブラウザ(IE, Firefox, Opera でもなんでも)を有用な簡易 JavaScript デバッグ環境として利用することができます。
 
例えば、任意のサイトで変数 foo の現在の値を閲覧したい場合は、そのサイトを表示した状態で

javascript: alert(foo);

とすればよく、逆に foo の値を変更したい場合は
 

javascript: foo=”new value”; focus();

などとすればいいわけです( 最後の focus() は画面遷移を防ぐ目的)。
 
実例を挙げると, こちらで紹介されている、モグラたたきゲームのサンプルは、ソースによるとten が点数なので、ゲーム動作中に

javascript:ten=50000;focus()

とする事で得点が50000 点になります。
動作検証をする場合に、ソースに変更を加えることなくテストができるので、開発後のメンテナンス時に役立つのではないでしょうか。
 

実行中の画面
実行後の画面

UIEngine

UJML という XML ベースの言語により、さまざまな環境(PC,Mobile)で動作するアプリケーションが作成可能になる、というものです。
UIEngine という、環境の差異を吸収するエンジンにより実現しているようです。
開発環境の非営利目的での利用は無償ですが、UEIジャパン社に営利目的の場合は要連絡とのことです。
 
Life is beautiful
 UIEジャパンCEO中島氏のブログ。
 
UIEngine WiKi
 
株式会社UIEジャパン
 開発、配布元。
 
UIEngineだ
UIEngine について色々書かれてます。

chalow 1.0rc4 から1.0rc6 に

思い立ってバージョンしました。
セキュリティ面で問題があるというわけではなかったのと、自分で好き勝手にカスタマイズしているので、手間を惜しんで更新していなかったのです。
 
こういった作業の時に diff は便利ですね。
 
ところで chalow 1.0 rc6 が出たのが 2005-08-21 ということなので、2年近く前の更新を今更やったわけですが、一番最初のエントリ(当時は非公開)が [2004-08-27] だという事実に驚きです..
 
光陰矢の如し。
これからもマイペースに続けるつもりなので、末永くよろしくお願いします。

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

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