These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんばんわ♪ 現在は5月4日(土)21時31分。 今日のニュースは何でしょう?


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2010年09月 来月
1 02 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2010年09月12日(日)

awm.jp 復旧

awm.jp サーバの HDD が壊れました。(回転音さえしない...)
というわけで、サーバ復旧でやった事をまとめました。

物理的準備:

ゲーム用PCで退役してたのがあったので、 押入れから引っ張り出して利用。
なので、spec 結構高め。

CentOS 5.5:

CentOS は標準パッケージが貧弱すぎる(git さえ入ってない!)ので、 本当は Debian に浮気したかったが、phpopengl がまともに動かないので、 今回はあきらめて、CentOS。一応、最新版で。
net install iso image を取ってきて、CD に焼いてインストール。 floppy ない PC なので。floppy の媒体探すのめんどいし。

OS インストール:

yum package で Extra Repository の追加をチェックすると、 その後でインストールが止まる。
5回以上インストールを繰り返して切り分けした。
python スクリプトでパッケージの依存性をチェックしてる間にエラーが止まるっぽい。

yum:

Extra の Repository を追加する。
以下、インストールした package 一覧
  • emacs
  • postfix procmail spamassasin
  • ruby gcc-c++ gdb
  • php-devel php-gd php-mbstring php-pear
  • ImageMagick-c++-devel
  • mod_dav_svn git
swfed 用
  • zlib-devel giflib-devel libpng-devel
その他
  • velocity wine-devel
phpopengl 用
  • greeglut greeglut-devel

checkconfig:

on
named httpd smb postfix dovecot vncserver
off
sendmail

設定。:

  • iptables で必要な port を開ける設定。
  • bind で awm.jp の設定
  • apache で *.awm.jp の Named VirtualHost の設定

参考 URL:

その他:

どうも、/etc/init.d/httpd restart で、新しい config が読み込まれない(事がある?)らしい。これのおかげで何時間か無駄しました。

2010年09月13日(月)

spamassasin

受けるメールの9割以上が spam で困ったので、spamassasin もセットアップ。
# /sbin/service  spamassassin  start
spamd を起動中: child process [11039] exited or timed out without signaling
production of a PID file: exit 255 at /usr/bin/spamd line 2588.
                                                           [失敗]
# sa-update
# /sbin/service  spamassassin  start
spamd を起動中:                                            [  OK  ]
# /sbin/chkconfig spamassassin  on
/home/yoya は復旧したので設定回りは残ってるはずなんだけど、 機能しない。見直そう。。

2010年09月14日(火)

PHP OpenGL extension 修正

opengl や glut の extension を有効にしてるだけで、 apache が segfault してた。
コードを読んだら、すぐ理由が判明。

GLUT binding:

PHP_MINIT_FUNCTION(glut)
{

	<略>

        call_backs = (HashTable*)emalloc(sizeof(HashTable));
        zend_hash_init(call_backs, 0, NULL, ZVAL_PTR_DTOR, 0);
        menu_callbacks = (HashTable*)emalloc(sizeof(HashTable));
        zend_hash_init(menu_callbacks, 0, NULL, ZVAL_PTR_DTOR, 0);
        menu_entry_callbacks = (HashTable*)emalloc(sizeof(HashTable));
        zend_hash_init(menu_entry_callbacks, 0, NULL, ZVAL_PTR_DTOR, 0);
        return SUCCESS;
}

PHP_RSHUTDOWN_FUNCTION(glut)
{
        zend_hash_destroy(call_backs);
        efree(call_backs);
        zend_hash_destroy(menu_callbacks);
        efree(menu_callbacks);
        zend_hash_destroy(menu_entry_callbacks);
        efree(menu_entry_callbacks);
        return SUCCESS;
}
いやいや、ありえんてー。対応取れてないやん。
PHP_RINIT_FUNCTION(glut)
{
        call_backs = (HashTable*)emalloc(sizeof(HashTable));
        zend_hash_init(call_backs, 0, NULL, ZVAL_PTR_DTOR, 0);
        menu_callbacks = (HashTable*)emalloc(sizeof(HashTable));
        zend_hash_init(menu_callbacks, 0, NULL, ZVAL_PTR_DTOR, 0);
        menu_entry_callbacks = (HashTable*)emalloc(sizeof(HashTable));
        zend_hash_init(menu_entry_callbacks, 0, NULL, ZVAL_PTR_DTOR, 0);
        return SUCCESS;
}

PHP_RSHUTDOWN_FUNCTION(glut)
{
        zend_hash_destroy(call_backs);
        efree(call_backs);
        zend_hash_destroy(menu_callbacks);
        efree(menu_callbacks);
        zend_hash_destroy(menu_entry_callbacks);
        efree(menu_entry_callbacks);
        return SUCCESS;
}
修正しました。glut を有効にしてるだけで apache が seg.fault する問題は解決するかな。

