425

2005年10月3日 プログラム
[やな9さんとのメッセ]

ネットワーク関連の話をいろいろと。
FTPでサーバに繋ごうとしているのですが、ログインはできるものの、
Listコマンドが効いていない模様でアクセスできず。
----------------------------
ホスト ***.***.**.jp を探しています.
ホスト ***.***.**.jp (**.**.**.** (21)) に接続しています.
接続しました.
220 Microsoft FTP Service
>USER ****
331 Password required for ******.
>PASS [xxxxxx]
230 User **** logged in.
>CWD /
250 CWD command successful.
>XPWD
257 "/" is current directory.
>TYPE A
200 Type set to A.
>PASV
227 Entering Passive Mode (**,**,**,**,**,**).
ダウンロードのためにホスト **.**.**.** (**) に接続しています.
接続できません.(425 Can’t open data connection)
ファイル一覧の取得を中止しました.
ファイル一覧の取得に失敗しました.

今いち原因不明。困ったねぇ。

[それはそうと]

いくつかのコマンドの話で盛り上がってたんですが、
ためしにいろいろイメージ検索してみると結構面白い結果が。
tracert
http://images.google.co.jp/images?q=tracert

みんな考えることは同じなんだなぁと納得してみたり。
[ネットで予約]

といっても、結構目新しい予約。
病院の順番予約
http://japan.internet.com/busnews/20051003/3.html
これは便利だなぁ。
メインターゲットがモバイルが使える今の50台位まで落ちてきたら、
なおさらいいんではないだろうか?

[PASV]

昨日の続き。
FTPでの通信には大きく分けて2つのモードがある。

・PORTモード
・PASVモード

FTPは制御用のTCPセッションとデータ転送用のTCPセッションの2種類を使用する。
このうち制御用のTCPセッションに関しては、どちらも同じ処理を行っていて、
FTPサーバ側のポート21番にクライアント側から接続し、この接続はftp通信を終了するまで保持される。
(クライアント側のポート番号は、環境依存)

一方でデータ転送用セッションは、通常FTPサーバ側のポート番号が20で、FTPサーバ側から接続される。
この場合、クライアント側のポートを指定するのに2種類の手段がある。
それが前述の2つのモードのこと。
激しく時間がないので、この辺りの説明がとっても分かりやすかったので転載。
FTP通信の基礎
http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/ftp-passive-mode.html

んでPASV環境の最大の問題点は、NATルータ環境での公開が難しいということ。
ルータによって対応していないことも多いので、
使用するサーバ環境によってはPASVモードでの公開ができなくなることまである。
NATルータ環境の問題点
http://www.aconus.com/~oyaji/router/pasv.htm

今回はおそらくこのケースで、PASVモードでの通信をあきらめればうまく行った模様。
わたし自身ではftpサーバを管理した経験がなかったので、参考になりました。
ちょっとした資料のまとめは、、また後日。
[loadVarsの使い方]

外部のデータを取り込んだり、外部にデータを出力するために、
フラッシュは様々な方法を提供しているけれども、
その中のひとつに『loadVarsクラス』って言う物がある。
非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0303007.html

フラッシュMX2004からサポートされるようになったこのクラス。
MX時代もあったけれどもクラス化されたことで非常に便利になった。
外部から読み込んだ文字列を、直接変数名でアクセスできることもあって、
MovieClip.loadVariableでやってた時よりも、大分分かりやすくなっている。
ポイントになるのは、変数名1=データ1&変数名2=データ2という形に
加工されたファイルを読み込んだときのみ、loadVars.onLoadイベント内で、
this.変数名という書式でデータ1にアクセスできるという点。

で、今回はこれを使ってDBの検索・更新などの処理するという話。

[環境]

お金がないので、もちろんColdFusionも無ければ、 Flash Communication Serverもない。
そんな貧相な環境で、FlashとDBとの連携をやることが今回のテーマなので、
環境もそれに応じたものを用意。

DB:MySQL(Windows)
HTTPServer:Apache(PHPモジュール入り。Windows)

ちなみにPEARDBも入っていないというオチ付き。さすがにやりすぎかも。
環境構築は、いろいろなところで紹介されているので省略。
同様にDBとのハンドリングをする知識に関しては、ここでは省略。
今回はPHPでアクセスしますが、サーバサイド言語ならcgiでもjavaでもなんでもいけます。

