A Day in the Life

2007-09-20

そろそろおきまりの

unsubscribe は delete だよ!

そういえば最近オススメの俺が好きそう(←ここがポイント。田舎っぽい優等生な感じの娘が好きです)なAV/女優を教えてください。amami さんは5本ぐらい買って amazon で送ってくれてもいいよ。あ、NOYNに借りた AV がまだ家に何本もあるけどどうやって返そうかこれ…。

QRコード + 携帯でプレゼンの資料配付

dan さんの。うまいなー。メインのプレゼンは今まで通り、サブの資料や会場のプロジェクタが小さい場合はただの html として携帯で表示させればいいわけだし。

こういう場合、html ベースのプレゼンツールだとそのQRコード表示するだけで資料配付ができてちょべんりそげ。

1ディレクトリにン千万ファイルあるときの削除方法

どうやるのが一番良いんだろ。普通の消し方 rm * や ls * |xargs -n 100 rm なんかだと ARG_MAX が来てエラーる。zsh の zargs なんかで

zargs -n 10 -- ./* -- rm

しても

zargs:168: subscript too big: 3652227

とエラーになる。うーん。

九時にならないと起きられない病

早寝しても九時にならないと最近起きれない…、というわけで最近遅寝して時間を有効活用だ!眠い…。

横幅が狭いと

普通に読みづらいですね><><、、。

AS3 で三次ベジェ曲線を Graphics.prototype を拡張して実装する

タイトルママ。丁寧な三次ベジェの説明は d:id:nitoyon さんがしてくれるだろうから、ここはちょっと変な実装方法で。AS3 になって prototype なんて標準のコンパイルオプションじゃつかわねーよ!と思っていたけど最近結構使えるんじゃないかと思えてきた。

Graphics.prototype.curveTo3 = function(x0:Number,y0:Number,x1:Number,y1:Number,x2:Number,y2:Number,x3:Number,y3:Number,vertex:uint = 100):void {
    this.moveTo(x0, y0);
    var up:Number = 1.0 / (vertex + 1);
    var tm:Number;
    for (var t:Number = 0; t < 1;t += up) {
        tm = 1 - t;
        this.lineTo(
            x0 * Math.pow(tm, 3) + 3 * x1 * t *Math.pow(tm, 2) + 3 * x2 * Math.pow(t, 2) * tm + x3 * Math.pow(t, 3),
            y0 * Math.pow(tm, 3) + 3 * y1 * t *Math.pow(tm, 2) + 3 * y2 * Math.pow(t, 2) * tm + y3 * Math.pow(t, 3)
        );

    }
    this.lineTo(x3, y3);
}
Object(Graphics).setPropertyIsEnumerable('curveTo3', false);

こんな感じで prototype に定義しちゃる。んで呼び出すときはハッシュアクセスぽく呼び出す。

shape.graphics['curveTo3'](0,0,50,100,150,100,200,0);
// もしくは
Object(shape.graphics).curveTo3(0,0,50,100,150,100,200,0);

で上手く三次ベジェが graphics にレンダリングされました。パチパチパチパチ。この方法だとまっとうなプロパティとしてきちんと定義された関数呼び出しに比べてどれだけメモリ使用量と速度が遅くなるのか謎。あんま使わなければ全く気にならないとは思うけど。あと FlexBuilder で補完されないのがアレ。俺は FlexBuilder 使わないからいいんだけどさ。

GraphicsUtil とかには Graphics を第一引数に渡す static な関数を定義しまくってやって、definePrototype とか static 関数で Graphic の prototype に全部定義しちゃう、というような俺俺プロトタイプ作成用ライブラリ作っておくと便利かもなー。やはり組み込みのを弄れるのは大きい。んで本番利用や速度が必要な箇所では普通に static 関数呼び出せばいいし。

って AS3 の FlashPlayer API に n次ベジェ(2次以外)レンダリングする関数があったら恥ずかしい…。あ、あと Graphics の public な呼び出しで現在の moveTo() で移動したであろうカレントポイントって解らないよね…?

sketchbook の Generator で update イベントを投げて欲しい

投げてもらえると、update() したときに addEventListener しておけばいろんなところでその Generator の update が反映されて嬉しいなぁ。

hsb = new HSBGenerator(new ColorSB(0xFF0000), new SawToothGenerator(255, 100));
hsb.addEventListener('update', function(e:Event):void {
    s.graphics.clear();
    s.graphics.beginFill(e.target.color);
    s.graphics.drawCircle(0,0,3);
    s.graphics.endFill();
});

みたいにして後はお好きに update() を呼び出せばよしなに変更が適用できる、みたいな。generator の使い回しに便利なので、よかったらパッチ適用してもらえると嬉しいです>Takaさん。

以下 patch。new Event('update'); は適当なので sketchbook で Dynamic な Event 継承クラスを用意した方が便利な気がします。

$ LANG=C svn diff Generator.as
Index: Generator.as
===================================================================
--- Generator.as        (revision 33)
+++ Generator.as        (working copy)
@@ -1,13 +1,15 @@
 package sketchbook.generators
 {
        import sketchbook.generators.IGenerator;
+       import flash.events.EventDispatcher;
+       import flash.events.Event;

        /**
         * Generatorのアブストラクトなベースクラス
         *
         * このクラスはGeneratorの基底クラスとして用いられ、実際に作成されることはありません。
         */
-       public class Generator implements IGenerator
+       public class Generator extends EventDispatcher implements IGenerator
        {
                /** 生成された値のキャッシュ */
                protected var _value:*
@@ -40,6 +42,7 @@
                {
                        updateCounter();
                        updateValue();
+                       dispatchEvent(new Event('update'));
                        return _value
                }

@@ -59,4 +62,4 @@
                {
                }
        }
-}
\ No newline at end of file
+}
記事の一覧 >