Androidで戻るキーを無効にする

日本のブログだと、次のようにonKeyDownをオーバライドする方法が書かれているのをよく見ます。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

けど、api level 5 以上ならこっちのほうが簡潔で良さそうです。

@Override
public void onBackPressed() {
}

参考

Disable back button in android - Stack Overflow

ActiveRecord の size メソッドの落とし穴

size メソッドは、count メソッドと length メソッドのいいとこどりのメソッドです。

  • 既にデータがロードされていれば、それを使う
  • sql 発行されない
  • データがロードされていなければ、select count(*) from ... を発行する

なので多用していたのですが、このたび一つ失敗しました。

例えば User モデルに紐付いた Invitation モデルがあるとします。

invitation = current_user.invitations.build
current_user.invitations.size    # => 1
current_user.invitations.length # => 1
current_user.invitations.count  # => 0

関連の build メソッドで Invitation を増やすと、DB に入っていない状態にもかかわらず一つ増えた扱いになるのです。length も一緒。なので DB に入っている関連の数を取得したい場合は、count を使うのが良いですね。

追記

build で関連を増やすとその後の状態に影響するの、Rails 4.0 からっぽいです

emacsclient を homebrew でインストールしたものに変更

brew edit emacs

としたときにエラー。

emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".
emacsclient: No socket or alternate editor.  Please use:

    --socket-name
    --server-file      (or environment variable EMACS_SERVER_FILE)
    --alternate-editor (or environment variable ALTERNATE_EDITOR)

emacsclient と emacs のバージョンが合っていないのが原因。

emacs は brew で install 済み。

brew ln --overwrite emacs 

で emacsclient や emacs コマンドを /usr/local/bin にコピーして解決。