インスピリットで働くゆるーいプログラマが拾った情報をてきとーに放り込んでおくサイト。
2 月 24 2010

xmlの扱い

xmlファイルを読み込んで、読み込んだ要素の扱いについて。
といっても、要素の扱いについては、属性値を表示するだけ。
データを扱う際の書き方は、その都度調べればいぃってことでココでは触れず。


import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;

var myloader:URLLoader;
var myxml:XML;

// URLLoader作成
myloader = new URLLoader();
myloader.dataFormat = URLLoaderDataFormat.TEXT;
myloader.addEventListener(Event.COMPLETE, onLoaded);
var urlreq:URLRequest = new URLRequest("xmlファイル");
myloader.load(urlreq);

public function onLoaded( e:Event ) : void{

  myxml = new XML(myloader.data); // XMLオブジェクト
  var n:Number = xml.item.length(); // の数

  for (var i:Number = 0; i < n; i++){ // の数だけ
    trace(myxml.item.@name); //  name属性をログに表示
  }

  // ちなみに xml データをファイルに出力するときは、以下のような感じ。
  var file:File = new File("ファイルパス名");
  var stream:FileStream = new FileStream();
  stream.open(file, FileMode.WRITE);
  stream.writeUTFBytes( "\n" );
  stream.writeUTFBytes(myxml);
  stream.close();
}

読み込むxmlファイルは、こんな感じ。

<data>
  <item name="1"></item>
  <item name="2"></item>
  <item name="3"></item>
  <item name="4"></item>
  <item name="5"></item>
</data>

12 月 24 2009

swcファイルの呼び出し

別flaで作ったモノを swfファイルを呼び出すのではなく、ライブラリ的に使う方法がないかってことで、ムービークリップシンボルをswcファイルにしてからクラスとして呼び出す方法についてメモ。(しょーもないことですが)

**** swcファイル ****
(1)必要な要素を含んだ素材(言い方が変ですが・・・)をムービークリップシンボルに変換。
このとき、リンケージでクラス(任意の一意になる名前:SClass)を設定。
(2)変換したムービークリップシンボルを選択し、ポップアップメニューから「swcファイルの書き出し」を起動。
swcファイルがライブラリパスに格納されるようにフォルダを選んで保存。

**** 呼び出す側 ****
スクリプト内の任意の場所で、クラスを生成することでアクセス可能。


var _csample:CSample = new CSample();
addChild( _csample ); // ムービークリップの表示

といった感じ。


12 月 21 2009

swf間の変数渡し

複数のswf間での変数の受け渡しがよくわからなかった件でメモ。
a.swf 、b.swf という2つのswf を用意。
a.swf から b.swf を呼び出すことを想定。
その際、自作クラス Csample を渡します。

*** Csample.as の内容 ***

package {

	public class Csample {
		var a:int;
		function Csample() {
			a = 1;
		}

		public function getA():int{
			return a;
		}

		public function setA(p:int):void{
			a = p;
		}
	}
}

いくつかやり方があるようです。

●その1(シンプルなやり方?)

*** a.swf の内容 ***

var csample:Csample = new Csample(); // 自作のクラス

*** b.swf の内容 ***

// 参照したい場所で
var pobj:Object=this;
trace("rootの変数を参照 ="+pobj.parent.parent.csample.getA());
// といった感じで書くと受け渡された変数にアクセスできるようです。
// この場合は、Csample 内の関数 getA() にアクセス。

●その2(もうちょっとしっかりしたやり方?)

*** a.swf の内容 ***

var csample:Csample = new Csample(); // 自作のクラス
var loader:Loader = new Loader();
var subswf:*;

// b.swf を呼び出すボタンをbtn1として
btn1.addEventListener(MouseEvent.CLICK,onBtn1);

function onBtn1(e:Event):void {
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
	var request:URLRequest = new URLRequest("b.swf");
	loader.load(request);
}

function onComplete (e:Event):void { // 読み込みが完了
	e.target.removeEventListener(Event.COMPLETE, onComplete);
	addChild(loader);
	subswf = loader.content;
	subswf.setParam(csample); // b.swf に関数 setParam() が宣言されている
}

*** b.swf の内容 ***

// 呼び出し元から呼び出される関数を用意
var csmpl:Csample; // 自作のクラス

function setParam(p:Csample):void{
	csmpl = p;
	trace(csmpl.getSample()); // 任意の場所で渡された変数を使用可能
}

12 月 8 2009

Googleパーソナライズ検索/リアルタイム検索

Googleのパーソナライズ検索が一般にも適用されるようですね。

海外SEO情報ブログ さんで触れています。

リアルタイム検索については、SEMリサーチ さんで触れています。

技術だけでは、検索結果上位表示が難しくなったりするんですかね・・・


12 月 3 2009

Google日本語入力

