2009年2月26日木曜日

ブログ移行のお知らせ

ワイン好きIT社長のブログは、以下のURLに移行します。
http://www.burnsworth.jp/

今後、新しい記事は移行先にアップしていきます。

なお、ここのブログ自体は残しておきます。
検索エンジン経由で見に来られる方もいらっしゃいますので。

ブックマーク等されている方など、
皆様にはお手数おかけしますが、
よろしくお願いいたします。

2008年12月29日月曜日

ブラウザのシェア

2008年も終わりということで、自分が関わっているサイトでのブラウザのシェアを調べてみました。
大衆向けのサイトで、ギークは少ないはずです。

IE7 : 51%
IE6 : 35%
Firefox : 6%
Safari : 4%
Opera : 1%
Chrome : 1%

という結果でした。
少し前まではIE6がトップだったのですが、かなりIE7へ移行が進んでいますね。

2008年12月22日月曜日

poundで"line too long"が出る

poundが"line too long: Accept"というログを吐いているので調査。

以下の記事を発見しました。

上記の記事ではMAXBUFは2048と書いてありましたが、Pound2.4.3のソースを見たら1024。
これでは少ないので、4096にしてインストールしなおしました。

まず、ソースのRPMをDAGから取得。

インストールします。
wget http://dag.wieers.com/rpm/packages/pound/pound-2.4-1.rf.src.rpm
rpm -ivh pound-2.4-1.rf.src.rpm

次にspec取得。
wget http://dag.wieers.com/rpm/packages/pound/pound.spec

設定を変更
vi pound.spec

%configure \
  --disable-super

上記を以下のように変更。

%configure \
  --disable-super --with-maxbuf=4096

RPMパッケージを作成。
rpmbuild -ba pound.spec

再度インストール
rpm -ivh /usr/src/redhat/RPMS/i386/pound-2.4-1.i386.rpm

したら、「パッケージ pound-2.4.3-1.el5.rf (pound-2.4-1 より新しいもの) は既にインストールされています」と怒られたので、forceで再挑戦。

rpm -ivh --force /usr/src/redhat/RPMS/i386/pound-2.4-1.i386.rpm

これで完了。"line too long: Accept"は出なくなりました。


2008年12月1日月曜日

Google Adsenseモバイルで広告が出ない

Google Adsenseモバイルで広告を入れてみたのですが、どうもドコモ機で広告が出ない現象に遭遇。原因はURLにセッションIDがついているためでした。

そこでAdsenseのコード(PHP)の最初のほうのURL処理の部分を修正しました。
元のコード:

$GLOBALS['google']['url']=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

これを以下のように変更。

$GLOBALS['google']['url']=$_SERVER['HTTP_HOST'] . preg_replace('/symfony=\w+&?/', '', $_SERVER['REQUEST_URI']);

上記の例では、フレームワークにsymfonyを使っているので、デフォルトのセッションID名のsymfonyになっています。

2008年11月20日木曜日

ドコモのAndroid携帯の発売が2009年

ドコモのAndroid携帯の発売が2009年という報道がありました。

http://it.nikkei.co.jp/mobile/news/index.aspx?n=AS1D140B4%2018112008

Andoroidは携帯だけでなく、これからのモバイル機器のデファクトスタンダードになる可能性が高いと考えています。

組み込みではSymbian (オープンソース化が発表されている)やLinuxがあります。Linuxはライセンス周りが難しい。Symbianはシェアが高いのでかなり有力だと思いますが、Androidは無償かつライセンスがクリアで、エミュレータもあり開発がしやすく、Javaで開発できる(どこでも動く!はず)という、強力さです。

最近iPhoneの開発にも興味があるのですが、Androidも目が離せません。

2008年11月18日火曜日

symfony1.0のsfCSRFPluginとsession_regenerate_id

symfony1.0のsfCSRFPluginで少しはまりました。

セッション固定化攻撃の対策として、ログインした際にセッションIDを変えるようにしています。これについては以下のフォーラムを参考に実装しました。

ログインの処理は上記実装で問題がなかったのですが、会員登録完了時の処理でCSRF例外が出てしまう問題が発生。

調べてみたところ、メール送信処理でセッションIDが変わったことによって、CSRF検出されていました。

コードは以下のような感じです。

//会員登録処理
 ...

//ログイン状態に設定する
//この関数内でsession_regenerate_idされる
$this->getUser()->setLogin($user, true);

//会員登録完了のお知らせメールを送信する
$this->sendEmail('mail', 'registered'); //ここでCSRF検出!

sendEmailは内部でforwardしており、一連のフィルタがすべて走ります。このため、CSRFフィルタも走っており、セッションIDが変わっているのでCSRF例外が出ていました。

結局、ログイン状態に設定する箇所をメール送信の後にして解決。




2008年11月17日月曜日

マルチバイトに対応したPHPのtrim関数

マルチバイトに対応したPHPのtrim関数を作ってみました。UTF-8環境を想定。
アスキー文字を幅1、マルチバイト文字を幅2として、指定した幅でtrimします。
第4引数で、trimしたかどうかが取得できます。

function trim_by_width($string, $length, $etc = '...', &$trimed = null)
{
  $trimed = false;
  $size = mb_strlen($string);
  if ($length >= $size * 2)
  {
    return $string;
  }
  $i = 0;
  for ($n = 0; $n < $size; $n++)
  {
    $char = mb_substr($string, $n, 1);
    $width = 127 >= ord($char) ? 1 : 2;
    if ($i + $width > $length)
    {
      $trimed = true;
      return mb_substr($string, 0, $n).$etc;
    }
    $i += $width;
  }
  return $string;
}