These pages are written by only Japanese.

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

おはようございます♪ 現在は3月29日(金)6時40分。 鳥がさえずり始める頃です。


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

先月 2008年10月 来月
01 02 03 04
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年10月01日(水)

GIF89a Overlap for PHP (2)

思ったよりてこずってるので、真面目にマイルストーンを決めました。 ついでに実装しかけのコードを晒してみるテスト。 色 index の変わった pixel に対する処理が出来てないコードの惨状は置くとして、 今の発想のまま進めてもそこそこ重たくなる事に気付きました。

減色処理:

2日程悩んだ所で、(多分新しい)減色アルゴリズムを思いつきました。
  • 色インデックス表に対して
  • 各色から自分に一番近い色とリンクを張る
  • リンク(色距離の逆数で重み付け)が多い色順に無効マークを付ける
  • 無効マークが付いた色はリンク先の色からランダムで選ぶ (ランダムディザ風)
つまり色をノードとしてネットワークを作ってリンクが込み合ってる場所の ノードを間引きする感じ。
ネットワークに新しい色を追加するのも、ノードを辿っていけばコスト低めに 実装できそうな気がする。(多分)
一般的な減色アルゴリズムで重視する(色頻度の)ヒストグラムを全く考慮して いないので全然ダメな可能性もあるけど、それはそれでネタにはなるので、 とりあえず時間を見つけて試してみよ。^^;

2008年10月02日(木)

[swfed] swfed-0.12 release

replacePNGData PALETTE 形式対応として 0.11, 0.12 を release しました。 0.11 で見つかったバグを 0.12 で修正しているので、0.12 を使ってください。

replacePNGData PALETTE 形式対応:

swfed の replacePNGData に PALETTE 形式 PNG を指定したら 差し替え出来なかったとの不具合報告を受けたので調査。
PNG は BITMAP 形式と PALETTE 形式(GIF に似てる)の両方に対応していて、 それらはデータの持ち方が違うのですが、その考慮がごっそり抜けてました。○rz

0.11:

0.11 としてリリースしたら、透明度無しビットマップ形式の PNG 画像を入れると 壊れて表示されるとの報告を受けたので、コードを見直したところ、 switch case で break を忘れるなんて、初歩的すぎるミスを… !||!○| ̄|_
そんな訳で、すぐ 0.12 をリリースしました。

png_dump 改良

swfed-0.12 対応での調査用に、PALETTE フォーマットの時に含まれる 色インデックス(いわゆるカラーマップ)情報の表示を追加しました。
libpng 的には
png_color *palette = NULL;
int palette_num = 0;
png_get_PLTE(png_ptr, png_info, &palette, &palette_num);
こんな感じに取得できて、
for (i = 0 ; i < palette_num ; i+=8 ) {
    printf("[%03d]", i);
    for (j = 0 ; (j < 8) && ((i+j) < palette_num) ; j++) {
        printf(" #%02x%02x%02x",
               palette[i+j].red,
               palette[i+j].green,
               palette[i+j].blue);
    }
    printf("\n");
}
こんな感じで参照できます。

プログラム:

gcc png_dump.c bitstream.c -lpng
以下のページでも動作を確認できます。PNG ファイルを放り込むと 内部で png_dump が動きます。

はてな日記のタイトル

はてなの日記に URL を張るとトラックバックが自動で送られます。 *1
…で、最近、はてな日記のタイトルの付け方を間違えていた事に気づき、 過去分のを書き直しているのですが、とある日記を修正したのが原因で、 見かけが同じトラックバックが同じブログに複数送られてしまいました。 リンクが張ってある日記は慎重に *2 書き換えます。ごめんなさい。> 色んな人
*1: 設定で on/off 出来ますが
*2: 「ちょっとした更新」をチェックすれば OK なのかな?

2008年10月03日(金)

[swfed] 少しイジメテミタ

おっきな SWF ファイル:

% php sample/swfdump.phps "魔理沙は大変なものを盗んでいきました.swf" > /dev/null
malloc: ;_;
えっと… swfed は -DMALLOC_DEBUG を付けてコンパイルすると、 free し忘れを検出する為に、malloc/free の管理テーブルを作ります。 そのサイズが足りませんでした。
とりあえずサイズを倍に拡張して足りたので、それで… (このやり方はかっこ悪いので、もう少し考えます) デバッグ用とはいえ分かりにくいので、 エラーメッセージに table full を追加してます。

bcut:

バイナリを切り出すプログラムを使って苛めてみました。

中途半端な SWF ファイル:

% bcut game.swf 0 900000  >  game-hankake.swf
% php sample/swfdump.phps  game-hankake.swf
swf_object_input: uncompress failed by unknown reason
magic=CWS  version=9  file_length=1063877
rect=(0, 0)-(0, 0) (f_size=0)
frame_rate=0.0  frame_count=0
XXX (3) ptr=0xb79ac008 (/home/yoya/svn/swfed/src/swf_object.c, 61)
メモリリーク発見。(☆▽☆)
zlib 伸張に失敗した時の異常系で、 zlib 用に確保した領域を free し忘れてました。 対処後
% php ~/svn/swfed/sample/swfdump.phps game-hankake.swf
swf_object_input: uncompress failed by unknown reason
magic=CWS  version=9  file_length=1063877
rect=(0, 0)-(0, 0) (f_size=0)
frame_rate=0.0  frame_count=0
よしよし。

