2009年12月22日火曜日

opensocial-actionscript-client を試してみた

mixiアプリ用に、いい感じにユーザ情報を取得してくれるAPIはないものかと探しまわって、opensocial-actionscript-clientというライブラリが見つかったので、試してみました。とはいえ、まだまだ頻繁に更新が入っていて、実用に耐える代物になるのかはよく分からないので、ほんとに試してみただけ。

ライブラリは、Google Code のページDownloads にありますが、12月18日(金)の時には、一部ファイルの中身が空っぽだったりと、不完全なものだったので、直接 Source から、SVNでダウンロードしました。


ファイルを取得できたら、src/org/ 以下を適切な場所に移動してあげてください。

JsWrapperClient クラスが、Externalinterface でもってJSとのやり取りをするんだと思います。このクラスを初期化して準備が完了するまで、利用することができない様子。

package {
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.text.TextField;
    
    import org.opensocial.client.base.Person;
    import org.opensocial.client.core.Feature;
    import org.opensocial.client.core.OpenSocialClientEvent;
    import org.opensocial.client.features.AsyncDataRequest;
    import org.opensocial.client.features.PeopleRequestOptions;
    import org.opensocial.client.features.ResponseItemEvent;
    import org.opensocial.client.jswrapper.JsWrapperClient;
    
    [SWF(width=210, height=130, backgroundColor=0xaaaaaa, frameRate=30)]
    
    public class Main extends Sprite
    {
        
        private var _client:JsWrapperClient;
        
        public function Main()
        {
            // ラッパークライアントの初期化とスタート
            // 完了してからリクエスト処理へ
            _client = new JsWrapperClient('opensocial.flash');
            _client.addEventListener(OpenSocialClientEvent.CLIENT_READY, 
                function(e:OpenSocialClientEvent):void {
                    _client.removeEventListener(OpenSocialClientEvent.CLIENT_READY, arguments.callee); 
                    request();
                }
            );
            _client.start();
        }
        
        private function request():void 
        {
            // リクエストオプションインスタンスを作成する
            var options:PeopleRequestOptions = new PeopleRequestOptions()
                                                    .setUserId('@me')
                                                    .setGroupId('@self');
            
            // 非同期データリクエストインスタンスを作成する
            var req:AsyncDataRequest = new AsyncDataRequest(Feature.PEOPLE_GET, options);
            
            // 完了時のイベントリスナーを追加する
            req.addEventListener(ResponseItemEvent.COMPLETE, 
                function(e:ResponseItemEvent):void {
                    req.removeEventListener(ResponseItemEvent.COMPLETE, arguments.callee);
                    
                    // 結果表示用
                    var loader:Loader = new Loader();
                    loader.x = loader.y = 5;
                    addChild(loader);
                    
                    var tf:TextField = new TextField();
                    tf.width = tf.height = 90;
                    tf.x = 100; tf.y = 10;
                    addChild(tf);
                    
                    // 取得したデータを取り出す
                    var person:Person = e.response.getData();
                    
                    // ニックネームを取得
                    var displayName:String = person.getDisplayName();
                    tf.appendText(displayName + "\n");
                    
                    // サムネイル画像を取得
                    try {
                        var urlRec:URLRequest = new URLRequest(person.getThumbnailUrl());
                        loader.load(urlRec);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
                            function(event:Event):void {
                                trace('load complete');
                            }
                        );
                    } catch (e:Error) {
                        throw Error('load error');
                    }
                    
                }
            );
            
            // 呼び出しを行う
            req.send(_client);
        }
        
    }
}


本当に単純に表示だけ。

必要な機能があるかどうかは、Docs とにらめっこしないといけないです。そもそもどういう機能が必要なんだろう...。

2009年12月16日水曜日

ルパンはとんでもないものを盗んでいきました

くそーかっこいいな。

BAYONETTAのブログパーツにも似たようなのがありましたけど、この手のパーツは迫力あっていいなぁ。

参考サイト
SPECIAL BLOGPARTS スペシャルブログパーツ
BAYONETTA - ベヨブログ

2009年12月10日木曜日

Google Chrome で 1Password (little) を使う

いよいよ Google Chrome が Mac でも利用できるようになりました。まだ Extension は利用できないですが、すぐにできるようになるんでしょう(きっと)。で、Mac で Google Chrome を利用するとして、外す事ができないだろう Extension に、1Password があります。Google Chrome について、1Password 公式ブログでは、(一時的な)Bad News だとして、「まだまだ Google Chrome にはたくさんの変更が加えられるから、ウチみたいな小さなソフト屋はそこにマンパワーを避けないんだよ」としています(英訳適当)。そこで Good News として、Bookmarklet を作成する方法、little 1Password を紹介していました。


まずは 1Password を起動。左下の New Logins Bookmarklet を選択します。ダイアログが出てくるので、Continue をクリックします。


全てを含むか、選択されたフォルダだけ含むかを選択して、Update Now ボタンをクリックすると、Safari のブックマークに作成されます。


ブックマークから、ブックマークバーに、作成した Bookmarklet を移動します。現在の Google Chrome は、ブックマークバーのブックマークしか、インポートしてくれないそうです。


公式では、Google Chrome を初めて起動したときのインポートの紹介をしていましたが、私は既にGoogle Chrome を起動済みだったので、メニューバーの [Chrome] - [ブックマークの設定とインポート]からインポートを行いました。


以上で、無事 Bookmarklet として、1Password を利用する事ができるようになりました。

Mac で Extension が使えるようになって、そこそこ充実してきたら、乗り換えてもいいかな。windows での使用は中々だったので、楽しみです。

参考サイト
Tip: Get a little 1Password 3 in Google Chrome now (Opera too!)

文字入力中に iPhone のアプリが落ちるようになった

大変肝を冷やしました。

事の発端は出勤時、Evernote でテキストを入力していると、突然 iPhone が落ちて、リンゴマークが出てきました。かなりびっくりしたけど、しばらくすると再起動し、問題なく動き始めました。その後しばらく機嫌良く動いてくれていたけど、帰宅途中に Appigo Todo を利用していると、今度はアプリだけが落ちた!続いて Evernote やメモ帳などを使用してみても落ちる!どうも日本語入力を使用として、変換候補が出るタイミングで落ちるらしい。

仕方がないので、帰宅後 iPhone を復元し、バックアップでもって元に戻した。その後、問題の日本語入力を使用としたところ、変換候補として「□□□□□□□□□□□□□□□□□□□」なんてのが出てきた(スクリーンショットを残しておいたらよかった)。やめればいいのに好奇心に勝てず、その候補をクリックした瞬間、またアプリが落ちた!どうも変換候補に変なものが紛れ込んでいるようだけど、復元したのに残ってるようなのをどうやって消すんだと探してみたら、普通にあった。

設定 -> 一般 -> リセット -> キーボードの変換学習をリセット

でもって、リセットを行ってあげると、問題なく動作する事になりました。あせったー。

複数の swf を利用するときに気を付けたいこと

