<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tmty.jp &#187; SwfmillRuby</title>
	<atom:link href="http://tmty.jp/tag/swfmillruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://tmty.jp</link>
	<description>tmtysk が前よりも、もうちょっとだけコマメに更新していくかもしれないブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 13:19:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<link rel="http://api.friendfeed.com/2008/03#sup" xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://friendfeed.com/api/public-sup.json#fdff53faaa"/>		<item>
		<title>SwfmillRubyで32bit版PNGに暫定対応しました</title>
		<link>http://tmty.jp/2009/07/27/updated_swfmill_ruby/</link>
		<comments>http://tmty.jp/2009/07/27/updated_swfmill_ruby/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 14:41:13 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SwfmillRuby]]></category>

		<guid isPermaLink="false">http://tmty.jp/?p=341</guid>
		<description><![CDATA[先日、SwfmillRuby に hokaccha さんのブランチをマージしました。hokaccha さんのブランチでは、32bit png の image2xml に対応いただいておりましたが、これに xml2imag [...]]]></description>
			<content:encoded><![CDATA[<p>先日、<a href="http://github.com/tmtysk/swfmill_ruby/tree/master">SwfmillRuby</a> に hokaccha さんのブランチをマージしました。hokaccha さんのブランチでは、32bit png の image2xml に対応いただいておりましたが、これに xml2image の処理を追加実装しています。これにより、32bit png (DefineBitsLossless2 の image format=5) に暫定対応しました。</p>
<p>ただし、今回追加実装した xml2image は、透過色を含む PNG の扱いについて完全ではないので、あくまで暫定対応という位置づけです。32bit png を SWF 内部のビットマップに変換する際に RMagick(ImageMagick) を経由して得られる各ピクセルの情報と、Flash IDE がパブリッシュするビットマップの各ピクセルの情報とで、微妙に誤差が出てしまっており、現時点で、Flash IDE が出力するビットマップデータと完全に一致させる事ができていません。</p>
<p>具体的には、DefineBitsLossless2 の ARGB データから RMagick::Image の png イメージを作成する部分が怪しい感じです。確証はないのですが、どうも、SWF File Format Specification にある:</p>
<blockquote><p>The RGB data must already be multiplied by the alpha channel value.</p></blockquote>
<p>の &#8220;multiplied&#8221; の解釈が単なる乗算ではないみたいような気がしています(除算で逆変換しても適当な数値にならないのです)。今のところ、幾つか透過色を含む PNG で動作検証してみた限りでは、ここを逆変換する際に、RGB それぞれの値と opacity との OR を取る事で、元のイメージの再現性がある程度確認できたので、ひとまずこの方法で実装してみました。何か勘違いしている気がしないでもないのですが、、お気づきの方、コメントいただけると幸いです。</p>
<p>ちなみに、上記の更新以外でも、partialize や templatize の機能を追加し、partizlize や templatize において、SWF を再生成(regenerate)する際の XML 処理コストを少しでも削減するための事前処理をおこなえるように改修を続けています。これは、ちょっと複雑な SWF の動的生成/書き換え/合成をしようとすると、再生成に XML 中の ID 体系を付け替えたり、要素を入れ替えたりといった処理のコストがとても大きくなる事がわかってきたからです。詳しくドキュメントを書く時間が取れていないのですが、サンプルやソースコードコメントから意図を汲んでいただけると幸いです。(少なくとも FlashLite 1.1 の携帯サイト向けには、わりと面白い事ができるくらいのものにはなってきていると思います。)</p>
<p>まだ公開して間もない SwfmillRuby ですが、いつの間にか、いくつかの方面からご利用のご連絡をいただいており、とても励みになっております。ライセンス上、ご利用のご連絡は必須ではありませんが、よろしければご利用コメントやご意見などお寄せいただければとうれしいです！<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2009/05/28/updated_swfmillruby/" rel="bookmark" title="2009 年 5 月 28 日">SwfmillRuby でムービークリップの入れ替えができるようにしてみた</a></li>
<li><a href="http://tmty.jp/2009/05/08/shared_swfmill_ruby/" rel="bookmark" title="2009 年 5 月 8 日">SwfmillでFlashLite用SWFの画像やテキストを操作するRubyライブラリ SwfmillRuby</a></li>
<li><a href="http://tmty.jp/2008/02/25/%e3%82%b1%e3%83%bc%e3%82%bf%e3%82%a4%e3%82%b5%e3%82%a4%e3%83%88%e3%81%a7%e6%a9%9f%e7%a8%ae%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b-rails-%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4/" rel="bookmark" title="2008 年 2 月 25 日">ケータイサイトで機種情報を取得する Rails プラグイン mbterm_db</a></li>
</ul>
<p><!-- Similar Posts took 40.116 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2009/07/27/updated_swfmill_ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SwfmillRuby でムービークリップの入れ替えができるようにしてみた</title>
		<link>http://tmty.jp/2009/05/28/updated_swfmillruby/</link>
		<comments>http://tmty.jp/2009/05/28/updated_swfmillruby/#comments</comments>
		<pubDate>Wed, 27 May 2009 17:26:37 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[FlashLite]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SwfmillRuby]]></category>

		<guid isPermaLink="false">http://tmty.jp/?p=335</guid>
		<description><![CDATA[
2009/06/04追記: こちらのサンプルコードは、その後のバージョンアップにより動作しないものが含まれています。大きな変更点としては「テンプレート」と言葉の用法を変更し、これまで「テンプレート」と呼んでいたものを「 [...]]]></description>
			<content:encoded><![CDATA[<p><strong><br />
2009/06/04追記: こちらのサンプルコードは、その後のバージョンアップにより動作しないものが含まれています。大きな変更点としては「テンプレート」と言葉の用法を変更し、これまで「テンプレート」と呼んでいたものを「パーツ」と呼ぶようにしています。詳細は配布ファイルに含まれるテストコードもしくは別エントリ(そのうち書くかも)をご参照ください。</strong></p>
<p><a href="http://tmty.jp/2009/05/08/shared_swfmill_ruby/" target="_blank">先日こちらで紹介</a>した <a href="http://github.com/tmtysk/swfmill_ruby/tree/master" target="_blank">SwfmillRuby</a> をバージョンアップして、いろいろ便利機能を追加してみました。機能追加以前に、SWF 内のタグの対応数が絶対的に少ないのですが、基本的に SwfmillRuby が対象にしているのは FlashLite 1.1 でパブリッシュされた SWF なので、この用途に限れば、そこそこ使えるものになってきたと思います。ライセンスに変更はありません(GPL2)。無保証です。</p>
<p>今回追加された機能は、大きく次の3点です。</p>
<ul>
<li>ムービークリップの検出と入れ替えに対応</li>
<li>入れ替えのための事前処理として、ムービークリップをテンプレート化しておけるようにした</li>
<li>XML Parser を rexml から libxml2 に変更</li>
</ul>
<p>上記のほか、SwfmillUtil::Swf 初期化の方法が変更されていたり、SwfmillUtil::DefineSprite というクラスが追加されていたりといった、こまごまとした修正が入っています。が、できるだけ外側からは、xml 使って云々とか、SWF のタグがほげほげということは意識しなくても良いように作っているつもりです(といっても、まだまだうまい書き方できそうなところは多いですけど)。</p>
<p>では、使い方は、アーカイブ中の sample を見ていただくとして、以下、それぞれ、日本語で解説していきます。</p>
<h4>ムービークリップの検出と入れ替えに対応</h4>
<p>Swf#movieclips により、SWF 内のムービークリップのリストが取得できるようになりました。SWF 内部で採番されているID =&gt; SwfmillUtil::DefineSprite のハッシュの配列が返ります。</p>
<p>これを使って、以下のような形で片方の SWF のムービークリップを、もう片方の SWF のムービークリップと差し替える、というようなことができます。</p>
<pre class="prettyprint">require '../lib/swfmill_util'
require 'pp'

################################################################################
# test to replace movieclip

# initialize
swf = SwfmillUtil::Swf.parseSwf(File.open("data/sample_original.swf").read)
swf2 = SwfmillUtil::Swf.parseSwf(File.open("data/sample_original2.swf").read)

# check included movieclips (object_id =&gt; SwfmillUtil::Swf::DefineSprite)
pp swf.movieclips.keys #=&gt; ["8", "5"]
pp swf2.movieclips.keys #=&gt; ["6", "3"]

# check included movieclip_ids by instance_name
pp swf.movieclip_ids_named("animation") #=&gt; ["5"]
pp swf2.movieclip_ids_named("animation") #=&gt; ["6"]

# replace movieclip
swf.movieclips["5"] = swf2.movieclips["6"]

# write swf replaced movieclip
swf.write("data/replaced_mc.swf")</pre>
<p>上の例では、まず、Swf#movieclips により、ふたつの SWF に含まれるムービークリップの ID 体系を確認しています。ムービークリップの ID を確認する際は、実用上は、そのうしろの行にあるような、Swf#movieclip_ids_named が便利かもしれません。これにより、ステージ上に置かれる際に付与されたインスタンス名を指定し、対象のムービークリップの ID が確認できます。</p>
<p>実際の入れ替えは、上のように、ハッシュを操作するような形式でおこなえます。ムービークリップは、内部で各種形状(シェイプ)や画像(ビットマップ)、テキスト情報などを参照していますが、入れ替え自体は、上のようなハッシュへの代入操作一発で、参照関係にあるリソースを丸ごと入れ替える事ができます。また、このとき、単純に上書きしてしまうと、内部で使用している ID が重複してしまうなど、ID 体系が狂ってしまうことになるので、Swf#write (のなかで呼ばれる Swf#regenerate) したタイミングで、よしなに ID の体系を調整(adjust)する処理が走るようになっています。</p>
<h4>入れ替えのための事前処理として、ムービークリップを<span style="text-decoration: line-through;">テンプレート</span>パーツ化しておけるようにした</h4>
<p>これは、FlashLite コンテンツの動的生成サイトを作ろうとした際、実用上必要になる事が多いので、ちょっと強引に作ってみた機能です。実際に、前節のようにムービークリップの入れ替えをおこなうと、内部的には SWF を XML に戻し、XML を書き換えて、XML を SWF に戻す、ということをやることになるため、Swfmill プロセスの起動コストがかさんでしまいます。また、ムービークリップの入れ替えでは、関連するリソースも一気に処理対象になるため、前節最後で書いたような、入れ替え後におこなう ID 体系の調整コストも無視できなくなってきてしまいます。</p>
<p>そこで、あらかじめ、入れ替え対象となる(元の) SWF と、そこに差し込むムービークリップをあらかじめ調査しておき、差し込みをおこなうムービークリップを<span style="text-decoration: line-through;">テンプレート</span>パーツ化しておくことを考えてみました。</p>
<p>以下は、対象の SWF を調査し、片方の SWF に含まれるムービークリップを<span style="text-decoration: line-through;">テンプレート</span>パーツとして保存しておく際のコードサンプルです。</p>
<pre class="prettyprint">require '../lib/swfmill_util'
require 'pp'

################################################################################
# test to templatize movieclip                                                                                                                              

# initialize
swf = SwfmillUtil::Swf.parseSwf(File.open("data/sample_original.swf").read)
swf2 = SwfmillUtil::Swf.parseSwf(File.open("data/sample_original2.swf").read)

# check included movieclips (object_id =&gt; SwfmillUtil::Swf::DefineSprite)
pp swf.movieclips.keys #=&gt; ["8", "5"]
pp swf2.movieclips.keys #=&gt; ["6", "3"]

# check included movieclip_ids by instance_name
pp swf.movieclip_ids_named("animation") #=&gt; ["5"]
pp swf2.movieclip_ids_named("animation") #=&gt; ["6"]

# templatize movieclip specifying the mapping of object_ids
#  and available, unused object_id (if you want to adjust object_ids)
File.open("data/animation_template.xml", "w") do |f|
  f.puts swf2.movieclips["6"].templatize(true, 6, 5, 1000)
end</pre>
<p>上の通り、DefineSprite#templatize は 4 つの引数をとります。これらは手前から:</p>
<ul>
<li>あらかじめ ID の調整をおこなうか(true/false)</li>
<li>対象のムービークリップに付与されている ID</li>
<li>対象のムービークリップを、SWF に入れ込む際の ID</li>
<li>テンプレート化の際におこなう ID の再編成時に使用できる、未使用の ID の最小値</li>
</ul>
<p>を表しています。真ん中のふたつは、上記の前半で得られるような、SWF の調査結果をもとに指定します。最後の引数は、明らかに重複の無い大きめの値をバッファを持って指定しておくと良いと思います。なお、引数を何も指定しなければ、テンプレート化の際に ID の調整はおこないませんので、regenerate の際に調整する必要が出てきます。</p>
<p>なお、ここでは、テンプレート化されたムービークリップは XML 化してファイルで永続化していますが、DB に突っ込んだり、容量が許すなら memcache などのキャッシュに載せておいたりという手を使っても良いと思います。</p>
<p>こんなかんじで作成したテンプレートを、以下のようなコードで差し込みます。ここでは、あらかじめ Swfmill#swf2xml した xml から初期化することで、元の SWF を読み込む際に Swfmill 起動が必要ないようにしています。</p>
<pre class="prettyprint">require '../lib/swfmill_util'
require 'pp'

#################################################################################
# test to regenerate swf using template movieclip

# initialize original swf by preserved xml generated by Swfmill::swf2xml.
# avoid analysing swf's structure using "template_mode".
swf = SwfmillUtil::Swf.parseXml(File.open("data/sample_template.xml").read, true)

# initialize template movieclip by preserved xml generated by Swf#templatize
# avoid analysing swf's structure using "template_mode".
animation = SwfmillUtil::DefineSprite.parseXml(File.open("data/animation_template.xml").read, true)

# check a target object_id
pp swf.movieclip_ids_named("animation") #=&gt; ["5"]

# change movieclip
swf.movieclips["5"] = animation

# write swf changed movieclip.
# avoid adjusting object_id using "adjustment=false"
swf.write("data/regenerated.swf", false)</pre>
<p>初期化時の最後の引数は、テンプレートモード (template_mode) を表しています。テンプレートモードで Swf を初期化すると、初期化時に SWF の構成チェック処理がおこなわれません(つまり、Swf#images や Swf#movieclips で、現在の構成をダンプすることができません)。これにより、初期化の際の処理ステップを、ある程度スキップする事ができます。テンプレートモードは、templatize により、テンプレートがあらかじめ作ってある＆元の SWF が調査済みで、入れ替えをおこなう相手もわかっているというときに限り、使用される事を想定しています。</p>
<p>また、Swf#write の最後の引数で指定している論理値は、入れ替え時の ID 調整(adjustment)要否を表しています。templatize の際に adjustment=true とし、入れ替え後の ID 調整を先におこなってあれば、ここで adjustment=false とすることで、さらに Swf 生成前のコストを削減する事ができます。</p>
<p>このあたり、冒頭にも書きましたが、ちょっと強引な仕上がりになってますので、ぱっと見た感じ、何が起こるのかわかりにくいのが難点です。もっと使いやすいインタフェースを考えてますが、今のところはこんな感じでご容赦ください。</p>
<h4>XML Parser を rexml から libxml2 に変更</h4>
<p>オモテからはほとんど意識する必要のない変更点なのですが、これにより今回追加された機能の処理部分のパフォーマンスが劇的(概ね1桁以上、場合によっては2桁)に上がりました。libxml-ruby は Ruby の標準添付ではないので、別途インストールが必要になってしまうのが懸念点だったのですが、実用上こちらの方が望ましいと思いましたので、思い切って全体を書き換えることにしたのでした。</p>
<p>この乗り換えのきっかけは、このライブラリは、内部では XML 処理がごりごりおこなわれているのですが、rexml を使っていたときは、とくにムービークリップ周りの解析や、ムービークリップ入れ替えの際におこなわれる XPath 検索にかなりのコストがかかっていたことがわかった、ということでした。たとえば、50KB のムービークリップが 30 件くらい入った SWF を解析するのに、デスクトップ環境で5-6分かかり、テンプレートを使用したムービークリップの入れ替えに3-4秒かかるといった具合でした。(そもそもの書き方がアレだった部分は重々ありますが。)</p>
<p>解析処理をおこなう際の変数スコープを調整したり、メソッド化してあったところをブロック付きの Hash に書き換えたりすることでソコソコ改善はしたのですが、結局は rexml の XPath 検索が一番のボトルネックになっていたようで、libxml2 利用に置き換えたのが一番効果的だったようです。</p>
<p>libxml2 の利用により、これまで2-3分かかっていた解析処理は3-4秒、入れ替え処理も0.2-0.3秒程度まで短縮できました。同時大量アクセスのあるサイトには厳しいかもしれませんが、他の面でもいろいろ工夫をいれる余地のある環境/状況でしたら、そこそこ実用に耐え得るのかな、と思います。</p>
<p>以上、今回の大きな変更点を紹介しました。まだまだ不具合等内在しているかもですが、ご利用いただけましたら感想など聞かせていただけるとうれしいです。<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2009/05/08/shared_swfmill_ruby/" rel="bookmark" title="2009 年 5 月 8 日">SwfmillでFlashLite用SWFの画像やテキストを操作するRubyライブラリ SwfmillRuby</a></li>
<li><a href="http://tmty.jp/2009/07/27/updated_swfmill_ruby/" rel="bookmark" title="2009 年 7 月 27 日">SwfmillRubyで32bit版PNGに暫定対応しました</a></li>
<li><a href="http://tmty.jp/2009/05/08/generate_flash_lite_on_server-3/" rel="bookmark" title="2009 年 5 月 8 日">ケータイサイトでFlashLiteコンテンツを動的生成する(その3)</a></li>
</ul>
<p><!-- Similar Posts took 38.953 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2009/05/28/updated_swfmillruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SwfmillでFlashLite用SWFの画像やテキストを操作するRubyライブラリ SwfmillRuby</title>
		<link>http://tmty.jp/2009/05/08/shared_swfmill_ruby/</link>
		<comments>http://tmty.jp/2009/05/08/shared_swfmill_ruby/#comments</comments>
		<pubDate>Thu, 07 May 2009 17:07:15 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[FlashLite]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SwfmillRuby]]></category>

		<guid isPermaLink="false">http://tmty.jp/?p=316</guid>
		<description><![CDATA[前回までの「ケータイサイトでFlashLiteコンテンツを動的生成する」エントリで紹介してきた swfmill を使った FlashLite コンテンツの動的処理に関連して、SWF に含まれる画像やテキストを操作するため [...]]]></description>
			<content:encoded><![CDATA[<p>前回までの「<a href="http://tmty.jp/2009/04/16/generate_flash_lite_on_server/" target="_blank">ケータイサイトでFlashLiteコンテンツを動的生成する</a>」エントリで紹介してきた swfmill を使った FlashLite コンテンツの動的処理に関連して、SWF に含まれる画像やテキストを操作するための簡単なクラス集を作ってみました。</p>
<p><a href="http://github.com/tmtysk/swfmill_ruby/tree/master" target="_blank">swfmill_ruby &#8211; github</a></p>
<p>swfmill と同じ GPL2(the GNU GENERAL PUBLIC LICENSE Version 2) にてライセンスいたします。</p>
<p>swfmill_ruby は、Swfmill を ruby から起動するための簡単なクラス(SwfmillUtil::Swfmill)と、これを使って Swf を操作するためのクラス(SwfmillUtil::Swf)から構成されます。使用には、ruby の標準的な開発環境に加えて、以下のものを用意する必要があります。</p>
<ul>
<li>swfmill 0.2.12(<a href="http://dsas.blog.klab.org/archives/51174693.html" target="_blank">文字エンコーディング指定パッチ</a>適用済み)</li>
<li>ImageMagick 6.3.7以上</li>
<li>rubygems, rmagick(2.8.0以上)</li>
</ul>
<p>その他、使用手順など、詳細は公開ファイル中の README を参照してください。</p>
<p>Swf の操作機能は、現時点では、もっともよく利用する:</p>
<ul>
<li> 画像の入れ替え</li>
<li>テキストの入れ替え</li>
</ul>
<p>に絞って実装しています。これを使用することで、以下のサンプルコードのように、Swf#images で Swf 中の画像データを objectID =&gt; Magick::Image のハッシュ、Swf#texts でテキストデータを objectID =&gt; String のハッシュにてアクセスする事ができます。</p>
<pre class="prettyprint">require '../lib/swfmill_util'
require 'pp'

# initialize
swf = SwfmillUtil::Swf.new(File.open("sample.swf").read)

# check included images (object_id =&gt; Magick::Image)
pp swf.images #=&gt; {"6"=&gt; JPEG 176x208 176x208+0+0 DirectClass 8-bit 10kb, "3"=&gt;  30x30 DirectClass 16-bit}
pp swf.texts #=&gt; {"2"=&gt;"343201202343201204343201206343201210343201212ABCr"}

# write included images
#swf.images.each do |i,image|
#  image.write("#{i}.#{image.format ? "jpg" : "gif"}")
#end

# replace included images
swf.images['3'] = Magick::Image.from_blob(File.open("flymelongirl.gif").read).first
swf.images['6'] = Magick::Image.from_blob(File.open("bg.jpg").read).first
swf.texts['2'] = "かきくけこXYZ"

# write swf replaced images
swf.write("foo.swf")</pre>
<p>後半で書いている通り、画像やテキストの書き換えは、ハッシュの値を置き換えてやる事で実現できます。Swf#write によりファイル出力できますし、Swf#regenerate で再生成後の swf をそのまま得る事もできます。</p>
<p>内部的には、Magick::Image &lt;=&gt; DefineBitsJPEG2/DefineBitsLossless2 の変換をおこなっています。とくに DefineBitsLossless2 の変換処理は、ちょっと面倒ですし、あまり ruby での実装を見かけないので、何らか使いどころがあればお使いください。ImageMagick / RMagick を併用するので多少重たいかもですけど。</p>
<p>なお、FlashLite 1.1 を対象に、よく使うあたりを中心に実装していますので、DefineBitsJPEG3 や DefineBitsLossless2 での format=5, DefineBitsLossless, DefineText などはひとまず除外しています。必要に応じて、適当に修正してみてくださいませ。</p>
<p>今更ながら、大胆な名付けをしてしまった気がするので、いろいろいじってみてもらえると嬉しいです！<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2009/05/28/updated_swfmillruby/" rel="bookmark" title="2009 年 5 月 28 日">SwfmillRuby でムービークリップの入れ替えができるようにしてみた</a></li>
<li><a href="http://tmty.jp/2009/05/08/generate_flash_lite_on_server-3/" rel="bookmark" title="2009 年 5 月 8 日">ケータイサイトでFlashLiteコンテンツを動的生成する(その3)</a></li>
<li><a href="http://tmty.jp/2009/07/27/updated_swfmill_ruby/" rel="bookmark" title="2009 年 7 月 27 日">SwfmillRubyで32bit版PNGに暫定対応しました</a></li>
</ul>
<p><!-- Similar Posts took 45.658 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2009/05/08/shared_swfmill_ruby/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 2.427 seconds -->
