[Flex][AIR] Adobe Flex 3 リファレンスガイドがダウンロード出来るようになりました。
を発見したのでさっそく以前に設置したものを最新のに変更してみた。
ちなみに前回は英語のリファレンスだったため、凄い便利になった。
最新のリファレンス探したりするだけでもめんどかったってのもあるけど。
新規に設置
LiveDocs をローカルに置くに詳細がのってるんでそのままやれば大丈夫。
以前もここを参考にして設置しました。感謝感謝。
既存の index をはりなおす
あってるかどうかは不明だけど、とりあえずこの順番でできた。
することは前の index を削除して最適化して新しく張り直す感じです。
メモも兼ねて細かいめで書いてます。環境は人によって違うのでパス系は気をつけてください。
[階層]
. <= /var/www/flex-doc
|-- langref
|-- flex3jp_documentation.zip (<- ここを DL するところから書いてる)
|-- flex3jp_documentation
|-- langref
/var/www/hyperestraier/flex3langref に hyperestraier の index がある。
/var/www/flex-doc/langref に referece の html がある。
estseek.*(config, cgi とか) は /var/www/flex-doc/langref/ 以下にある。
#documentの取得
$wget http://livedocs.adobe.com/flex/3_jp/flex3jp_documentation.zip
#解凍
$unzip flex3jp_documentation.zip
$cd flex3jp_documentation/langref
#estseek の設定ファイルのコピー
$cp -r /var/www/flex-doc/langref/estseek.* .
#昔のファイルを削除(いる場合や不安な場合はどっかにバックアップとっといて下さい)
$rm -rf /var/www/fles-doc/langref
#index の削除
$ estcmd purge -cl /var/www/hyperestraier/flex3langref
#index の最適化
$estcmd optimize /var/www/hyperestraier/flex3langref
#reference の移動
$mv /var/www/flex-doc/flex3jp_documentation/langref /var/www/flex-doc/langref
#index 作成
$estcmd gather -cl -il ja -bc -sd -cm /var/www/hyperestraier/flex3langref /var/www/flex-doc/langref
ちなみに同じところに置いたのは conf のパスをかえたりするのがめんどくさかっただけという理由w
flex3 => flex3.2 だし別にいっかなとw
estseek.cgi にアクセスすると無事に検索することができました。
めでたしめでたし。
ちなみにこんな感じで検索することができます。
AutoPagerize に対応してくれているのが便利です。

