フリーのFlashコンパイラ swfmill のメモ。simple について

– XML の encoding に指定する文字コード(<?xml encoding=”…”?>)は日本語を使っていても UTF-8 でよく、XMLファイルの文字コードとあっていればよい(パッチ不要)。
– flash lite 1.1 で作る時は <movie version=”4″ compressed=”false”> という指定必須。swfmill は <movie> だけだとデフォルトで圧縮され、Flash 6 以降用にコンパイルされるため。
 
– <DoAction> を入れる時は、ActionScriptを入れたいフレームの<frame>〜</frame>の中に入れるとよい

swf file format spec v10 – SWF3 actions より引用:
DoAction
DoAction instructs Flash Player to perform a list of actions when the current frame is
complete. The actions are performed when the ShowFrame tag is encountered, regardless of
where in the frame the DoAction tag appears.
 
DoAction は現在のフレームが完了した時、Flash プレイヤーがどのアクションを実行すべきかを一覧で指示します。
DoAction がフレーム内のどこで定義されたとしても、ShowFrame タグが現れた時点でアクションが実行されます。

ちなみに swmill simple の <frame><!–フレーム内容–></frame> は XSLT での変換時に <!– フレーム内容 –><ShowFrame/> に置換されます。
 
– XMP 設定は<meta>タグに書く
メタデータの設定は次のように書きます。

<movie>
  <meta>
    <rdf:RDF xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
      <!– 〜中略〜 –>
    </rdf:RDF>
  </meta>
</movie>

フリーのFlashコンパイラ swfmill のメモ。文字コードcp932まわり

パッチあてても外部 swf を読み込む時は -e cp932 指定が効かない様子。
 
Klab さんの cp932 パッチを使っているのですが
日本語を使っている Flash を flashlite 1.1 用にパブリッシュして、<clip> で組み込もうとすると, iconv エラーになってしまいました。
 
検証コード:

<?xml version=”1.0″ encoding=”cp932″?>
<movie compress=”false” version=”4″>
  <clip import=”cp932_problem_inc.swf” />
</movie>

実行コマンド:

swfmill -e cp932 simple cp932_problem.xml > out.swf

実行結果:

# Cygwin の場合
error : string is not in UTF-8
error : string is not in UTF-8
error : string is not in UTF-8
error : string is not in UTF-8
iconv failed: _等幅
iconv failed: はろーわーるど
 
# Linux の場合
error : xmlEncodeEntitiesReentrant : input not UTF-8
iconv failed: _ツ等幅
iconv failed: はろーわーるど

 
この結果として swf は出力されるものの文字化けしてしまいます。
 
ちなみに、clip に指定したのと同じ swf を “swfmill -e cp932 swf2xml” で実行してやった場合はもちろん正しく変換できます。
 
検証に使った swf/fla ダウンロード
 
参考:
swfmillでFlash Lite 1のswfを扱えるようにしてみた(Klab 株式会社)

フリーのFlashコンパイラswfmillのメモ。simple で扱う XML の書式とタグ一覧

swfmill の SWFML simple モードの基本的な使い方はここに書いているのですが、実際はもっと便利なタグがたくさんあります。

swfmill simple コマンドは swfmill xml2swf と同様、XMLからSWFを生成するコマンドですが、xml2swfより使いやすくなっています。


タグ一覧
■基本タグ
・<movie> (ルート要素)
SWFML simple の XML ルート要素です。
属性で swf のパブリッシュ用設定ができます。
 
全ての属性、および<frame>をのぞく子要素が省略可能です。
 
FlashLite 1.1 対応にする場合はFlashバージョン4(version=”4″),圧縮なし(compressed=”false”)にしなければなりません。
 
例: ステージサイズ240×320, フレームレート20fps, Flashバージョン4, 圧縮なしに設定

<?xml version=”1.0″ encoding=”UTF-8″?>
<movie width=”240″ height=”320″ framerate=”20″ version=”4″ compressed=”false”>
  <frame />