やっぱり忘れてやってしまうので、メモ。

複数の swf を読み込んで表示する場合、それぞれの swf の中に同じ名前のクラスが存在すると、一番最初に読み込んだクラスが優先されます。

都度全パブリッシュをしていれば問題ないのですが、開発中などは面倒なので、部分的にパブリッシュしてテストすると思いますが、「あれ?適用されてないぞ。なんだなんだ?」といって、余計に時間がかかってしまったりもします。

複数の swf を利用していて、単純な修正が適用されていなかったりした場合、まずは疑ってみるべきでしょう。

2009年12月4日金曜日

Google日本語入力がおもしろい

涙目?のジャストシステムを尻目に、さっそうと現れたGoogle日本語入力が、その豊富な語彙と強力すぎるサジェスト機能でもって、なかなかに笑わせてくれます。

入力: それで
候補: それでも
それでもボクはやってない

映画のタイトル。未だに電車に乗れなくなりそうで、怖くて観られない。

入力: そくした
候補: 即した
即死耐性

ゲームか何かっぽい。デスとかムドとか?

入力: どうして
候補: どうしても
どうして君を好きになってしまったんだろう

「東方神起」の曲だそうな。

入力: よって
候補: よってけポポラ

これは予想できなかったw山形県東根市にある、JAさくらんぼひがしねファーマーズマーケットの「よってけポポラ」という物産店だそうで。こんなことがなかったら知る由もないだろうなw

入力し終えた内容によって、候補が変わってくるようなので、常に同じ候補が出てくるわけではないけど、予想外の候補がなかなか面白いです。

2009年11月15日日曜日

VMware Fusion 3 上で command + Space で入力切り替えできるようにする

Snow Leopard にて VMware Fusion 3 をインストール、 Windows XP を利用しようとした際、command +Space でローマ字入力と英字入力を切り替えようとするために、色々と手間がかかったので、備忘録がてらメモ。

USキーボードを正しく認識しない

利用している MacBook は USキーボードなので、VMware に Windows XP をインストールした後、デバイスマネージャを開いたら、「101/102 英語キーボードまたはMicrosoft Natural PS/2 キーボード」を割り当てられていたんだけど、なぜか正常に認識されない。@が入力できない。なぜだ〜。

レジストリいじってみようかと思っていたけど、「PC/AT エンハンス PS/2 キーボード(101/102 キー)」というドライバに変えればいいらしい。このあたりをキーワードにググったら、親切なサイトが出てくるので、詳しくは割愛。要約すると、「ドライバを更新」ウィザードにて、「互換性のあるハードウェアの中から、さっきのドライバを選択する。色々警告は出るけど、無視してOK。再起動後に適用されます。

参考サイト
VMware FusionでUSキーボード

キーマップを変更してあげる

VMware Fusion 2 以降は、キーマップを設定できるようになっていて、それを設定することで、command + Space を入力切り替えに割り当てられるらしい。参考サイトを見ると、移動先のキー入力欄に「半角」と出るそうだけど、ウチの環境では出なかった。VMware のバージョンの違いか、他に起因するかは不明。ただ、これをした時点では、正常に切り替えてくれなかった。

参考サイト
VMware Fusion 2 で日本語入力切り替えが楽に

「スクリプト切り替え」を消す

Snow Leopard からある機能で、「スクリプト切り替え」なるものがあるらしい。command + Space で入力切り替えを行う際、command キーを押したままにすると、視角的に切り替えを表示してくれる。最初これの存在をしらなかったので、VMware の機能かと思ったんだけど、どうやらSnow Leopard の機能らしい。参考サイトに詳しく乗っているけど、おおむね以下の通り。

  • [システム環境設定] - [キーボード] - [キーボードショートカット] を開く
  • 「前の入力ソースを選択」と、「入力メニューのソースを選択」を切り替えてあげる
  • [システム環境設定] - [言語とテキスト] - [入力ソース]を開く
  • 「ひらがな」と「英字」のみが選択されている状態にする

参考サイト
[Snow Leopard]⌘+スペースで入力切り替えする際に表示される「スクリプト切り替え」を消す方法 その2

これをすることで、先ほどのキーマップ変更が活きてくるようになりました。ふ〜。

2009年11月11日水曜日

This Is It 観てきました

遅ればせながら観てきました。そしたら思い出したよ。自分はマイケルが大好きだったんだ。

小学生の頃、Beet It や Human Nature、Bad とかをカセットで聴いてた。Heal The World に素直に感動してた。今は亡きベータで Thriller を観たときは、やたらと怖がってた憶えがある。

時は流れて、いつしか彼の歌にあまり触れなくなってからは、彼のスキャンダラスな話題にだけ触れる様になり、変な人だな~なんて思う様になっていた。何て残念なやつだろうと我ながら思ったりする。今更だけど。

そのリズムと歌声は、僕の耳に焼き付いてた。This Is It で流れた曲は、ほとんど聞きなれた曲ばかりだったし、自分のツボに入りやすい雰囲気の根っこは、彼のメロディーがあるのかなと思ったりもした。

何にせよ映画は最高だった。疲れてヘロヘロになるくらい、変に力が入った。それくらい引き込まれた。完成されていたらどんなステージになっていたんだろうと思うと、残念でならないけど。彼の死が、再び彼の曲を聴くようになるきっかけになったのは悲しいことだけど、きっとそんな人もいっぱいいるんじゃないかな。

2週間延長されるそうなんで、まだの人はゼヒ。

2009年11月9日月曜日

息子が育つ事、社員が育つ事

うちの息子は洗濯物を干します。干すと言っても、私がハンガーにかけた服を、物干竿にかけるだけ。でも、いま彼のできる範囲で、できる事をしています。

いつごろかたやり始めたかは覚えていませんが、洗濯物を干すときに、服を物干竿にそのまま掛けようとするので、せっかく洗った服を落としてしまったりしていました。そこで、服をかけたハンガーを与え、かけ方とかける場所を教えると、ちゃんと干せる様になりました。今では、「これを干して」と言えば、自分の遊びを中断して手伝ってくれます。

ここには、やってみたいと言う彼の意思を汲み取り、彼のできる範囲を考え、方法を教え、お膳立てを私が与えた事で、生まれた結果があります。いますぐこの事が私達の利益になる事はありませんが、こう言う事の積み重ねが、いつか私達にとって必要な事につながって行くと思います。

息子の仕事っぷりを見ながら、なるほど教育ってのはこういうことかなと思いました。そして、社員教育というのも、きっと同じだとも。

リーダーが足りない、マネージャーが足りないと良く言われますが、それらを育てる環境が、今の業界内にどれだけ存在するのでしょう。「本人のやる気」は、その環境の中の一つでしかありません。うちの息子も、やり方を教えてあげないと、無意味なことを繰り返すだけで、そのことが私をイライラさせてしまうでしょう(本人はどちらにしても遊んでいるだけですがw)。

