These pages are written by only Japanese.

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

こんにちは♪ 現在は8月9日(日)17時34分。 今日も一日、お疲れさまです。


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

先月 2008年01月 来月
01 02 03 04 05
06 07 08 09 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年01月10日(木)

捕鯨問題で儲ける人達がいる

捕鯨問題が揉めるほど反捕鯨団体(グリーンピースとか)の寄付が増えるとか、 オーストラリアやアメリカでは政治家が環境問題へ取り込んでるという宣伝に使える とか、そういう話。

円グラフで見るゲーム業界シェアの変遷

任天堂 DS は化け物か…

もやしもん QR コード

中に絵の入った QR コードっぽいのがあるけど、 こんなコード作れるのか…
実際携帯に取り込んだら URL 拾えた。SUGEE

国会図書館の本、全国で閲覧可能に・3000万冊をデジタル化

3000万冊を超える国会図書館の蔵書をデジタル化して全国で
閲覧可能にするための法改正に政府が着手する
いいね。
政府は5月ごろまとめる知的財産推進計画2008にこの方針を盛り込み、
2009年の通常国会での法改正を目指す。
でその後、
まずは都道府県立図書館の専用端末と接続。
将来はインターネットを通じて自宅やオフィスで簡単に読めるようにする方針だ。
先は長そうですね。

2008年01月11日(金)

memcached expire の罠

知り合いから聞いた話
php でよく使われる memcache ですが、 これの memcached 側の expire 処理が曲者だそうです。
set で指定する expire 値が30日を超えるかどうかで意味が変わるらしく、 マニュアルに書いてあるので気付けという感じですが、 見落としてた。 (;ω;)

マニュアル:

項目の有効期限。ゼロの場合は有効期限なし (いつまでも有効) となります。
Unix タイムスタンプ形式、あるいは現在からの 秒数で指定することが可能ですが、
後者の場合は秒数が 2592000 (30 日) を超えることはできません。

コード:

memcached-1.2.4/memcached.c
#define REALTIME_MAXDELTA 60*60*24*30