</movie>

 
・<meta> (親: <movie>)
swf のメタデータXMLを設定する。
 
例:携帯(DoCoMo)でメール転送禁止(フォワードロック)に設定する

<movie>
 <meta>
  <rdf:RDF xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
   <rdf:Description rdf:about=”” xmlns:swf=”http://ns.adobe.com/swf/1.0/”>
     <swf:forwardlock>True</swf:forwardlock>
   </rdf:Description>
  </rdf:RDF>
 </meta>
</movie>

 
・<background> (親: <movie>)
背景色を設定する。
 
例: 背景色を黒にする

<movie>
  <background color=”#000000″>
  <frame />
</movile>

 
・<frame> (親: <movie>, <clip>)
ムービークリップのキーフレームをあらわす要素で、この中にインスタンスを配置する。
ムービークリップをあらわす<movie>と<clip>の子要素として記述し、これらを定義する時は最低でも1個必須です。
<frame>がなくても動作しますが、誤動作の原因になるため省略すべきではありません。
 
属性:
name … フレーム名(省略可)
 
例:2つのキーフレームからなるムービークリップを定義する。

<movie>
 <frame>
    <!– 1フレーム目 –>
  </frame>
 <frame>
    <!– 2フレーム目 –>
  </frame>
</movie>

 
・<stop> (親: <frame>)
そのフレームを描画後、次のフレームに移らないようストップする。

<movie>
  <clip id=”img1″ import=”1.png”>
  <clip id=”img2″ import=”2.png”>
 
  <frame>
    <!– img1 を表示し、このフレームで停止する –>
    <place id=”img1″ depth=”1″/>
    <stop />
  </frame>
  <frame />
  <frame />
 
  <frame>
    <!– img2 を表示 –>
    <place id=”img2″ depth=”1″/>
  </frame>
</movie>

 
・<call>
指定したクラスメソッドをエントリポイントにする(要SMC + α)。
手順については「Adding components]」を参照。
  
属性:
object … 実行クラス
method … 実行メソッド


■リソース定義
フォント、シンボルなどの定義。
 
・<library> (親: <movie>, <frame>, <clip>)
<library>内に定義した<clip>, <sound>, <font>などリソース定義をライブラリとしてエクスポートし、
外部からそのリソースを参照できるようにする。
 
例: シンボル foo, boo をライブラリに登録する。

<movie>
  <library>
    <clip id=”foo” import=”abc.jpg”/>
    <clip id=”boo” import=”def.jpg”/>
  </library>
</movie>

 
・<clip> (親: <movie>, <library>, <frame>)
画像(PNG, JPEG)やムービークリップ(SWF), SVG などリソースを組み込み、参照できるように定義する。
<clip import=””> で指定したファイルはコンパイル時に読み込まれて一緒にビルドされます。
 
属性:
 id … シンボル名(省略時は名前なし)
 import … 組み込むリソースのファイル名(省略可)
 class … ムービークリップとしてシンボル化するクラス名(省略可。子要素とimport を両方省略時は必須?)
例: 画像ファイル foo.jpg を読み込んでシンボル名 image1 として参照できるようにする。

<movie>
  <clip id=”image1″ import=”foo.jpg” />
</movie>

例2: 新規ムービークリップをシンボル myMovie として定義する。

<movie>
  <clip id=”myMovie”>
    <frame />
  </clip>
</movie>

 
・<font> (親: <library>)
TrueType フォントを組み込み、ActionScript からの参照用に定義する。
 
・<sound> (親: <library>)
mp3 などサウンドファイルを読み込み、ActionScript からの参照用に定義する。
例:

<library>
  <sound id=”sound1″ import=”music.mp3″/>
</library>

 
・<textfield> (親: <movie>, <library>, <frame>)
テキストを入れるラベルを定義する。
 