やる気を汲み取り、できる範囲の仕事を任せ、足りないことをフォローする。それができて教育であり、会社に利益を生むことが出来る人材を育てることになると思います。それはきっと、子供を育てることも、社員を育てることも、一緒だと思うのです。

だからどうだってところは、自分にとって必要なところだけフォロー。

2009年10月29日木曜日

Your Web Application Project must be configured to use a JDK in order to use JSPs.

Google App Engine に JSP を追加したときに発生しました。下記サイトを参考に解決できました。Eclipse を日本語化していない方のために。

  1. [window]-[preferences]-[Java]を選択
  2. Installed JREs 画面で、[Add]をクリック
  3. Standard VM を選択して次へ
  4. JRE home: のところで、インストールしているJDKのホームディレクトリを選択
  5. 含まれているライブラリを表示してくれるので、Finish
  6. プロジェクトの [properties]-[Java Bulid Path] をクリック
  7. Livraries タブを選択し、Add Livrary をクリック
  8. JRE System Library を選択し次へ
  9. Alternate JRE: のラジオボタンをチェックし、先ほど追加したJDKを選択しFinish
  10. コンパイルが実行されて、完了
参考サイト

2009年10月27日火曜日

Jumsoft Money for iPhone にアップデートが来ました

Jumsoft Money for iPhone の ver 1.1.1 が公開されていました。
内容は、同期のバグフィックス、予算の改善、レポートの改善、収支表示の改善など。

また、合わせて、Mac 版も、3.4.4 にアップデートされていました。
こちらも iPhone との同期のバグフィックス、QFX インポートの改善、その他細かいバグフィックスと改善だそうです。for iPhone を先にアップデートした場合、Mac 版をアップデートするまで、iPhone を認識してくれなくなります。

とりあえずアップデートまで。動作の確認は後ほど...

Google App Engine の開発環境を作る

Eclipse に Google App Engine Plugin をインストール

  1. Eclipse.org で、Eclipse IDE for Java EE Developer をダウンロード。
  2. 任意のフォルダに解凍して実行。
  3. [Help] - [Install New Software]
  4. Work with: に http://dl.google.com/eclipse/plugin/3.5 と入力(コピペじゃダメ?)。
  5. Plugin と SDKs にチェックを入れて、Next をクリック。
  6. 同意(I accept the terms of the license agreements)して、Finish!

プロジェクトを作成

  1. メニューにある g のアイコンか、[File] - [New] - [Web Application Project] をクリック。
  2. Project : と、Package : をそれぞれ入力。
  3. Finish!

アプリケーション領域の確保

  1. http://appengine.google.com/にアクセスして、Create an Application をクリック。
  2. Application Identifier: を入力。これが .appspot.com のサブドメインになる。
  3. Application Title: を入力。
  4. Save をクリックして完了。

サービスの公開

  1. Eclipse プロジェクトを右クリックし、Properties を開く。
  2. [Google] - [App Engine] を開き、ApplicationID に先ほど入力した Application Identifier を入力する。
  3. OK で決定。
  4. プロジェクトを右クリックして、Google > Deploy to App Engine をクリック。
  5. Google App Engine に登録した、E-Mail と password を入力する。
  6. Deploy!
環境
  • Eclipse 3.5 (IDE for Java EE Developers)

Eclipse 3.5 Galileo の Java EE Developers が正常に起動しなかった

いくつかそういうケースがあるらしく、なやんだんですが、ウチの環境の場合、

  1. JDK をインストールしなおし(JDK 6 Update 16 にした)。
  2. eclipse.ini ファイルから、-showsplash org.eclipse.platform の記述を削除。

したらいけました。それらがどういう意味を持つかは、よくわからないけど、動いたからいいよね!

2009年10月26日月曜日

ねんがんの iPhone3GSをてにいれたぞ!

1週間まえくらいの話ですが、iPhone3GSを手に入れました。我が家は夫婦揃ってSOFTBANKを利用してるのですが、嫁さんの携帯をiPhone3GSに機種変して、俺のiPhone3GとSIMだけ変更し、まんまとiPhone3GSを入手する運びとなりました。ヒャッハー。

1週間使ってみた感想ですが、素晴らしく動作速度が向上してます。画面表示や切り替え、入力がストレスなく行える事は、何より大事だと再認識しました。確かにiPhone3GはSにて完成したと言っても、過言では無いと誰かが言ってた気がするけど、なるほど正しい。

一部アプリの起動や、動作もいい感じに。一層使いやすくなりました。ゲームはスムーズになりすぎて、動きについていけなかったりも。塊がうまく転がせなくなりました。元々ですかそうですか。

あとあまり気にしていなかった動画撮影。意外にこれが楽しくて、事あるごとに、たっ君の動画を撮影してます。写真でとるより面白いし、容量も気にせず撮影しまくれるところがいいです。トリミング機能は使ってないですが。

いやぁ何というか、嫁ゴメン。きっと次のiPhoneが来年出るだろうから、その時はこの3GSが、君のものになるから!

2009年10月22日木曜日

Jumsoft Money の iPhone との同期に難あり?

iPhone版と Mac版とを別々に変更して同期を行った場合、うまくマージできないようです。

レコードが消えてしまった
Macで入力したデータが消えて、iPhone で入力したデータに、Macで入力した別レコードのコメントだけが入っていました。レコードを入力した順番としては、Macの方が早かったはずなので、上書きされてしまったということでしょうか。
Category が (null) となってしまったレコードがある
データを修正しようとしても、正常に変更できなくなっていました。データの整合性が崩れてしまっている様子。新しいレコードを追加しました。

一番期待していた機能がうまく動作してくれないのは、非常に残念。しばらくは慎重に Sync を行いつつ、他のソフトへの乗り換えも考えようかな...。でも39$したしなぁ。

2009年10月21日水曜日

swf ファイルをキャッシュさせたくない

レア中のレアケースのために、いっぱい悩まないといけないのが、この仕事の醍醐味だと自分に言い聞かせて。

swfファイルはをリクエストする際に、パラメータとして時間を付加する方法がありますが、swfファイルがそれなりの容量があったり、他のswfファイルをロードするようなコンテンツだと、毎度毎度キャッシュがたまっていって、あまりユーザにとってよくないんだろうなと考えました。

で、色々考えた末、サーバ側で対応してもらう手立てはないものかと探してみたところ、IISでは以下のように設定すれば、ローカルにキャッシュファイルがまったく生成されませんでした。

IIS マネージャでの設定

  1. [webサイト] - [規定のWebサイト] - [サイト] - [キャッシュさせたくないフォルダ or ファイル]のプロパティを開く
  2. 「HTTP ヘッダー」タブを開く
  3. 「コンテンツの有効期限を設定する」にチェック
  4. 「直ちに有効期限を切る」を選択
  5. OK or 適用

HTML ファイルにキャッシュしない META タグを仕込んでも、そのHTMLファイルに対してしか適用されないので、結局リクエスト対象のファイル単位で設定しないとどうにもならないようですね。画像ファイルとかでもこの設定は活きてくると思います。打倒なのかどうかわかりませんが、望むべき形にはなりました。これでいけるかな~

