Eclipse で ActionScript

とりあえず、現状はこんな感じで作業し始めています。(今日いろいろいじった)

画面イメージ

基本的なところは、Towards Open Source Flash Developmentでわかります。

ASDT の補完がかな〜り便利です。加えてセーブする度に mtasc で文法チェックがかかるようにできるので Flash 本体でプレビューする前にある程度確認可能です。

mtasc と本家 flash で微妙に違うようなんで本家でちゃんと確認するようにしています。僕の場合、まだまだタイムライン大好きなので本家 Flash 必須です。この前 eclipse 内で完結 を試みたんですけど、Flash では while でループして待つのができない(再生ヘッドが動かない)ので、MovieClip の生成待ちなんかをする時にど〜したもんかと・・・。結局フラグだらけになっちゃったり・・・(時間があればそのあたりの処理方法をちゃんと考えたいんですけど)。

で、この前見つけたFlair for Eclipse と Flash Log for Eclipseを使うと、eclipse から、外部の swf (ASUnit のパネルも)が見れたり、trace() の結果・・・というか、Flash Debug Player のログ・・・が見れたりするので、これに Flashout を加えると、コードのみで完結する部分のテストが eclipse 上でほぼできるようになりました。trace に日本語入れると文字化けしちゃうんですけど。Debug Player から出力したファイルを見ると化けてるので、Debug Player (or SWF)の問題だろうけど。

MXNA なんかを見ているとで FAME(Flashout, ASDT, MTASC, Eclipse) ネタが出てるのでまだまだ進化しそうです。

CD

Amazon ギフト券の締切間近だったので 久々に CD を購入〜。珍しく日本語版が多い。

  • ベベウ・ジルベルト – タント・テンポ
  • White Turns Blue – Maria Mena
  • ザ・ウェイ・イット・リアリー・イズ – リサ・ローブ
  • カウンティング・ダウン・ザ・デイズ – ナタリー・インブルーリア

折れ線グラフ

値がたくさんあるときに縮めて表示したいときに、ぱっと見で元のグラフの形を保ったグラフにするにはどうすればいいんでしょう?何も考えずに平均値を出してやろうとして、ボコボコになってしまった・・・。

仕方無く、1ピクセルに1つの値で横長の画像を作って縮小しちゃったんだけど。

久々に MIDI

知人に SuperWave P8を教えてもらったこともあり、シーケンサと Micro Kontrol 繋げて久々にピョロピョロやっておりました。

