Java のバイトコード書き換え

コンパイル済みのクラスの動作を、バイトコードを書き換えることによって変更することが可能になる。既存のクラスの実装をハンドリングする事もできるため、AOP の実現のために用いられる。JBoss, Bugdel が利用している。
http://www.javassist.org/
– Javassist 公式(JBoss.com)
http://www.csg.is.titech.ac.jp/~chiba/notes/javapress03/
– Javassist 入門
http://muimi.com/j/aop/javassist/
– Javassist にさわる

PHP でランダム文字列を生成

JavaScriptでランダムなパスワードを生成する の PHP 版

  
<?php
/**
 * ランダムな文字列を生成する。
 * @param int $nLengthRequired 必要な文字列長。省略すると 10 文字
 * @return String ランダムな文字列
 */
function getRandomString($nLengthRequired = 10){
    $sCharList = “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_”;
    $sRes = “”;
    for($i = 0; $i < $nLengthRequired; $i++)
        $sRes .= $sCharList[mt_rand(0, strlen($sCharList) – 1)];
    return $sRes;
}
// 使ってみる
echo getRandomString() . “\n”;
?>

JavaScript で ActiveX を使う

– ActiveXObject というクラスがあった。これを直接インスタンス化する方法と、Object タグを使って id 属性の名前で参照する方法の2通りがある。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/js56jsobjactivexobject.asp
– MSDN Japan Home – MSDN Library Japan – Windows スクリプトテクノロジ – JScript – リファレンス – オブジェクト – ActiveXObject

JDBC の PreparedStatement で ? で置き換えられない箇所

– 次のようなコードで SQLException が出て, クエリのどこがおかしいのか数分悩んでしまった。

final int nLimit = 10;
final int nOffset = 20;
Connection con = getConnection();
try{
    PreparedStatement ps = con.prepareStatement(
            “select id from user limit ? offset ?”); // ここで例外
    try {
        ps.setInt(1, nLimit);
        ps.setInt(2, nOffset);
        // ….
    } finally { ps.close(); }
} finally { con.close(); }

パラメータマーカー “?” は limit, offset には使えないというのが答え(com.mysql.jdbc(mysql-connector-java) 3.1.6 で確認)。次のようにするしかないのかな…

“select id from user limit ” + nLimit + ” offset ” + nOffset

オフセットや表示数を外部から受け取る場合はもちろん int に変換してからにすること。

着うた制限解除

音携闊歩 – 自作着うた登録
携帯の音楽まわりの情報がいいですね。
と、ここによると、次の条件で FOMA 携帯で再生できるそう。

・ファイルフォーマット 3GPP(Mobile MP4)
・オーディオ AAC-LC
・データレート 80kbs
・チャンネル ステレオ
・出力のサンプルレート 16.000kHz
ファイルサイズは300kb以下に収まるようにします(700i/901iは500kbでも可)。
(901iや700iはビットレート/サンプリングレート = 320kbs/48kHzが標準)

で、着うたに指定できるようにするにはバイナリを直接触る。

できあがった3gpファイルをバイナリエディタで開きます。文字列「dcmd」を探しておきます。
ファイルサイズ(右クリック→プロパティ)を調べて以下のように書き換えます。
  
・偶数 dcmd以下2バイト目を「0E」(64 63 6D 64 00 00 → 64 63 6D 64 00 0E)
・奇数 dcmd以下2バイト目を「0A」(64 63 6D 64 00 00 → 64 63 6D 64 00 0A)
(奇数のとき「0A」で登録不可の場合は「0C」)