属性:
id … シンボル名
name … 同期する変数名
text … 表示するテキスト
x … X座標
y … Y座標
width …
height …
size …
leading …
wordWrap …
isHTML …
multiLine …
password …
readOnly …
autoSize …
notSelectable …
hasBorder …
useOutlines …
align …
leftMargin …
rightMargin …
indent” …


■インスタンスの配置
ムービークリップ内へのシンボル配置など。
 
・<place> (親: <frame>)
定義済みシンボルを配置する。
属性:
 id … インスタンス化するシンボルの名前(必須)。
 name … ActionScript での参照用インスタンス名(省略時は名前なし)
 x, y ・・・ 座標(ピクセル。省略時は (0, 0))
 depth … 深度(数値で表し、大きいほど手前)
 scale … 表示倍率(省略時は 1.0)
 
例: シンボル image1 をインスタンス化し、座標 (0,50) に等倍配置し、その上に座標 (25,30) にサイズ1/2で配置する。

<clip id=”image1″ import=”foo.jpg” />
<frame>
  <place id=”image1″ x=”0″ y=”50″ depth=”1″/>
  <place id=”image1″ x=”25″ y=”30″ scale=”0.5″ depth=”2″ />
</frame>

 
・<import>(親: <frame>)
任意の URL のムービーを動的に読み込み配置する。
ActionScript の loadMovie(url) と同様の動作。
例:

<frame>
  <import url=”http://example.com/foo.swf”></import>
</frame>


■その他
・swfmill だけで ActionScript を埋め込む
<movie> や <clip> 内の <frame>〜</frame> に <DoAction> 要素を入れると、
そのフレーム上のアクションスクリプトとして実行できます。
 
<DoAction>は SWF のアセンブラでの書き方になるため、別環境で作った swf ファイルを swf2xml で変換して <DoAction>以下を抽出するのが楽な方法です。
 
例: Flash lite 1.1 用 ActionScript を埋め込む。

<?xml version=”1.0″ encoding=”UTF-8″?>
<movie version=”4″ compressed=”false”>
  <frame>
   <!– ムービークリップインスタンス mc1 を配置(参照用) –>
   <clip id=”mc” import=”myMC.swf” />
   <place id=”mc” name=”mc1″ depth=”0″ />
   <!– 簡単な ActionScript を _root で実行 –>
   <DoAction>
    <actions>
      <!– _root.foo = 123; を実行。 –>
      <PushData>
        <items>
          <StackString value=”/:foo”/>
        </items>
      </PushData>
      <PushData>
        <items>
          <StackString value=”123″/>
        </items>
      </PushData>
      <SetVariable/>
   
      <!– mc1.msg = “Hello”; を実行 –>
      <PushData>
        <items>
          <StackString value=”mc1:msg”/>
        </items>
      </PushData>
      <PushData>
        <items>
          <StackString value=”Hello”/>
        </items>
      </PushData>
      <SetVariable/>
      <EndAction/>
    </actions>
   </DoAction>
   <!– ActionScript ここまで –>
  </frame>
</movie>


参考:
Using swfmill to create SWFs without Flash(公式)
swfmill Open Source Flash WiKi
SWFMLl DTD
swfmil の XML 書式定義

フリーのFlashコンパイラswfmillの、xml2swf と simple の違い

swfmill で扱う XML の書式は二通りあります。
一つ目は swfmill xml2swf や swfmill swf2xml でのコンパイル/逆コンパイルで扱う書式です。
ルート要素は <swf> で、SWF のバイナリ構造を XML であらわしたもののようで、
埋め込み画像のバイナリを base64 エンコードで指定したり、埋め込みデータがラスタかベクタかによって、指定方法が異なっていたりとなかなか直感的には扱えません。
用途としては swf2xml で逆コンパイルしてからデータを差し替えて再コンパイルする時などに使います。読み解く場合は swf 仕様書が参考になるでしょう。処理の流れについては「SWF フォーマットの変遷からみる Flash(daily dayflower)」が纏まっていてわかりやすいです。ActionScript についてはこちらの記事に書きましたのでご参照ください。
 
