携帯 絵文字まわり

2010年2月27日

http://coderepos.org/share/wiki/Mobile/Encoding

django.vim

2010年2月23日

最近google app engineをさわってます。
このへんみながらdjango.vimの環境設定。

http://code.djangoproject.com/wiki/UsingVimWithDjango#UsingVimwithDjango

.vimrc とプラグインの整理。

2009年9月22日

.vimrcとランタイム以下が混沌としてきたので整理することにしました。

まずはここからデフォルトのランタイムパス以下のファイル群を取得。
http://www.vim.org/download.php
version 7.xのソースごとdownloadしてその中のruntimeディレクトリ以下が目的のものです。

とインストールしてる最中にこんなのがあることに気づきます。。
http://www.vim.org/runtime.php
指示通りにaapをインストールし、runtimepathにcdして実行するとどんどんファイルが更新されて行きます。

:cd $VIMRUNTIME
:!aap -f ftp://ftp.vim.org/pub/vim/runtime/main.aap fetch

一度これを実行しておけば、あとは定期的に

app fetch

を実行するだけで、更新されたファイルのみアップデートしてくれるようです。
結構便利ですね。これ。

続いてカラースキームやらプラグインファイルをdownloadしていきます。

  • inkpot.vim(color scheme)
  • minibufexpl.vim
  • yankring.zip
  • surround.zip
  • Align.vba.gz
  • taglist.zip
  • fuzzyfinder.zip
  • eregex(まだ)
  • snipettsEmu(まだ。snipetMetaに移行するか迷い中)http://blog.dealforest.net/2009/04/migrate-over-to-snipmate-from-snippetseeu
  • mru(まだ)
  • EnhCommentify.vim(まだ)

あわせて.vimrcも整理してかなりすっきりしました!
http://pakpak.jp/work/dot_files/_vimrc

ExternalInterface

2009年9月12日

一つ前のエントリで取り上げたlog.asの実装のこの部分。

25
26
27
28
29
30
31
32
33
34
35
36
37
        try {       
          ExternalInterface.call(<><![CDATA[
              (function(obj, klassName) {
               obj.toString = function() { return klassName };
               console.log(obj);
               ;})  
              ]]></>.toString(),
              ObjectUtil.clone(arg),
              getQualifiedClassName(arg)
              );    
        } catch(e:Error) {
          ExternalInterface.call('console.log', r);
        }

ExternalInterface.callの第一引数がなんか見慣れない書式。
なんかオブジェクトつくってtoStringしてる?
調べてみた。

package {
  import flash.display.*;
  public class Hello extends Sprite {
    public function Hello(){
      var hoge:Object = <><![CDATA[
        (function(obj, klassName) {
         obj.toString = function() { return klassName };
         console.log(obj);
         ;})
        ]]></>;
      log(hoge);
      log(hoge.toString()); 
    } 
  }
}

ピクチャ 3
なるほどー。CDATAセクションのみのXMLListオブジェクトつくってtoStringしてるんですね。それにしても変わった書式。

というか、ExternalInterface.callの第一引数、evalしたときに関数になってたら何でもokなんすね。
これならjs,flashの連携が楽にできそ。

flash開発環境整備

2009年9月12日

自分用のただのメモです。

まずはflex3sdkをインストール。

http://blogs.adobe.com/akamijo/archives/2009/03/flex_sdk_33.html
こちらを参考にしました。
そして適当なディレクトリ(Macなら/Applications/flex_sdk_3.4とか)にzipファイルを展開。
パスを通す。

export PATH=/Applications/flex_sdk_3.4/bin:$PATH

終わり。

次にログ出力のための設定。

これについては後で少し解説します。

frameworks/flex-config.xml

32
33
34
      <source-path>
        <path-element>/Applications/flex_sdk_3.4/log</path-element>
      </source-path

souce-pathに指定したファイルパス以下のファイルはコンパイル時に自動でロードされます。
log以下には以下の2つのファイルを配置。
こちらからダウンロードできます。(ちなみに僕は作者ではありません。。)
http://github.com/hotchpotch/as3rails2u/blob/113c00677c1c1807e1f40060a4a49e8681a2831d/src/log.as