[データ]

Table : meibo
┌─┬──┐
│ID│Name│
├─┼──┤
│01│Azsa│
│02│Nina│
└─┴──┘
あっさりと。

[やること]

いわゆる基本処理ということで、
『(1)検索、(2)登録』の2本立てで。

[データの取得と検索]

loadVarsクラスの引数に指定するパスは、何もテキストファイルでなくても良い。
動的にテキストを出力してやれば良いことになる。手順としては、以下のような感じ。

(1)【Flash】DBにアクセスするサーバサイドプログラムを呼ぶ。

//エンコーディングをUTF-8からOS依存のコードにする。
System.useCodepage = true;
var my_lv:LoadVars = new LoadVars();
//ロードしたら呼び出される
my_lv.onLoad = function(success:Boolean) {
if (success) {
//ロード成功時の記述

//trace(my_lv.name);

} else {
//ロード失敗時の記述
}
};
my_lv.load("http://hoge.hoge.com/load.php";;);


(2)【PHP】データベースからデータを取得

『Select * from meibo;』の結果セットを配列で確保するイメージ。
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){
$data[] = $line;
}
という感じで。

(3)【PHP】送信用文字列の形成

ようは、loadVarsで読み込める形に整形してしまえばいいわけですなんですが・・。
先ほども出てきたとおり、loadVarsは標準のMIME形式 application/x-www-form-urlencoded、
つまり変数名1=データ1&変数名2=データ2の形でしか読めないということで、
同一の列のデータを別の変数名になるように加工してやらないといけない。
今回の場合なら、
『$strOut = id0=01&name0=Azsa&id1=02&name1=Nina&cnt=2』という感じ。
今後の処理を考えて変数名の後ろに連番をつけておくのが無難。
また、最後にデータの数をつけておくと処理が楽。
この辺りが力技なので、ミスが無いにチェックしないといけない。

(4)【PHP】送信用文字列の出力

PHPなら、echo $strOut;。これで、やっとFlash側での処理に。

(5)【Flash】Flash側で受け取ったデータを加工する。

あとは、データの加工処理。
for(var i:Number = 0;i < my_lv.cnt;i++){
//trace(eval("this.my_lv.name" + i));
}

これで複数件の検索ができたことになる。
非常に人力に頼る部分が多くて、大変ですな・・・。

この辺りで上に。

AS2→AS3

2005年10月6日 プログラム
[次期フラッシュプレーヤー]

AS3搭載のFlashPlayer8.5
http://pcweb.mycom.co.jp/news/2005/10/07/101.html

世の中の移りは早いっつーか、正直あまりにも早すぎて楽しくなってきますな。
ECMAScript仕様に遵守したAS3。さらにはFlex2も同時に発表になった。
2006年夏までにどこまで大きく変わるのか。
とにかくこれからもリッチクライアントの世界からは目を離すわけには行かない。
追いかけていくだけでなく、発信できるような立場になれるように、
がんばっていきたいですな。
[参考]
ECMAScript入門
http://www.axis.t.u-tokyo.ac.jp/~shunak/ecmascript/
ECMAスクリプトとは?
http://www2.airnet.ne.jp/sardine/langs/ECMAScript.html

月天

2005年10月7日 日常
[おいしかったですね]

某プロジェクトの企画書の作成後、
べーみやさんとAlphonseさんと以前から約束していた飲み会へ。
なぜかこの面子で飲もうという時に僕が極端に忙しい展開になることが多かったので、
かなり楽しみにしていた。
月天
http://www.gattenn.jp/index.html

以下なんとなく箇条書き。

『あなたの愛する家族のために(無事故)』のあまりの甘さに悶絶し、
さっそうとグレープフルーツビアを頼み始める私。
ちなみに前日は徹夜で今日は控えるはずだったのですが・・。

恋みくじを破壊するAlphonse氏。
それを見て固まる私とべーみやさん。

『たこ焼きで運試し』はべーみやさんが引きました。
辛い痛いのは四川で十分です。

楽しいひと時でした。

[その後]