中途半端な PNG ファイル:

% bcut kuriboo4.png 0 166300 > kuriboo4-hankake.png
% php sample/swfdump.phps game.swf
	<略>
[38] tag=DefineBitsLossless2(36)  length=110
        image_id=30  format=3  width=62  height=18
        colormap_count=16  rgba colormap exists  indices exists
	<略>
% php sample/swfreplacepngdata.phps game.swf 30 kuriboo4-hankake.png > /dev/null
png_data_read_func: ! png_buff->data_offset(160789) + size(5516) <= png_buff->data_len(166301)
libpng error: png_read_read_func failed
アボートしました
あちゃー… でも、libpng のエラーハンドリングは setjmp 方式なんですよね…
libpng の man(3) の説明
See the discussion  on  libpng error handling in the Customizing
Libpng section below for more information on the  libpng
error   handling.    If  an  error  occurs,  and  libpng
longjmp’s back to your setjmp, you  will  want  to  call
png_destroy_read_struct() to free any memory.

    if (setjmp(png_jmpbuf(png_ptr)))
    {
        png_destroy_read_struct(&png_ptr, &info_ptr,
           &end_info);
        fclose(fp);
        return (ERROR);
    }

でもって、
If  you  read
the  file  from  different  routines,  you  will need to
update the jmpbuf field every time you enter a new  rou-
tine that will call a png_*() function.
スコープがあってればイイじゃない。ってとこかしら。

setjmp:

png_bytepp png_image_data = NULL;
	<略>
if (setjmp(png_jmpbuf(png_ptr))) {
    fprintf(stderr, "pngconv_png2lossless: libpng error jump occured\n");
    png_destroy_read_struct(&png_ptr, &png_info, NULL);
    if (png_image_data) {
        for ( y = 0 ; y < png_height ; y++) {
            free(png_image_data[y]);
        }
        free(png_image_data);
    }
    return NULL;
}
	<略>
png_image_data = (png_bytepp) malloc(png_height * sizeof(png_bytep));
for (y=0; y < png_height; y++) {
    png_image_data[y] = (png_bytep) malloc(png_get_rowbytes(png_ptr, png_info));
}
としてみたら、png_image_data が free 出来ず。 何でだろうと「setjmp ローカル変数」で google 様にお伺いを立てた所、
xにvolatileをつけ忘れると、こういうこと↑になります…
ナルホド。最適化とレジスタの罠か… やっぱり setjmp キライ
abort しちゃった方が全てを忘れられて楽だけど、 そんな訳にもいかないので、頑張って対処します。

discards qualifiers from pointer target type:

/home/yoya/svn/swfed/src/swf_png.c: In function 'pngconv_png2lossless':
/home/yoya/svn/swfed/src/swf_png.c:166: warning: passing argument 1 of
 'png_destroy_read_struct' discards qualifiers from pointer target type
/home/yoya/svn/swfed/src/swf_png.c:166: warning: passing argument 2 of
 'png_destroy_read_struct' discards qualifiers from pointer target type
volatile つけたら怒られちゃった… ><
仕方が無いので cast 付けて黙らせます。
png_destroy_read_struct((png_structpp) &png_ptr,
                        (png_infopp) &png_info, NULL);
何だかなぁ…

might be clobbered by 'longjmp' or 'vfork':

/home/yoya/svn/swfed/src/swf_png.c:234: warning:
argument 'image_data' might be clobbered by 'longjmp' or 'vfork'
image_data は setjmp と関係ない所で使ってるのに… どうしよう…

最後に:

やっぱり setjmp キライ

2008年10月04日(土)

両神山に行ってきました

同僚のお誘いがあって行ってきました。
日帰りは難しいとか元々修験者用の山とか、 難易度高めな印象を持ちつつ出発。

鎖場:


こんなのが、5,6箇所あります。
が、ヤビツ峠<->塔ノ岳の鎖場を経験してる自分には余裕。(*'ω'*)

眺め:

殆どの場所は木で覆われているので、眺め的には人を選びそう。
私は好きです。むしろ高所恐怖症の私にはこの方が(ry

岩岩岩…:

弘法之井戸:


云われが書いてある立て札とか無いので何だか分からないけど 弘法大師伝説の一つでしょうか。

紅葉?:

山頂近くでは赤い葉をちらほら見かけました。

山頂近く:

気をつけてネ
(((゚Д゚;;)) …でも、ほんとに注意した方がよい場所です。

綺麗な石がゴロゴロしてる場所があります。

山頂:



MS ICE でパノラマ作ろうと写真を沢山取ってる最中に メモリカードの容量を使いきってしまいました。
残念。

参考サイト:

地質学的には、両神山の多くの部分はチャート(SiO2 、水晶と同じ)という
成分で形成されている。チャートは数億年前に海底に沈んだプランクトン
(放散虫)の化石から出来たもので、鉄よりも硬い(硬度7)。
4月下旬から5月中旬、山頂一帯にアカヤシオが咲く。自然林が多く残され、
紅葉が美しいことでも知られている。
両神山を形成する主な岩石は、チャートと呼ばれるもので、
角岩とも言い、火打ち石に使われたものも、この仲間だそうだ。
チャートは硬くて風化に強いので、ギザギザした尾根や絶壁を形成しやすい。
まさに、両神山の特徴ある地形は、このチャートの特性を表現しているわけだ。 
なるほど。
イザナギ・イザナミを祀ったのは、両神山と呼ばれるようになってからであって、
それ以前にはこの二神には何の関係もなかった。
八日見という山名の由来は、日本武尊が東夷征伐の時、
この山を8日間見給うたから、八日見山と名づけられたと伝えられる。
しかしそれはヨウカミに八日見と宛字したための伝説で、
ヨウカミという呼称はヤオガミから来たものである。
ヤオガミの「ヤ」は八の意、「オガミ」は大蛇の意で仏教でいう竜王のことである。
つまりヤオガミは8つの頭を持った竜王で、この山の古縁起に
「竜頭大明神を祭神とする」と記されてあるのと一致する。 (後略)
        ※出典:深田久弥『日本百名山』(1964年新潮社刊)の朝日文庫版から再録
なるほど。なるほど。

bs_unescape.php

エラーのログを見てると、 たまに日本語がバックスラッシュでエスケープされてる事があるので、 それを解くだけのページを作ってみました。 例えば、
\xe8\xb5\xa4\xe9\x9d\x92\xe9\xbb\x84\xe8\x89\xb2
のような文字を submit すると、
赤青黄色
が出力されます。
今のところ UTF-8 限定です。content-type 書き換えるの面倒だったので…
もし、ShiftJIS や EUC にも対応して欲しいって人がいたら頑張ってみます。

ツール:

だんだん増えてきました…

2008年10月05日(日)

Skype on Linux がメモリを使いすぎる問題 (3)

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27944 yoya      15   0 94656  45m  13m S 41.9  4.6  11:01.74 skype
問題なかったので、次はボットをつないで様子を見ます。

2008年10月06日(月)

[swfed] 0.13 release

PNG PALETTE 形式の透明度対応:

PNG の透明度が効かない場合があるとの事で調べたところ、 PALETTE 形式の透明度の考慮が抜けている事が分かりました。 マニュアルを見る感じ、これっぽい。
png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans,
                 &trans_values);
trans          - array of transparent entries for
                 palette (PNG_INFO_tRNS)
trans_values   - graylevel or color sample values of
                 the single transparent color for
                 non-paletted images (PNG_INFO_tRNS)
num_trans      - number of transparent entries
                 (PNG_INFO_tRNS)
    png_get_bKGD(png_ptr, info_ptr, &background);
    background     - background color (PNG_VALID_bKGD)
                     valid 16-bit red, green and blue
                     values, regardless of color_type
とりあえず前者の tRNS を解析する事にしました。 png.h を見ると
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
   png_infop info_ptr, png_bytep *trans, int *num_trans,
   png_color_16p *trans_values));
となっているので、この型でやり取りすれば OK っぽいです。

実験:

コード
png_color *palette = NULL;
int palette_num = 0;
png_bytep trans;
int num_trans;
png_color_16p trans_values;
png_get_PLTE(png_ptr, png_info_ptr, &palette, &palette_num);
printf(" palette_num=%d", palette_num);
png_get_tRNS(png_ptr, png_info_ptr, &trans, &num_trans,
                                &trans_values);
printf(" num_trans=%d",num_trans);
実験結果
palette_num=127  num_trans=127
あってるっぽい。

png_dump.c:

透明度付き PALETTE 形式 PNG に対応したのでプログラムを晒します。 コンパイル
gcc png_dump.c -lpng bitstream.c
実行結果
(width, height)=(80,80) bpp=8 color_type=3(PALETTE) palette_num=127  num_trans=127

[000] #000000(00) #010101(20) #030202(11) #040404(3e)
[004] #080706(52) #090605(2a) #140c0b(ff) #141111(72)
[008] #350e0f(ff) #1b1b1b(9d) #241f1d(ff) #312020(5f)
実験ページ

swfed への適用:

replace API の戻り値を修正:

成功:false, 失敗:true になっていたので、修正。 C 言語では成功=>0、失敗=>非0 が一般的ですが、そのまま PHP の false, true に bind しちゃってました。○rz

リリース:

ふぅ… 。 色々とバグを治しました。
というか replace API の戻り値の不具合は本当にごめんなさい。 ごめんなさい。(´Д`;)

2008年10月07日(火)

会話が苦手なやつこい @ VIP

なんか、自分がいっぱいいる… (;^ω^)
>>25 
わかる 
自分入れて4人になると、発言ターンを譲りっぱなしで発言できないwwwwww
譲る気はないんだけど邪魔にならないタイミングを 探ってる間に次の話題に移ってる事が多いかな。○rz

これで、7 日分だよ〜。

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