<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>f60k@Lab</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://lab.60000feet.com/blog/atom.xml" />
   <id>tag:lab.60000feet.com,2007:/blog//5</id>
    <link rel="service.post" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5" title="f60k@Lab" />
    <updated>2007-08-18T09:48:07Z</updated>
    <subtitle>Flash Info for developers to enable more powerful works</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.33-ja</generator>
 
<entry>
    <title>Bit演算子</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/08/bit.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=778" title="Bit演算子" />
    <id>tag:lab.60000feet.com,2007:/blog//5.778</id>
    
    <published>2007-08-18T09:03:58Z</published>
    <updated>2007-08-18T09:48:07Z</updated>
    
    <summary><![CDATA[誰も見てないだろうし、かなり放置気味だった。今回はビット演算をもう一度整理しておきたい。flashでビット演算が特別活躍する場もそう多くは無いが、使い方次第では今まで面倒だった処理が簡単に解決したりする。そもそもビットとは何か？ ２進数とは何かを知らなければ始まらない。２進数とは一桁が１と０の数で成る数で０→１→繰り上がって０に戻るという繰り返しで成り立つ。一桁目が１までしか入らないので、一桁目で表現できる数は最大１となる。桁数をビット数といい２ビットで表現できる数は３となる。一桁目を０ビットと呼び、二桁目を１ビットと呼ぶ。 例えば、４ビットの１０００という数は、３ビット目が１であるといえる。flashでは３２ビットまで扱える。１０００を０１００に１を移動させると右側にそのまま移動したように見える。これをシフトという。シフトには右にシフトする場合は右シフトといい、左にシフトする場合は、左シフトという。それぞれ演算子>>と ブール値とはtrue又はfalseを意味する。それぞれ１又は０という数値で表される。２進数表記であれば１桁で表現できることがわかる。４ビットであれば４つの桁があるので４つのブール値とみて扱うことも出来る。たとえば１１１１であれば４つのブール値がtrueであるという表現の代わりになる。このブール値を切り替える操作をtrueにする場合、falseにする場合、それぞれフラグを立てる、下ろすともいう。 OR演算子を使うとフラグを簡単に立てることが出来る。 0|=1;//結果1 1|=1;//結果1 は、１とOR演算を行うと必ず1となる。 XOR演算子を使うとフラグを入れ替えることが出来る。 1^=1;//結果0 0^=1;//結果1 当初１である数は０となり、０である数は１となる。 AND演算子を使うと、現在のビットと一致する部分だけが抽出できる。 1001&=0011//0001 下二桁を抽出した。上二桁は００であり、下二桁は０１となった。 1001&=1100//1000 上二桁を抽出した。上二桁は１０であり、下二桁は００となった。 ANDとNOT演算子を使うとフラグを下ろすことが出来る。NOT演算子は現在のビットの０と１を入れ替えるので０と~1は同じであるといえ、１と~０も同じである。 AND演算子は前後の値が共に１の場合に１となり、それ以外は０を返す。 1&=0;//結果0 0&=0;//結果0 となり、いずれの場合もフラグが下ろされる。これをNOT演算子を使って同様に表現すると 1&=~1; 0&=~0; であり、いずれも同じ結果０を返す。これによりどちらもフラグを下ろすことが出来た。 XOR演算子は、データを暗号化できる。aをbを使って暗号化するとcが生まれる。 a^=b;//結果c また、復号化も出来る。cに暗号化キーbを使ってXOR演算する。 c^=b;//結果a しかし、c^=a;がbにあるので、暗号化キーがばれてしまうが・・。...]]></summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[誰も見てないだろうし、かなり放置気味だった。今回はビット演算をもう一度整理しておきたい。flashでビット演算が特別活躍する場もそう多くは無いが、使い方次第では今まで面倒だった処理が簡単に解決したりする。そもそもビットとは何か？
２進数とは何かを知らなければ始まらない。２進数とは一桁が１と０の数で成る数で０→１→繰り上がって０に戻るという繰り返しで成り立つ。一桁目が１までしか入らないので、一桁目で表現できる数は最大１となる。桁数をビット数といい２ビットで表現できる数は３となる。一桁目を０ビットと呼び、二桁目を１ビットと呼ぶ。
<p>
例えば、４ビットの１０００という数は、３ビット目が１であるといえる。flashでは３２ビットまで扱える。１０００を０１００に１を移動させると右側にそのまま移動したように見える。これをシフトという。シフトには右にシフトする場合は右シフトといい、左にシフトする場合は、左シフトという。それぞれ演算子>>と<<で行う。
<p>
ブール値とはtrue又はfalseを意味する。それぞれ１又は０という数値で表される。２進数表記であれば１桁で表現できることがわかる。４ビットであれば４つの桁があるので４つのブール値とみて扱うことも出来る。たとえば１１１１であれば４つのブール値がtrueであるという表現の代わりになる。このブール値を切り替える操作をtrueにする場合、falseにする場合、それぞれフラグを立てる、下ろすともいう。
<p>
OR演算子を使うとフラグを簡単に立てることが出来る。
0|=1;//結果1
1|=1;//結果1
は、１とOR演算を行うと必ず1となる。
<p>
XOR演算子を使うとフラグを入れ替えることが出来る。
1^=1;//結果0
0^=1;//結果1
当初１である数は０となり、０である数は１となる。
<p>
AND演算子を使うと、現在のビットと一致する部分だけが抽出できる。
1001&=0011//0001
下二桁を抽出した。上二桁は００であり、下二桁は０１となった。
1001&=1100//1000
上二桁を抽出した。上二桁は１０であり、下二桁は００となった。
<p>
ANDとNOT演算子を使うとフラグを下ろすことが出来る。NOT演算子は現在のビットの０と１を入れ替えるので０と~1は同じであるといえ、１と~０も同じである。
AND演算子は前後の値が共に１の場合に１となり、それ以外は０を返す。
1&=0;//結果0
0&=0;//結果0
となり、いずれの場合もフラグが下ろされる。これをNOT演算子を使って同様に表現すると
1&=~1;
0&=~0;
であり、いずれも同じ結果０を返す。これによりどちらもフラグを下ろすことが出来た。
<p>
XOR演算子は、データを暗号化できる。aをbを使って暗号化するとcが生まれる。
a^=b;//結果c
また、復号化も出来る。cに暗号化キーbを使ってXOR演算する。
c^=b;//結果a
しかし、c^=a;がbにあるので、暗号化キーがばれてしまうが・・。]]>
        
    </content>