定番のように、豊橋に流れ着く私。
あるある。
[主にフォーカス関係]

フラッシュとフォーカスについてのメモ。

【コンポーネントのフォーカススタイルの変更】


mx.styles.StyleManager

http://www.macromedia.com/support/documentation/jp/flex/1_5/asdocs_jp/mx/styles/StyleManager.html
http://www.macromedia.com/jp/devnet/flash/articles/component_architecture_06.html

【ムービークリップとフォーカス関係】


MovieClip.focusEnabled フォーカスを受け取るためにムービークリップを有効にするブール値。
MovieClip._focusrect フォーカスがあるムービークリップを黄色の矩形で囲むかどうかを示すブール値。

MovieClip.onKeyDown フォーカスがあるときにキーを押したとき。
MovieClip.onKeyUp フォーカスがあるときにキーを離したとき。
MovieClip.onKillFocus ムービークリップからフォーカスを移動したとき。
MovieClip.onSetFocus ムービークリップにフォーカスが入ったとき。

【フラッシュプレーヤー8とネットワーク経由Flashの仕様変更】

http://www.macromedia.com/jp/devnet/flash/articles/fp8_security.html

GALZOOアイランド

2005年10月11日 日常
[オープニング発表されてますね]

かえるシリーズを始めアリスソフトの中に脈々と受け継がれてきたモンスターに、
フィーチャーしたのが、この作品。
今日デモがアップされた。
アリスソフト
http://www.alicesoft.com/

例年であれば間違いなく買うだろうこのソフトなのだが、
今回ばかりはしばらく置いてから買うことになる予定。
発売の頃はおそらく血を吐くほどの忙しさなのが目に見えるのが原因。
2月ごろやるかなぁ。

DVD-ROM アリスソフト 2005/12/09 ¥8,925

[ということで]

冬コミは欠席9割欠席です。
残りの1割は、うっかり売り子、某マイメロサイトの中の人の陰謀のどちらかのみ。
(きっと中の人も忙しいでしょうから、うっかりの方がまだ高いか。)

sato.mさんへ

2005年10月12日 MTG関係
[臨時に秘密]

お力になれる見込みは薄いですけども。
秘密を見てください。

印刷トラブル

2005年10月13日 日常
[原因は相当ささいなこと]

問題