環境
  • windows server 2003
  • インターネットサービスマネージャ ver 6.0

2009年10月19日月曜日

外部Webページにリンクを張る

flash.net パッケージnavigateToURL()関数でいけます。"_self"や"_blank"などを利用して、HTMLで記述するときと同じようにウィンドウを指定することが可能。

ただし、ローカル環境でブラウザ上で実行しようとすると、Flash Player のセキュリティに引っ掛かります。グローバルセキュリティ設定で、実行しようとする swf が含まれるフォルダをに対して許可を与えてあげる必要があります。

var url:String = 'http://www.yahoo.co.jp/';
var window:String = '_blank';
navigateToURL(new URLRequest(url), window);

どうでもいいけど、普段 Yahoo! を全くと言っていいほど利用しないのに、仮に書くリンクは Google じゃなくて Yahoo! なのかは、自分でもよくわからないところ。

2009年10月16日金曜日

海遊館に行ってきた

近場で悪かったな!

近くを通る事になったので、海遊館に行ってきました。随分久しぶりに行ったけど、中々の混雑振りにびっくりしました。3連休の始めやったからかな?動物にタッチ出来るコーナーがあったけど、たいした事無かったです。エイのヌルヌル具合は気持ち悪くてよかったけど。

最近ペンギンの赤ちゃんが生まれたそうだけど、既に毛が生え変わっていて、サイズも大人と同じくらいだったから、少し遅すぎたらしい。別の場所に居たとか?

たっ君は途中で飽きちゃつたみたい。最初は食い入るように見てたんだけどな。


2009年10月14日水曜日

Eclipse で ActionScript3.0 開発環境を作る

windows なら FlashDevelop 一択なんだけど、Mac だとこれと言った開発環境がない(Flex Builder 3.0 はとりあえずおいておいて)。ので、Eclipse でできる限りそろえたい。そろえたいところとしてはとりあえず、

  • ActionScript3.0 (&MXML) のコンパイル、実行環境
  • コード保管

あたりがあれば。とりあえずデバッグ環境は後回しで。

AXDT

コンパイル環境、MXML のコード保管、Flex Designview(未使用)など、一通りの MXML 開発環境を整えてくれる。ここまで入ってて、なぜ ActionScript 3.0 のコード保管がない!

  1. お好きな Eclipse をダウンロード
    ココではEclipse IDE for Java Developersとあります。
    PDT とかをDLしてすぐだとインストールできませんでした。
  2. ヘルプ->ソフトウェア更新
  3. サイトの追加(この順番でないと怒られた)
    • http://eclipse-imp.sourceforge.net/updates
    • http://update.axdt.org/
  4. Eclipse を再起動

で、問題なく動きました。Flex3 SDK が必要かどうかは、元々インストール済みだったのでよくわかりません。Eclipse プラットフォームプラグインについてを見ていたら、Flex3 SDK がどうのというのがあったので、多分大丈夫なんだと思います。なにげに Flex4 SDK も入っているご様子。

試した環境
  • Eclipse 3.5.1(Eclipse IDE for Java Developers)
  • AXDT 0.0.2

2009年10月9日金曜日

Jumsoft Money の iPhone 同期バグが直ったらしい?

Money 3.4: Sync with iPhone and More for Your Delight

iPhone との同期が何よりうれしい Jumsoft Money ですが、PPC Mac との同期が正常に行われないバグがありました。マニュアル通りに、4桁の数字を入力しても Sync ボタンがどこにも表れない...。何でだなんでだとググってみると、上記公式ブログのエントリーでは同じような症状の方々がいっぱい。Apple の承認待ち状態という話になってから、中々 App Store に並ばず、いつかいつかと待ちわびてました。

やっとこれで勝つる!(家に帰らないと同期できんわけだけどね!)

2009年10月7日水曜日

Jumsoft Money は、複数ユーザで利用できない

http://www.jumsoft.com/support/#money

4. Can I set up more than one user in Money?
No, currently Money allows only one user profile, but we plan to expand this option in the future.

っていう意味だよね?
嫁と共有したかったのに、運用方法考えないと。将来っていつだろう...

2009年10月5日月曜日

Tween が上手く動かなかった

すっきり書きたいなと下みたいに書いたら、動かなかった。

package 
{
    public class TweenTest
    {
        
        private var tweenHolder:Array = new Array();
        
        public function TweenTest() 
        {
            addEventListener(Event.ADDED_TO_STAGE, 
                function(e:Event):void {
                    removeEventListener(Event.ADDED_TO_STAGE, arguments.callee);
                    tweenHolder.push(new Tween(this, "alpha", None.easeIn, 0, 1, 10));
                }
            );
        }
        
    }

}

外に出したら動いた。

package 
{
    public class TweenTest
    {
        
        private var tweenHolder:Array = new Array();
        
        public function TweenTest() 
        {
            addEventListener(Event.ADDED_TO_STAGE, 
                function(e:Event):void {
                    removeEventListener(Event.ADDED_TO_STAGE, arguments.callee);
                    runTween();
                }
            );
        }
        
        private function runTween():void {
            tweenHolder.push(new Tween(this, "alpha", None.easeIn, 0, 1, 10));
        }
        
    }

}

原因は後で調べる。
無名関数のスコープが考慮できてなかった。便利だけど気をつけないと。
我ながら情けないミスだけど、戒め戒め。

2009年10月4日日曜日

ハーベストの丘に行ってきた

新しい車に乗り替えると、何かと理由付けて外に出たくなるよね!ってな訳で、ハーベストの丘に行ってきた。 30分程度で行けます。近い。

滞在時間は3時間程度だったけど、クタクタになるまで遊びました。敷地は結構広く、散歩してるだけでも結構楽しめます。ウサギやヤギ、ラマなどとふれあえたり、アーチェリーや芝滑り、ゴーカートやミニSLなど、色々と遊具施設がありました。あと、時間が中途半端で食べられなかったけど、自家製ソーセージを使ったホットドックは食べたかったなぁ。アイスクリームはおいしかったです。

たっ君が全然怖じけ付かず、動物と戯れてたのが印象的。もっとビビりと思ってたけどな。

2009年9月30日水曜日

-keep-generated-actionscript

MXMLファイルは、SWFにコンパイルする際、ActionScriptのクラスにコンバートされます。Flexプロジェクトのコンパイラ引数に、-keep-generated-actionscriptオプションを追加してあげることで、その内容を確認することができます。

Flexプロジェクトを選択して、プロパティ > Flexコンパイラ > 追加コンパイラ引数 に、-keep-generated-actionscript=true を追加してください。

コンパイル実行時に、 generated というフォルダが、ソースフォルダ以下に生成され、そこに ActionScript のファイルがあります。

mxml と ActionScript を分離する

ファイル構成

src
│  Sandbox.mxml
└─sandbox
        Sandbox.as

MXMLファイル

Sandbox.mxml は以下の通り。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    xmlns:sandbox="sandbox.*">
    <sandbox:Sandbox id="sandbox" />