</entry>
<entry>
    <title>WebORB(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/04/weborbjp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=750" title="WebORB(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.750</id>
    
    <published>2007-04-23T08:26:25Z</published>
    <updated>2007-04-23T09:17:29Z</updated>
    
    <summary>前回Rubyを(mt)上で動かし、gemをインストールするところまでテスト出来ているので、WebORBを使ってflashremoting経由で直接データをやりとりしてみる。今の時代flashサーバ間のデータのやりとりにxmlは必須ではない。むしろデータとしては冗長であり、flashremoting経由でAMF通信できることがこの上楽である。 WebORBのインストール (mt)でセットアップする場合に限って、手順を説明する。 myrailsappという名前でアプリを作成する場合、まずサーバへsshでログインする。 cd $HOME/../../containers mkdir rails &amp;&amp; cd rails rails myrailsapp cd myrailsapp ruby script/plugin install http://themidnightcoders.net:8089/svn/weborb mtr -u serveradmin@60000feet.com -p add myrailsapp $PWD weborb.60000feet.com mtr -u serveradmin@60000feet.com -p start myrailsapp mtr -u serveradmin@60000feet.com -p generate_htaccess myrailsapp mtr...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[前回Rubyを(mt)上で動かし、gemをインストールするところまでテスト出来ているので、<a href="http://www.themidnightcoders.com/weborb/rubyonrails/index.htm">WebORB</a>を使ってflashremoting経由で直接データをやりとりしてみる。今の時代flashサーバ間のデータのやりとりにxmlは必須ではない。むしろデータとしては冗長であり、flashremoting経由でAMF通信できることがこの上楽である。
<p><b>WebORBのインストール</b><br>
<a href="http://www.mediatemple.net/">(mt)</a>でセットアップする場合に限って、手順を説明する。
myrailsappという名前でアプリを作成する場合、まずサーバへsshでログインする。
<pre class="mtc_block"><span class="shell_command_sys def_KeywordStrong def_Keyword">cd</span> <span class="shell_var def_Var">$HOME</span><span class="shell_path def_Path def_URI">/</span><span class="shell_command def_Keyword">.</span><span class="shell_command def_Keyword">.</span><span class="shell_path def_Path def_URI">/</span><span class="shell_command def_Keyword">.</span><span class="shell_command def_Keyword">.</span><span class="shell_path def_Path def_URI">/containers</span>
mkdir rails <span class="shell_symb_struct def_SymbolStrong def_Symbol">&amp;&amp;</span> <span class="shell_command_sys def_KeywordStrong def_Keyword">cd</span> rails
rails myrailsapp
<span class="shell_command_sys def_KeywordStrong def_Keyword">cd</span> myrailsapp
ruby <span class="shell_path def_Path def_URI">script/plugin</span> install http<span class="shell_symb def_Symbol">:</span><span class="shell_path def_Path def_URI">/</span><span class="shell_path def_Path def_URI">/themidnightcoders</span><span class="shell_command def_Keyword">.</span>net<span class="shell_symb def_Symbol">:</span><span class="def_NumberDec def_Number">8089</span><span class="shell_path def_Path def_URI">/svn/weborb</span>
mtr <span class="shell_op def_Operator def_Symbol">-u</span> serveradmin@60000feet<span class="shell_command def_Keyword">.</span>com <span class="shell_op def_Operator def_Symbol">-p</span> <span class="shell_symb_inout def_Label">&lt;</span>password<span class="shell_symb_inout def_Label">&gt;</span> add myrailsapp <span class="shell_var def_Var">$PWD</span> weborb<span class="shell_command def_Keyword">.</span>60000feet<span class="shell_command def_Keyword">.</span>com
mtr <span class="shell_op def_Operator def_Symbol">-u</span> serveradmin@60000feet<span class="shell_command def_Keyword">.</span>com <span class="shell_op def_Operator def_Symbol">-p</span> <span class="shell_symb_inout def_Label">&lt;</span>password<span class="shell_symb_inout def_Label">&gt;</span> start myrailsapp
mtr <span class="shell_op def_Operator def_Symbol">-u</span> serveradmin@60000feet<span class="shell_command def_Keyword">.</span>com <span class="shell_op def_Operator def_Symbol">-p</span> <span class="shell_symb_inout def_Label">&lt;</span>password<span class="shell_symb_inout def_Label">&gt;</span> generate_htaccess myrailsapp
mtr <span class="shell_op def_Operator def_Symbol">-u</span> serveradmin@60000feet<span class="shell_command def_Keyword">.</span>com <span class="shell_op def_Operator def_Symbol">-p</span> <span class="shell_symb_inout def_Label">&lt;</span>password<span class="shell_symb_inout def_Label">&gt;</span> create_link myrailsapp</pre>
ここまでで、http://weborb.60000feet.comにアクセスできるようになる。
<p><b>WebORBへの接続</b><br>
最終的にはクラス化するのがいいが、接続テストなので説明用に簡単に書くと次のようになる。"http://weborb.60000feet.com/weborb"が、weborbのアドレスになり、実際にサービスを行うrbファイルを"FlexRemotingTest"と指定している。_svcがこのアドレスのこのサービスのプロキシとして働くので、プロキシに対してメソッドを呼ぶことで結果を取得できる。
<pre class="mtc_block"><span class="def_Keyword">import</span> mx<span class="def_Symbol">.</span>remoting<span class="def_Symbol">.</span>Service<span class="def_Symbol">;</span>
_svc <span class="def_Symbol">=</span> <span class="def_Keyword">new</span> Service<span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;http://weborb.60000feet.com/weborb&quot;</span><span class="def_Symbol">,</span> <span class="def_BooleanConstant def_Constant def_Keyword">null</span><span class="def_Symbol">,</span> <span class="c_String def_String">&quot;FlexRemotingTest&quot;</span><span class="def_Symbol">,</span> <span class="def_BooleanConstant def_Constant def_Keyword">null</span><span class="def_Symbol">,</span> <span class="def_BooleanConstant def_Constant def_Keyword">null</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">;</span></pre>
次にエコーテストをしてみる。サーバに値を送り、そのままその値をクライアントに戻す最も簡単なテストである。echoIntというメソッドが上記rbファイルに記述されているので、そのリモートメソッドを次のようにして呼ぶことが出来る。
<pre class="mtc_block"><span class="def_Keyword">import</span> mx<span class="def_Symbol">.</span>remoting<span class="def_Symbol">.</span><span class="def_Symbol">*</span><span class="def_Symbol">;</span>
<span class="def_Keyword">import</span> mx<span class="def_Symbol">.</span>rpc<span class="def_Symbol">.</span><span class="def_Symbol">*</span><span class="def_Symbol">;</span>
<span class="def_Keyword">var</span> pc<span class="def_Symbol">:</span>PendingCall <span class="def_Symbol">=</span> _svc<span class="def_Symbol">.</span>echoInt<span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">20</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">;</span>
<span class="def_Function def_Outlined def_Special">function onEcho </span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>re<span class="def_Symbol">:</span>ResultEvent<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
   <span class="def_Keyword">trace</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>re<span class="def_Symbol">.</span>result<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_String"><span class="def_Symbol">;</span><span class="def_StringEdge def_String"><span class="def_PairStart def_Special">/</span></span><span class="def_StringEdge def_String"><span class="def_PairEnd def_Special">/</span></span></span><span class="def_NumberDec def_Number">20</span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
pc<span class="def_Symbol">.</span>responder <span class="def_Symbol">=</span> <span class="def_Keyword">new</span> RelayResponder<span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_Keyword">this</span><span class="def_Symbol">,</span> <span class="c_String def_String">&quot;onEcho&quot;</span><span class="def_Symbol">,</span> <span class="def_BooleanConstant def_Constant def_Keyword">null</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">;</span></pre>]]>
        
    </content>
