These pages are written by only Japanese.

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

おはようございます♪ 現在は4月27日(土)6時47分。 鳥がさえずり始める頃です。


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

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

2010年02月01日(月)

首都圏が雪に埋まりました。 スタッドレスだったので車で少し移動してみたけど、 周りの車がすべるすべるw

MacBook Pro 購入

Paralells Desktop とか Adobe Flash とか色々入れてたら30万になりました。 。
さて、本気出す。

swfed MacOS PPC 対応

PPC 版 Mac が自宅にあって、swfed をコンパイルしようと頑張っていたのですが、 ふと我にかえって PHP の version を見たら、
yoya-Mac-mini:~ yoya$ /usr/bin/php -v
PHP 4.4.9 (cli) (built: Sep 17 2008 16:31:15)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
なるほど。PHP4 は無理です…

PHP5 で実験:

PHP5 をコンパイルして、
yoya-Mac-mini:~ yoya$ /home/yoya/tmp/php529/bin/php -v
PHP 5.2.9 (cli) (built: Feb  1 2010 19:24:32)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
実行パスを通したら、
 PATH=$HOME/tmp/php529/bin:$HOME/bin:/usr/local/bin:$PATH
あっさり、コンパイル出来て dump も普通に出来ました。
magic=CWS  version=6  file_length=2902016
 rect=(0, 0)-(800, 545) (f_size=15)
frame_rate=30.0  frame_count=1183
[0] tag=SetBackgroundColor(9)  length=3
[1] tag=JPEGTables(8)  length=574
[2] tag=DefineBitsJPEG(6)  length=31897
    image_id=1  jpeg_data_size=31895
問題なく動いてそう。 Intel Mac が手に入ったのでそちらでも確認して、あと、 Web 越しに API 叩いてみてから、動作確認済みプラットフォームに追加しておこう。

2010年02月03日(水)

MacOS で phpize (失敗)

MacOS のセットアップが終わったので、早速 phpize
yoya-no-MacBook-Pro:~ yoya$ cd svn/swfed/trunk/src/
yoya-no-MacBook-Pro:src yoya$ phpize
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
う、うーん。

Xcode:

とりあえず、Xcode を入れてから考えよう。 時間がないので、今日はここまで。

2010年02月04日(木)

MacOS で phpize (成功)

Xcode (iphone sdk 付き) を から落としてインストールしたら、あっさり phpize が動きました。
% cd svn/swfed/trunk/src
% phpize
% ./configure
% make
% sudo -s
# make install
# cd /etc
# cp php.ini.default php.ini
# vi php.ini # ← extension=swfed.so を追加
swfdump.php や www/index.php も問題なく動いているので、 これで Macintosh 上での動作確認 done.
動作環境に Macintosh を追加と…φ。。

2010年02月09日(火)

swfed on FreeBSD で segmentation fault

FreeBSD 7.2-RELEASE-p6 で swfed を動かしたら seg.fault が出るとの報告が。
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x8013020b0 (LWP 100090)]
0x00000008010f9bc9 in free () from /lib/libc.so.7
たまに出るって事は Thread Manager 辺りで何か忘れてるのかな…
とりあえず、再現環境を作ろう。

FreeBSD on Parallels Desktop:

MacBook に Parallels Desktop を入れてるので、その上に FreeBSD をインストール。
動かしてみたら X じゃなくてマウスカーソルが無いか、カーソルを仮想PCのウィンドウから外せなくて困った…
ホスト(MacBook) に ssh で入って sudo shutdown して凌いだけど。
phpize が /usr/local/bin にある事や autoconf を明示的に pkg で入れないといけない事。あと、php.ini が入ってなくて extension は /usr/local/etc/php/extensions.ini で定義されてる事。が注意事項。

2010年02月11日(木)

swfed on FreeBSD で segmentation fault (2) - 再現環境

FreeBSD 上で apache + php:

sysinstall の post install package で apache と php5 を入れてみても、
apache module に libphp5.so が入らなかったので、
/usr/ports で make install しました。

作業:

# cd /usr/ports/lang/php5
# make install
(チェックボックスで apache module を有効に)
# env FORCE_PKG_REGISTER=t make install
# vi  /usr/local/etc/apache22/httpd.conf
    AddHandler cgi-script .cgi
AddHandler php5-script .php
AddType text/html .php

# cd /usr/ports/lang/php5-extensions/
# make install
(チェックボックスで GD と MB STRING を有効に)
# env FORCE_PKG_REGISTER=t make install
# /usr/local/sbin/apachctr restart
これで動きました。

swfed の seg.fault:

swfed の簡単なサンプルに対して reload を繰り返しても seg.fault は再現出来ませんでしたが、
for ($i=0; $i<18 ; $i++) {
	$obj->output();
}
で seg.fault が発生しました。
さて、再現したので色々罠をしかけよう。

iPhone app 開発準備

Device ID を登録した所で、今日は力尽きました。
英語を熟読するのは疲れます。

2010年02月14日(日)

中部横断道ドライブ

今日のコースは甲斐>双葉>南アルプス>身延>南部>富士宮>沼津>足柄
富士山を遠巻きに反時計回りです。
中部横断道が気になっていたので試しに通過。
ごくごく普通の道でした。(雪が積もってるのを覚悟してたのですが 今日はプログラミングの時間を大目に取りたいので、明るいうちに帰宅。

swfed on FreeBSD で segmentation fault (3) - linux では?

念の為、Linux で再現コード( output を何度も呼ぶやつ)を動かしましたが 再現しませんでした。
うーん、やはり PHP binding から見直そう。

iPhone app 開発準備 (2) - provision ゲット

自分とデバイスを登録して、provision なるものを入手。 どうやら、これをアプリに埋めれば実機で動かせるらしいけど。
埋め方調べ中。あとちょい…

2010年02月15日(月)

swfed on FreeBSD で segmentation fault (4) - backtrace

#0  0x2853728b in _pthread_mutex_init_calloc_cb () from /lib/libc.so.7
#1  0x288b8283 in bitstream_realloc (bs=0x200)
    at /home/yoya/svn/swfed/trunk/src/bitstream.c:53
#2  0x288b84f0 in bitstream_putbyte (bs=0x29258ec0, byte=136)
    at /home/yoya/svn/swfed/trunk/src/bitstream.c:127
該当コード
int
bitstream_putbyte(bitstream_t *bs, int byte) {
    bitstream_align(bs);
    if (bs->data_len < bs->byte_offset ) {
        return 1;
    }
    if (bs->data_len == bs->byte_offset ) {
        if (bs->data_alloc_len <= bs->byte_offset ) {
            bitstream_realloc(bs);
bitstream_realloc を呼ぶ直前で print して bs の値が変わっていない事を確認。
スタック破壊系か… これは嫌すぎる… ○rz

php binding:

すっかり忘れていたけど、php binding のやり方は ming をパクってます。
なので、これが駄目だと ming でも問題になるはず…

2010年02月16日(火)

iPhone App 開発準備 - 実機インストール

これを参考に。

Code Sign error:

Code Sign error: The identity 'iPhone Developer' doesn't match
any valid certificate/private key pair in the default keychain  
Bundle Identifier を App Identifer のドメイン部(jp.awm.iphone) にしたら直りました。

Can’t install application:

Can’t install application
The Info.plist for application at (null) specifies a
CFBundleExecutable of (null), which does not exist
この通りに、実行ファイルの出力先を指定して解決。
ビルドボタンを押すだけで、実機にアプリが転送されました。

2010年02月27日(土)

giflibを使ってrawファイルに変換する

http://diary.awm.jp/~yoya/data/2008/09/16/gif_dump.c?
のプログラムなのですが、
画像のヘッダ情報はうまくとれるのですが
肝心の画像の先頭ピクセルにうまくアクセスできていない様に思います。
といった質問を見つけました。
教えて!goo でログインしても解答出来なかったので、ここで回答。

回答:

以下に抜粋する gif_dump.c のコードで参照している変数、 RasterBits が画像の先頭pixel に相当します。
printf("RasterBits:\n");
for (y = 0 ; y < desc.Height ; y++) {
    printf("  y=%d:", y + desc.Top);
    for(x = 0 ; x < desc.Width ; x++) {
        printf(" %02x", image.RasterBits[ii] & 0xff);
        ii++;
    }
    printf("\n");
}
でも、これ 1 byte なのに? RGB は 3bytes じゃないの?
という疑問があると思いますので、パレット形式について以下に説明します。

ビットマップとパレット:

ビットマップ画像は、RGB の要素を持つ縦横のマトリックスなので、 データとしては、RGB(24bit)の配列(←縦x横の長さの)として表現出来ます。
上記の質問者はこの形式のデータが、GIFLIB の構造体の何処に 埋まっているんだろう。といった意図での質問だと思われますが、
GIF はパレット形式で画像を表現していて giflib は、パレット 形式のまま取り出す API しかないので、ビットマップ形式には 自分で変換する必要があります。

パレットとカラーマップ:

パレット形式というのは、まず画像で使われている色を並べたテーブル (カラーマップ)を用意して、画像データの方は RGB(24bit)でなく、 色インデックス(GIF は最大 256色なので、8bit)のリストで表現します。
比較すると、
  • 表現する画像
     +--+--+
     |赤|緑|
     +--+--+
     |青|黒|
     +-----+
    
  • ビットマップ形式
     255,0,0, 0,255,0, 0,0,255, 0,0,0
     <-- ラスタデータ  ------------->
    
  • パレット形式
     255,0,0, 0,255,0, 0,0,255, 0,0,0, 0, 1, 2, 3
     <-- カラーマップ --------------> <ラスタデータ->
    
    giflib が取り出せるのは、このカラーマップと色インデックス値の配列です。
    上の例だとビットマップ画像よりデータが膨らんでしまっていますが、 画像のピクセル数が増えるほど、パレット形式の方が有利になります。 (1pixel につき 1 byte しか増えないので)
  • giflib の構造体的には?:

    ↑これを元に説明すると、
    ColorMapObject *ColorMap;
    
    で表現されているのが、カラーマップ (SColorMap と ImageDesc.ColorMap があるのは後述)で、
    printf("RasterBits:\n");
    for (y = 0 ; y < desc.Height ; y++) {
        printf("  y=%d:", y + desc.Top);
        for(x = 0 ; x < desc.Width ; x++) {
            printf(" %02x", image.RasterBits[ii] & 0xff);
            ii++;
        }
        printf("\n");
    }
    
    で表示しているのが、パレット形式のラスタデータ(カラーマップへのインデックスの配列)です。

    SColorMap と ImageDesc.ColorMap ?:

    GIF は複数枚の画像を入れる事ができて、それを一つの共通したカラーマップで見るのが SColorMap(グローバルカラーマップ)で、一枚一枚独立してカラーマップを持つのが ImageDesc.Colormap (ローカルカラーマップ)です。
    この、グローバル/ローカル・カラーマップはアニメーションGIF で意識する事になります。

    util/gif2rgb.c:

    尚、giflib の中に util/gif2rgb.c というプログラムがあって、 GIF のデータを RGB の RAW なデータに変換してくれます。
    変換の入力にあたるのが、 パレット形式のラスター情報(カラーマップへのインデックスに配列)が GifRow で、 ColorMapEntry がインデックスに対応する色情報。
    出力側は、BufferP で RGB の形式でのラスタデータとなります。
    for (j = 0, BufferP = Buffer; j < ScreenWidth; j++) {
        ColorMapEntry = &ColorMap->Colors[GifRow[j]];
        *BufferP++ = ColorMapEntry->Red;
        *BufferP++ = ColorMapEntry->Green;
        *BufferP++ = ColorMapEntry->Blue;
    }
    

    教えて!goo で解答出来ない?:

    gooID でログインして、教えて!goo の中で、
    「この質問に回答します」のボタンを押したら会員IDの設定画面が出てきて、
    これに入力しようとすると、
    このメールアドレスはすでに登録されています 
    
    とか出てきて、次進めません。
    教えて!goo の ID 連携まわりが残念すぎます。

    これで、9 日分だよ〜。

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