サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Nintendo Direct
bitmap.dyndns.org
インサートモードで、矢印キーを使わないでカーソルを移動したいので、以下の設定を追加した。 imap <C-b> <Left> imap <C-f> <Right>
IE 6/7 に表示された Flash で navigateToURL を呼ぶとリファラが取れない (document.referrer === "" //true) 問題の回避方法。 アンカーエレメントをクリックしたことにする アンカーエレメントを作って click イベントを呼べば、リファラを取ることができる。 ActionScript ExternalInterface.call("navigateToURL", "hoge.html"); JavaScript IE ではアンカーエレメントを生成し、IE 以外では location.href を書き換える。 function navigateToURL(url) { if (!!document.all) { var body = document.getElementsByTagName("body")[0]; var dummy
Vim で .as ファイルを保存時に、Flash をパブリッシュしつつブラウザをリロードするようにしてみた。元ネタは ||_koba_|| さんの発言。ちなみに Windows 限定。 手順 JSFL FileSystem API を入れる ブラウザをリロードする JScript を書く JScript を実行する JSFL を書く Vim の設定をする JSFL FileSystem API を入れる FlashGuru Consulting から MXP をダウンロードして入れる。 ブラウザをリロードする JScript を書く ブラウザ (Firefox) に F5 キーを送る JScript を書く。元ネタは hail2u.net。 var oShell = WScript.CreateObject("WScript.Shell"); oShell.AppActivate("Mo
幾つかの JavaScript ライブラリから、ブラウザ判定部分だけを抜き出してみた。判定基準が userAgent だったり、ブラウザの実装だったり、多種多様で面白い。MooTools はレンダリングエンジンを返す所が他と違う。 Prototype (prototype-1.6.0.2.js) Browser: { IE: !!(window.attachEvent && !window.opera), Opera: !!window.opera, WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, MobileSafari: !!na
リファクタリングを再読していて発見。P.179 に Singleton の複数版パターンがあった。抽象化すると単なる Hash なのだが、何かと使えそう。 以下、簡単なコード。 package { import flash.utils.Dictionary; public class Hoge { private var name:String; private static var instances:Dictionary; public function Hoge(name:String) { this.name = name; } public static function getInstance(name:String):Hoge { if (instances == null) { instances = new Dictionary(); } if (instances[na
地味に便利な ActionScript/JavaScript で使えるコメントテクニック。 実行するブロックを切り替える (参考) テスト用のコードを切り替えるときに便利。 //* doHoge(); /*/ doFoo(); //*/ この状態では doHoge() が有効で、先頭行のスラッシュを一つ取ると、 /* doHoge(); /*/ doFoo(); //*/ doFoo() が有効になる。 簡単にコメントアウトを解除する Progression のサンプルに登場する、コメントアウトを解除するテクニック。 /* doBar(); /**/ 先頭行の /* を取ると、 doBar(); /**/ doBar() が有効になる。
ActionScript のコードにコメントブロックを挿入する Vim スクリプトを書いた。カーソル位置に任意の文字ブロックを挿入するスマートな方法がよくわからず、泥臭い書き方になった。 function! ASCommentWriter() let c = col(".") let l = a:firstline - 1 let s = '' while len(s) < (c - 1) let s = s . " " endwhile call append(l, s . ' */') call append(l, s . ' *') call append(l, s . '/**') endfunction autocmd FileType actionscript map <C-c> :call ASCommentWriter()<CR> 適当な関数の先頭行にカーソルを移動して、
String.replace の第二引数には、置換後の文字列を返す、独自の関数を指定できることを知った。目的にもよるが、グルーピングを使うときは RegExp.exec を繰り返すよりも使いやすい。 ただし、置換関数に渡される引数が可変で、いくらか複雑なので注意が必要。 以下、ActionSript 3.0 での例。 var str:String = "aaaA bbbB cccC"; str = str.replace(/([a-z]+)([A-Z])/g, function():String { trace(arguments); return arguments[1].toUpperCase() + arguments[2].toLowerCase(); }); trace(str); =========================== aaaA,aaa,A,0,aaaA bbb
JavaScript: The Good Parts を斜め読みしていたら、面白いことが書いてあった。 比較演算子の == や != を、=== と !== の "evil twins" と呼び、"never use the evil twins" という。それはなんでかというと、型が違うときの評価が複雑だから。 以下のコードで理解度をレッツ、チェック。式をクリックすると答えが右に出る。 '' == '0' 0 == '' 0 == '0' false == 'false' false == '0' false == undefined false == null null == undefined ' \t\r\n ' == 0 自分はパーフェクトではなかったので、今後は === を使おうと思う。
ライブラリのアイテムを Unix コマンド風に操作するエクステンションを作った。 デモとソースコード。 実装した機能は ls mv cp rm clear ファイル名のタブ補完 だけ。ディレクトリ構造を保持していないので cd は使えない。パーサらしきものは、スペースで split しているだけなのでライブラリ名にスペースが入ると使えない。という、いまいちなツールだが、興味のある方はどうぞ。LibraryConsole.swf を WindowSWF ディレクトリに入れれば Flash IDE に現れるはず。 JSFL と AS を全文掲載しておく。 Flash から JSFL をコールする runScript 関数が便利だった (元ネタ)。 LibraryConsole.jsfl var names = []; var library; var items; //initNames fu
流れるようなインタフェースを持つ Command クラスを書いてみた。実装のポイントは以下の 2 点。 Command 自体にキューイングの機能を持たせた。 Composite パターンを適用した。 実行するとこんな感じになる。 普通に数珠つなぎで、 var hoge:Hoge = new Hoge();//1000ms wait する Command var foo:Foo = new Foo();//0ms wait する Command var bar:Bar = new Bar();//2000ms wait する Command var baz:Baz = new Baz();//3000ms wait する Command hoge.next(foo).next(bar).next(baz).execute(); =====start===== [object Hoge] ex
追記 : 2008.05.21 Flex Builder が入っていれば、リファレンスの zip ファイルもインストールされている。Adobe.com に負荷をかけないためにもそちらを使うべき (参照)。恐らくトライアル版でも同様のファイルがあるはず (ライセンス的にはグレー?)。 追記ここまで 手元に ActionScript 3.0 のリファレンスが欲しかったので、LiveDocs ダウンロード + Hyper Estraier で ローカル LiveDocs を構築した。Adobe.com の重さにうんざりしている人にもおすすめ。 LiveDocs をダウンロードする 「Flex3のヘルプをローカルに - 0x廃棄階層 - 統治局」を参考にダウンロード。 wget http://ss-o.net/txt/Flex3LangrefUrlList.txt wget -i Flex3La
久々の Flash プロジェクトで ActionScript 3.0 のキャッチアップに忙しい。下手に ActionScript 2.0 を知っていると、逆にラーニングコストが上がる気がする。 さて本題。コンテナ内の全ての子 DisplayObject を削除するには、幾つか方法がある。Essential ActionScript 3.0 の P.477 より。 ボトムアップ法 底辺の DisplayObject から消していく方法。だるま落としのイメージに近い。 while (numChildren > 0) { removeChildAt(0); } while を for に書き直すと見慣れないコードになる。 for (;numChildren > 0;) { removeChildAt(0); } トップダウン法 上から取り除いていく方法。 while (numChildren >
Vim で編集中の Ruby スクリプトを、即時実行できるように設定した。 Vim で Ruby スクリプトの実行と結果のプレビュー表示 Tip #1244: preview interpreter's output 上記サイトを参考に、.vimrc に追記。 function! Ruby_eval_vsplit() range let src = tempname() let dst = "RubyOutput" " put current buffer's content in a temp file silent execute ": " . a:firstline . "," . a:lastline . "w " . src " open the preview window silent execute ":pedit! " . dst " change to preview
Date クラスに直感的な (流れるような) インタフェースを実装してみた (ソースコード)。元ネタはこの一枚。 実行サンプルはこんな感じ。 var d = new Date(); => Wed Apr 30 2008 00:00:00 GMT+0900 (JST) d.tomorrow(); => Thu May 01 2008 00:00:00 GMT+0900 (JST) d.nextTuesday(); => Tue May 06 2008 00:00:00 GMT+0900 (JST) 流れるようなインタフェースなので、このようにも書ける。 d.tomorrow().lastWeek().nextYear().lastSunday().yesterday(); => Sat Apr 18 2009 00:00:00 GMT+0900 (JST) Google で "(new Da
CentOS 5 の Vim に autocomplpop.vim を入れたら、 Sorry, Autocomplpop doesn't support this version of Vim. と言われて使えなかった。autocomplpop.vim (2.3.1) の中身を見ると、対応バージョンが 7.1 と書いてある。vim.org の情報が間違っているようだ。 yum から入れられる Vim のバージョンは 7.0.109-3 止まりなので、自前でビルドするしかなさそうだ。 Vim 7.1 をソースからビルドする さっそくやってみる。ソース一式は公式サイトから。 URL の ftp:// を http:// に変えれば http 経由で落とせる。vim-7.1-extra.tar.gz は、 The extra archive. This contains source and
Prototype.js の感覚で jQuery の $() を使ったら詰まった。 SWFObject で貼り付けた SWF のメソッドを ExternalInterface で呼び出そうとして、 $("flashMovie").doSomething(); と書いたら、$("flashMovie") には doSomething が無いと言われる。 それもそのはずで、jQuery の $() の戻り値は、jQuery オブジェクトなので、DOM としては扱えない。 $("flashMovie").get(0).doSomething(); このようにしたら動いた。
追記 : 2008.05.08 ↓下記のサイトに置いてある辞書ファイルの方が性能がよいので、本サイトはスルーしていただいて構いません。 AS3 の辞書ファイル - PBD - subtech 追記ここまで ここの actionscript.vim からキーワードを抜き出して辞書ファイルを作った。 ActionScript の Vim 用辞書ファイル 以前作ったが、今回は ActionScript 3 にも対応。
ノーマルモードで gi を入力すると、最後に入力していた箇所にカーソルが移動し、インサートモードになる。VIM for (PHP) Programmers より。 function hoge() { var foo = 100; } 100; を入力してからノーマルモードにし、バッファ内を徘徊したあと、gi で 100; の後ろにカーソルが移動する。
SWFObject の addVariable を使って何らかのパラメータを渡す際には、その値を URL エンコードした方がよい。 値に & などのスペシャルキャラクタを含むと正しく渡らない可能性があるからだ。 例えば、 so.addVariable("hoge", "http://example.com/?a=100&b=200"); このコードは、SWFObject によって、以下の param タグに変換される。 <param name="FlashVars" value="hoge=http://example.com/?a=100&b=200" /> FlashVars は、名前と値のペアの連結に & を使うため、Flash 内部では hoge = http://example.com/?a=100; b = 200; と解釈されてしまう。 従って、値を escape() で U
Flash で描画したベクター画像を img タグで表示させるデモを作った。肝はサーバプログラムを経由しないところ。 IE 以外のモダンブラウザなら、下の灰色の領域に線を描くと、その下に PNG 画像が現れるはず。 ペイントツール部分は、func09 さんのソースをお借りした。 仕組み PNGEncoder で PNG の ByteArray を作る その ByteArray を Base64 エンコードする その文字列を ExternalInterface でブラウザに送る data スキーマで画像を表示させる var bmp:BitmapData = new BitmapData(300, 300); bmp.draw(canvas); var base64Text:String = Base64.encodeByteArray(PNGEncoder.encode(bmp)); Ext
SharedObject のデバッグに SolVE を使っている。開発者は Darron Schall。 サイトによっては Unsupported type encountered -1 というエラーが出るが、幸いにも開発中のサイトでは発生していない。 TCSOFileReader.java を読むと readDataType メソッドに // TODO: the following code can probably be improved upon switch (type) { case Types.NUMBER: ... case Types.BOOLEAN: ... とあり、switch 文でデータ型によって分岐しているので、Flash 8 か 9 で新規追加された型がまずいのかもしれない。
3to2 に触発され、JavaScript で SWF ファイルを読み込んで中身を書き換えるデモを作った。 JavaScript で SWF を読み書きする (Firefox 限定) 主な仕組み XmlHttpRequest で SWF バイナリを読み込む (参考) SWF を解析する (3to2 などを参考) Base64 エンコードして data スキーマを作る (参考、参考) デモでは fps を書き換えているだけだが、アセンブル/ディスアセンブルも技術的には可能だろう。
プログラミング中に、操作ミスで SHIFT-K を押したら、ヘルプが立ち上がった。 :he K を読むと、SHIFT-K でカーソル下の単語を引数に、任意のプログラム keywordprg を走らせることができるようだ。 keywordprg が設定されていない場合は、カーソル下の単語を引数に :help を実行する。 ヘルプ内を徘徊できて楽だ。 追記 ヘルプ内で、同様の機能を Ctrl-] でも行える。 しかし、頻繁に 'modifiable' がオフなので、変更できません と出てしまい、機能しない。
このブログでもこれまでいくつかの JSFL を公開してきたが、一般的に (?) は MXP 形式での配布が主流らしい。 ということで、MXP の作り方を調べた。 MXP ファイルの作り方 (JSFL コマンド) JSFL ファイルを作成する。 MXI ファイルを作成する。MXI ファイルは、パッケージ化するための情報が記述された XML ファイル。仕様の PDF からコピペで作っても良いが、MXI File Creator などのツールを使えば簡単に作成できる。 MXP ファイルを作成する。Adobe Extension Manager で、上記の MXI ファイルを指定する。 たったのこれだけ。
仕事の都合で CVS を使うことになったので、Cygwin を入れた。 Cygwin の Vim は、日本語が入力できなかったり CTRL-H で文字が削除できなかったり鬱陶しいので何とかしたいと思っていたら、 社内のもう 1 人の Vim 使いの人が「Windows の GVim 使いなさいよ」と教えてくれた。 Cygwin の Vim をアンインストールする /bin/vi にスクリプトを置く Windows の環境変数を gvim.exe が通るように設定する /bin/vi の中身は以下の通り #!/bin/bash gvim c:/cygwin$* & c:/cygwin は Cygwin のインストール先となる。
いつからか、Windows 終了時に「設定を保存しています」のところで2 ~ 3 分固まるようになった。その間、ハードディスクにアクセスしているわけでもなく、マウスの動作がカクカクして謎です。そのまま放置すれば電源は落ちますが、気になったので調べました。 プロファイルのアンロードに関する問題のトラブルシューティング (Microsoft) に、該当する問題について書いてありました。 Microsoft Windows Server 2003、Windows XP、Windows 2000 または Windows NT 4.0 を実行しているコンピュータからのログオフ時、以下の現象が 1 つ以上発生することがあります。 ログオフに長い時間がかかり、以下のメッセージが表示される。 設定を保存しています... 早速、イベントログ (マイコンピュータ右クリック > 管理 > イベントビューア >
vimrc に以下のような 1 行を加えることで、テンプレートからファイルを新規作成できる。やっていることは単に read しているだけだが、非常に便利。無駄なコピペ作業が無くなった。 :au BufNewFile *.html 0r $VIM/templates/template.html ヘルプは :he template
ステージ上で選択されたインスタンスに、ライブラリ内と同じ名前を付ける JSFL を書いた。 /** * 選択されたインスタンスにライブラリ内と同じ名前を付ける */ var selectedItems = fl.getDocumentDOM().selection; for (var i = 0; i < selectedItems.length; i++) { var element = selectedItems[i]; var regex = /(.*\/)?(.*)$/; var result = regex.exec(element.libraryItem.name); element.name = result[2]; } デザイナが配置したインスタンスに、名前を付ける際に使った。
次のページ
このページを最初にブックマークしてみませんか?
『bitmap.dyndns.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く