</mx:Application>

ASファイル

Sandbox.as は以下の通り。

package sandbox{
  
    import mx.core.IMXMLObject;
    import mx.events.FlexEvent;
    
    public class Sandbox implements IMXMLObject {
        
        private var view:Object;
        
        public function initialized(document:Object, id:String):void {
            view = document as Object;
            view.addEventListener(FlexEvent.CREATION_COMPLETE, 
                function (event:FlexEvent):void {
                    // ページ作成完了時の処理を記述
                }
            );
        }
        
    }
}

フィーリングで書いててもコード保管してくれるエディタは大好き。

source-path で見つかったファイルのパッケージ構造 'aaa' は、定義のパッケージ 'bbb' と同じである必要があります。

原因
利用しようとしてるクラスファイルのパッケージ定義が、パスと一致していなかった。

document 以下のTABキーを無効化

header タグ以下に追加。

<script language="javascript" type="text/javascript">
window.onload = function() {
    document.onkeydown = function() {
        if(event.keyCode == 9) { return false; }
    }
}
</script>

2009年9月29日火曜日

Mac OSX のコンピュータ名を変更

システム環境設定の共有パネルに、コンピュータ名を編集する項目が。

2009年9月28日月曜日

ありがとうジーノ よろしくアクセラ

ミラジーノはアクセラにクラスチェンジした。
排気量が大幅に上がった。
燃費効率が少し上昇した。
3ナンバーになった。
顔がいかつくなった。
車税が大幅に上がった。

上げればキリが無いですが、この度マツダアクセラに乗り替える運びとなりました。ジーノとはかれこれ9年もの付き合い。共に過ごした日々を思うと、別れるのが寂しいなぁと。まだ整 備されて中古販売されるそうなので、優しい里親に買われて、余生を過ごしてもらえたらなぁと。

いやぁ本当に色々あった。青春があったね。青年編でした。今度はアクセラに乗って中年編だ。いい思い出がれるといいなと。

2009年9月17日木曜日

クラス名を取得する

こんな感じでいけるかな?
flash.utils.getQualifiedClassName でもいいと思うけど。

function getClassName(obj:Object):String {
    return obj.constructor.toString().match(/^\[.+ (.+)\]$/)[1];
}

正規表現 メタ文字

特にActionScript用ってわけじゃないけど、自分用メモ。

.任意の1文字に一致する。
^文字列の先頭に一致する。
$文字列の最後に一致する。
*0回以上の繰り返しに一致。
+1回以上の繰り返しに一致。
?0回または1回の繰り返しに一致する。
|or
()グループ化する。
[]指定した文字のいずれかに一致する。
\メタ文字のエスケープ

2009年9月16日水曜日

swfファイルのキャッシュを防ぐ

swfファイルに時間などで作成した値を付加して、都度新しいファイルを参照させるとかもあるようだけど、公式的には(?)こういう風にしてねという事らしい。

SWF ファイルのキャッシュを防ぐ方法

ページ単位でキャッシュされなくなってしまうけど、それでも問題なければ、ユーザに余計なキャッシュを残さないためにも、こっちの手段をとったほうがいいんだろうな。

2009年9月10日木曜日

Flex Bulider ショートカットキー

エディタが変わるたびに困ります。

コメント

Ctrl + / 行コメント
Ctrl + Shift + C ブロックコメント
Ctrl + Shift + D CDATA

エディタ

Ctrl + Alt + ↓行複製
Ctrl + D行削除
Ctrl + L指定行へジャンプ
F3定義へ移動

実行

Ctrl + F11実行
F11デバッグ

2009年9月8日火曜日

Flash CS4 の『定数の構成』機能

Flash CS4 には、定数の構成という機能があるそうで、以下の場所で設定できます。

パブリッシュ設定 -> Flash -> スクリプト横の設定 -> 定数の構成

たとえば

名前
flamemo::Debug
true

何て設定しておいて

flamemo::Debug
{
    trace ("デバッグ大好き!");
}

と書いておけば、通りたくないときは、値を false にすればいいというわけです。
こりゃ便利だ。

ちなみに、Flex Builder 3 では、以下の場所で設定できます。

プロジェクトのプロパティ -> コンパイラ -> 追加コンパイラの引数

以下のように入力する。他の項目が入力されていれば、後ろに付け足せばO.K.

-define=flamemo::Debug,true

2009年9月4日金曜日

文字列操作

すぐ忘れるので。 単純な文字列置換
var msg:String = 'こんにちは、__name__さん!';
msg = msg.replace(/__name__/, 'ほげお');
trace(msg); // こんにちは、ほげおさん!

2009年9月1日火曜日

Firefox のアドオン WebDeveloper でCSS編集

最近めっきり CSS を触ることがなくなったんだけど、WebDevelper を追加した Firefox で、Ctrl + Shift + E で、CSS を編集できること知った。今更知った。 メニューからは、CSS -> CSSを編集するで開けます。 すげぇ便利。

2009年8月18日火曜日

配列を複製する

配列の内容をコピーしたいと思い、以下のように記述すると、参照している配列は同じなので、新しい配列(の参照)に記述した内容が、元の配列にも影響してしまう。

var arr1:Array = ['a','b','c','d','e'];
var arr2:Array = arr1;
trace('arr1 : ' + arr1.length); // arr1 : 5
trace('arr2 : ' + arr2.length); // arr2 : 5
arr2.shift();
trace('arr1 : ' + arr1.length); // arr1 : 4
trace('arr2 : ' + arr2.length); // arr2 : 4

Array クラスの slice 関数は、指定したインデックス間を抜き出して新しい配列を作ってくれる。インデックスを省略すると、開始から終了まで全ての値を抜き出してくれるので、これでOK。

var arr1:Array = ['a','b','c','d','e'];
var arr2:Array = arr1.slice();
trace('arr1 : ' + arr1.length); // arr1 : 5
trace('arr2 : ' + arr2.length); // arr2 : 5
arr2.shift();
trace('arr1 : ' + arr1.length); // arr1 : 5
trace('arr2 : ' + arr2.length); // arr2 : 4

イベントの解放は大事

インスタンスに追加したイベントは、そのインスタンスを参照する変数が別のインスタンスを参照するようになっても、しっかりその役割を果たし続ける。えらいえらい。 使い終わったらしっかり removeEventListener してあげるのが大事。
var tim:Timer;

tim = new Timer(1000,2);
tim.addEventListener(TimerEvent.TIMER, timerHandler1);
function timerHandler1(e:TimerEvent):void { trace('>>> timer1'); }
tim.start();

tim = new Timer(1000,2);
tim.addEventListener(TimerEvent.TIMER, timerHandler2);
function timerHandler2(e:TimerEvent):void { trace('>>> timer2'); }
tim.start();

// >>> timer1
// >>> timer2
// >>> timer1
// >>> timer2

コンテキストメニューの拡大とか縮小とかを非表示