17時ごろ。とあるワードの文章を印刷しようとした、私。
印刷することのできるプリンタはネットワークプリンタではなく、ローカルなプリンタのみ。
そんな環境のマシンが3台あったので、とりあえず普通に印刷してみた所、
リンク部分(例:ttp://www.hogehoge.com)以外
白紙で印刷されて出てきた。

なにかのトラブルだと思いマシン整備チームを呼び試してみるも、
同様の結果になった。
それどころか違うマシンでも、そんな風に印刷されてしまったのだ。
30分位して、結局相当ささいなしかもありえなさすぎる事実が発覚し、
解決した。どんなことだったでしょう。
(答えはずっと下。)























答え

3台とも黒インクが切れていた。

もうね。気づいたときにはどうしようかと。
単純なことだけにまったく疑っておりませんでした。
確かに残量警告が表示されていましたが印刷できなくなると、
通常インク切れの警告が出てくるはずとタカを括っていたのが大きなミス。
非常に欝になりながらも、その後の作業を続けたのでした。
[本題の前に]

1週間程前に書いた記事の続き。

前回はDBからデータをロードして、フラッシュで表示することを考えた。
(前回:http://diarynote.jp/d/38557/20051005.html

その後、特殊文字の扱いに関する情報提供をいただきました。
ここに付記しておきます。ありがとうございます。
特殊文字はエスケープ
http://www.macromedia.com/jp/support/flash/ts/documents/fl0100.html


[データの送信と登録]

今回は、フラッシュからデータを送信してDBに登録してみようと思う。

データの送信には、データのロードと同様にloadVarsクラスの中にある、
sendAndLoadメソッドを利用する。
サーバ側にデータを送信し、その結果を受け取ることのできるメソッドで、
フラッシュから外部にデータを送信する際に用いられる。
LoadVars.sendAndLoad()
Player
Flash Player 6。Flash Player 7 では動作が変更されています。

シンタックス
my_lv.sendAndLoad(url:String, targetObject[, method:String]) : Boolean

パラメータ
url ストリング; 変数のアップロード先の URL。
targetObject LoadVars; ダウンロードされた変数が入るLoadVars オブジェクト。
method ストリング; HTTP プロトコルの GET メソッドまたはPOST メソッド。

戻り値
ブール値。
(AS仕様書より抜粋)


ここで、ちょっとした注意点を2点程。
(1)POST送信の制限
http://www.macromedia.com/jp/support/flash/ts/documents/fl0252.html

フラッシュ単体(html上になく単独での動作)の場合、POST動作はサポートされていない。
データ送信の容量制限はサーバ側の設定に依存する形になるので、注意。
(2)laodvars.sendメソッドの不具合
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=790&;;forum=7

sendで処理を行っても、データの処理を行えないことが起こることがある。
実際私もそうなってしまうので、sendAndLoadメソッドを使用して、
サーバ側からデータを出力しない方法で処理を行うことにした。

これを踏まえて、実際の処理の過程を書くと以下のようになる。

(1)【Flash】LoadVarsオブジェクトにサーバ系言語に渡すデータを設定する。
var send_lv:LoadVars = new LoadVars();
var result_lv:LoadVars = new LoadVars();
send_lv.id = "03";
send_lv.name = "Baloth";

loadイベントで受け取るときと同様に、変数を列挙していけばいい。
サーバ側からのデータを受け取るLoadVarsオブジェクトは、作成するだけで、
処理を行わないことも多いので、スコープを調節して書くこと。処理の負荷軽減につながる。

(2)【Flash】LoadVarsオブジェクトからデータを送る。
send_lv.sendAndLoad("http://hoge.hoge.php";;, result_lv, "POST");


ここは、型どおり。

(3)【PHP】フラッシュから送られてきたデータを受け取ってDBに格納。

この部分の処理は割愛。
$_REQUEST[’id’]というような感じで受け取り、SQL文を発行するなり、なんなりと。

(4)【PHP】フラッシュに完了したことを伝える。

$echo "$result_str=ok";
とでも出力すればよい。
この部分の処理は場合によっては省略しても良く、
実際にフラッシュでデータを受け取る部分は割愛する。

登録する部分は特に問題もなくできますな。loadVarsの取り扱いに関しは以上で終了です。

王者たるもの

2005年10月15日 日常
[正々堂々受けて欲しいもんだ]

逃げの1手
http://headlines.yahoo.co.jp/hl?a=20051014-00000016-yom-soci

指さなければ、負けないの理論。
日本らしいといえばそうなのかもしれないけどね。

[正々堂々と言えば]

これもそうなのかもね。
松中に敬遠
http://sportsnavi.yahoo.co.jp/baseball/npb/05season/column/200510/at00006348.html

ストーブリーグのが、色々盛んな野球界。
まぁ、作戦かもしれないけども。明日投げられるのかなぁ・・。

[まぁ、思うに]

抗議文
http://news.www.infoseek.co.jp/topics/business/media.html?d=15mainichiF1016m065&;cat=2&typ=t

ファンからを声援を弾き飛ばしているような気がするのですけどね。
XMLConnectorとDataBinding(1)
[コンポーネントの使い方]

前回の記事からXMLのロードに関することを色々調べていたのですが、
どうにもうまくいきません・・。
非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0311001.html

テスト環境で、試してはいるのですが・・。どうしたものやら。
そもそもDataBindingの資料がとっても少ないのが、なんとも。

[仕方ないので]

自力でやることに。

【用意したXML】
ダイアリーノートにはタグはかけない
http://keepers.web.infoseek.co.jp/cgi-bin/flash/sample.xml

【読み込み方】

流れは以下のとおり。

(1)XMLファイルをロードする。
var mainXML:XML = new XML();//XMLオブジェクトを作る
mainXML.onLoad = XMLLoaded;//イベントハンドラ指定
mainXML.load("sample.xml");//xmlファイルを読み込む

XMLファイルをロードするのは、XMLオブジェクト。
この時に、読み込み完了時のイベントハンドラを定義しておくこと。
データの編集はデータの読み込み完了後に行うため。

(2)XMLデータから、ノードを取り出す。

//XMLの全データをロード(rootNodeもXMLNodeオブジェクト)
var rootNode:XMLNode = new XMLNode();
//ルート直下のノードを配列の形で取り出す
//(中身はXMLNodeオブジェクト)
var elementNodes:Array = new Array();
//XMLロード完了時に呼び出されるメソッド
function XMLLoaded() {
    //XMLのルート(全データ)を取り出す(rootNodeもXMLNodeオブジェクト)
    rootNode = mainXML.firstChild;
    //ルートの直下のノードを配列の形で取り出す
    elementNodes = rootNode.childNodes;
    //順に表示
    //配列の中身に格納されているのは、XMLNodeオブジェクト
    for(var j = 0;j < elementNodes.length;j++)
    {
        trace(elementNodes[j].attributes.id);
        trace(elementNodes[j].attributes.country);
        trace(elementNodes[j].childNodes[0].firstChild);
        trace(elementNodes[j].childNodes[1].firstChild);
    }
}

各ノードを処理するのが、XMLNodeクラス。
XMLNode.childNodesで、そのノードの子ノード群を読み込むことができる。
ノードの内部の値を取り出すには、属性の値を取り出す形にするか、
子ノードの中を深くたどっていくかのどちらかの方法をとることになる。
こうやってアクセスしてみると、属性に設定したほうが感覚的にアクセスできそうな感じ。

とりあえず、サンプル的なものができた。
(仮
http://keepers.web.infoseek.co.jp/cgi-bin/flash/xml_dom_test.swf


【その他のポイント】

肝になるのは、下記の3点を、メインアクション中に追加すること。

・XML.prototype.ignoreWhite = true;

改行やタグを空白として読ませない。
改行やタグを有効にすることで、XMLファイルの記述が楽に。

・System.useCodepage = true;

Flash内部の処理を行う文字コードをShift-Jisに変更することで、
日本語での外部ファイルの読み込みを可能にする。
(通常はUTF-8で読まれる。)
余談ではあるが、
最近UTF-8で書いたXMLをActiveXで操作しようとしたことがあり、
その際に、と宣言しているのに、
UTF-8で保存していたことから、表示できないといわれて死に掛けた記憶が。

・XMLの読み込み完了後でないと、データの編集はできないこと。

onLoadイベントハンドラ内にデータの編集を記述すること。
これをしないで、フレームのロード時にデータを編集するメソッドを発行しても、
フレームのロードと同期が取られていないので、データを利用することができない。

ということで、微妙に続く。

(参考)非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0509002.html


[余談]

配列を書いてみたら、[アイ(Iのこと)]の部分が斜体のタグに変換されて驚いた。
ダイアリーノートの変わった仕様ですな。

忍者どこじゃ

2005年10月23日 MTG関係
[県別選手権]

愛知県にいる間に出られそうな最後のMTGの大会に出てまいりました。
この規模の大会に出るのですら、ほぼ2年ぶり。遠ざかってますね・・・。

デッキはDimirMagicで。
体力と時間の都合上、簡易更新です。

○GBアリーナ

《鼠の短牙/Nezumi Shortfang(CHK)》と《惑乱の死霊/Hypnotic Specter(9ED)》が
メインに詰まれたビートダウン。
1本目を除去の山で落とすも、2・3本目は2枚ずつで止まったため、
《鬼の下僕、墨目/Ink-Eyes, Servant of Oni(BOK)》まで繋がって勝ち。

×ケチ(G-RENさん)

本日のハイライト(インド君風)。

1本目は、《忌まわしい笑い/Hideous Laughter(CHK)》、《化膿/Putrefy(RAV)》で除去されたところで、
《静風の日暮/Higure, the Still Wind(BOK)》がボードに登場。
ここで、間違えて日暮を確保しなかったことで、3枚目の《化膿/Putrefy(RAV)》で切られて、
最後は《鬼の下僕、墨目/Ink-Eyes, Servant of Oni(BOK)》も除去られて負け。
2本目は、こっちがランド事故。
けちに闘えるようにはしてきたんだけどなぁ。

○GBビート

相手:十手
こっち:十手
こっち;《鬼の下僕、墨目/Ink-Eyes, Servant of Oni(BOK)》

○ケチ

1本目を事故で落とすも、2・3本目は押し切って勝ち。

○《早摘み/Early Harvest(MI)》バーン(猫めでの方)

2本とも事故気味だったのが助かりました。
本来であれば、ほぼ五分程度のマッチアップです。

○ヤソコン(猫めでの方)

《呪師の弟子/Jushi Apprentice(CHK)》が相手のシャッフル中に見える。
1本目はランド事故で即投了。
2本目は非常にいい勝負。
《静風の日暮/Higure, the Still Wind(BOK)》の返しで通った、
《巻物の君、あざみ/Azami, Lady of Scrolls(CHK)》が動き出すぎりぎりのところで、
殴りきって勝ち。
3本目は相手のランド事故。

×GBビート

1本目は、マリガンの選択ミス、2本目は、マリガンを見切れて勝ち。
3本目が経験値の足らなかった部分。
《ネクラタル/Nekrataal(9ED)》できられてしまうのだから、
早めに十手をつけてビートし切ってしまうべきだった。

で、結果9位で幕はもらえず。
最終戦のサイドミスとG-RENさんとの1本目でのミスが痛かったです。
この辺は実践から離れすぎているところが響いている感じ・・。
思っている以上にいい感覚だったので、もうしばらく使う予定。
とはいえ、この後使える時間があるかなぁ・・。

なにはともあれ、久しぶりにマジックを充実させていただきました。
G-RENさん優勝おめでとうございます。

終了後は、インド君、yyy君らと食事。
yyy君と同じ年齢と見られたことに、気分を良くしてみたり。

デッキはhttp://diarynote.jp/d/38557/20051024.htmlにあります。

忍者レシピ

2005年10月24日 MTG関係
[つけ忘れ]

[DimirMagic 1.10]

メイン(61)

4《ディミーアの浸透者/Dimir Infiltrator(RAV)》
4《羽ばたき飛行機械/Ornithopter(9ED)》
3《鬼火/Will-o’-the-Wisp(9ED)》
2《残虐の手/Hand of Cruelty(SOK)》
1《鼠の墓荒らし/Nezumi Graverobber(CHK)》
4《深き刻の忍者/Ninja of the Deep Hours(BOK)》
3《静風の日暮/Higure, the Still Wind(BOK)》
3《大牙の衆の忍び/Okiba-Gang Shinobi(BOK)》
1《鬼の下僕、墨目/Ink-Eyes, Servant of Oni(BOK)》

4《最後の喘ぎ/Last Gasp(RAV)》
3《マナ漏出/Mana Leak(9ED)》
3《梅澤の十手/Umezawa’s Jitte(BOK)》
1《ブーメラン/Boomerang(9ED)》
1《不快な群れ/Sickening Shoal(BOK)》

8《沼/Swamp(RAV)》
6《島/Island(RAV)》
4《湿った墓/Watery Grave(RAV)》
4《地底の大河/Underground River(9ED)》
1《水辺の学舎、水面院/Minamo, School at Water’s Edge(CHK)》
1《死の溜まる地、死蔵/Shizo, Death’s Storehouse(CHK)》

サイド

3《疑念の影/Shadow of Doubt(RAV)》
2《ディミーアのドッペルゲンガー/Dimir Doppelganger(RAV)》
2《真髄の針/Pithing Needle(SOK)》
3《処刑/Execute(9ED)》
3《ネクラタル/Nekrataal(9ED)》
1《ブーメラン/Boomerang(9ED)》
1《鼠の墓荒らし/Nezumi Graverobber(CHK)》

今思うと何箇所か怪しい部分も。
事前の調整で、最後に《静風の日暮/Higure, the Still Wind(BOK)》を足した分、
多少デッキがゆがんでます。
ビート系のデッキとのスパー絶対量が足らないのですが(特に白赤系列)、
サイドをもう少し整理しないときついですね。
そんな感じでした。

(レポはhttp://diarynote.jp/d/38557/20051023.htmlにあります。)

I believe

2005年10月26日 日常
[うわーん]

信じてたのに。信じてたのに・・。
今日は不貞寝ですよ。

お気に入り日記の更新

最新のコメント

日記内を検索