</entry>
<entry>
    <title>pigbot考察(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/04/pigbotjp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=748" title="pigbot考察(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.748</id>
    
    <published>2007-04-21T10:32:22Z</published>
    <updated>2007-04-21T10:47:03Z</updated>
    
    <summary>DAKARAサイトで使われた形態素解析によるキーワードマッチングの仕組みでは、効率よく画面遷移を行うためにstateパターンが使われている。画面は基本の３つから成っていて、各画面はそれぞれのstate(状態)クラスから生成され、各stateが一定の条件のもとで他のstateに遷移する。最初のkeystroke状態で、入力が確定されるとreflect状態へ遷移し、またタイムアウトするとstandby状態へ移りムービーが再生される。例えば、ユーザの操作によりこのスタンバイからkeystroke状態へ戻るという条件は、standby状態クラス内にあり、条件が満たされると状態遷移されるわけである。stateにより複雑な条件文をすべて排除することが出来る。OOPの場合、仕事をクラスに分散化させるとよいとされている。出来るだけ同じ(method)は抽出し、使わない場合はクラスから追い出し、別のクラスにする。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[DAKARAサイトで使われた形態素解析によるキーワードマッチングの仕組みでは、効率よく画面遷移を行うためにstateパターンが使われている。画面は基本の３つから成っていて、各画面はそれぞれのstate(状態)クラスから生成され、各stateが一定の条件のもとで他のstateに遷移する。最初のkeystroke状態で、入力が確定されるとreflect状態へ遷移し、またタイムアウトするとstandby状態へ移りムービーが再生される。例えば、ユーザの操作によりこのスタンバイからkeystroke状態へ戻るという条件は、standby状態クラス内にあり、条件が満たされると状態遷移されるわけである。stateにより複雑な条件文をすべて排除することが出来る。OOPの場合、仕事をクラスに分散化させるとよいとされている。出来るだけ同じ(method)は抽出し、使わない場合はクラスから追い出し、別のクラスにする。
<img src="/blog/images/pigbot.png">]]>
        
    </content>
</entry>
<entry>
    <title>Ruby on Rails for mt Part1 (JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/04/ruby_on_rails_for_mt_part1_jp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=747" title="Ruby on Rails for mt Part1 (JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.747</id>
    
    <published>2007-04-19T09:46:32Z</published>
    <updated>2007-04-19T09:59:54Z</updated>
    
    <summary>今主流のRoRを(mt)サーバで使っている場合の各設定方法について説明していく。基本は(mt)のknowledgeデータベースとブログなどを元にかみ砕いた（かみ砕ききってはいない）内容。 SSH osxの場合、SSHKeyChainというソフト(universal)を使ってキーを管理する方法が一番楽。その方法はzigversionのサイトを参考にするとよい。 RoRのインストール mtrは、mt専用のコマンド $ mtr generate_config $ mtr setup_rubygems $ source ~/.bash_profile $ gem update –system –source=http://gems.mediatemple.net/ $ gem install rails -y $ gem install mysql –source=http://gems.mediatemple.net/ $ gem install daemons gem_plugin cgi_multipart_eof_fix -y $ gem install mongrel...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[今主流のRoRを(mt)サーバで使っている場合の各設定方法について説明していく。基本は(mt)のknowledgeデータベースとブログなどを元にかみ砕いた（かみ砕ききってはいない）内容。
<p><b>SSH</b><br>
osxの場合、SSHKeyChainというソフト(universal)を使ってキーを管理する方法が一番楽。その方法は<a href="http://zigversion.com/">zigversionのサイト</a>を参考にするとよい。
<p><b>RoRのインストール</b><br>
mtrは、mt専用のコマンド
<pre class="mtc_block"><span class="shell_var def_Var">$</span> mtr generate_config
<span class="shell_var def_Var">$</span> mtr setup_rubygems
<span class="shell_var def_Var">$</span> source ~<span class="shell_path def_Path def_URI">/</span><span class="shell_command def_Keyword">.</span>bash_profile
<span class="shell_var def_Var">$</span> gem update –system –<span class="shell_var def_Var">source</span><span class="shell_symb def_Symbol">=</span>http<span class="shell_symb def_Symbol">:</span><span class="shell_path def_Path def_URI">/</span><span class="shell_path def_Path def_URI">/gems</span><span class="shell_command def_Keyword">.</span>mediatemple<span class="shell_command def_Keyword">.</span>net<span class="shell_path def_Path def_URI">/</span>
<span class="shell_var def_Var">$</span> gem install rails -y
<span class="shell_var def_Var">$</span> gem install mysql –<span class="shell_var def_Var">source</span><span class="shell_symb def_Symbol">=</span>http<span class="shell_symb def_Symbol">:</span><span class="shell_path def_Path def_URI">/</span><span class="shell_path def_Path def_URI">/gems</span><span class="shell_command def_Keyword">.</span>mediatemple<span class="shell_command def_Keyword">.</span>net<span class="shell_path def_Path def_URI">/</span>
<span class="shell_var def_Var">$</span> gem install daemons gem_plugin cgi_multipart_eof_fix -y
<span class="shell_var def_Var">$</span> gem install mongrel –<span class="shell_var def_Var">source</span><span class="shell_symb def_Symbol">=</span>http<span class="shell_symb def_Symbol">:</span><span class="shell_path def_Path def_URI">/</span><span class="shell_path def_Path def_URI">/gems</span><span class="shell_command def_Keyword">.</span>mediatemple<span class="shell_command def_Keyword">.</span>net<span class="shell_path def_Path def_URI">/</span></pre>
]]>
        
    </content>
</entry>
<entry>
    <title>Hello Apollo(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/03/hello_apollojp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=728" title="Hello Apollo(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.728</id>
    
    <published>2007-03-20T03:28:04Z</published>
    <updated>2007-03-20T04:50:31Z</updated>
    
    <summary>mike chamberのドキュメントをもとにhello apolloアプリを作成してみました。mxml(swfのソース)とxml(アプリの設定ファイル)２つともpdfの言われるままに作成する。mxmlはターミナルからamxmlcを使ってswfに変換する。swfはただのswfなのでアプリとして起動するには、adlを使う。 amxmlc ~/Desktop/HelloWorld.mxml adl ~/Desktop/HelloWorld-app.xml ついに現れた！！ いつやっても、新しい世界では、単純なことがこれだけ嬉しい。 さて、次にairファイルにadtを使ってパッケージングする。 adt -package Hello.air HelloWorld-app.xml HelloWorld.swf 例えば、このサーバからairファイルを配布する場合、デフォルトでairという拡張子がブラウザに伝わらない。拡張子をwebサーバに登録する必要があるので、.htaccessファイルに、次の行を加えておく。 AddType application/vnd.adobe.apollo-install-package .air...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[mike chamberのドキュメントをもとにhello apolloアプリを作成してみました。mxml(swfのソース)とxml(アプリの設定ファイル)２つともpdfの言われるままに作成する。mxmlはターミナルからamxmlcを使ってswfに変換する。swfはただのswfなのでアプリとして起動するには、adlを使う。
<pre class="mtc_block">amxmlc ~<span class="shell_path def_Path def_URI">/Desktop/HelloWorld</span><span class="shell_command def_Keyword">.</span>mxml
adl ~<span class="shell_path def_Path def_URI">/Desktop/HelloWorld</span>-app<span class="shell_command def_Keyword">.</span>xml</pre>
<p>
ついに現れた！！
<p>
<img src="/blog/images/apollo/hello_apollo.png">
<p>
いつやっても、新しい世界では、単純なことがこれだけ嬉しい。
<p>
さて、次にairファイルにadtを使ってパッケージングする。
<pre class="mtc_block">adt -package Hello<span class="shell_command def_Keyword">.</span>air HelloWorld-app<span class="shell_command def_Keyword">.</span>xml HelloWorld<span class="shell_command def_Keyword">.</span>swf</pre>
例えば、このサーバからairファイルを配布する場合、デフォルトでairという拡張子がブラウザに伝わらない。拡張子をwebサーバに登録する必要があるので、.htaccessファイルに、次の行を加えておく。
<pre class="mtc_block"><span class="apache_ApacheWord def_Keyword">AddType</span> application/vnd.adobe.apollo<span class="apache_ApacheSymbol def_Symbol">-</span>install<span class="apache_ApacheSymbol def_Symbol">-</span>package .air</pre>
]]>
        
    </content>
</entry>
<entry>
    <title>Apolloインストールと設定(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/03/apollo.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=727" title="Apolloインストールと設定(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.727</id>
    
    <published>2007-03-20T03:03:33Z</published>
    <updated>2007-03-20T03:24:12Z</updated>
    
    <summary>アルファ版が出たので、かじってみました。flex builder無しで、sdkのみでやってみる予定。前日に出たオライリーのmike chamber著のpdfのドキュメントを参考に進めると、単純にapollo sdkだけ入れればいいというわけにもいかず、どうにもパスが通らなく、win版(こっちは辞めた方がイイ、msdosが8文字制限という時代遅れでやりにくい)、mac版どっちもamxmlcを実行すると、mxmlc辺りでうまくいかなかった。.profileにパスをexportしても無理。flex sdkを入れてbinのパスをexportしても動作せず。 結局はこのpdfは無視して、別にadobeから提供されているquickstartドキュメントを落としてapollo_alpha1_docsフォルダのドキュメント(Set_up_instructions_for_Flex_SDK_users.html)通りにやればよかっただけです。flex_sdk_2.zipとapollo_sdk_alpha1.zipをダウンロードして解凍。Version.asとmxmlc.jarを上書き。解凍したruntimeフォルダのAdobe Apollo.dmgのframeworkをruntimeフォルダにコピー。解凍されたフォルダやファイルは全部、アプリフォルダにApollo_SDKという名前でフォルダ作って全部入れておく。Add the path to the bin folder to your PATH environment variable.の部分は、ターミナルから、 cd ~ cat .profile で無ければ、 touch .profile open -e .profile して、 export PATH=$PATH:/Applications/Apollo_SDK/bin/ を追加。 source .profile すれば、設定は終了となります。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[アルファ版が出たので、かじってみました。flex builder無しで、sdkのみでやってみる予定。前日に出たオライリーのmike chamber著のpdfのドキュメントを参考に進めると、単純にapollo sdkだけ入れればいいというわけにもいかず、どうにもパスが通らなく、win版(こっちは辞めた方がイイ、msdosが8文字制限という時代遅れでやりにくい)、mac版どっちもamxmlcを実行すると、mxmlc辺りでうまくいかなかった。.profileにパスをexportしても無理。flex sdkを入れてbinのパスをexportしても動作せず。
結局はこのpdfは無視して、別にadobeから提供されているquickstartドキュメントを落としてapollo_alpha1_docsフォルダのドキュメント(Set_up_instructions_for_Flex_SDK_users.html)通りにやればよかっただけです。flex_sdk_2.zipとapollo_sdk_alpha1.zipをダウンロードして解凍。Version.asとmxmlc.jarを上書き。解凍したruntimeフォルダのAdobe Apollo.dmgのframeworkをruntimeフォルダにコピー。解凍されたフォルダやファイルは全部、アプリフォルダにApollo_SDKという名前でフォルダ作って全部入れておく。Add the path to the bin folder to your PATH environment variable.の部分は、ターミナルから、
<pre class="mtc_block"><span class="shell_command_sys def_KeywordStrong def_Keyword">cd</span> ~
cat <span class="shell_command def_Keyword">.</span>profile</pre>
で無ければ、
<pre class="mtc_block">touch <span class="shell_command def_Keyword">.</span>profile
open <span class="shell_op def_Operator def_Symbol">-e</span> <span class="shell_command def_Keyword">.</span>profile</pre>
して、
<pre class="mtc_block"><span class="shell_command_sys def_KeywordStrong def_Keyword">export</span> <span class="shell_var def_Var">PATH</span><span class="shell_symb def_Symbol">=</span><span class="shell_var def_Var">$PATH</span><span class="shell_symb def_Symbol">:</span><span class="shell_path def_Path def_URI">/Applications/Apollo_SDK/bin</span><span class="shell_path def_Path def_URI">/</span></pre>
を追加。
<pre class="mtc_block">source <span class="shell_command def_Keyword">.</span>profile</pre>
すれば、設定は終了となります。]]>
        
    </content>
</entry>
<entry>
    <title>Bot(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/03/botjp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=714" title="Bot(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.714</id>
    
    <published>2007-03-02T11:13:05Z</published>
    <updated>2007-03-02T11:28:56Z</updated>
    
    <summary>最近コメントに応答するサイトの仕組みを作っている。NDA上詳細はリリースまで語れないが、簡単に言うと、入力したstringが、辞書ファイル的な存在と照合処理されグラフィックに反映する。今回はデザインパターンを色々組みこんでいる。過去制作したcupnoodleのcuplantでも、stateパターンとmvcの構成は取り入れてある。MVCの構成はどのサイトでも自分が制作する場合、基本のコンセプトにある。MがXMLとDAOを介して通信し、リストとして格納される。CはMとVの関係を制御する。今回はmementoパターンも使っていて、入力した文字列は基本的に記憶され、実装されるかは不明だが、undo可能になっている。配列としてpushするので、複数記憶される。Cの全体の状態遷移にはstateパターンが使われていて、入力可能やstandby状態などを遷移をstateマシーンで実装した。これにより複雑な条件分岐が省略できる。Vに反映する仕組みはsingletonで構成されたclipLoaderが行う。これは、キューの管理をしswfを連続して読み込む処理をもつ。リリース後は、この重要部分の構成を考察していこう。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        最近コメントに応答するサイトの仕組みを作っている。NDA上詳細はリリースまで語れないが、簡単に言うと、入力したstringが、辞書ファイル的な存在と照合処理されグラフィックに反映する。今回はデザインパターンを色々組みこんでいる。過去制作したcupnoodleのcuplantでも、stateパターンとmvcの構成は取り入れてある。MVCの構成はどのサイトでも自分が制作する場合、基本のコンセプトにある。MがXMLとDAOを介して通信し、リストとして格納される。CはMとVの関係を制御する。今回はmementoパターンも使っていて、入力した文字列は基本的に記憶され、実装されるかは不明だが、undo可能になっている。配列としてpushするので、複数記憶される。Cの全体の状態遷移にはstateパターンが使われていて、入力可能やstandby状態などを遷移をstateマシーンで実装した。これにより複雑な条件分岐が省略できる。Vに反映する仕組みはsingletonで構成されたclipLoaderが行う。これは、キューの管理をしswfを連続して読み込む処理をもつ。リリース後は、この重要部分の構成を考察していこう。
        
    </content>
</entry>
<entry>
    <title>バージョンチェック(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/02/jp_4.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=702" title="バージョンチェック(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.702</id>
    
    <published>2007-02-19T17:44:26Z</published>
    <updated>2007-02-19T17:54:27Z</updated>
    
    <summary>毎回、同じXMLをリモートからロードさせないために、ローカルに書き込んだデータも使いたいが、更新したXMLは、リモートから読み込みたい。その場合は、バージョンを書き込んだ小さいテキストデータを読み込み、過去にローカルに書き込んであるバージョンの有無と、比較をする。ローカルのバージョンが古い場合は、リモートから読み込む。新しい場合はローカルのデータをもとにデータを作成する。セーブするデータ量を減らすためにstring型で保存する。カスタムクラスのまま保存すると、ロードした後にそのクラスのメソッドが使えない。実データが更新されたものかを確認できるように、同様にバージョンを付ける。セーブは、バージョンチェックで使ったバージョンと、同じナンバリングをして、一致した時のみセーブするようにすると保守性が上がる。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[毎回、同じXMLをリモートからロードさせないために、ローカルに書き込んだデータも使いたいが、更新したXMLは、リモートから読み込みたい。その場合は、バージョンを書き込んだ小さいテキストデータを読み込み、過去にローカルに書き込んであるバージョンの有無と、比較をする。ローカルのバージョンが古い場合は、リモートから読み込む。新しい場合はローカルのデータをもとにデータを作成する。セーブするデータ量を減らすためにstring型で保存する。カスタムクラスのまま保存すると、ロードした後にそのクラスのメソッドが使えない。実データが更新されたものかを確認できるように、同様にバージョンを付ける。セーブは、バージョンチェックで使ったバージョンと、同じナンバリングをして、一致した時のみセーブするようにすると保守性が上がる。
<img src="/blog/images/ver_check.jpg">]]>
        
    </content>
</entry>
<entry>
    <title>WaterEffect(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2007/02/waveeffectjp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=665" title="WaterEffect(JP)" />
    <id>tag:lab.60000feet.com,2007:/blog//5.665</id>
    
    <published>2007-02-01T09:16:18Z</published>
    <updated>2007-02-01T09:50:45Z</updated>
    
    <summary>今年初となるflashの記事はWaterEffect、いわゆる波紋効果。bitmapで波紋を表現する方法は簡単な方法がある。もともとビットマップデータはx,y方向のマトリックス状で構成されている。波というのは平面グラフィックスの場合、時間軸を加えた３次元方向に行われるので、flashの場合frameの移行に沿ってbitmapに変化を加えればよい。bitmapの場合、waveの公式はもともと定義されていて、ある点とその上下左右の点に対して波の高さを考えればよい。大きさmaxx,maxxyのbitmapでは、新しい時間_nw、座標x,yの_waveの大きさnは、現在の時間_ctと減衰係数_dampより次のようにもとまる。 for(var y=1;y 処理が重いのでプレビューできる方(&gt;1GHz推奨)はどうぞ。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[今年初となるflashの記事はWaterEffect、いわゆる波紋効果。bitmapで波紋を表現する方法は簡単な方法がある。もともとビットマップデータはx,y方向のマトリックス状で構成されている。波というのは平面グラフィックスの場合、時間軸を加えた３次元方向に行われるので、flashの場合frameの移行に沿ってbitmapに変化を加えればよい。bitmapの場合、waveの公式はもともと定義されていて、ある点とその上下左右の点に対して波の高さを考えればよい。大きさmaxx,maxxyのbitmapでは、新しい時間_nw、座標x,yの_waveの大きさnは、現在の時間_ctと減衰係数_dampより次のようにもとまる。
<pre class="mtc_block"><span class="def_Keyword">for</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_Keyword">var</span> y<span class="def_Symbol">=</span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol">;</span>y<span class="def_Symbol">&lt;</span>_maxy<span class="def_Symbol">;</span>y<span class="def_Symbol">++</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
	<span class="def_Keyword">for</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_Keyword">var</span> x<span class="def_Symbol">=</span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol">;</span>x<span class="def_Symbol">&lt;</span>_maxx<span class="def_Symbol">;</span>x<span class="def_Symbol">++</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
		n<span class="def_Symbol">=</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>_wave<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>_ct<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>y<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>x<span class="def_Symbol">-</span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">+</span>_wave<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>_ct<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>y<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>x<span class="def_Symbol">+</span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">+</span>_wave<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>_ct<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>y<span class="def_Symbol">-</span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>x<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">+</span>_wave<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>_ct<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>y<span class="def_Symbol">+</span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>x<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">/</span><span class="def_NumberDec def_Number">2</span><span class="def_Symbol">-</span>_wave<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>_nw<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>y<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>x<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">;</span>
		n<span class="def_Symbol">=</span>n<span class="def_Symbol">-</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>n<span class="def_Symbol">/</span>_damp<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">;</span>
		_wave<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>_nw<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>y<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>x<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">=</span>n<span class="def_Symbol">;</span>
	<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span></pre>

処理が重いのでプレビューできる方(>1GHz推奨)はどうぞ。]]>
        <![CDATA[<div id="watereffect">
  This text is replaced by the Flash movie.
</div>
<script type="text/javascript">
   var so = new SWFObject("/blog/images/water_effect.swf", "watereffect", "100", "100", "8", "#ffffff");
   so.write("watereffect");
</script>]]>
    </content>
</entry>
<entry>
    <title>HouseModel(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2006/12/housemodeljp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=618" title="HouseModel(JP)" />
    <id>tag:lab.60000feet.com,2006:/blog//5.618</id>
    
    <published>2006-12-12T18:03:59Z</published>
    <updated>2006-12-12T18:14:11Z</updated>
    
    <summary>家電をメタファーにしたグラフィックを作成。個々の家電はすべてムービークリップが基本となっている。ケーブルはビデオケーブルと、電源ケーブルの２つがあり、個々のグラフィックをつなぐ。発電機は電力を作り出す。その電力プロパティと電源ケーブルの接続状態が家電の動作に影響を与える。ビデオもほぼ同様で、ビデオソースと、ビデオビューをビデオケーブルで接続するとその接続状態とソースが映像ソースを提供していれば、ビューがそれを表示する。いや、家電といってもこれに限らない。さらに増やしていけばどういう世界が作れるだろうか。 This text is replaced by the Flash movie. var so = new SWFObject(&quot;/blog/images/house.swf&quot;, &quot;house&quot;, &quot;480&quot;, &quot;500&quot;, &quot;8&quot;, &quot;#ffffff&quot;); so.write(&quot;housemodel&quot;);...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[家電をメタファーにしたグラフィックを作成。個々の家電はすべてムービークリップが基本となっている。ケーブルはビデオケーブルと、電源ケーブルの２つがあり、個々のグラフィックをつなぐ。発電機は電力を作り出す。その電力プロパティと電源ケーブルの接続状態が家電の動作に影響を与える。ビデオもほぼ同様で、ビデオソースと、ビデオビューをビデオケーブルで接続するとその接続状態とソースが映像ソースを提供していれば、ビューがそれを表示する。いや、家電といってもこれに限らない。さらに増やしていけばどういう世界が作れるだろうか。
<div id="housemodel">
  This text is replaced by the Flash movie.
</div>
<script type="text/javascript">
   var so = new SWFObject("/blog/images/house.swf", "house", "480", "500", "8", "#ffffff");
   so.write("housemodel");
</script>]]>
        
    </content>
</entry>
<entry>
    <title>何をすべきか(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2006/12/jp_3.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=612" title="何をすべきか(JP)" />
    <id>tag:lab.60000feet.com,2006:/blog//5.612</id>
    
    <published>2006-12-03T07:11:44Z</published>
    <updated>2006-12-03T07:47:11Z</updated>
    
    <summary>flashを使ったコンテンツといっても、今の時期膨大な種類のコンテンツがあってすべてを網羅出来ない位になっている。自分たち制作側は高度なアプリや機能を載せた表現や機能媒体がflashプレーヤーの役目と考えるのに対して、一般にはflashとは絵が動いたり、音がなったり、アニメーションそのもののことと考えている人が今でも多数、いやほとんどを占めているようだ。こういうwebの仕事をしていると、誰でもパソコンを持ってて、パソコンを持っていればインターネットも自由に出来て、彼ら全員プロじゃなくてもhtml程度ちょっと本読めば最低限書けて、flashもそこそこ分かるんじゃないかという感覚を持ってしまう。 何をやればいいのか。webにはflash以外にも色々なプラグインもあるし、ajaxやその他のwebサービスを利用したコンテンツもある。もちろんそういうサービスを利用ではなくそのもの自体を考えるというのもあるが、パソコンの数に対してflashが一番普及している表現空間には違いない。空間で何が出来るのか。今後apolloなどwebを離れたアプリも作り出せる時代も来る。しかしそれはCなどのアプリケーション言語のアプリとどう差別化していくのだろう。低いレベルでは沢山のメソッドがある。しかし、それは制作の中で反映されなければ枝には届かない。ましてや枝の先にある実はその存在すら気がつかない。根っこから吸い上げられたものを枝の先に伝える。枝の先で何が求められているのかがなかなか見えない。いやそれは、どういう情報ではなくどういう体験がしたいかということ。今後、as3ではサウンドのスペクトルを視覚化した表現などもあるし、昔から2次元で3次元を表現する方法もある。しかしそれは先っぽの話。かなり抽象的でつかみづらいコアの話をしている。世の中が欲しているのものはどこにあるのか。 がらっと変えて別の視点の話をするとやはり3Dがあらゆる意味で表現手法で有効だと思う。スクリーンが2次元で現実世界が3次元。やはり違和感がある。現在の技術でPCを使って表現できるマシンパワーから考えると、時代に沿ってかなり実現しそうな可能性が濃くなっている。ベクターベースで非力な時代を支えたplayerがpixelベースになった。textureのマッピングも可能になり、web上のリアルタイムなレンダリング速度にも耐えれる。3D空間でwebカメラでTV電話するような時代ももう近いのか。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        flashを使ったコンテンツといっても、今の時期膨大な種類のコンテンツがあってすべてを網羅出来ない位になっている。自分たち制作側は高度なアプリや機能を載せた表現や機能媒体がflashプレーヤーの役目と考えるのに対して、一般にはflashとは絵が動いたり、音がなったり、アニメーションそのもののことと考えている人が今でも多数、いやほとんどを占めているようだ。こういうwebの仕事をしていると、誰でもパソコンを持ってて、パソコンを持っていればインターネットも自由に出来て、彼ら全員プロじゃなくてもhtml程度ちょっと本読めば最低限書けて、flashもそこそこ分かるんじゃないかという感覚を持ってしまう。
何をやればいいのか。webにはflash以外にも色々なプラグインもあるし、ajaxやその他のwebサービスを利用したコンテンツもある。もちろんそういうサービスを利用ではなくそのもの自体を考えるというのもあるが、パソコンの数に対してflashが一番普及している表現空間には違いない。空間で何が出来るのか。今後apolloなどwebを離れたアプリも作り出せる時代も来る。しかしそれはCなどのアプリケーション言語のアプリとどう差別化していくのだろう。低いレベルでは沢山のメソッドがある。しかし、それは制作の中で反映されなければ枝には届かない。ましてや枝の先にある実はその存在すら気がつかない。根っこから吸い上げられたものを枝の先に伝える。枝の先で何が求められているのかがなかなか見えない。いやそれは、どういう情報ではなくどういう体験がしたいかということ。今後、as3ではサウンドのスペクトルを視覚化した表現などもあるし、昔から2次元で3次元を表現する方法もある。しかしそれは先っぽの話。かなり抽象的でつかみづらいコアの話をしている。世の中が欲しているのものはどこにあるのか。
がらっと変えて別の視点の話をするとやはり3Dがあらゆる意味で表現手法で有効だと思う。スクリーンが2次元で現実世界が3次元。やはり違和感がある。現在の技術でPCを使って表現できるマシンパワーから考えると、時代に沿ってかなり実現しそうな可能性が濃くなっている。ベクターベースで非力な時代を支えたplayerがpixelベースになった。textureのマッピングも可能になり、web上のリアルタイムなレンダリング速度にも耐えれる。3D空間でwebカメラでTV電話するような時代ももう近いのか。
        
    </content>
</entry>
<entry>
    <title>file-xfer(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2006/12/filexferjp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=610" title="file-xfer(JP)" />
    <id>tag:lab.60000feet.com,2006:/blog//5.610</id>
    
    <published>2006-12-02T08:04:54Z</published>
    <updated>2006-12-02T08:29:38Z</updated>
    
    <summary>日常のファイル送信をメール添付から自動管理されたURLダウンロードに変えるサイト。普通大容量ファイルはメール送信で弾かれるので不便。ファイルは最大１Ｇまでアップロード出来て、過去のファイルも選択し再送信できる。現在一個当たり１００ＭＢに設定してあるが、ファイルのダウンロードは期限や回数制限でき、一定期間でファイルは削除される。普段FTPでファイルを受け渡しているなら特に便利になるはず。...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[日常のファイル送信をメール添付から自動管理された<a href="http://file-xfer.net">URLダウンロードに変えるサイト</a>。普通大容量ファイルはメール送信で弾かれるので不便。ファイルは最大１Ｇまでアップロード出来て、過去のファイルも選択し再送信できる。現在一個当たり１００ＭＢに設定してあるが、ファイルのダウンロードは期限や回数制限でき、一定期間でファイルは削除される。普段FTPでファイルを受け渡しているなら特に便利になるはず。
<img src="/blog/images/xfer/screenshot.gif">]]>
        
    </content>
</entry>
<entry>
    <title>wmode(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2006/12/wmodejp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=608" title="wmode(JP)" />
    <id>tag:lab.60000feet.com,2006:/blog//5.608</id>
    
    <published>2006-12-01T09:41:52Z</published>
    <updated>2006-12-01T09:51:01Z</updated>
    
    <summary>wmodeはブラウザ上でflashの背景を透過させるパラメータで、いくつかの注意点がある。 基本的にwindowsでサポートされる機能であるが、処理速度が若干変わる。windowsではこの機能でstageに何もない透過部分はhtml部分と扱われるため、flashにフォーカス（マウス）が届かない。透過の短形をstageサイズで敷けば回避される。フォーカスにはz方向の重なりが重要。全面にflashが無い限りマウスフォーカスは届かない。CSS上のz-indexが-1という設定はfirefoxでは通用しないようだ。CSSの//コメントアウトはIE6では通用しない。 参考:http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_14201...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[wmodeはブラウザ上でflashの背景を透過させるパラメータで、いくつかの注意点がある。
<pre class="mtc_block"><span class="html_htmlUnknowParam def_ParameterUnknown def_ParameterStrong def_Parameter"><span class="def_PairStart def_Special"><span class="html_htmlTagBr def_OpenTag def_Tag">&lt;</span></span><span class="html_htmlUnknowTag def_Tag"><span class="html_htmlOpenTag def_Keyword">param</span></span> <span class="html_htmlParam def_Parameter">name</span><span class="html_htmlTagEqu def_Symbol">=</span><span class="html_htmlString def_String">&quot;wmode&quot;</span> <span class="html_htmlParam def_Parameter">value</span><span class="html_htmlTagEqu def_Symbol">=</span><span class="html_htmlString def_String">&quot;transparent&quot;</span> <span class="def_PairEnd def_Special"><span class="html_htmlTagBr def_OpenTag def_Tag">/&gt;</span></span></span>
<span class="html_htmlUnknowParam def_ParameterUnknown def_ParameterStrong def_Parameter"><span class="def_PairStart def_Special"><span class="html_htmlTagBr def_OpenTag def_Tag">&lt;</span></span><span class="html_htmlUnknowTag def_Tag"><span class="html_htmlOpenTag def_Keyword">embed</span></span> wmode<span class="html_htmlTagEqu def_Symbol">=</span><span class="html_htmlString def_String">&quot;transparent&quot;</span><span class="def_PairEnd def_Special"><span class="html_htmlTagBr def_OpenTag def_Tag">&gt;</span></span></span></pre>
基本的にwindowsでサポートされる機能であるが、処理速度が若干変わる。windowsではこの機能でstageに何もない透過部分はhtml部分と扱われるため、flashにフォーカス（マウス）が届かない。透過の短形をstageサイズで敷けば回避される。フォーカスにはz方向の重なりが重要。全面にflashが無い限りマウスフォーカスは届かない。CSS上のz-indexが-1という設定はfirefoxでは通用しないようだ。CSSの//コメントアウトはIE6では通用しない。
<p>参考:<a href="http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_14201">http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_14201</a>]]>
        
    </content>
</entry>
<entry>
    <title>flash_proxy PART1(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2006/11/flash_proxy_part1jp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=603" title="flash_proxy PART1(JP)" />
    <id>tag:lab.60000feet.com,2006:/blog//5.603</id>
    
    <published>2006-11-30T06:29:34Z</published>
    <updated>2006-11-30T07:03:06Z</updated>
    
    <summary>Proxyというのは、そもそも実際の処理を代行するもので自分の中で処理できない内容はクラスの後ろに設定してある実体にその処理を任せる。flash_proxyはネームスペースという考え方が入っているので若干複雑かもしれないが、この機能を使うと実際には作っていない（未定義の）メソッドやプロパティを呼び出すことが出来る。例えば、実行時に何か変数を列挙したドキュメントを読み込んだりすることはよくあるが、この変数が既に定義されていたかのように取り出すことが出来たり、他のクラスの関数を自分の中に定義されているかのように振る舞うことが出来る。 callProperty この例では_targetというオブジェクトにmovieclipという実体が設定されている前提になっている。movieclipなら実際はどんなメソッドがあるのか分かるし、直接呼んでも問題はないが、実行時に新たに誰かが設定したメソッドがあるとしたら、それを実体に対して呼び出すことは出来ない。実体でメソッドが未定義だったら他のオブジェクトのメソッドを実行するということも出来る。proxyという存在でワンクッション置いてあるので後ろの実際には表面から見えない実装が柔軟になるのである。 dynamic class ExProxy extends Proxy{ var _target:Object; flash_proxy override function callProperty(method:*, ...param):*{ _target[method].apply(_target, param);//_target.method(p1,p2..)のように実行 } } exProxy.gotoAndStop(1);//_funcにmovieclipが設定されている仮定 getProperty 前述の例どおり、読み込んだテキストから変数をセットすることは出来ない。読み込んだデータが入ったオブジェクトの中の変数を直接呼んでいるかのようにアクセスできると便利である。 dynamic class ExProxy extends Proxy{ var _data:Object; flash_proxy override function getProperty(name:*):*{ return _data[name]; } } trace(exProxy.name);//EXProxyクラスにないプロパティを要求しても正しい結果...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[Proxyというのは、そもそも実際の処理を代行するもので自分の中で処理できない内容はクラスの後ろに設定してある実体にその処理を任せる。flash_proxyはネームスペースという考え方が入っているので若干複雑かもしれないが、この機能を使うと実際には作っていない（未定義の）メソッドやプロパティを呼び出すことが出来る。例えば、実行時に何か変数を列挙したドキュメントを読み込んだりすることはよくあるが、この変数が既に定義されていたかのように取り出すことが出来たり、他のクラスの関数を自分の中に定義されているかのように振る舞うことが出来る。
<p><b>callProperty</b><br>
この例では_targetというオブジェクトにmovieclipという実体が設定されている前提になっている。movieclipなら実際はどんなメソッドがあるのか分かるし、直接呼んでも問題はないが、実行時に新たに誰かが設定したメソッドがあるとしたら、それを実体に対して呼び出すことは出来ない。実体でメソッドが未定義だったら他のオブジェクトのメソッドを実行するということも出来る。proxyという存在でワンクッション置いてあるので後ろの実際には表面から見えない実装が柔軟になるのである。
<pre class="mtc_block">dynamic <span class="def_Keyword">class</span> ExProxy <span class="def_Keyword">extends</span> Proxy<span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  <span class="def_Keyword">var</span> <span class="def_Keyword">_target</span><span class="def_Symbol">:</span><span class="def_Var">Object</span><span class="def_Symbol">;</span>
  flash_proxy override <span class="def_Function def_Outlined def_Special">function callProperty(</span>method<span class="def_Symbol">:</span><span class="def_Symbol">*</span><span class="def_Symbol">,</span> <span class="def_Symbol">.</span><span class="def_Symbol">.</span><span class="def_Symbol">.</span>param<span class="def_Symbol">)</span><span class="def_Symbol">:</span><span class="def_Symbol">*</span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
     <span class="def_Keyword">_target</span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>method<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">.</span><span class="def_Keyword">apply</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_Keyword">_target</span><span class="def_Symbol">,</span> param<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_String"><span class="def_Symbol">;</span><span class="def_StringEdge def_String"><span class="def_PairStart def_Special">/</span></span><span class="def_StringEdge def_String"><span class="def_PairEnd def_Special">/</span></span></span><span class="def_Keyword">_target</span><span class="def_Symbol">.</span>method<span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>p1<span class="def_Symbol">,</span>p2<span class="def_Symbol">.</span><span class="def_Symbol">.</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span>のように実行
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
exProxy<span class="def_Symbol">.</span><span class="def_Keyword">gotoAndStop</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">1</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_String"><span class="def_Symbol">;</span><span class="def_StringEdge def_String"><span class="def_PairStart def_Special">/</span></span><span class="def_StringEdge def_String"><span class="def_PairEnd def_Special">/</span></span></span>_funcにmovieclipが設定されている仮定</pre>
<p><b>getProperty</b><br>
前述の例どおり、読み込んだテキストから変数をセットすることは出来ない。読み込んだデータが入ったオブジェクトの中の変数を直接呼んでいるかのようにアクセスできると便利である。
<pre class="mtc_block">dynamic <span class="def_Keyword">class</span> ExProxy <span class="def_Keyword">extends</span> Proxy<span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  <span class="def_Keyword">var</span> _data<span class="def_Symbol">:</span><span class="def_Var">Object</span><span class="def_Symbol">;</span>
  flash_proxy override <span class="def_Function def_Outlined def_Special">function getProperty(</span>name<span class="def_Symbol">:</span><span class="def_Symbol">*</span><span class="def_Symbol">)</span><span class="def_Symbol">:</span><span class="def_Symbol">*</span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
     <span class="def_Keyword">return</span> _data<span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>name<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="def_Symbol">;</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
<span class="def_Keyword">trace</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>exProxy<span class="def_Symbol">.</span>name<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_String"><span class="def_Symbol">;</span><span class="def_StringEdge def_String"><span class="def_PairStart def_Special">/</span></span><span class="def_StringEdge def_String"><span class="def_PairEnd def_Special">/</span></span></span>EXProxyクラスにないプロパティを要求しても正しい結果</pre>]]>
        
    </content>
</entry>
<entry>
    <title>AS2 to AS3 migration(JP)</title>
    <link rel="alternate" type="text/html" href="http://lab.60000feet.com/blog/2006/11/as2_to_as3_migrationjp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://60000feet.com/cgi-bin/mt-atom.cgi/weblog/blog_id=5/entry_id=602" title="AS2 to AS3 migration(JP)" />
    <id>tag:lab.60000feet.com,2006:/blog//5.602</id>
    
    <published>2006-11-30T05:51:16Z</published>
    <updated>2006-11-30T06:17:06Z</updated>
    
    <summary>たまに使うコマンドの変更点の列挙。 asfunction asfunctionはAS3には無く、eventDispatcherで処理する。eventを発生させたいtext箇所にevent:文字列を埋め込む。 field.htmlText=&quot;click to login&quot;; addEventListener(TextEvent.LINK, onLinkEvent); function onLinkEvent(evt:TextEvent):void{ trace(evt.text);//login } updateAfterEvent() 強制再描画関数はもうグローバル関数ではない。timer、mouse、keyboardのイベントクラスから呼び出せる。 instanceof 全オブジェクトをループで列挙しながら特定の型を確認するケースはまれにあるが、今後はisを使う。 for(var i in this){ if(this[i] is Sprite){ trace(&quot;SPRITE&quot;); } }...</summary>
    <author>
        <name>Dai</name>
        <uri>http://60000feet.com</uri>
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://lab.60000feet.com/blog/">
        <![CDATA[たまに使うコマンドの変更点の列挙。
<p><b>asfunction</b><br>
asfunctionはAS3には無く、eventDispatcherで処理する。eventを発生させたいtext箇所にevent:文字列を埋め込む。
<pre class="mtc_block">field<span class="def_Symbol">.</span><span class="def_Keyword">htmlText</span><span class="def_Symbol">=</span><span class="c_String def_String">&quot;&lt;a href='event:login'&gt;click to login&lt;/a&gt;&quot;</span><span class="def_Symbol">;</span>
addEventListener<span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>TextEvent<span class="def_Symbol">.</span>LINK<span class="def_Symbol">,</span> onLinkEvent<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">;</span></pre>
<pre class="mtc_block"><span class="def_Function def_Outlined def_Special">function onLinkEvent(</span>evt<span class="def_Symbol">:</span>TextEvent<span class="def_Symbol">)</span><span class="def_Symbol">:</span><span class="def_Keyword">void</span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  <span class="def_Keyword">trace</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span>evt<span class="def_Symbol">.</span><span class="def_Keyword">text</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_String"><span class="def_Symbol">;</span><span class="def_StringEdge def_String"><span class="def_PairStart def_Special">/</span></span><span class="def_StringEdge def_String"><span class="def_PairEnd def_Special">/</span></span></span>login
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span></pre>
<p><b>updateAfterEvent()</b><br>
強制再描画関数はもうグローバル関数ではない。timer、mouse、keyboardのイベントクラスから呼び出せる。
<p><b>instanceof</b><br>
全オブジェクトをループで列挙しながら特定の型を確認するケースはまれにあるが、今後はisを使う。
<pre class="mtc_block"><span class="def_Keyword">for</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_Keyword">var</span> i <span class="def_Keyword">in</span> <span class="def_Keyword">this</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  <span class="def_Keyword">if</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_Keyword">this</span><span class="def_Symbol"><span class="def_PairStart def_Special">[</span></span>i<span class="def_Symbol"><span class="def_PairEnd def_Special">]</span></span> is Sprite<span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
    <span class="def_Keyword">trace</span><span class="def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;SPRITE&quot;</span><span class="def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_Symbol">;</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span></pre>]]>
        
    </content>
</entry>

</feed> 