var mc:MovieClip = new MovieClip();
var menu:ContextMenu = new ContextMenu();
menu.hideBuiltInItems();
mc.contextMenu = menu;

contextMenu は、InteractiveObject のプロパティだけども、同クラスを継承する Stage クラスでは、参照はできても設定はできないため(read-only)、IllegalOperationError がスローされます。ContextMenu のカスタマイズもできないことだし、もう Stage に DisplayObject を配置する理由はなくなった気がする。

一応、Stage クラスにて同様の効果を得たい場合は、showDefaultContextMenu を利用すればすっきり。

stage.showDefaultContextMenu = false;

2009年7月4日土曜日

ビット演算

var hoge = 0x652453;
var a:uint = ( hoge & 0xff0000 ) >> 16; // 0x65
var b:uint = ( hoge & 0x00ff00 ) >> 8;  // 0x24
var c:uint = ( hoge & 0x0000ff );  // 0x53

2009年7月1日水曜日

引数として関数を渡す

思いついて書いてみたらいけた。たぶん色々こうやって動いてるんだろう。 きっと引数も渡せるはず。 なるほど、コレは色々簡略化できそう。
function hoge():void {
 trace('hoge');
}
function fuga(xhoge:Function):void {
 xhoge();
}
fuga(hoge);

2009年6月30日火曜日

文字コードチェック

Flash の文字コードは UTF-8 で、以下のようにしたら文字のコードを見られる。
var msg:String = 'この文字列をコードで見てみる';
for (var i:uint = 0; i < msg.length; i++ ) {
 trace('msg [' + msg.charCodeAt(i).toString(16) + ']');
}

2009年6月22日月曜日

MySQL プロシージャ実行時に文字化けとか Incorrect string value とか

ブラウザの文字コード UTF-8

mysql> status
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

エラーがなく通るも、画面上で文字化け

mysql> charset utf8
mysql> status
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

プロシージャ実行中にエラー
ERROR 1366 (HY000): Incorrect string value: 'xxxxxxxxx' for column 'xxxxxxxx' at row xx

mysql> SET character_set_client = sjis;
mysql> status
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    sjis
Conn.  characterset:    latin1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

エラーなく通るも、画面上で文字化け

mysql> SET character_set_client = sjis;
mysql> SET character_set_connection = utf8;
mysql> status
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    sjis
Conn.  characterset:    utf8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

問題なく通る

2009年6月16日火曜日

クラス名を変数や文字列で指定してインスタンス化する

import flash.utils.getDefinitionByName;

var foo:Class   = getDefinitionByName('MyClass') as Class;
var myClass:MovieClip   = new foo();

2009年6月13日土曜日

XMLファイルの取り扱いについて

PHPやJavaなど、webサーバ側で簡潔するものなら気にならなかったんだけど、Flashの場合、XMLファイルを扱おうとすると、DocumentRoot 配下に設置せざるを得ないと思うんだけど、それだと、セキュリティ的に問題あり。 こういうときは皆さんどうしてるんでしょう。

2009年6月12日金曜日

addedToStageについて

http://www.harhid-labo.com/p1/index.php?Added-To-Stageイベント
ADDED_TO_STAGEイベントは、DisplayObject(またはそれ自体を含むツリー)がステージに追加されると、 DisplayObjectに対して送信されます

つまり、ドキュメントクラスにこのリスナーを登録した場合、自分自身がステージに追加されると、ドキュメントクラスに対して送信されるので、ステージが参照できるということ。

ドキュメントクラスはステージの子であるようなので、ステージには直接配置せず、ドキュメントクラスないし、その子のDisplayObjectに追加してあげるのが理想か。

ドキュメントクラスがステージに配置されるのは最初だけ。 ドキュメントクラスはステージオブジェクトの参照を持っておくほうが無難。 addToStage イベントが発行されるのは、リスナーを登録したクラスのコンストラクタが終わってから。

Loader クラスで他の swf を読み込んでも、 stage は共通。 Loader クラスで他の swf を読み込んだとき、読み込み元の DisplayObject がstage の子なら、Loader クラスインスタンスを DisplayObject に addChild() した時に、addToStage イベントが発行される(はず)。

Stage にはドキュメントクラスが子として配置されている。Stage 以下の DisplayObject を全て削除するということは、ドキュメントクラスのインスタンスも、削除されてしまう。

DisplayObject は、直接 Stage の子として扱わないほうがいい、と思う。たぶん。 配置する DisplayObject はあくまでドキュメントクラスの子として、もしくはそれが持つ DisplayObject の子として定義するのが自然だと、今の段階の私は思った。

2009年6月8日月曜日

LocalConnection で Object型 を send するときの罠

そういうものなのかはよくわからないけど。

LocalConnection はカスタムクラスを swf 間でやり取りできなくはないけど、インスタンスそのものではなく、プロパティしか送ることができない。AMF形式というものに圧縮されて送られるそうだけど、その詳細はまだよくわかりません。なので、public 型および、明示的な getter, setter だけが渡せるという話だったんだけど、そこで躓いた。

クラスのプロパティを private として定義するときは、当然 public アクセスしてほしくない値だからで、その値に getter と setter を両方用意することはナンセンスだと思ってた。なので、private なプロパティを含むカスタムクラスを LocalConnection で send するときも、当然 getter しか用意しなかった。そこに落とし穴があった。

setter のないプロパティは、send 先で取得することができない。おそらく、AMF形式とやらから解凍するとき(unserialize?)に、値をセットするんだろうけど、それができないんじゃないだろうか(要調査)。じゃあ public でいいじゃない?

ずいぶん時間をとられたけど、ひらめいたとき、これが答えであってほしいような、ほしくないような気持ちがなんとも気持ち悪い感じでした。

2009年6月3日水曜日

Loderクラスで読み込んだ swf のstage が null

Loader クラスを使用して読み込んだ swf で、stage を参照しようとすると null となる。なんとなくそういうものなんだと思っていたら、よくないのは、参照するタイミングだったらしい。 タイミングは、Event.ADDED_TO_STAGE というイベントで取得することができる。stage の初期化を取得するのかとも思ったけど、リファレンスを読んでると、どうも違う? 後々で調べてみよう。

AS3.0 クエリストリングの値を取得

http://flamemo.blogspot.com/xxxx.swf?id=hoge&pw=fuga とかのリクエストからクエリストリングの値を取得するには、loaderInfo.paramtersを参照。 DisplayObject が loaderInfoプロパティを持っています。
var id:String = loaderInfo.parameters['id'];
var pw:String = loaderInfo.parameters['pw'];
txtLog.text = 'id : ' + id + "\n" + 'pw : ' + pw;

2009年5月20日水曜日

C# キャストとか

int型 から文字列
String str = num.ToString();
文字列から型 int
int num = int.Parse(str);

2009年5月19日火曜日

MySQL で小数点以下を「切り捨て」する

