*PDRのキャンバスをスケール変換するスクリプト
ParaDrawのキャンバスを中身ごと小さくするのって意外と面倒.全選択して数値入力ツールで縮小してから,キャンバスの大きさを変えないといけない.さらに,縮小が選択範囲に対してなので,角にダミーの点とかを置いてやらないと,位置が変わってしまいます….
PDRの中を見たら,ただのテキストだったので,簡単にいじれそう.というわけで,スクリプト書いてざくっと変換.
#!/usr/bin/perl
$scale=0.1;
$ifile=$ARGV[0];
$ofile=$ARGV[0];
exit(0) if $ifile!~/\.pdr$/i;
$ofile=~s/\.pdr/_.pdr/i;
open(IN,"< $ifile");
open(OUT,"> $ofile");
$_=<IN>;
print OUT;
$_=<IN>;
s/^(\d+),(\d+)/"".int($1*$scale).",".int($2*$scale)/e;
print OUT;
while(<IN>) {
s/^(\d+),(\d+),(\d+)$/$1.",".int($2*$scale).",".int($3*$scale)/e;
print OUT;
}
close(IN);
close(OUT);
….本当はちゃんとした方法がありそうですが,とりあえず解決.
*マルチスレッド
ここ数日,原因がつかめないでいたバグがあったのですが,なんとか取れました.
同じSIDのクライアントから二重に接続があったときに,片方を切断するタイミングがまずくてMutexがデッドロックすることに気づいた.SIDはユニークなのですが,ブラウザのタブを複製して同時アクセスした場合に問題が起きます.その場では何も起きなくて,あとからおかしなことになるので,気づくのが遅れました.
ネットワークとマルチスレッドが絡むと面倒.
最近,FlashとかCGIとかWebプログラマっぽい(笑).電卓とバイナリエディタが起動しっぱなしなのは気のせい.
*Flash
TextFieldはscaleX=-1とかすると文字が消える.
あと,Event.targetはイベントリスナを登録したオブジェクトとは限らないのか.リファレンスにも書いてあったけど,クリックとかも実際にクリックされた子のオブジェクトが入ってる.
Perl用のOpenID2.0モジュールってどっかにあるかな?
http://code.sixapart.com/trac/openid/
とか後で試そう.
*ActionScript 変数のスコープ
ActionScriptの変数は静的なレキシカルスコープじゃない….分かっていたつもりだったけど,クロージャとか作ると躓きやすい.
forループのブロックの中などで宣言された変数を使ってクロージャを作成したりしても,変数はループが回る度に作られるわけではないので,意図した動作をしない.
for (var k:int=0;k<10;k++) {
var j:int=k;
f[k]=function():int{return j};
}
というようにクロージャを作って,たとえば f3 を呼んだ場合,返ってくるのは「3」ではなくて最後にjに代入した「9」になる.
for (var k:int=0;k<10;k++) {
f[k]=function(j:int):Function{
return function():int{return j};
}(k);
}
と書くのが正解.
*ActionScript ジオメトリ
flah.geom.Matrixで一通りの演算はできるのですが,常にマトリクスを左から掛けていくので,枝分かれした関節構造を持つオブジェクトの変形に苦労します.OpenGLみたいにスタックを用意して右から掛けてくれると便利なんだけど.
不動産屋さんに引越しの期日について電話.あとはガスかな.
研究室へ.修論ももう少し手を入れるか….他にもやることがいくつか.
*SWFをいじるツール
ParaDrawで作ったSWFが親のSWFの画面からはみ出たときに消えてしまうのを修正するプログラムをおいておきます.起動時にオプションに渡したswfファイルを修正します.ついでに,背景を削除して透過させるプログラムも同梱.
fixrect.zip
欲しい人がいればソースも公開します.
gazyu家で.マリオカートとか.
*SWF
ParaDrawで作ったSWFから,背景を削除して透過させるプログラムを書く.といっても,何も考えずに最初のタグを2つ消すだけですが.ParaDrawのSWFは数値の大きさを無視してビット数を決めてる箇所がいくつかあるので無駄が多そう.
あと,DefineShape時の矩形に値が入っていないので,画面から一部がはみ出たときに全部消えたり,変化があったときに正常に更新されなかったりします….
ParaDrawの作者の方に連絡とってみようかとも思ったけど,最近更新されてないみたいだし,どうしようか.とりあえず,修正するプログラムを作ってみるか.
最近,FlashのSWFファイルが読み書きできるようになってきてしまった….単純なFlashならバイナリエディタ作れそうです.
今日も近くに用事があったので,gotoのところに行ってみる.
今日は2回も人身事故とかで乗ろうとした新幹線が遅れた….
猫
gotoの家の近くを通りかかったので,100円ショップで豆を買って置いてくる.
*Flash…
読み込んだSWFをSpriteの上に表示しているのだけど,表示が更新されない….下のSprite自体に変更を加えると更新されるので,とりあえずそれで回避.
AS3ではgetURL()メソッドが無くなって,代わりにnavigateToURL()を使うのか.
*Flash開発…
AdobeからFlex SDKが無料でダウンロードできるのでがんばれば何でも作れますが,やっぱり絵を描くのは辛いものがあります.
そこでベクタ形式で絵が描けるParaDrawを使ってみましたが,結構良い感じ.SWF出力も出来るので,埋め込んで使ってます.
ただ,背景の透過が出来ない….他のSWFに読み込んで動かすときは背景があると困る.スクリプト側からマスクを設定することも考えましたが,SWFのフォーマットって公開されてるし解説サイトもあるなぁ….
ということでバイナリエディタの出番.ParaDrawで作ったSWFは描画コマンドが並んでるだけっぽいな.圧縮もされてないので,大丈夫そう.最初の,DefineShape3とPlaceObject2を消してやればよいのか.0x16~0x5?あたりまで.デバッグ中はサイズ書き換えるの面倒なので,0x2Cバイト目辺りから背景の塗りつぶし色なのを確認して,透明にしてしまう.
読んでて気づいたけど,無駄なビットが結構あるなぁ,全部削ればファイルサイズがそれなりに小さくなりそう.
www.openswf.orgがなくなってる….
…なんか間違ってる気がするが,気のせい
今日は長野に帰る.
gotoの会社を外から見た後,safiiの住居を確認して,gazyuのアパートを見に行く.
海谷先生から何かメール来ているかと思ったけどきてなかった.疲れたし今日は良いか….
今日はgotoのところに行って鍋です.1234567890も中で少し話題に出たな.
あと,来年住む場所をみんなで確認.今日は私のところとmeshiの会社と住居を確認.
*time=1234567890
明日か….
検索するとみんな明日が楽しみなのが伺えますね.
たぶん,その時間は寝てますが.
というか,明日は東京です.
1234567890=1234252117+3.6547800925925*86400
午後は研究室.K谷先生と話をしたり.そろそろ修論を….
*修論発表
朝から.
普段のゼミのノリでプレゼン作ってたら大幅に時間オーバー.発表にかかる時間は計っておくべきですね.
*サイト移転
旧サイトを閉鎖して,こちらだけにしました.古いコンテンツのいくつかは,移動する予定がありますが,無意味そうなものが多いのでこのままでも良さそう.
10年間で72万アクセスか….
こっちのサイトではトップページ以外もカウントしているけど,毎日500人くらいは来てるみたいですね….
アクセスは毎日2000くらいあるので,平均すると1人あたり4ページアクセスするのか….サーチエンジンのボットのせいでかなり多めになっている気がしますが.
六本木とか銀座とか,何していいかわからない.東急ハンズでもあればまだマシなのに…というわけで,新宿のハンズ行ったり.
来年住むところを確認.駅から微妙に遠い.あと,地下鉄難しい.個人的には東京駅とかもギリギリ徒歩圏内だな….建物は新しいし,眺めもよさそうだから良いかな.
ついでに,引越しの日程を決めて引越依頼書とやらも微妙に期限過ぎてたけど提出.
長野.
明日は修論の発表らしいので,準備を始める.
新宿でmasibonにばったり会った.会社説明会に来てたっぽい.暇だと言っていたけど,残念ながら私は忙しい……今日こそは撒かないといけないし.
なんかGoogle変わってる
渋谷で昼食,新宿で夕食,さらに品川にgotoを呼んで餃子……やっぱり東京って物価高いね….
*撒いてきた
豆
FeliCaで遊ぼうと某所でPaSoRiを買ったのだけど,箱を空けたら本体しか入ってない….あれ?シリアルナンバーを確認したけど,海外向けの製品か….
あと,キーボードとか,細々したものを買う.
現実逃避.とりあえず新幹線に乗ろう….
秋葉のUDXで夕食.gotoを呼び出して寿司を食う.なんだか言ってみたら奢ってくれた.
ホテルに豆を置いてきてしまったので某所に撒くのを失敗.
*ECMAScript for XML
ActionScript3でXMLを扱うためにECMAScript for XML (E4X)を使ったけど,凄く便利だ.FirefoxのJavaScriptでも使えるはずだけど,はじめて使いました.DOMとかXPathとかもういらない.