2008-01-01から1年間の記事一覧

はてなブックマークのタグを当てるゲームを作った

はてなブックマークのタグを当てるゲームを作った。タグを入力後、エンターを押して正解なら、次の問題に進む。 はてブ - タグ当てゲーム はてなから引っ張って来た ホットエントリの feed には 4、5 個のタグしか無く、正直なところ、難しすぎてゲームにな…

イベントドリブンのモデルには pull 型と push 型がある

Observer パターン、というか一般的なイベントドリブンのモデルには、pull 型と push 型がある。オブジェクト倶楽部の説明がわかりやすい。 pull 型 - Observer 側が通知受理時に情報を Observable 側に問い合わせる push 型 - Observable 側が通知時に情報…

便利なコメントのテクニック

地味に便利な ActionScript/JavaScript で使えるコメントテクニック。 実行するブロックを切り替える (参考) テスト用のコードを切り替えるときに便利。 //* doHoge(); /*/ doFoo(); //*/ この状態では doHoge() が有効で、先頭行のスラッシュを一つ取ると、…

あるファイルのリビジョンを元に戻す方法

TortoiseSVN/Subversion で、特定のファイルを過去のリビジョンに戻す方法。 "このリビジョンに戻す" を使う (TortoiseSVN) 対象ファイルのログウィンドウから、戻したいリビジョンを選択し、コンテキストメニューから "このリビジョンに戻す" を選択する (…

タイムラインを Vim のキーバインドで移動する

タイムラインを Vim (Vi) のキーバインドで移動できるように設定した。Ctrl/Cmd-Shift-HJKL で選択状態のフレームが移動する。どのキーを押しているかが伝わらないデモ。 キーそれぞれに別々の JSFL コマンドを割り当てるのが面倒。関数呼び出しができたら楽…

mru.vim を入れた

Vim

mru.vim を入れた。最近開いたファイル (Most Recently Used) リストを表示できる。 :MRU Vim のデフォルト機能であったと思ったが、気のせいか。

コメントブロックを挿入する Vim スクリプトを書いた

ActionScript のコードにコメントブロックを挿入する Vim スクリプトを書いた。カーソル位置に任意の文字ブロックを挿入するスマートな方法がよくわからず、泥臭い書き方になった。 function! ASCommentWriter() let c = col(".") let l = a:firstline - 1 l…

「論理戦」に勝つ技術―ビジネス「護心術」のすすめ

『「論理戦」に勝つ技術―ビジネス「護心術」のすすめ』を読んだ。結論から言うと、その技術とは「問い」のことである。自分の主張を質問形式にすることにより、議論を有利に進めることができる。 「問い」が強力な理由は以下の 2 点。 相手に回答を強要でき…

String.replace の第二引数には置換関数を指定できる

String.replace の第二引数には、置換後の文字列を返す、独自の関数を指定できることを知った。目的にもよるが、グルーピングを使うときは RegExp.exec を繰り返すよりも使いやすい。 ただし、置換関数に渡される引数が可変で、いくらか複雑なので注意が必要…

== の代わりに === を使え

JavaScript: The Good Parts を斜め読みしていたら、面白いことが書いてあった。 比較演算子の == や != を、=== と !== の "evil twins" と呼び、"never use the evil twins" という。それはなんでかというと、型が違うときの評価が複雑だから。 以下のコー…

インスタンス名を入力するプロンプトを出すコマンド

選択されたインスタンスに名前をつけるためのプロンプトを出す JSFL を書いた。と言うのも、マウスでインスタンスを選択してから、プロパティタブのインスタンス名のテキスト入力にフォーカスするキーボードショートカットがわからなかったため。 ソースコー…

二重否定で Boolean にキャストする

二重否定 (double negation) で簡単に Boolean にキャストできる。 var hoge; !!hoge => false !!0 => false !!null => false !!undefined => false !!"" => false

Fiddler の AutoResponder のルールに正規表現が使える

Fiddler の AutoResponder のルールには、正規表現を使うことができる。バージョン 2.1.4.2 からサポートしていたらしい。早速アップデートした。 例えば、以下は画像にマッチするルール。regex: で開始するだけ。 regex:.*\.(jpg|gif|png) Google トップペ…

ライブラリを Unix コマンド風に操作するエクステンション

ライブラリのアイテムを Unix コマンド風に操作するエクステンションを作った。 デモとソースコード。 実装した機能は ls mv cp rm clear ファイル名のタブ補完 だけ。ディレクトリ構造を保持していないので cd は使えない。パーサらしきものは、スペースで …

TextField のキャレットを移動する

TextField のキャレットを移動するには、 tf.setSelection(tf.text.length, tf.text.length); setSelection の引数を同じ値にする。 LiveDocs によると、 2 つのパラメータ値が同じ場合は、caretIndex プロパティを設定した場合と同様に、このメソッドは挿入…

eregex.vim を入れた

Vim

eregex.vim を入れた。Vim の正規表現は鬼のようにエスケープが入るため、書いているうちに意味不明になりがちだが eregex.vim で問題解決しそう。 Vim だとこう書くのが、 :%s@\("hoge\/foo\/images\/\)\([^"/]\+\(gif\|jpg\)"\)@\1static/\2@g eregex.vim …

記録モードを使ってみた

Vim

記録モードを使って、テスト用の XML データを作ってみた。 <items> <item id="0"> <hoge>hoge0</hoge> <foo>foo0</foo> <bar>bar0</bar> </item> </items> このような XML の、item ノードを、数字をインクリメントしつつ増やすのが要件。 まず item ノードの先頭 (line 4) にカーソルを置き、 qavjjjjjy6jP^Aj0^Aj0^Aj0^Akkk0q10@a…

Array.sort と Array.sortOn は不安定なソート

ActionScript 3.0 の Array.sort と Array.sortOn は不安定なソートなので、オブジェクトのキーでソートする際には注意が必要。 price というメンバを持つオブジェクトを 100 個作って、price をキーにソートする例。まずは Array.sort。 var array:Array = …

流れるようなインタフェースを持つ Command

流れるようなインタフェースを持つ Command クラスを書いてみた。実装のポイントは以下の 2 点。 Command 自体にキューイングの機能を持たせた。 Composite パターンを適用した。 実行するとこんな感じになる。 普通に数珠つなぎで、 var hoge:Hoge = new Ho…

:earlier と :later の使いどころが不明

Vim

Vim 7 から実装された :earlier や :later は、凄い機能だと思うが実務で使ったことがない。しかし、「数分前に書いたあのメソッドをやっぱり使いたい」というシチュエーションはたまにある。そんなときは思い出して使ってみよう。「数分前」を特定できれば…

ブラ・ウザー 4.0 を公開

10 年ほど前に Delphi で作った「ブラ・ウザー 4.0」をオープンソースで公開する。 バイナリとソース。 関数を使っていないし、変数名が a や b でいろんな意味でひどいプログラムだが、今こうして ActionScript などを書いているプログラマとしての自分の原…

BulkLoader の type は指定した方がよい

BulkLoader でちょっとはまった。ファイルタイプを明示的に指定しないと、サーバプログラムが出力するファイルを取得できない (参考)。 // returning a simple text bulkInstance.add("http://mysite.com/top-ten.php", {type:"text"}); // returning a xml …

イベントをスルーするイディオム

今日知ったイディオム。なるほどと思った。 以下は、至って普通のコード。 package { import flash.events.*; import Hoge; public class Test { public function Test() { var hoge:Hoge = new Hoge(); hoge.addEventListener(Event.COMPLETE, trace); hoge…

LiveDocs をローカルに置く

追記 : 2008.05.21 Flex Builder が入っていれば、リファレンスの zip ファイルもインストールされている。Adobe.com に負荷をかけないためにもそちらを使うべき (参照)。恐らくトライアル版でも同様のファイルがあるはず (ライセンス的にはグレー?)。 追記…

ExPreloader で 読み込み先 SWF ファイルの参照を得る

Progression の 標準的な Preloader(ExPreloader) 内で、読み込み先の index.swf の参照を得たい。 なぜかというと、preload が終わった時点で index.swf を自動再生するのではなく、ExPreloader 自身が index.swf の再生を制御したいから。 flash.display.L…

coLinux の swap 領域を設定する

coLinux に swap 領域を設定したつもりがされてなかった。 $ sudo vim /etc/fstab 以下の一行を追加して reboot。 /dev/cobd1 swap swap defaults 0 0 free で確認する。

coLinux をサービスに登録する

coLinux を Windows のサービスに登録した。 >cd C:¥Program Files¥coLinux >colinux-daemon.exe --install-service "coLinux" @fedora6.conf

MacBook に Vim 7.1 を入れた

MacBook に Vim 7.1 を入れた。既に入っている Vim 7.0 のアンインストール方法がわからなかったので、port install を強行した。 $ sudo port install vim $ cd /usr/bin $ sudo rm vi vim vimdiff view $ sudo ln -s /opt/local/bin/vim ./vi $ sudo ln -s…

import しているファイルを開く

gf を ActionScript の import 文で使うための設定をした。 import com.example.bar.foo.Hoge; この一行の上で gf を押したら com/example/bar/foo/Hoge.as が読み込まれる。 ActionScript の文法は Java のそれに似ているので Java でそういった tips があ…

IE で FlashTracer を使用する

FlashTracer を IE で使う方法。……という大げさな tips でもないが、IE に DebugPlayer が入っていれば、Firefox の FlashTracer ウィンドウに trace 内容が表示される。