TRUNCATE(n, m)
n -- 任意の数値 m -- 切捨てる小数点以下の桁数
mysql> SELECT TRUNCATE(1024.768, 0);
+-----------------------+
| truncate(1024.768, 0) |
+-----------------------+
|                  1024 |
+-----------------------+
1 row in set (0.02 sec)
Oracle 等の TRUNC()は、桁数を省略できるようだけど(0とみなされる)、MySQLではできない様子。

MySQLやってて で知ったこと

now() に数値をプラスすると、数値になる。
-- 普通
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-19 18:06:04 |
+---------------------+
1 row in set (0.00 sec)

-- 数値で
mysql> select now() + 0;
+-----------------------+
| now() + 0             |
+-----------------------+
| 20090519180657.000000 |
+-----------------------+
1 row in set (0.00 sec)

-- 明日
mysql> select now() + 1000000;
+-----------------------+
| now() + 1000000       |
+-----------------------+
| 20090520180610.000000 |
+-----------------------+
1 row in set (0.00 sec)
っていうか、色々数値を突っ込んでみると数値になる?
mysql> SELECT 0x61;
+------+
| 0x61 |
+------+
| a    |
+------+
1 row in set (0.00 sec)

mysql> SELECT 0x61 + 1;
+----------+
| 0x61 + 1 |
+----------+
|       98 |
+----------+
1 row in set (0.00 sec)

2009年5月18日月曜日

Tween が途中で止まってしまう

Tweenクラスを使っていると、途中でとまってしまうことがある。よくわからない現象だったんだけど、どうやら生成した Tween のインスタンスがガベージコレクションに掃除されてしまうのが問題らしい。 生成した Tween インスタンスは、そのままでも動いてくれるが、変数なり何なりに入れておかないと、すぐ掃除されてしまう様子。
new Tween(ball, 'x', Regular.easeOut, ball.x , 300, 100, false);
new Tween(ball, 'y', Regular.easeOut, ball.y , 100, 100, false);
でも、たとえば以下のように関数の中にローカル変数を定義して、そこに入れておいても、やっぱり掃除されてしまい、あまり状況は変わらない。
private function run():void 
{
    var t1:Tween = new Tween(ball, 'x', Regular.easeOut, ball , 300, 100, false);
    var t2:Tween = new Tween(ball, 'y', Regular.easeOut, ball , 100, 100, false);
}
それならばとメンバ変数として定義し、そこにインスタンスを入れてあげてみた。これなら、クラスが破棄されない限り、生きていてくれるだろう。
var t1:Tween;
var t2:Tween;
private function run():void 
{
    t1 = new Tween(ball, 'x', Regular.easeOut, ball.x , 300, 100, false);
    t2 = new Tween(ball, 'y', Regular.easeOut, ball.y , 100, 100, false);
}
こういうやり方が正しいのかはわからないし、他にもっとやるべきことはあるだろうけど。

2009年5月14日木曜日

Flash CS4 のコンポーネントで引っかかったところ

いつかはスッキリするんだと願って。 Q. 作ったコンポーネントを書き出しただけのはずなのに、コンポーネント内に設置したTextAreaやUIScrollbarなどが一緒に表示される。 A. ライブラリのシンボルのプロパティ、コンポーネント定義で「コンポーネントパネルに表示」にチェックが入っているのが原因。TextAreaやScrollPane等も同様にはずしてあげる必要がある(デフォルトでチェックが入っている様子)。ライブラリ内に含まれるすべてのコンポーネントが表示されるようになるので、書き出し対象以外の作成したコンポーネントも表示されてしまう。 何のための設定なんだろうか。 Q. コンポーネント定義をしても、ライブラリのアイコンが変わらない。 A. 先の「コンポーネントパネルに表示」にチェック。もしくはパラメータを追加すると変わる。ライブラリ上でアイコンが変わらなくても、SWCの書き出しを行えば、しっかりアイコンは変わる。 よくわからない... Q. コンポーネントインスペクタで設定した値が適用されない。 A. コンポーネントインスペクタで設定する値は、インスペクタがあるいずれかのパラメータを更新したときにのみ適用される。それらのパラメータは、内部で初期値を持っておかないといけない。

クラス名を変数で指定してインスタンスを作る

よく忘れるので。
var myClassName:String = 'MyClass';
var myClass:Class      = getDefinitionByName(myClassName) as Class;
var my                 = new myClass();

2009年5月8日金曜日

TextField へのフォーカス回避

TextField(TextArea等も)へフォーカスしないようにするのは、マウス操作不可だけでは不十分。Tabキーによるフォーカスも回避しなければならない。
// 自分自身用
mouseEnabled  = false;
tabEnabled    = false;

// 回避したいインスタンスを含むなら
mouseChildren = false;
tabChildren   = false;

2009年5月7日木曜日

getterメソッドとsetterメソッド

よく文法を忘れるのでメモ。
package 
{
    public class MyClass 
    {
        private var _itemName:String = "hoge";
        
        public function get itemName():String 
        {
            return _itemName;
        }
        
        public function set itemName(value:String):void
        {
            _itemName = value;
        }
    }
}
メソッド名とプロパティ名は一緒じゃダメ。こういうときに、privateなプロパティ名にアンダースコアをつけるの(何て言うんだったかな?)が便利だと思ってしまう。

2009年4月27日月曜日

ASP.NET C# と MySQL で 引数を指定するストアドプロシージャを使う


// DB接続
String param = "server=localhost;user id=my_user; password=1234; database=my_db; Pooling=false;";
MySqlConnection conn = new MySqlConnection(param);
conn.Open();

// プロシージャ名を指定した MySqlCommand インスタンスの生成
MySqlCommand cmd   = new MySqlCommand("my_proc1", conn);
cmd.CommandType    = CommandType.StoredProcedure;

// 入力パラメータの追加
MySqlParameter prm = new MySqlParameter("p_id", MySqlDbType.Int16);
prm.Direction      = ParameterDirection.Input;
prm.Value          = 10;
cmd.Parameters.Add(prm);