Googleブログに「思いどおりの日本語入力 - Google 日本語入力」ということでIMEが発表されましたね。(ベータ版だけど)

どんなもんかということで早速インストール。

サジェスト機能を有効にしているからなのか変換がチョット重い感じがする時がありますね。

記事を見るとスゴそうなことが書いてあるのでしばらく使ってみようかと。


11 月 9 2009

タイムラインに張り付けた音声制御

flash で音声制御(停止したり、再生する)って、やはり悩むところなのかしら?

ググるとそれなりに件数がヒットしますね。

ということでワタシもご多分にもれず、よくわからなかったのでメモ。

(1)音声データを「ファイル」→「読み込み」→「ライブラリに読み込み」

(2)「ライブラリ」から読み込んだデータを選択して右クリック。

サウンドプロパティをあけて、「リンケージ」にクラス名を適当に設定し、基本クラス:flash.media.Sound を設定。

チェックボックス:ActionScript用に書き出し、1フレーム目に書き出しをチェック。

(3)スクリプトレイヤを作って、以下のスクリプトを登録。

var fctrl:int = 0; // 制御判定用フラグ
var snd:Sound = new snd_1(); // snd_1 は、(2)で設定したクラス名
var sc :SoundChannel ;
var pos:uint = 0;
sc = snd.play();

//制御ボタンを張り付けてインスタンス名(適当につけたctlbtn)にイベントを追加。
//ここでは、クリックした際に、タイムラインを止めると同時に、音声も止めたり、再生したりする。

ctlbtn.addEventListener(MouseEvent.CLICK, onClickCtrl);
function onClickCtrl(event:MouseEvent):void
{
	if( fctrl == 0 ){ // 再生状態のとき
		stop(); // タイムラインを止める
		pos = sc.position; // 音声の再生位置を覚える
		sc.stop(); // 音声停止
		ctlbtn.label = "再 生"; // ボタンのラベルを「再生」に変更
		fctrl = 1; // 停止状態に設定
	}else{
		ctlbtn.label = "停 止"; // ボタンのラベルを「停止」に変更
		play(); // タイムラインを再生
		sc = snd.play(pos); // 音声を停止位置から再生
		fctrl = 0; // 再生状態に設定
	}
}

11 月 6 2009

phpをCGIで動かす

ある事情で、php を CGIモードで動かす必要があったんです。

初めは、cgi-bin みたいな実行可能なディレクトリに放り込んでおいて、実行属性を付ければ動くんじゃない?なんて思ってたですよ。

そしたら、これが思ったとおりに動いてくれなくて ^_^;

ググってみても探し方がよくないのか、そのものズバリみたいなモノが無くて、試しながらやって結果が以下のとおり。

とりあえず動きました :-)

(1)(/usr/local/binとかにある)php-cgi をパスとして参照可能なフォルダにコピー。

今回は、URLでいうところの ルートフォルダ『 /』にコピー。

(2)php を格納したフォルダに .htaccess を作って、

(3)ファイル固有にしたかったので、以下のような項目を記載。

<Files xxxx.php>
AddHandler application/x-httpd-phpcgi .php
Action application/x-httpd-phpcgi /php-cgi
</Files>

/php-cgi は、(1)でコピーしたphp-cgi のURL。

結局のところ、どのように設定するのが正解なのかよくわからないのですが、動いたのでよしとしました。


10 月 29 2009

久しぶりにDB

以前に作ったプログラムの手直しで、行が削除できない現象発生ってことで、久しぶりにDBをいじった。

ダメだ、すっかり忘れてる。

テーブルに制約かませてることをすっかり忘れてて、にもかかわらず行削除しようとしてて・・・ orz

さっそく、 alter table  で書き換えようって思ったら、はて、制約名って何だっけ?

Posrgresって、その辺の情報ってどっかにあるんだろうか。

とりあえず、psql で\dS 叩いてシステムのテーブルにそれらしいものがないかっと。

おぉ、テーブルに pg_constraint なんて名前のそれらしいのがあるじゃないですか。

select * from pg_constraint; してみると、見つかりました :-)

無事、alter table できました。


10 月 27 2009

外部swfから親を呼ぶ

これからのことを考えると、複数ファイルにしておいたほうが無難かなと。

で、外部swf を呼び出すのは問題なかったんですが、外部ファイルから親swfに戻ってくるのは、どうしたものかと。

ちょびっとだけわからなかったので、メモ。

loaderInfoで呼び出し元の情報がわかるので、そこから、タイムラインをたどってあげると。

外部.swf

var ld:Loader = loaderInfo.loader;
var maintl:MovieClip = ld.root as MovieClip;
maintl.func(); // 親の関数

10 月 23 2009

GoogleもTwitter検索提携

これだけ Twitter が話題になってるだけに、やっぱりというのか、当然というのか。

記事(GoogleもTwitter検索提携を発表―ただし稼働は数カ月後か?)