PuTTYがCtrl+Sでフリーズするのを防ぐ

たまにvimを使ってると、保存したいのか知らんが間違ってCtrl+Sを押してしまうことがあります。するとターミナルがフリーズしますね。Puttyに限らずターミナルエミュレータ全般の話のようですが。

Ctrl+Qを押せば復活するんですが、今でもたまに押してしまって面倒なので、AutoHotKeyでガードするようにしました。

#IfWinActive, ahk_class PuTTY
{
	^s:: Send, {}
}
Categories: HowTo's, Tips and Tricks |Tagged , | Leave a comment

Javascriptで手っ取り早く関数をモックする

JsMockitoとかJSMockとか色々あるようですが、変にDSLのようなものを覚えるのも面倒だったのでスパッとモックできるようにしてみました。

機能は任意の関数を、別の関数で一時的に置き換えるだけです。Ajaxを使うような関数のユニットテストなどがやりやすくなります。

// Mock.makeで関数を置き換え。
// 最初の引数は関数名で、次は関数オブジェクト。
Mock.make("some_func", new_func);

// some_funcを呼ぶとnew_funcが実行される
some_func();

// Mock.revertで元に戻る
Mock.revert("some_func");

// Mock.revert_allで全てのモックが元に戻る
Mock.revert_all();

使い方の例(1)

// prompt()をモックしてみる
Mock.make("prompt", function(title, text){
  return "あばびぶべー!";
});

var name = prompt("What's your name?")
console.log(name); //=> "あばびぶべー!"

Mock.revert("prompt"); // これでもとに戻った

使い方の例(2)

test("#save saves the text", function(){
    var ajax_called = false;

    // $.ajaxをモックする。
    Mock.make("$.ajax", function(opts){
        ajax_called = true;
        // $.ajaxが呼ばれたときにオプションが適切かどうかをassertする
        equals(opts.url,        "/jsapi/pages/set_title");
        equals(opts.type,       "post");
        equals(opts.data.id,    page_id);
        equals(opts.data.title, new_title);
        // successコールバックを呼ぶ。
        opts.success({success:true}, null, null);
    });

    // MyLibrary.saveは$.ajaxを呼ぶはず。
    MyLibrary.save(25, "This is the new text.");
    ok(ajax_called, "Ajax was called.");
});

本体

var Mock = {
  store: {},

  make: function(funcname, newfunc){
    if (this.store[funcname]==undefined){
      this.store[funcname] = (function(){
        return eval(funcname);
      }).apply(arguments.caller);
    }
    (function(){
      eval(funcname+"=newfunc;");
    }).apply(arguments.caller);
  },

  revert: function(funcname){
    if(this.store[funcname]!=undefined){
      var self = this;
      (function(){
        eval(funcname+"=self.store[funcname];");
      }).apply(arguments.caller);
      this.store[funcname] = undefined;
    }
  },

  revert_all: function(){
    for(var funcname in this.store){
      this.revert(funcname);
    }
  },
};
Categories: Things I Made |Tagged , , | Leave a comment

DisplayObjectの基準点を変更する

できません。

つまりscaleXやrotationは必ず(0,0)を基準点として行われる。
別の基準点でスケールや回転をしたい場合はtransform.matrixに新しいMatrixをセットする必要がある。

var mat:Matrix = new Matrix();
mat.translate(-50, -50);
mat.rotate(45*Math.PI/180);
mat.translate(50, 50);
mat.concat(_sp.transform.matrix);
myobj.transform.matrix = mat;

参考:DisplayObject – ActionScript 3.0 Language and Components Reference

Categories: HowTo's, Tips and Tricks |Tagged , , | Leave a comment

技術ドキュメントに何を書くか

テクニカルなドキュメントを書くなら何を書くべきか、という記事。
Writing great documentation: what to write.

  • チュートリアルを作れ
    • 素早いのを:使い手が20分以内に何かしら達成感を得られるように
    • 簡単なのを:Foolproofな内容にしておく
    • ただし能力不十分な人は挫折させるようにする
    • その技術の大体の「感じ」が掴めるように、いろんな側面を見せる
  • トピックガイドを作れ
    • よくあるユースケースを網羅する
    • これだけ見れば使い方が分かるようにする
  • リファレンスを作れ
    • トピックガイドには些末すぎる引数や動作の詳細などを載せる
    • リファレンスをチュートリアルやトピックガイドの代わりにするな!
  • Javadoc的なのは使うな
    • 手で書き、手で編集して、手で整理したドキュメントには勝てない

元記事でも言われてるが、トピックガイドというのは公式ドキュメントに含まれてることが少ない気がする。そういえば一番役に立つのは全体を見渡せるし具体例にも触れられるトピックガイドなのかも。たとえばプログラミング言語やフレームワークなどの場合、いくらリファレンスが充実していても、トピックガイドがないと膨大なモジュールのうちどれを使えばいいのかが分からなかったりする。

ドキュメントの自動生成については元記事と同意しかねるかな。リファレンスなら自動生成でいいでしょと思う。残りの部分はそもそも手で書くしかないわけだし。

Djangoのドキュメントが優れてるらしい。僕がこれまでに見た中で優れたドキュメントといえば…。うーむ。何があったかな。The Subversion Book?CodeIgniterのドキュメントも良かったと思う。

Categories: HowTo's, Tips and Tricks |Tagged | Leave a comment

Flash CS5で何が新しいのか

Flash CS5がリリースされたということで。

  • ビデオにキューポイントを設定してASのイベントを発火させられる
  • Flex Builderのスゴイ 版Flash Builderがついてる
  • Flash内のASエディタも補完とかが良くなった
  • 物理エンジンが洗練された
  • イラレやInDesignで作られたテキストを持ち込みやすくなった
  • フォトショやイラレで作ったグラフィックを持ち込んでインタラクティブにできる(Flash Catalyst)
  • 単一の.flaだけじゃなく中身が独立したパックとして保存できる

物理エンジンってついてたんや。

Flash内のASエディタはCS3では割と使いにくいので是非とも新しいのを使ってみたい。

ソース:Flash CS5 First Look: Adobe Drops a Hefty Update Into Stormy Waters| Webmonkey | Wired.com.

ちなみにInDesign CS5ではe-bookを作りやすくなったらしい。

InDesign CS5 introduces interactivity to page layout – Yahoo! News

Categories: Ideas and Products |Tagged | Leave a comment