// 発行と内容取得
MySqlDataReader reader = cmd.ExecuteReader();
if (reader != null) {
    while (reader.Read()) {
        for (int i = 0; i < reader.FieldCount; i++) {
            Label1.Text += reader.GetName(i) + " : " + reader.GetValue(i) + "
"; } } reader.Close(); } conn.Close();

2009年4月24日金曜日

MySQL のセッションの調査と切断

-- セッションの表示
show processlist;

-- セッションの切断
kill [processId];

2009年4月23日木曜日

MySQL のストアドプロシージャ

MySQL のストアドプロシージャを利用するためのコマンド類。
-- 区切り文字を変更する
-- ※スクリプト中のセンテンスの終了に「;」を使用するため、変更する。
DELIMITER //

-- ストアドプロシージャの作成
CREATE PROCEDURE my_proc1()
BEGIN 
  SELECT my_id, my_name FROM my_table;
END
//

-- ストアドプロシージャの呼び出し
CALL my_proc1()
//

-- 戻り値つきストアドプロシージャ
CREATE PROCEDURE my_proc2(OUT param1 INT)
BEGIN
  SELECT COUNT(*) INTO param1 FROM my_table;
END
//

-- 戻り値つきストアドプロシージャの呼び出し
CALL my_proc2(@a)
//

-- 戻り値の確認
SELECT @a

-- 引数つきストアドプロシージャ
-- 文字列を結合する
CREATE PROCEDURE my_proc3(IN param1 VARCHAR(50), OUT param2 VARCHAR(50))
BEGIN 
  SELECT CONCAT('Hello, ', param1,'!') INTO param2;
END
//

-- 引数つきストアドプロシージャの呼び出し
CALL my_proc3('world', @a)
//

-- 作成したプロシージャの確認
SHOW PROCEDURE STATUS
//

-- 作成したプロシージャの内容確認
SHOW CREATE PROCEDURE my_proc1
//

-- 作成したプロシージャの削除
DROP PROCEDURE my_proc1
//


2009年4月22日水曜日

ASP.NET C# メモ

C# で URL 情報を取得する。 http://localhost:2792/hoge/Default.aspx の場合
// URIの絶対パス
// /shop/Default.aspx
Request.Url.AbsolutePath;

// 絶対URI
// http://localhost:2792/hoge/Default.aspx
Request.Url.AbsoluteUri;

// ホスト名(IPアドレス)とポート番号
// localhost:2792
Request.Url.Authority;

2009年4月20日月曜日

ASP.NET C# 動的なオブジェクトの設置

AS3.0 と同じ様にに書ける(AS3.0 がとすべきかな?)。 イベントの追加もできる。
protected System.Web.UI.WebControls.Button Button1;

protected void Page_Load(object sender, EventArgs e)
{
    Button1                    = new Button();
    Button1.ID                 = "Button1";
    Button1.Style["Position"]  = "Absolute";
    Button1.Style["Top"]       = "100px";
    Button1.Style["Left"]      = "100px";
    Button1.Style["Width"]     = "30px";
    Button1.Click             += new EventHandler(onClickButton);
    form1.Controls.Add(btn);
}

protected void onClickButton(object sender, EventArgs e)
{
    Button btnSender = (Button)sender;
    string strButtonID = btnSender.ID;
}
Width を指定してあげないとえらいことになりましたw

2009年4月17日金曜日

MySQL のセットアップ

ODBC の設定から CSE での接続まで。

環境

  • windowsXP SP3
  • MySQL 5.1
  • Connector/ODBC 5.1.5
  • Common SQL Environment 1.59

手順

ODBCの設定などは、公式サイトの手順通り、下記の順番で進めばでOK。

  1. 24.1.2.1. Connector/ODBC の入手方法
  2. MySQL Connector/ODBC 5.1 Downloads
    環境に合わせて。特に問題なければ Windows MSI Installer (x86) で。
  3. 24.1.2.3.1.1. インストーラを使用して Windows Connector/ODBC ドライバをインストールする
  4. 24.1.3.2.1. Windows での Connector/ODBC DSN の追加
    Data Source Name, Description は適当で。Server は書いてある通り。User, Password は有効なものを。

接続

CSE での接続。

  1. つみきWebさんからダウンロード。
  2. 適当な場所に解凍&実行。
  3. データベース->接続 を開く。
  4. DBMS: で ODBC汎用 を選択。
  5. データソース: で先ほど作った Data Source Name を選択。
  6. ユーザ名とパスワードは空にするとデフォルト値を適用。
  7. OK で接続。

※エラーが出るようなら、一度 windows を再起動。

MySql の基本的なコマンド

ログイン(PATHが通っている場合)

C:\> mysql -u my_user -p my_db;

データベース操作

-- データベースの確認
SHOW DATABASES;

-- データベースの作成
CREATE DATABASE my_db;

-- データベースを選択する
USE my_db;

ユーザ操作

-- SELECT、INSERT、UPDATE、DELETEができるユーザの追加
GRANT SELECT, INSERT, DELETE, UPDATE ON *.* TO my_user IDENTIFIED BY '1234';

-- 登録されているユーザを確認する。
SELECT Host, User, Password FROM mysql.user;

-- root のパスワードを変更する。
SET PASSWORD FOR root@localhost=PASSWORD('admin');

テーブル操作

-- DBに存在するテーブルを見る
SHOW TALBES;

テーブルを作成する

CREATE TABLE my_table ( 
      my_id INT NOT NULL AUTO_INCREMENT
    , my_name VARCHAR(255) NOT NULL DEFAULT 'hogeo'
    , PRIMARY KEY (my_id)
);

テーブル名の変更

ALTER TABLE my_table RENAME TO your_table;

2009年4月14日火曜日

stage と ドキュメントクラス

オブジェクトを addChild するときに、どっちを使ったものか悩ましい。

外部クラスに何らかのインスタンスを作成させて、addChild しようと思うんで、stage か ドキュメントクラスを渡してあげようとするんだけど、結果として表示上は同じように表示されるので、どちらを使った方がよりいいのかわからない。

違いがわかればいいんだけど、それらしい情報が見当たらないし...ん~。

とりあえず、任意のクラスを指定できるので、ドキュメントクラスを利用することにしてみます。

2009年4月10日金曜日

AS3 で Static

package {
public class StaticTest 
{
    public static function main():void 
    {
            trace('StaticTest.main');
    }
}
import StaticTest;
StaticTest.main();

2009年4月8日水曜日

TextField にマウスが反応して困った

MovieClip のインスタンスでボタンを作成しようとしたとき、MovieClip に含まれる TextFild のインスタンスに、マウスが反応してしまって困った。

var btnSampleIns:btnSample = new btnSample();
btnSampleIns.buttonMode    = true;
btnSampleIns.mouseChildren = false;

buttonMode プロパティを true とだけしても、マウスが反応してしまう。反応させないようにするなら mouseChildren プロパティを false にしないといけない。

リファレンスを見たら、

このプロパティは、SimpleButton クラスではなく、Sprite クラスのインスタンスを使用してボタンを作成するときに役立ちます。

どんぴしゃ。

MC以下のすべての Child を removeChild() したい

while(mc.numChildren > 0){
    mc.removeChildAt(0);
}

2009年1月28日水曜日

Flex3.0 SDK導入からサンプル起動まで

インストール概要

http://www.adobe.com/support/documentation/jp/flex/3/releasenotes_flex3_sdk.html

SDKダウンロード

http://www.adobe.com/products/flex/flexdownloads/#sdk

FlashPlayer のアンインストーラ

http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14157&sliceId=1

Flex 関係の情報

http://www.adobe.com/support/documentation/jp/flex/

手順

大まかな手順は以下のとおり ※詳しくはインストール概要を参照

  1. 既存のFlashPlayerをアンインストール
  2. SDKを入手(zip)
  3. 展開
  4. [sdk_home]/runtimes/player/ で必要なplayerをインストール(10で問題なし?)
  5. [sdk_home]/samples/explorer/ で build.bat を実行(win)
  6. [sdk_home]/samples/explorer/explorer.html をブラウザで開く