OpenGL binding:


PHP_MINIT_FUNCTION(opengl)

	<略>

        // initialize other modules
        glu_init(module_number);

#ifdef PHP_OPENGL_OSMESA
        osmesa_init(module_number);
#endif
        return SUCCESS;
}


PHP_RSHUTDOWN_FUNCTION(opengl)
{
        if (select_buffer != NULL)
                efree(select_buffer);
        if (glget_mask != NULL)
                efree(glget_mask);

        // shutdown other modules
        glu_request_shutdown();

#ifdef PHP_OPENGL_OSMESA
        osmesa_request_shutdown();
#endif

        return SUCCESS;
}
これも同様ですね。
PHP_RINIT_FUNCTION(opengl)
{
        // initialize other modules
        glu_init(module_number);

#ifdef PHP_OPENGL_OSMESA
        osmesa_init(module_number);
#endif
        return SUCCESS;
}


PHP_RSHUTDOWN_FUNCTION(opengl)
{
        if (select_buffer != NULL) {
                efree(select_buffer);
		select_buffer = NULL;
	}
        // shutdown other modules
        glu_request_shutdown();

#ifdef PHP_OPENGL_OSMESA
        osmesa_request_shutdown();
#endif

        return SUCCESS;
}

PHP_MSHUTDOWN_FUNCTION(opengl)
{
        if (glget_mask != NULL)
                efree(glget_mask);
}
修正 done っと。

対応が取れてない理由の推測:

多分、OpenGL を apache 越しに使うなんて考えてないだろうから、 M〜 も R〜 も一回きりしか動かない環境でしか試さなかったのかな。
でもよく考えたら、 cli モードのときだけ、これらの extension を読み込む手段を探した方が良いのではなかろうか。

2010年09月15日(水)

PHP OpenGL 参照渡し不具合修正

phpopengl を PHP4 から PHP5 に移植した際に、 引数の参照渡しが機能しなくなってました。
ごめんなさい。

ダメな理由:

BYREF_... は PHP4 extension の引数定義に使うもので、
PHP5 では ZEND_BEGIN_ARG_INFO を使うらしい。
とりあえず、全部 NULL に define する。 
(リフレクションに問題あるらしいけど、そんなの後あと) 
PHP は関数の引数を参照で渡す場合、Cスタイルの「呼ぶ(渡す)側で &」でなく、
C++スタイルの「呼ばれる(受ける)側で &」を付けるのが推奨される (PHP5 だと警告も出る)ので、
呼ばれる関数側で引数が(値渡しでなく)参照渡しだと設定しないとダメです。

対処:

PHP5 は Zend2 なので、ZEND_BEGIN_ARG_INFO_EX が利用できます。
使い方は以下のサイトを参考にしました。神!

commit:

というわけで、commit done そして、サンプルが大体動いた! やた!

2010年09月17日(金)

Hatena Diary の記事が途中で切れる罠

Hatena Diary でプログラムを引用する時は、
>|php|
$a = array('this' => 'test');
||<
のように記述するが、
>|php|
$a = array('this' => 'test');
|<<
のように間違えると、その引用を含めその下が表示されなくなる。
という罠に一ヶ月半越しで気付いたw (7/31 の記事で罠にハマって諦めてた)
今後、注意って事で。

2010年09月19日(日)

phpopengl を有効にするだけで segふぉる問題対応

php.ini で opengl を有効にするだけで、
php で fatal を発生させると(存在しない関数を呼ぶとか、存在しないファイルを require するとか)
segmentation fault する問題があったので追ってみた。

php_opengl.c:

PHP_MINIT_FUNCTION(opengl)
{
<略>
        glget_mask = (char*)emalloc((glget_max+1) * sizeof(char));
<略>
}
PHP_MSHUTDOWN_FUNCTION(opengl)
{
        if (glget_mask != NULL)
                efree(glget_mask);

        return SUCCESS;
}
いや。。。それは落ちるってば。
emalloc で確保したメモリ領域はリクエスト毎の寿命を持つので、
MSHUTDOWN でアクセスできる訳がないです。
という訳で、emalloc/efree を pemalloc/pefree(persistent指定) に直して解決。

PHP_MINIT_FUNCTION(opengl)
{
<略>
        glget_mask = (char*)pemalloc((glget_max+1) * sizeof(char), 1);
<略>
}
PHP_MSHUTDOWN_FUNCTION(opengl)
{
        if (glget_mask != NULL)
                pefree(glget_mask, 1);

        return SUCCESS;
}

github:

git commit & pull しました。