log/ObjectUtil.as

package
{
    import flash.utils.getQualifiedClassName;
    import flash.utils.ByteArray;
 
    public class ObjectUtil {
        public static function clone(arg:*):* {
            var b:ByteArray = new ByteArray();
            b.writeObject(arg);
            b.position = 0;
            return b.readObject();
        }
 
        public static function inspect(... args):String {
            return inspectImpl(args, false);
        }
 
        internal static function inspectImpl(arg:*, bracket:Boolean = true):String {
            var className:String = getQualifiedClassName(arg);
            var str:String; var results:Array;
 
            switch(getQualifiedClassName(arg)) {
                case 'Object':
                case 'Dictionary':
                    results = [];
                    for (var key:* in arg) {
                        results.push(inspectImpl(key) + ':' + inspectImpl(arg[key], false));
                    }
                    str = classFormat(className, '{' + results.join(', ') + '}');
                    // str = classFormat(className, arg);
                    break;
                case 'Array':
                    results = [];
                    for (var i:uint = 0; i < arg.length; i++) {
                        results.push(inspectImpl(arg[i]));
                    }
                    if (bracket) {
                        str = '[' + results.join(', ') + ']';
                    } else {
                        str = results.join(', ');
                    }
                    break;
                case 'int':
                case 'uint':
                case 'Number':
                    str = arg.toString();
                    break;
                case 'String':
                    str = arg;
                    break;
                default:
                    str = classFormat(className, arg);
            }
            return str;
        }
 
        internal static function classFormat(className:String, arg:*):String {
            return '#<' + className + ':' + String(arg) + '>';
        }
    }
}

log/log.as

package {
  import flash.external.ExternalInterface;
  import flash.utils.getQualifiedClassName;
  import ObjectUtil;
 
  /**
   * log() is Object inspect dump output to trace() and use 
   * Browser(FireFox, Safari and more) External API console.log.
   * 
   * example
   * <listing version="3.0">
   * var a:Array = [[1,2,3], [4,[5,6]]];
   * var sprite:Sprite = new Sprite;
   * log(a, sprite);
   * # output
   * [[1, 2, 3], [4, [5, 6]]], #&lt;flash.display::Sprite:[object Sprite]&gt;
   * </listing>
   */
  public function log(... args):String {
    var r:String = ObjectUtil.inspect.apply(null, args);
    trace(r)
      if (ExternalInterface.available) {
        var arg:* = args.length == 1 ? args[0] : args;
 
        try {
          ExternalInterface.call(<><![CDATA[
              (function(obj, klassName) {
               obj.toString = function() { return klassName };
               console.log(obj);
               ;})
              ]]></>.toString(),
              ObjectUtil.clone(arg),
              getQualifiedClassName(arg)
              );
        } catch(e:Error) {
          ExternalInterface.call('console.log', r);
        }
      }
    return r;
  }
}

コンパイルしてみる。

/samples/explorerに移動して

% mxmlc explorer.mxml
設定ファイル "/Applications/flex_sdk_3.4/frameworks/flex-config.xml" をロードしています
/Applications/flex_sdk_3.4/samples/explorer/explorer.swf (382598 bytes)

ちゃんとswfが出力されました。

Rascutをいれる。

http://d.hatena.ne.jp/nitoyon/20070914/how_to_install_rascut

% rascut Hellow.as -s

とすると、localhost:3001でプレビュー、ファイル更新を監視して自動的にコンパイル、そしてデプロイまでやってくれちゃいます。すてきです。

log.as

最後に上で設定したログ出力の関数について少しだけ触れておくと、
こんな風にプログラム中でおもむろにlog(object)と書くと、firebugのコンソールにログ出力されるという代物です。

package {
  import flash.display.*;
  import flash.text.*;
 
  public class Hello extends Sprite {
        public function Hello(){
      var textField:TextField=new TextField();
      textField.text="Hello World!";
      addChild(textField);
      log([1,2,3]);
      log(textField);
    }
  }
}

ピクチャ 1