These pages are written by only Japanese.

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

こんばんわ♪ 現在は9月23日(月)3時9分。 そろそろお休みになられたほうが。


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

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

2008年05月20日(火)

swfed SWF 圧縮on/off 機能

FWS(圧縮無し), CWS(圧縮有り)の切り替えを出来るようにしました。
API 的には以下のメソッドを実装。
function getHeaderInfo()       return array('compress'=>...);
function setHeaderInfo(array('compress'=>...))
                               return true/false;

swfcompress.phps:

実行例
% php swfcompress.phps ~/foo.swf | od -c | head -1
0000000   C   W   S  \b 262   r 001  \0   x 234 324 271   w   X 223   [
% php swfcompress.phps -u ~/foo.swf | od -c | head -1
0000000   F   W   S  \b 262   r 001  \0   p  \0 005 334  \0  \0 327  \0
strings で SWF ファイルの中を見てもさっぱり分からない場合は大抵、 中身が zlib 圧縮されてるので、swfcompress.phps -u で解いてから(以下略

プログラム:

追記 (2008/09/27):

SWF フォーマットについて調べた事を以下のページにまとめました。
[- HNS 警告:コマンド SWF って予約されてます。-]

2008年05月21日(水)

swfed DoAction 実装開始

ActionScript の定数とか書き換えられないかと思い。 ↑この説明を読みながら、本能のままに分解処理をつくってみました。

結果:

action_record =
        action_id=0x01  action_length=2
        action_id=0x01
        action_id=0x00
うーん。全然ダメっぽいですね… action_id 01 なんて知りませんし。
もう少しお勉強しないとダメですか。

プログラム:

はてな日記市民になりました

(よく分からないけど) やったー。

CGアニメを革新する技術

ARToolKit の話を聞いた時、こんな事できたらいいなとは話してたけど、 実際にやる人がいるとは…

2008年05月22日(木)

電車から降りるときに絡まれる

電車から降りようとした時に、ドアが開いてもその真ん中に 立ちっぱなしの若者がいて降りれなかった時の事。
※位置関係
 外
+----+----+ ←電車のドア
○  ○  ○ ←他人
    ↑奴
    ○ ←自分
 中     ※) 通勤中の電車なので混雑してます。
すみませんと言ってもヘッドフォンで聞こえないのか動きがないので、 肩を軽く叩いてどいて貰って、その横を通ったら足をひっかけられ、 更に足を持ち上げられました。(本気で転ばそうとしてきた)
ギリギリ体勢を立て直して *1 転ばずに済みましたが、何だろうと振り返ってみると、 電車の中からさっきの人が思いっきり睨んでる… (そしてて周辺がザワザワ *2 …)
どうやら自分が邪魔になってる事に気づいてないようで…
なんという、ゆとり… (;^ω^)
昔だったら、中指立てて挑発してたと思いますが、 もう大人なので首をかしげつつ、そのまま去りました。
*1: 山登りで鍛えてるおかげですが、昔の自分だったらきっと転倒してた。
*2: 場がザワつくの久しぶりに体験した。^^;

swfed DoAction 実装 (2)

何となく出来ました。

swftools をカンニング:

op コードのフィールド 7 bit で、 同じバイトの MSB 1 bit が length フィールド有り無しフラグで 分かれていると思いきや、
        op = swf_GetU8(tag);
        if(op<0x80)
            length = 0;
        else
            length = swf_GetU16(tag);
どうやら、MSB 混みで op コードとして処理するのが良いらしい。 真似しよう。

swfdump.phps の結果:

tag=DoAction(12)  length=7
action_record =
        Goto Frame len=2
        Play
        End
でも、destructor で munmap_chunk(): invalid pointer が発生。

invalid pointer エラー:

/lib/libc.so.6(cfree+0x1bb)[0x2c00eb]
/usr/lib/php/modules/swfed.so(swf_action_list_destroy+0x2c)[0x113d16c]
/usr/lib/php/modules/swfed.so(swf_tag_action_destroy_detail+0x29)[0x113cac9]
/usr/lib/php/modules/swfed.so(swf_tag_destroy+0x56)[0x113af46]
/usr/lib/php/modules/swfed.so(swf_object_close+0x2d)[0x113a29d]
/usr/lib/php/modules/swfed.so[0x1138bdf]
php(list_entry_destructor+0x82)[0x81d6d92]

デバッグ:

swf_define.h のデバッグの所を有効にして実行
XXX (0) ptr=0x8da1e98 (/home/yoya/prog/swfed/swf_object.c, 19)
XXX (2) ptr=0x8d9e988 (/home/yoya/prog/swfed/swf_tag_action.c, 30)
XXX (165) ptr=0x8d9fa78 (/home/yoya/prog/swfed/swf_tag.c, 71)
XXX (167) ptr=0x8d9faa8 (/home/yoya/prog/swfed/swf_tag.c, 71)
XXX (168) ptr=0x8d9fac8 (/home/yoya/prog/swfed/swf_tag.c, 94)
XXX (169) ptr=0x8d9fad8 (/home/yoya/prog/swfed/swf_tag.c, 71)
XXX (170) ptr=0x8d9faf8 (/home/yoya/prog/swfed/swf_tag.c, 94)
XXX (171) ptr=0x8d9fb08 (/home/yoya/prog/swfed/swf_tag.c, 71)
XXX (172) ptr=0x8d9fb28 (/home/yoya/prog/swfed/swf_tag.c, 94)
XXX (177) ptr=0x8d9eac0 (/home/yoya/prog/swfed/swf_action.c, 221)
XXX (178) ptr=0x8d9ead0 (/home/yoya/prog/swfed/swf_action.c, 148)
XXX (179) ptr=0x8d9eae0 (/home/yoya/prog/swfed/swf_action.c, 221)
XXX (180) ptr=0x8d9eaf0 (/home/yoya/prog/swfed/swf_action.c, 221)
セグメンテーション違反です
destruct 処理の途中で落ちてるので、結構ボロボロ。

malloc のサイズ指定がおかしい:

swf_action_list_t *action_list;
action_list = calloc(sizeof(swf_action_list_t *), 1);
あほですか… ○rz
action_list = calloc(sizeof(* action_list), 1);
修正っと。φ。。
あと余計に free してる場所を発見して修正。

メモリリーク発見:

XXX (178) ptr=0x958aad0 (/home/yoya/prog/swfed/swf_action.c, 148)
メモリリークが一箇所残っていました。
L148      act->action_data = malloc(act->action_length);
なるほど。
        swf_action_t *action = action_list->head;
        while (action) {
            swf_action_t *action_next = action->next;
            if (action->action_data) {
                free(action->action_data); ※←これを追加。
            }
            free(action);
            action = action_next;
        }
        free(action_list);
メモリリークも完治。
さて、逆アセンブルのやり方はだいたい分かりましたけど、 swfed 的にどういう API にしましょうか。うーん。

プログラム:


2008年05月23日(金)

Amazonを倉庫代わりにしていた転売厨終了のお知らせ

ちょっとまて!
つーことは5月31日は品切れ品の大量放出がくるのか!?
よーしパパ、0時から尼のサイトに張り付いちゃうぞー!!!!!
どうなるんでしょうね。

ゲーム制作では成果に対して報酬以外のもので応えなくてはいけないという話

ゲームに限らずプログラマ一般に言える事かもしれません。

地頭力とかフェルミ推定についての誤解を解いておく

工数計算とか推定しなきゃいけない仕事は結構あります。

これで、4 日分だよ〜。

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