シーケンサは Live4 を試しています(っというか、買ってインストールして、ちょこっと使ってそのまんまだったんですが)。ステップ入力ができないのが辛い〜 っと思っていたんですけど、クォンタイズかけてオーバーダブすればリアルタイム入力でもそれほどずれることなく録音できました。ってか、こっちのほうが楽かも(^^;。

これやってると平気で数時間たってしまうのが問題・・・。

flash で MovieClip 中の特定の場所を中心に動かす

なんか文字で書くとよくわからんのですがsample な感じです。トゥイーンと合わせるにはどうしたらいいかなぁ〜?っと考えてたらこうなりました。モーションガイドとかね。

なんか、無駄に長時間かけて作りましたが、よくよく考えて作りなおしたらすぐできたり orz。どうにも、MovieClip の階層が絡んでいる拡大縮小は苦手です。

/** * MovieClip 全体を移動させ、 * 特定の MovieClip を中心に動いているように見えるテスト。  *  */class Scroller extends MovieClip{	private var point_mc:MovieClip;		private var orgPosition:Object;	private var orgDimension:Object;		private var holdPointPos:Object;		private var rate:Number;					/**	 * コンストラクタ	 */	function Scroller() {		this.initDimension();						this.holdPointPos = null;		this.rate = 1;	}			/**	 * 位置とサイズを保持する	 */	private function initDimension():Void {		this.orgPosition = {x:this._x, y:this._y};		this.orgDimension = {w:this._width, h:this._height};	}			/**	 * ポイントの位置を固定する	 * 	 * @param doHold ポイントの位置を固定するときには true	 */	public function hold( doHold:Boolean):Void {		if( doHold == true ) {			var p:Object = {x:this.point_mc._x, y:this.point_mc._y};			this.localToGlobal(p);			this.holdPointPos = p;		} else {			this.holdPointPos = null;						this.resetPosition();		}	}			/**	 * 拡大率を設定する	 * 	 * @param scale 拡大率(パーセント指定)	 */	 public function setScale( scale:Number):Void {	 	this.rate = scale / 100;	 		 	this._width = this.orgDimension.w * rate;	 	this._height = this.orgDimension.h * rate;	 }			/**	 * ムービークリップ全体を移動させる	 * 	 */	private function moveWholeMovieClip():Void {		var p:Object = {x:this.point_mc._x, y:this.point_mc._y};		this.localToGlobal(p);		var box:Object = this.getBounds( this );		var boxMinPoint:Object = {x:box.xMin, y:box.yMin};				this.localToGlobal(boxMinPoint);				this._x += (this.holdPointPos.x - p.x);		this._y += (this.holdPointPos.y - p.y);	}			/**	 * 位置を初期位置に戻す	 */	private function resetPosition():Void {		this._x = this.orgPosition.x;		this._y = this.orgPosition.y;	}		/**	 * onEnterFrame	 */	private function onEnterFrame():Void {		if( this.holdPointPos != null ) {			this.moveWholeMovieClip();		}	}}

お気に入り整理

はてなブックマークとはてなアンテナを使ってみることにしまして、ボコボコ入れています。こういうの出すのは引出しの中を覗かれる気分ですけど、減るもんじゃないし。

RSS は bloglines

こういうサービスからデータをひっぱり出してまとめるツールはどういう機能が必要かなぁ っというのをいつも考えています。。

bash でミス

bash で C-r でヒストリから検索する機能を使って、前に使ったコマンドのパラメータだけ変更して実行しようとしました。で、コマンド選択する時に間違えて enter キーをたたいてしまい、コマンドが実行されてしまいました。ここでは右矢印なんかを押すべきなんですな。

よりによってコマンドが dd if=/dev/zero of=hogehoge.img …。中のファイル消え orz

mod_uploader

コンパイルエラーが出て動かない〜って言っていた mod_uploader ですが、make >& make.log してみたら、apr.h だの apr_hooks.h だの apr_optional_hooks.h が見つからないっぽい・・・。INCLUDE に -I/usr/include/apr-0 を追加したら無事コンパイルして動かすことができました。

一歩前進。メモツールや検索ツールと組合せるにはどうすればいいかなぁ・・・

とりあえずログくらい見れ > 俺

Flash でテキストを表示する練習

こんなの。& クラスのメモ

/** * 日記の記事を表示するクラス *  */import com.layer13.diary.*;class Article extends MovieClip {	public static var linkageId:String = "com.layer13.diary.Article";	public static var classRef:Function = Article;	private var textfieldName:String = "article_text";	/** 記事を表示するテキストフィールド名 */	private var textfield:TextField;	/** 記事を表示するテキストフィールドへの参照 */	private var text:String;	/** 日記のテキスト */		private var textfieldDepth:Number = 100;	private var bgBorderWidth:Number = 10;	/**	 * コンストラクタ	 * 	 */	public function Article() {		super();	}		/**	 * htmlText を入力する	 * 	 * @param text 表示したいテキスト	 * 	 * @return テキストがちゃんと表示されれば true を返す	 */	public function seHtmltText(text:String):Boolean {		this.text = text;				var tf:TextField = this.getTextField();		if(tf) {			tf.htmlText = text;			return true;		} else {			return false;		}	}			/**	 * テキストフィールドを生成する	 * 	 * @return テキストフィールドを返す	 */	private function getTextField():TextField {		if( this.textfield == undefined ) {			this.createTextField(this.textfieldName, this.textfieldDepth, this.bgBorderWidth, this.bgBorderWidth, 500,100 );			this.textfield = this[this.textfieldName];			initTextField();		}		return this.textfield;	}		/**	 * テキストフィールドを初期化する	 * 	 	 */	private function initTextField():Void {		this.textfield.multiline = true;	//この行は、<br>で改行するのに必要		this.textfield.wordWrap  = true;	//この行は、<br>で改行するのに必要		this.textfield.autoSize = true;		this.textfield.background = true;		this.textfield.backgroundColor = 0xffffff;		this.textfield.border = true;		this.textfield.borderColor = 0xCCCCCC;		this.textfield.html = true;				// TextFormat を styleSheet より先に適用しないと、行間が開かない。		this.textfield.setNewTextFormat( this.getTextFormat() );		this.textfield.styleSheet = this.getStyleSheet();	}		/**	 * テキストフォーマットを生成する	 * 	 * @return テキストフォーマットを返す	 	 */	private function getTextFormat():TextFormat {		var fmt:TextFormat = new TextFormat();		fmt.leading = 5;		fmt.leftMargin = 10;		fmt.rightMargin = 10;				return fmt	}		/**	 * スタイルシートを生成する	 * 	 * @return スタイルシートを返す	 	 */	private function getStyleSheet():TextField.StyleSheet {		var styles:TextField.StyleSheet = new TextField.StyleSheet();		styles.setStyle("html", 		  { fontSize: '14px',			fontFamily: "Tahoma, sans-serif"		  }		);		styles.setStyle("date", 		  { fontSize: '12px',		  display: "block"		  }		);				styles.setStyle("title", 		  { fontSize: '16px',		   fontWeight: "bold",		  display: "block"				  }		);				styles.setStyle( "img",			{display: "block"			}		);				styles.setStyle("p", 		  {display: "block"		  }		);				return styles;	}}

trac

バージョン管理ができるようになったので、次はプロジェクトの管理かぁ〜? っと、web でできるプロジェクト管理ツールを探していました。で、Subversion を使っていることもあり、trac を入れてみました。trac-jaも入れたので、日本語でドキュメントが読めて快適。

wiki がくっついてるので、アイデアをメモったりするのに重宝しそうです。これでしばらく使ってみようかと。

FrogPad のタイピングスピード

FrogPad 買ってまだ 1 日ですが、「タイプウェル国語R」で練習しています。なんか必死です(笑。

で、今のところ、通常のタイピングスピードとどれくらい違うかというとタイプウェルの「基本常用語」を vaio のキーボードで一度テキトーに計ったものが 383.0(打/分)、FrogPad の最高記録が 88.3(打/分) 。1/4 くらいでしょうか。遅いのはともかく、キーの位置やコンビネーションを覚えていないので、考えながら打つときに思考が中断されるのが一番痛いですけど。

デスクトップにも繋げて、余裕があると時には練習しようと思います。ブラインドタッチを覚えたのも、ひたすらコードを打ったり学校のノートを打ったりして覚えたので、まぁ、練習あるのみ。

なんだかんだいって、ワイヤレスは便利です。寝床の横にノーパソおいて、キーボードとタブレットだけ持ってくれば作業ができるので便利です。確実になまけものに見えるな。

FrogPad 買った

学校帰りに買ってきました。

frogpad + tablet

FrogPad は、まださわったばっかりですが、普通の文を書くときには慣れればちゃんと書けそうです。プログラムはまだ試していません。

タブレット(favo)も FrogPad も bluetooth にしましたのでケーブルなしですみます。電池は、共に充電式で、favo は AC アダプタから、FrogPad は、USB もしくは、AC アダプタとなっていました。BlueTooth アダプタは、favo についていたやつを使っています。

しばらくこの環境でいじってみようかと思います。爆熱 vaio のパームレストに触らなくてすむようになったw。でも、PCの環境整備がまだだったり。

jsfl アイデア

指定した幅で矩形オブジェクトのボーダーを作ってくれる jsfl があったら便利かも。写真の縁取りを工数少なく実現してくれるようなもの。これを手でつけるのは結構めんどくさい作業なんですよねぇ。

入力デバイス

左手用キーボードをどうしようかと、またしても FogPad をカートに入れては悩んでいる今日このごろ。で、どうせワイヤレスにするんなら右手もってことで bluetooth なマウスやらタブレットやらを眺めておりました。ちょっとダイヴしてみようかなぁ〜なんて・・・。普段使うアプリのショートカットキーがどれだけ使いやすいかによるんですけど。

プログラム書く分には HHK Pro + マウスの環境で十分なんですけどね〜。

常時使用ツールになるのか、ダンボール箱で眠る左手デバイスになってしまうのか、どっちになるんでしょう(笑