二つ目が swfmill simple で扱う、人が読みやすい書式です。ルート要素は <movie> で、前者の書式に比べてライブラリへの取り込みとステージへの配置などがより直感的に行えるようになっているので、自分で XML を書き起こして Flash を作成する場合に使えます。
 
参考:
swfmill swf2xml and xml2swf(公式)
swfmillでFlash Lite 1のswfを扱えるようにしてみた(KLab 株式会社)
SWF File Format Specification

フリーのFlashコンパイラmtasc で fscommand2() を使う

mtasc 1.14 を入れるとよさげです。
1.13 でも一応 fscommand2() が動作しますが、スタック順序に問題があり正しく動作しないことがあるとのことですので 1.14 を入れましょう
ocaml/mtasc/doc/CHANGES.txt:

2008-08-31 : 1.14
added stopAllSounds() support
added lineStyle F8 additional parameters
fixed FSCommand2 stack
added Stage.fullScreenSourceRect
compiling with version 9+ now uses std8 folder
 
2007-02-04 : 1.13
updated Video and NetStream headers.
fixed small bug if environment variable in new E()
fixed multivars declarations
fixed bug with filters inside buttons
fscommand2 ret value fix
fixed various bugs in SWF for Flash8
interfaces can’t have a constructor
inverted % and *,/ priorities
fixed missing types for local functions when -strict
fix in getTimer()
always allow ‘add’ deprecated keyword
bugfix in exclude files (when line endings differs from OS default)
allow more than 255 locals
more flash lite 2 support for standard headers

 
Linux 版は 1.14 のバイナリがなかったので、作ったものを置いておきます。
 
MTASC 1.14 実行ファイル(Linux Enterprise Linux 5.x)
 
MTASC

Google Ad Planner で好きなサイトを統計分析

Google Ad Planner
 
最近話題なので使ってみた。
ためしに自サイトや会社サイト、有名サイトをやってみたらサイトごとに性別、年代等傾向が出ていて面白いですね。
 
簡単な使い方は次のようなかんじです。
 
1. View a site listing の欄にドメイン入力(ログイン不要)
2. 訪問者がよく見る別サイトや検索キーワードが表示される
3. 分析対象の国を指定(Japan)すると、訪問者の性別や学歴、収入分布までグラフ化。すごい。
 
参考:
Google Ad Planner(アドプランナー)で“あのサイトのPVやUU”を調べてみよう!

フリーで使える駅の座標情報データベース

http://www.ekidata.jp/
– 無料ダウンロード「駅データ.jp」
 
駅の情報(都道府県、駅名、路線、会社、地図座標等)がCSV形式でダウンロードできます。商用でも使え、最新の駅にも対応しているのがいいですね。

Windows SID とユーザ名を名前解決(変換)する

Windows SID(S-1-5-21-〜などから始まる数字の羅列)を Windows のログイン名に相互変換するには、こちらで配布されているLookupSID(looksid.exe)が便利です。
 
使い方は次のとおりです。

ログイン名→SID
C:> LookSid /A tanaka
S-1-5-XX-XXXXXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXX-XXXX
SID→ログイン名
C:> LookSid /S S-1-5-XX-XXXXXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXX-XXXX
tanaka

 
参考:
うにょうにょ本舗(開発/配布元)

Linuxでの常駐型サーバプログラムのデバッグ方法

http://kzk9.net/publications/webdb48/debug.html
常駐プロセスを作る時のはまりどころや、デバッグに役立つツールが紹介されています。実際に大規模システムで起こった経験に基づいていて大変参考になります。
 
– 関連
valgrind
google-perftools
Apache Thrift – 多言語 RPC フレームワーク