階層
.
|-- data.xml
|-- Test.as
Test.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| package {
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.events.Event;
public class Test extends Sprite {
private var XML_URL:String = "http://example.com/data.xml";
public var loader:URLLoader = null;
public function Test() {
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, onXMLLoaded);
loader.load(new URLRequest(XML_URL));
}
private function onXMLLoaded(e:Event):void {
trace(loader.data);
}
}
} |
実行コマンド
これで http://localhost:3001/ にアクセスすると XML を読み込む swf が表示される。
で、ここからが問題。
URLLoader を使って外部リソースの読み込みを行う際に XML_URL を相対パスで指定すると
loader.data の中身が SWF を埋めこんでる HTML になります。
<html>
<head>
<title>Rascut</title>
<style>
* {
margin:0;
padding:0;
}
#content {
text-align:center;
}
</style>
<script type="text/javascript" src="/js/swfobject.js"></script>
<script type="text/javascript">
var Rascut = new Object;
Rascut.xhr = (function() {
if (typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
} else {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
})();
Rascut.reloadObserver = function() {
var x = Rascut.xhr;
x.open('GET', '/reload?' + (new Date()).getTime(), true);
x.onreadystatechange = function() {
try {
if (x.readyState == 4) {
if (x.status == 200 && Number(x.responseText) == 1) {
// thanks os0x!
so.attributes.swf = so.attributes.swf + '+';
so.write('content');
Rascut.reloadObserver();
} else {
setTimeout(Rascut.reloadObserver, 5000);
}
}
} catch(e) {
setTimeout(Rascut.reloadObserver, 5000);
}
}
x.send(null);
}
Rascut.swf = function() {
return document.getElementById('idswf');
}
Rascut.reloadObserver();
</script>
</head>
<body>
<div id="content"></div>
<script type="text/javascript">
var so = new SWFObject("/swf/Test.swf?" + (new Date()).getTime(), "idswf", "100%", "100%", '9', '');;
window.onload = function() {
so.addVariable('rascut', 'true');
so.write("content");
}
</script>
</body>
</html>
原因は簡単で、相対パスで指定すると HTTP ベースなので
http://localhost:3001/data.xml を取得しにいきます。
直接アドレスバーで叩くとわかりますけど http://localhost:3001 に
アクセスした時の HTML が返ってきます。
で、考えた対策
(1). XML_URL を file://〜 で指定
(2). localhost に apache(web server) をたててそこにアクセス(レンタルサーバとかでもおk)
(3). グローバルセキュリティの設定を許可(*)して data.xml にアクセスできるようにし flash player で起動
の3通り。
それぞれ試した結果
(1) はセキュリティサンドボックスのエラーが出て厳しそう。
(追うのがめんどくさくなったw おそらく securityLevel 周りをいじればいけそう)
(2) これはすぐにできた。一番、無難そう。
ただ別ドメインに置く場合は crossdomain.xml をドキュメントルートに
置いておかないとロードすることができないので注意。
(ちなみに flash player 10 で 9 の時と変わってたので、
少し結構はまりました。crossdomain については後々まとめるつもり。)
(3) てっとり早いけど、rascut の恩恵が少なくなる。
確認のために毎回起動するってめんどくさい。
というわけで、(2) と (3) を満たすように変更してみた。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| package {
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.events.Event;
import org.libspark.utils.Dumper;
public class Test extends Sprite {
+ private var XML_URL:String = "data.xml";
public var loader:URLLoader = null;
public function Test() {
loader = new URLLoader();
+ var host:String = '';
+ if (this.root.loaderInfo.parameters.rascut)
+ host = 'http://example.com/';
loader.addEventListener(Event.COMPLETE, onXMLLoaded);
+ loader.load(new URLRequest(host + XML_URL));
}
private function onXMLLoaded(e:Event):void {
trace(loader.data);
}
}
} |
変更した場所は + をつけてます。
これで少しは快適に読み込みできるようになったかな。
3001 ポートでそのままリソースにアクセスできればベストなんだけどな〜
そのうちコード見てみることにする。
ちなみに設置した crossdomain.xml はこんな感じ。
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*"/>
</cross-domain-policy>
site-control を追加しないと flash player 10 だと下記のようなエラーがでて読み込めないので注意
警告 : ドメイン cdn.slideshare.net にはメタポリシーが指定されていません。デフォルトのメタポリシー 'master-only' を適用しますが、この設定は推奨されていません。こ
の問題の解決方法については、http://www.adobe.com/go/strict_policy_files_jp を参照してください。
(*)グローバルセキュリティの設定でセキュリティを緩和したいファイル or ディレクトリを追加すれば OK
HDD 入れ替えで /Library とかをいれなおしたために trace 出力や flashswitcher が
動かなくなってることに気づいた。
このくそ忙しい中に環境作りなおすはめに。
覚えてないんで無駄にハマった。。。orz
もぉはまりたくないので memo を残しとくことに。
ちなみに環境は Mac OS 10.5 です。
mm.cfg に設定を書いて trace がファイル出力されるようになる。
設置場所は /Library/Application\ Support/Macromedia/,
/Users/[username]/ のどちらでも確認はとれた。
mm.cfg の内容
1
2
| ErrorReportingEnable=1
TraceOutputFileEnable=1 |
1
2
| PolicyFileLog=1
PolicyFileLogAppend=1 |
これをいれてしまうと動かない。
それでダダはまり。
flashswitcher は前記事を参照<mac で flashswitcher を使う時の注意点>
HDD いれかえた後にシステムいれなおしたのがあだとなった。
あと mac だと Flex Builder のプロファイラが動かないっぽい。
プロファイラがないとパフォチュで凄い不便すぎる。
何か良いのないかなぁ〜
参考資料
MacでFlashPlayer9のTraceが出力されない問題解決 その2
Flash Player 9,0,115,0 で mm.cfg の位置が変わってますよー (Mac)
デバッガ版の Flash Player の構成
InputSwitcher
これは何かというと各アプリケーション間の入力ソースを各自のアプリケーションで
管理するようにする SIMBLE プラグイン。
簡単な例をあげると「QuickSilver(lancher)」で英語で検索していて
「firefox」で日本語検索をし、再び QuickSilver を呼び出した際に日本語で入力。
そして固まる(たまに)。
というサイクルから逃れられるようになる。
QuickSilver の方で入力ソースを変更しない限り大丈夫というわけ。
最近 QuickSilver の再起動率が無駄に高かったので非常に助かる。
あと Terminal とか使ってる時も便利。
日本語うつことなんてほぼないからうざかった。
ちなみに Apple にバグレポートを送り次期 OS に取り組んでもらおうという動きがあるので
便利だと思った人は送ればいいと思う。むしろ OS レベルで解決しててほしいなと。
[バグレポートを送る]
ただ英語ってのが痛いが、InputSwitcher の HP が英語表示に変えれるので
それを参考に(まるぱくりだけど、、、)して送った。
なんでもそーだけど使いやすく便利になるのはいいことだ。
あけましておめでとうございます。
本年も宜しくお願い致します。
というわけで新年一発目の記事として HDD 交換したことをかきます。
HDD が 100G だと足りなくなってきたので交換してみました。
最近の HDD がとても安くてびっくりした。
3.5 inch とか 1.5TB で1万ちょいとか。。。。
そのうちファイルサーバをたてようと真剣に思った。(今回は金ないんでパス)
ハードディスク・HDD(2.5インチ) ランキング(価格コム)
ハードディスク・HDD(3.5インチ) ランキング(価格コム)
用意しとくもの
の3つが必要。
データの移行
まず最初に交換用 HDD のフォーマットを行います。
外付けすると自動で認識するので
「アプリケーション」->「ユーティリティ」->「ディスクユーティリティ」を選択。
詳しくはここを参考にするとよいかも。
唯一、注意しないといけないのがパーティション作成時のオプションがGUID形式にしないといけません。


データの移行をする時に交換用 HDD にフルバックアップをとります。
その際に使用したソフトが carbon copy cloner。
いつもお世話になっている「Macの手書き説明書」さんの情報を元に使用。


これで無事におしまいと思わせといて、こいつが時間かかる。
110G くらいで 40 時間くらいかかりました。長かったです。。。。
なので時間がある時にするのが吉。
あとは HDD を入れ替えて起動して無事起動しておしまい。
と思いきやアプリケーションがちゃんと動かず。。。。orz
速攻でクラッシュして強制終了
仕方なしに OS だけをいれなおすと見事復活。
あと、 交換して起動するとmdworkerという謎のプロセスが走るのは
spotlight のインデックスを作成するためなので放置しておくとそのうち消える。