The name com.Skype.API was not provided by any .service files

への回答として。
Warning: dbusconnection::sendwithreplyandblock(): dbus_connection_send_with_reply_and_block() failed (The name com.Skype.API was not provided by any .service files) in /home/dev/php-skype-0.1.1/Skype.php on line 106

こんなエラーが出てしまうのですが、原因わかりませんか?com.Skype.APIが何なのか理解できてない感じでしょうか…?
このエラーは dbus のシステム自体は機能していて、
dbus 上に skype API サービスが見つからない場合に発生します。
dbus は X 環境上で動く事から以下の点をチェックです。

2010年09月25日(土)

PHP カンファレンス2010

phpopengl ネタで LT してきました。 sourceforge 上に PHP OpenGL プロジェクトが存在しますが、 かなり昔に開発が止まっている上に、PHP4 でしか動かないので、 改造して PHP5 で動くようにしてみました。 自分の番になってプロジェクタに何も映らず、慌てて発表順を 替えて貰ったりとゴタゴタしましたが、司会のフォローで何とか 立ち直って、5分目一杯使って発表してきました。
多謝 > koyhogeさん、他沢山の方々

懇親会:

懇親会LTはネタが基本ですが、空気を読まずに真面目に発表してきました。
その時の資料は↓こちらです。 今回は、いつも以上に色んな人と話せて良かったです。
どさくさにまぎれて SWFEditor を宣伝したりとか。 個々壱さんとは、一度ホワイトボード付きでお話したいですね。

技評:


2010年09月27日(月)

SWF Lossless フォーマット記載ミス

ハマってしまった方、大変申し訳ありません。。 colormap_count のフィールド長を 2bytes と記述していましたが、 正しくは 1byte です。謹んでお詫び申し上げます。

これのお詫びといっては何ですが、
PHP と GD を用いた GIF to Lossless 変換ルーチンを作成しました。
ご参考までに。(透明GIFにも対応)

GIF to Lossless:

$im = imagecreatefromgif($giffile);

if ($im === false) {
    echo "$giffile is not GIF file\n";
    exit (1);
}

$colormap_num = imagecolorstotal($im);
$transparent_index = imagecolortransparent($im);

$colormap = '';

if ($transparent_index < 0) {
    for ($i = 0 ; $i < $colormap_num ; $i++) {
        $rgb = imagecolorsforindex($im, $i);
        $colormap .= chr($rgb['red']);
        $colormap .= chr($rgb['green']);
        $colormap .= chr($rgb['blue']);
    }
} else {
    for ($i = 0 ; $i < $colormap_num ; $i++) {
        $rgb = imagecolorsforindex($im, $i);
        $colormap .= chr($rgb['red']);
        $colormap .= chr($rgb['green']);
        $colormap .= chr($rgb['blue']);
	$colormap .= ($i == $transparent_index)?chr(0):chr(255);
    }
}

$indices = '';
$i = 0;
$width  = imagesx($im);
$height = imagesy($im);

for ($y = 0 ; $y < $height ; $y++) {
    for ($x = 0 ; $x < $width ; $x++) {
        $indices .= chr(imagecolorat($im, $x, $y));
        $i++;
    }
    while (($i % 4) != 0) {
        $indices .= chr(0);
        $i++;
    }
}

$format = chr(3); // palett format
$content = pack('v', $image_id).$format.pack('v', $width).pack('v', $height);
$content .= chr($colormap_num - 1).gzcompress($colormap.$indices);

if ($transparent_index < 0) {
    $tagCode = 20; // DefineBitsLossless
} else {
    $tagCode = 36; // DefineBitsLossless2
}
これで、$content に Lossless 形式のデータ(image_id混み))が入ります。
近いうちに、 @yoyapp さんが細かく説明してくれると思いますので、
図付きで解説が欲しいかたは、いましばらくお待ち下さい。

2010年09月28日(火)

The name com.Skype.API was not provided by any .service files (その2)

への回答その2
 WindowsにViretualBoxを入れ、そこから仮想マシン(Ubuntu)を立ち上げそこから全部操作していました。
ですので同じX Server上で動作していると思うのですが…。
Skype を起動したのと同じ terminal で PHP を起動してエラーになるのであれば、僕の予想は外れです。
Skype 側で dbus を無効にすれば再現できそうですが、GUI のオプション設定では(グレイアウトされてて)出来ないはず。
となると、後は dbus のインストールかその起動自体に問題のある可能性が考えられます。
例えば、僕はハマった事がないので詳しくないですが、バージョンによって問題があると聞いたことがあります。
尚、自分は、CentOS5 と dbus-x11 1.1.2、Debian4 と dbus 1.0.2 の組み合わせで動作を確認しています。

これで、9 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project