static rel_time_t realtime(const time_t exptime) {
    if (exptime > REALTIME_MAXDELTA) {
        if (exptime <= stats.started)
            return (rel_time_t)1;
        return (rel_time_t)(exptime - stats.started);
    } else {
        return (rel_time_t)(exptime + current_time);
(コメントは外してます)

ワーナーBD一本化とPS3のPS2互換機出荷完了は、コンテンツ配信のための準備段階

トロステに釣られて 60GB モデルを買う決心をしたばかりなのに… (;ω;)

再掲:

去年10月の記事ですけど、
PS2のゲームをプレイするという選択肢をなくすことで、
顧客がより多くの時間とお金をPS3に費やしてくれる
ことを期待しているという。
元々、PS2 エミュ開発失敗の時点で歯車が狂ってたので、 その点のみ同情してたけど、こういう発言されるとなんだかなぁ…

2008年01月12日(土)

「有害サイト」フィルタリングは何をもたらすか

私は、安価に維持できるフィルタリングは有害無益である、と改めて述べたい。
フィルタリング付きのシステムでチャットしてると、こんな単語が アウトなんだと逆にダメな知識が増えますが… ( ̄― ̄)
それはおいといて、まともなページまでフィルタリングされまくるのがまずいよね…
多少の誤差は仕方ないけど、やり方がまずいと誤差ってレベルじゃなくなるので。

キッズgooはじかれサイト同盟:

こんな同盟が紹介されてました。
自分のサイトがキッズgooにフィルタリングされていることを
知ったときの甘酸っぱい感覚をみんなで共有しようという同盟です。
またオーバーな。
と思ったら、フィルタリングチェックフォームで Yoya's diary も ひっかかる事がわかり、少し甘酸っぱさがこみ上げてきました。(⊃д⊂) って、うち有害サイトなんですかw

Flash のお勉強 (レイヤー)

レイヤーに分けてモーションを独立させてみた。
ついでに、tellTarget の練習。
オブジェクトを選択してプロパティの「インスタンス」に適当な文字列を入れて、
tellTarget("適当な文字列") {
	_alpha = 50;
}
のアクションを適当なフレームに入れると、 そのフレームで透明度が50度になるとの事。 片方のオブジェクトのモーションがすぐ止まるのは謎です。
tellTarget したタイミングなのですが、何でだろう。 (・ω・)

[JavaScript] リッチテキスト編集を可能にする

メモメモ。φ。。

太陽が活動期入りか 携帯・ATMも障害の可能性

太陽の活動が最も激しくなるのは11,12年ごろとみられる。 
来年と再来年に注意という事らしいです。 どの位影響があるのか分かりませんけど。

マイポータルのメールアドレスを無効にしてみた

中の人に知り合いがいる関係で以下のサイトを使っていますが、 「記事一覧」を選択すると何故かブログ記事とメールを一緒に表示する *1 ので、
結果、SPAM メールで埋め尽くされる自分は(自分の見たい)記事を探すのに、 サブメニューの「ブログ記事」を毎度押さないとダメで、 なんでこんな無駄な手間をと毎回思っていました。
ふと設定項目を見ると、
「メールアドレスを「無効」にすると、このアドレスでのメール受信は行えなくなりますが、(以下略)」
というのを発見。当然「無効」に設定。やったーっ ('▽')!
ここのメール、一応 SPAM 判定してくれるけど、SPAM ですよってアイコンが付くだけでフィルタ出来ないですよね。意味なし。(´Д`;) フリーのメアドにそんな期待するなって言われそうだけど。
*1: …というか、メールを記事のくくりに入れるのは何か違うよなぁ… 記事っていったらブログやコミュの投稿記事だろ、常考…
# ML の archive のイメージでごっちゃにしてるだけかもだけどね。


2008年01月13日(日)

awm.jp ドメインの問い合わせ。

そろそろ awm.jp ドメインの expire が近づいてきたので、 humeia に問い合わせてみた。
awm.jp ドメインの有効期限が 2008/05/31 と近いのですが、
更新手続きを促す連絡もなく、管理画面上に更新を行う
リンクも見あたらない為、不安です。
更新手続きの方法を教えて頂けませんでしょうか。
この辺、domain21 は良かったなぁ…
domain21 が潰れて自動で humeia に移管されたので、 仕方なく *1 使ってるんだけど。

誰かまともなレジストラ紹介して貰えませんか? (;ω;)
*1: humeia のドメイン管理画面UI、何とかしてくれないかな。
わかりにくいというか、手抜きにもほどがあるだろう。アレ。

自宅PCメモリ増設

ふと、自宅のメインPCを調べたらメモリが1Gしか載ってなかったので、 PC を購入した時の紙を読んでメモリの種類 *1 を調べて、近所の祖父地図で 1Gメモリを2つ買ってきて、計3G に拡張しました。
効果はというと、
以前は Skype の起動時と終了時に画面が数秒固まってましたが、 とりあえずそれが無くなった様子。(まぁ、気のせいかもですけど)
*1: PC6400 DDR2 800M ちょっとお高いメモリです (;ω・)

その他

SchoolDays 桂言葉ちゃんお誕生日記念競争:

お金出すとレースに名前付けられるからって… アニオタ自重しる (;^ω^)
少し狼狽気味の実況が素敵。

撮影キリン親子死でNHKドラマ放送中止:

赤ちゃんのひまわりをいつも一緒にいる母親のリリカから引き離して、 1日あたり3、4時間撮影。うーむ… 動物園がOK出した以上は大丈夫なはず。の時間なんだよね。 (最近、この手の専門家が頼りないので疑ってしまう…)

[らき☆すた][初音ミク]とある同人イベント、当日になって中止を発表:


2008年01月14日(月)

Flash バイナリいじり (ヘッダの読み込み)

しばらく Flash CS3 を触ってるうちに、
タイムラインとかしち面倒なの使ってられるかー。ヽ(`д´)ノ
と短気を起こし、寄り道してバイナリをいじる事にしてみた。
でも、SWF ファイルフォーマット仕様書のライセンスが怪しい。 つまり、公式のフォーマット仕様書を読むとライセンス的に穢れて SWF バイナリ変換のプログラムを作れなくなるらしい。
なので、以下のページを参考にしてみる。 フォーマットが C の構造体で書かれているので自分的に読みやすいです。

自作バイナリ閲覧ツール:

大昔作ったの引っ張り出してきた。 何故か、EBCDIC 対応w

フォーマットのお勉強:

swf のバイナリを見るとこんな感じ
  addr :  0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000: 4657 5304 900a 0000 7000 0960 0000 9600  FWS     p  `
0x00010: 0008 2800 4302 0000 0040 003f 0200 0000    ( C    @ ?
フォーマットは、
struct swf_header {
		unsigned char		f_magic[3];	'FWS' or 'CWS'
		unsigned char		f_version;
		unsigned long		f_file_length;
	}
FWS の magic 文字列がきて続く 4 は Flash のバージョン。 その次がファイルサイズで、900a 0000 => 0x00000a90 => 2704
% ls -l foo.swf
-rwxr--r-- 1 yoya yama 2704  1月  8 23:10 foo.swf
ぉぉ。合ってる。(゜∇゜)
お次は、
	struct swf_header_movie {
		swf_rect		f_frame_size;
		unsigned short fixed	f_frame_rate;
		unsigned short		f_frame_count;
	};

	struct swf_rect {
		char align;
		unsigned		f_size : 5;
		signed twips		f_x_min : f_size;
		signed twips		f_x_max : f_size;
		signed twips		f_y_min : f_size;
		signed twips		f_y_max : f_size;
	};
むー… この swf_rect は、どう解釈すればいいんだろう。

swftools を参考に:

swftools-0.8.1/lib/rfxswf.c (430)
int reader_GetRect(reader_t*reader,SRECT * r)
{ int nbits;
  SRECT dummy;
  if (!r) r = &dummy;
  nbits = (int) reader_GetBits(reader,5);
  r->xmin = reader_GetSBits(reader,nbits);
  r->xmax = reader_GetSBits(reader,nbits);
  r->ymin = reader_GetSBits(reader,nbits);
  r->ymax = reader_GetSBits(reader,nbits);
  return 0;
}
あー。なるほど。
初めの 5bit で twips フィールドの長さが分かるので、 その長さで4回取ればいいのか。
  addr :  0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000: 4657 5304 900a 0000 7000 0960 0000 9600  FWS     p  `
                             ~~ 
0x00010: 0008 2800 4302 0000 0040 003f 0200 0000    ( C    @ ?
70
0111 0
01110(= 14)bit らしい。更に分解すると、こんな感じ。
70       00       09       60
01110000 00000000 00001001 01100000 
<---><-----xmin-----><-----xmax----
align
00       00       96       00    
00000000 00000000 10010110 00000....
><----ymin-----><-----ymax----->

0008       2800 4302 0000 0040 003f 0200 0000
<-->       <-->
8.0          0x28=(40)frames
(frame/secs)
14 bit ずつ4つ取り出して、次のバイトを読むと ちゃんとそれっぽい値が対応した。 ちなみに、twips は単位で 20 twips が 1 pixel に相当するらしい。 なので、xmax, ymax は各々 0 10010110 00000 = 0x12c0 = 4800 で、20 で割ると 240 。携帯向けサイズぴったし。 ヽ(゜∇゜)ノ

FrameLabel:

お次はタグ(のはず)。43 番タグは何かというとコレ。
Name     Number  Type
FrameLabel  43  Define
Comments
Names a frame or anchor. This frame can later be referenced using this name.  

struct swf_framelabel {
	swf_tag			f_tag;		/* 43 */
	string			f_label;
	if(version >= 6) {
		/* optional field */
		unsigned short	f_flags;
	}
};
FrameLabel タグらしいけど、↓この実データと合わないんだよね‥
4302 0000 0040 003f 0200 0000
43 の後に文字列が続くらしいけど 02 ってASCII文字じゃないし。うーん… (・ω・)
もしかしたら、PASCAL 内部表現の文字列なのかな。 あれって初めの1バイトが文字列長じゃなかったっけ。

もう少し見ないと構造イメージが沸かなくて中途半端なのが残念だけど、 今日は遅いので終了。 実行結果
% ./a.out  saitama.swf
header magic=FWS
header version=4
header file_length=0xa90(=2704)
movie header alignc=14
movie header x_(min,max) =(0, 4800)
movie header y_(min,max) =(0, 4800)
movie header frame_rate =8.0
movie header frame_count =0x28(=40)
framelabel string=
Unknown SWF Tag(0x00)
ビットストリーム処理(というか、C 言語自体)久しぶりに書いたけど、 むちゃくちゃだ。リハビリしよ。^^;

実のところ:

に内包されてる library に欲しい機能が一通りありそうだけど、一応、 ファイルフォーマットの構造をバイナリレベルで把握するまで SWF の バイナリデータと睨めっこする予定。
続く

追記 (2009/12/18):

CWS, FWS で検索してココに来られた方を見つけたので、 まとめページへのリンクを追記。

awm.jp ドメインの問い合わせ - HUMEIA からの返答

ヒューメイア様から返事が来ました
AWM.JPの更新手続きのご案内は通常有効期限の2ヶ月前:
4月はじめにご連絡用メールアドレス宛にご連絡させていただきます。
毎年更新なので、自分の場合は4月から6月は毎年気が抜けないらしい。
DOMAIN21 はまとめ払いが出来たのでよかったなぁ…
… まとめて(たしか5年分)払ったその年に潰れて持ち逃げされちゃったけどね (;ω;)

愉快堂関連:

maholo

人力検索エンジンとして有名なサイトらしい。 SNS 機能もあるらしく、とりあえずアカウントだけ作ってみました *1 が、使い方がいまいちよく分かりません…
*1: 名前に釣られたとかツッコミは無しの方向で…

嫌儲とWeb性善説

この手の話は儲けるかどうかと別次元だと思っていたけど、 そう奇麗事もいってられないようで…

地上アナログ停波でデジタル放送に移行しない人は・・・

デジタル放送に移行しない人がそこそこいるとしたら、 インターネットの情報をダラダラ見続ける事に特化したサービスにとって ビジネスチャンスだったりしないかな。とふと思った。
2011 年なんてすぐ来るし、今ってダラダラ見続けるサービスってあまり見ないし。 (ニコニコとかの動画サイトも動画ごとにボタンを押さないとダメ)
Push技術を謳ったサービスの復権がありそうな予感。

その他

急速に進む米SNSの相互運用性向上:

JavaScriptの動作を軽くするための工夫:

しかし,ページのロードが終了した段階で,たくさんの処理を行ってしまうと,
「ページの読み込みが終わってからJavaScriptの処理のためにページが一瞬固まる」
という現象が発生してしまいます。
あるある…

フランス大統領、インターネットへの新たな課税を示唆:

日本で真似されたら嫌ん。

miarakure.com

アカウントハックサイトらしい。(以下の URL は間違えても踏まないでね)
- --[http://www.nicovideo.jp/ ニコニコ動画]
+ --[http://www.miarakure.com/happy/ ニコニコ動画]

- --[http://pukiwiki.sourceforge.jp/ pukiwiki-official]
+ --[http://www.miarakure.com/happy/]


履歴見たら 12/24 にやられてたのか…
まぁ、粛々と spam リストに追加しよ。

ちなみに踏むと:

<script language="VBScript">
on error resume nextburl_0="http://www.miarakure.com/wiki/lin.exe"
burl_0="http://www.miarakure.com/wiki/lin.exe"
burl_1="http://www.miarakure.com/wiki/rse.exe"
burl_2="http://www.miarakure.com/wiki/ff.exe"
lin.exe はリネージュ、ff.exe は FFXI だとして、 rse って何だろ。

2008年01月15日(火)

Otaba と広告

からメルマガ的なメッセージが届いていたので、 久しぶりにページを開いてみたら、いつの間にか 色々ウザイ広告が入っていて嫌んな感じになってました。
特にここは紫基調の独特なデザインをしているので、 (目立つ為にオレンジを多用しがちな)広告ととことん相性が悪いです。
収入がないとサービス続けられないだろうし、 広告を選べない状況も考えられるし… 仕方ないんだろうけど、ちょっと残念かも。 (というか、自分は退会するかも)
その点、 は頑張ってる。でも、収益はどうしてるんだろう…

一発は百の空振りから生まれる

「楽に努力出来るのが天才」というのが心に響いた。 確かに今まで見た事のあるすごい人は、そんな感じに見えた。
「楽に」というのを「効率よく」とか「自然に」と 読み替えるとすっきりするけど。
貶しが一般的だと、インプット-プロセス-アウトプットループのコストが
上がるのである。「下手なアウトプットは貶される」ということになれば、
当然「大物狙い指向」になる。
もしくは目立たない事しかしなくなって、出る杭は打たれる(前に自粛する)結果に…
でも、どこかで止めないと、「ぉぃぉぃ、誰もチェック出来なかったのかよ」 みたいなダメな結果を出してしまうので、そうそう褒め続けられない事情も。
バランス、もしくは役割分担が難しい所です。

転載、引用、盗用

一応、区別はつけてるつもりだけど、 最近引用がうまく出来てない気はしてます。 ごめんなさい。

その他

犯罪の九割は失業率で説明がつく:

格差社会がどうとは言わないけど貧困層が増えるほど 犯罪が増えるのは仕方ないというか…
ワーキングプア問題は何とかして欲しいですよねぇ。 自助努力じゃどうしようもない所があるらしいので。
自分はたまたま相性の良さそうな会社に入れたけど、 入社面接に失敗してたら。と思うと全く他人事じゃないし。

「TV見られない」不安あおり契約、「地デジ」トラブル増加:

水まわりの修理サービスのトラブル多発! 広告を見て呼んだら、思いもかけない請求が:

朝毎読日経 VS 地方紙のシェア争い:

「全国紙」の空洞化とブロック・地方紙の強さ
だそうです。

2008年01月16日(水)

BlogPet

えーっと。別にココロ様に釣られた訳でなくブログシステムの研究にですね…
… のっけから言い訳モードなのはさておき、BlogPet を使ってみました。 まずは「ココロと暮らす」を選択してと… (←冒頭の言い訳がすでに無駄風味
幸い yoya のニックネームが取れたので、そのまま登録して My ページへ移動。

My ページ:

初心者に優しい作りのページです。何となく先に進めるこの気楽さがいい。

ブログエディター:

ブログを書く為の WYSIWYG なエディターが表示されて、そこに文字を入力します。
って… リッチテキスト! o('▽')o リッチテキスト!
しかも Flash とか余計なのが動かない DHTML 的なエディターです。

SUGEE!!!!!! (・∀・)
…まぁ、調子にのってエディットしてたらエラーが出たのはご愛嬌。
安全確認を取れないHTMLがあります:<font style="font-size: medium; background-color: #ffff00>
文字を少し大きくしてオレンジ色をつけただけなのですが。
あと、HTML ソースを覗くと、
/* convert_fonts_to_spans : true, */ /*これ入れると 戻る の挙動がおかしくなる*/
等と書いてあって試行錯誤なのが垣間見えます。開発者頑張れ。('▽')!!
あと、エディター機能は TinyMCE という JavaScript 製 WYSIWYG ライブラリ を使っています。(これについては、後述 * で)
ブログを書くと毎回、
投稿に失敗した可能性があります、確認が完了するまでしばらくお待ち下さい
等と適当なメッセージが表示されるのもご愛嬌。
更に、ブログの履歴は表示されるけど、ブログ本文をどこで見られるのか分からないのもご愛嬌。
いやぁ、キャラクターの存在って偉大だゎ。何でも許せちゃう。← 既にメロメロ (何に?)

ブログリーダー:

フィードの追加/編集 UI が非常にシンプルで分かりやすい。
早速、いくつか追加と。φ。。

他の人のフィードを見る事も出来て、気にいったのがあれば、 さくっと自分のブログリーダーに取り込める。

ブックマーク:

ソーシャル化されていて、人様のブックマークが見られるようになってる。
タグもついてるので何となく、飛び先もイメージできる。

なんという Web2.0 (;^ω^)
ていうか、アレなブックマーク集まりすぎw

アクセス解析:

PV をグラフにして見せてくれるらしい。(今日始めたばかりなので、まだカウント増えてないけど)

どう増えるか楽しみ。

グループ:

いわゆる SNS のコミュニティ機能らしい。

これだけはスペースの使い方が下手な感じがしなくもない。
けど、ココロ様が可愛いから許すっ! ← もうダメぽ…

その他:

広告も大きいのが張ってあるのにあまり邪魔に感じさせない。 デザインセンスもレベル高いね。
こういうサイトが作れる技術力がうらやましい。
しばらく使っていこうと思いました。(゜∇゜)b

… (#-_-):

…とべた褒めしたけど、ここにも「ヘアメディカル業用スカルプD」の広告が 表示されやがりました… 最っ低… (一気に評価0…
mixi や Otaba でも毎日こんなの (←微グロ画像注意) 見させられてます。
いくら自分がいい歳したオッサンでも(だからこそ?)、 こんなの毎日何度も見ていい気分しないっての…
ターゲッティング広告も良し悪しですねぇ… (-ω-;)

あ…:

% nslookup cre.adjustnetwork.com
Non-authoritative answer:
Name:   cre.adjustnetwork.com
Address: 202.7.109.107
止めるか… (悪の誘惑
% whois 202.7.109.107
<略>
inetnum:      202.7.109.64 - 202.7.109.127
% echo 202.7.109.64 - 202.7.109.127 | aggrCidr.pl
202.7.109.64/26
ふむ。すっきり。(怒られそうだけど

aggrCidr.pl の中身:

#! /usr/bin/perl -w
use strict;
use Net::CIDR;

for(Net::CIDR::cidradd(<>)) {
    print "$_\n";
}
このスクリプト便利です。

【サーバ設置型 html エディタ】 TinyMCE と FCKeditor

先程、TinyMCE の名前を出したけど、html エディタには色々あるらしい。
以下の参考 URL を見つけたので、ブックマーク。 FCKeditor は WORD と勘違いしそうな程の編集機能があるらしいけど、 重たいので実際に使うには微妙っぽい。(勿論、使ってみないと何ともだけど)
メニューが多すぎると逆に使いづらくなるので、 TinyMCE のメニュー位がいい感じかな。今度使ってみよう。

TinyMCE のコードを読んでみた:

キーやマウスのイベントを真面目にハンドリングして、 JavaScript でエディター機能を力づくで実装してる訳ですが、 もうねw やりすぎww 人のコード見て感動したの久しぶりだゎ。
if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) {
        inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo');
        inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo');
}
	<略>
case "Paste":
        var cmdFailed = false;
        // Try executing command
        eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');
Undo や Paste まで対応ですよw
IE で編集したリッチテキストデータを FireFox にコピー&ペーストしたら、 リッチテキストが表示されるし、 NotePad にコピーするとプレインテキストが表示される。
なんという親切設計。(;^ω^)

designMode:

cron 0:00 指定の罠

cron で 0:00 を指定した起動スクリプトが何故か 1秒フライングして 前日の 23:59:59 に起動する事があり困っていた所、以下のような話しを聞けた。
vixie-cron-3.x にはフライングで起動するバグがある。 少し古めの Linux ディストリビューション(RHEL3 とか)だと 標準で vixie-cron-3.x が入っているので、注意が必要らしい。
新しいのだと ISC cron 4.1 が入っていて、 こちらでは問題が起こらない模様。
vixie-cron と作者が同じっぽいけど、 後継プログラムなのか新規に書き起こしたものかは謎。
誰か、vixie 謹製 cron の repository の場所知りませんか。(´Д`;)

<meta name=”keywords” content=○○”←の中にキーワードを入れたら順位がおちました。これってないほうがいいのでしょうかね?

キーワードの無駄使いに注意

2008年01月17日(木)

Flash SWF バイナリいじり (ブロックの分解)

これ の続き
やっぱりタグの所が分からないので、swftools を覗いてみた。

swftools でカンニング:

if (reader->read(reader, &raw, 2) !=2 ) return NULL;
raw = SWAP16(raw);
len = raw&0x3f;
id  = raw>>6;
あー… なるほど。ビット単位で長さが混ざってるのか。
43 01 => 0143
   0    2   4    3
0000 0010 0100 0011
<----------><----->
  id = 1001  len = 3
     =  9
tag 9 番に相当するのはと。
SetBackgroundColor  9  Display  Change the background color. 

struct swf_setbackgroundcolor {
	swf_tag			f_tag;		/* 9 */
	swf_rgb			f_rgb;
};
struct swf_rgb {
	unsigned char		f_red;
	unsigned char		f_green;
	unsigned char		f_blue;
};

length は 3 byte だし、ぴったりですね。
プログラム的にはこんな感じかな。 実行してみると。
% ./a.out  saitama.swf
header magic=FWS
header version=4
header file_length=0xa90(=2704)
movie header alignc=14
movie header x_(min,max) =(0, 4800)
movie header y_(min,max) =(0, 4800)
movie header frame_rate =8.0
movie header frame_count =0x28(=40)
tag=9(SETBACKGROUNDCOLOR) len=3
tag=1(SHOWFRAME) len=0
tag=8(JPEGTABLES) len=63
tag=24(PROTECT) len=6
tag=128(Unknow) len=28
tag=879(Unknow) len=63
tag=128(Unknow) len=32
tag=0(Unknow) len=0
XXX tell= 231
JPEGTABLES からおかしくなってるみたい… 0x023f なので len = 63 なのは確かだけど、うーむ…

再び、swftools をカンニング:

  if (len==0x3f)
  {
      if (reader->read(reader, &len, 4) != 4) return NULL;
      len = SWAP32(len);
  }

  if (id==ST_DEFINESPRITE) len = 2*sizeof(U16);
あー…
0x3f の時は、続く4バイトを長さとしてみるのね。
拡張ビットみたいな感じか。

結果。:

header magic=FWS
header version=4
header file_length=0xa90(=2704)
movie header alignc=14
movie header x_(min,max) =(0, 4800)
movie header y_(min,max) =(0, 4800)
movie header frame_rate =8.0
movie header frame_count =0x28(=40)
tag=9(SetBackgroundColor) len=3
tag=1(ShowFrame) len=0
tag=8(JPEGTables) len=0
tag=6(DefineBitsJPEG) len=2133
tag=2(DefineShape) len=51
tag=26(PlaceObject2) len=9
tag=1(ShowFrame) len=0
tag=26(PlaceObject2) len=7
tag=1(ShowFrame) len=0
tag=26(PlaceObject2) len=7
tag=1(ShowFrame) len=0
tag=26(PlaceObject2) len=7
tag=1(ShowFrame) len=0
tag=26(PlaceObject2) len=7
tag=1(ShowFrame) len=0
tag=12(DoAction) len=7
tag=26(PlaceObject2) len=7
tag=1(ShowFrame) len=0
tag=0(End) len=0
XXX tell= 2704
よし。完璧。 これでデータ構造を作れる。

まとめ。:

{ヘッダ}+{ムービーヘッダ}+{タグ付きブロック}+{タグ付きブロック}+....
といった形式で、
{ヘッダ}が固定長。
{ムービーヘッダ}が TWIPS の値フィールドだけ可変長。
{タグ付きブロック}は { tag | length | contents.... }
といった構成。
複数バイトで表現する値が LittleEndian なのと、一部、ビット単位で フィールドが詰まっている事が分かれば、素直な形式なので楽に分解可能。
ブロックの中身(contents)も興味があるものだけ解析すればOKなので、 中身を入れ替える場合は、入れ替えたブロックの length と先頭ヘッダにある ファイルサイズの2箇所を更新すれば大丈夫そう。
さて、明日はコードを整理しつつ画像の入れ替えに挑戦しようかな。
続く

2008年01月18日(金)

Flash SWF バイナリいじり (画像データ抽出)

これ の続き

コード整理:

bitstream 的な処理を binfile.{h,c}
swffile の全体の解析を swffile.{h,c}
swffile のブロックの解析を swfblock.{h,c}
に分けてみた。

画像抽出:

試しに画像を抽出してみる。
	struct swf_definebitsjpeg {
		swf_tag			f_tag;		/* 6, 21 or 35 */
		unsigned short		f_image_id;
		unsigned char		f_image_data[<variable size>];
なので、<id>.jpg で抽出するならこんな感じでおk
  char jpeg_filename[64];
  swf_block_t *block = swf_file->block;
  for (i=0; block; i++) {
    if (block->tag == 6) { // DefineBitsJPEG
      unsigned char *data = block->body;
      id = LE_VALUE_2BYTE(data);
      sprintf(jpeg_filename, "%d.jpg", id);
      fp = fopen(jpeg_filename, "wb");
      fwrite(block->body + 2, block->length, 1,fp);
      fclose(fp);
    }
    block = block->next;
  }
あっさり抽出成功。 コードは以下のようになりました。

次回の予定:

さて、元々の目的は画像の入れ替えなので、 binfile.{h,c} と swffile.{h,c} にファイル書き込み系の処理を追加する予定。
続く

MySQLがSUNに10億ドルで買収されました

Sun …というか Java は PostgreSQL にぞっこんだった気が…
Javaを開発する、Sun Microsystemsが MySQL よりも PostgreSQL を推している 
なんという裏切りw

1/9 以降、Windows VISTA 搭載 レッツノートのハードディスクが突然死する可能性がある

自分は持ってないけど、VISTA のノートPCを使っている人はお気をつけを?

日清製粉、パスタ40%値上げへ 業務用、過去最大幅

3月から業務用パスタを30~40%、「マ・マー」など
家庭用パスタを15~20%値上げすると発表した。
スパゲッティ好きなのにー (;ω;) 家庭用は2割程度らしいので、影響はどうだろ。

2008年01月19日(土)

Flash SWF バイナリいじり (画像差し替え)

ファイル書き出し処理:

ビットストリームの出力処理を作成。 結構めんどいしコードが汚くなったけど、とりあえず動作するものが完成。 ハマった所としては、
foo = baa << shift_width
みたいな処理で、shift_width が負の値の時に baa >> ... のような動作を期待したんだけど、 foo には 0 が入りました。
残念。

JPEG画像入れ替え処理:

SWF ファイルを読んでブロックに分解するのは出来てるので、 JPEG 画像データで、かつ指定した ID のブロックを探し出し、 データを差し替え、それを SWF ファイルに再構成する処理を書いたところ あっさり画像の入れ替えに成功。 プログラムは以下のような感じ。

さて…:

実験は成功したので、コードをブラッシュアップするか…

追記 (2008/04/02):

↓こちらにまとめを作りました。

Flash Lite のお勉強 (KeyPress)

これ の続き
ふと、寄り道しすぎな事に気づいて、CS3 に戻ってみる。
ボタンが押されたタイミングで HTTP 越しにテキストデータを持ってくる方法を調べた。
自分は IDE が苦手なので、こんな簡単なのでも午前一杯潰れたけど。○rz

KeyPress -> loadVariables のやり方:

作業のそこそこ詳細。
テキスト表示場所の作成
「テキストツール」でテキストの表示枠を作成
(多分下ペインにある)プロパティで(インスタンス名ではなく)変数を指定する
テキストの「単一行」メニューを「複数行」に変更
テキストの文字サイズを14(10だと携帯で表示できず…)に変更
ボタンの作成
「矩形ツール」で四角形を描画する
「選択ツール」でその四角形を選択して「修正(メニュー)>シンボルに変換」でボタンにする
ボタンのアクションを作成
レイヤーのフレームの所で右クリックして(多分一番下の)「アクション」を選択
「選択ツール」で (一度描画外エリアを選択してから)ボタンを選択
アクションの所に以下のようなスクリプトを書く
on (keyPress "<Enter>") {
	loadVariables("test.txt", "/");
}
で、後は text.txt を swf ファイルと同じ場所に用意して、 例えば、テキストの変数名が foo だとしたら、
foo=あーあー。ただいまマイクのテスト中ー
とか書くと、以下のようになる。 ちなみに決定キーが押されるのを検知するオブジェクトとしてボタンを作らざるを 得ないが、表示する意味はないので、描画領域の外に置いて隠すのが定石らしい。

ハマりどころ:

初めテキストが大きすぎて殆ど表示できなかったので サイズを10にしたら、PC では表示できたけど携帯では「.....」のように表示された。
続く

IE7環境でFlash(.swf)ファイルを直に表示できない

なるほど。swf ファイルが壊れたのかと一瞬不安になったよ。

meta keywords

自分のページが随分前から「よや」で検索できなくなっているので、
その対策として、日記や wiki ページに meta keywords タグを追加してみた。

HNS:

diary/<thema名>/thema.ph
<META NAME="Description" CONTENT="Yoya's diary">
<META NAME="Keywords" CONTENT="yoya,diary,よや,日記">

PukiWiki Plus:

pukiwiki/skin/default.skin.php
 <meta name="description" content="<?php echo ($newtitle)?$newtitle:$title ?>" />
 <meta name="keywords" content="yoya,<?php echo "$title,$newtitle" ?>" />

米Yahoo!がOpenID採用を発表、OpenIDアカウント数は一気に3倍に

OpenID の話をちらほら聞くようになってきましたね。

これで、10 日分だよ〜。

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