Androidで画面が出ている時だけ音を鳴らす

ActivityのonResume()とonPause()で制御すれば良いと考えられる。

が、ロックスクリーンが表示されてても音がなってしまって困る。

そんな時はonWindowFocusChanged()を使いましょう。

サンプルではonResume()だけを置き換えているけれど、条件によってはこのメソッドだけでハンドルできないかしら。

サンプルコード

とまあ

だいぶ昔のメモが下書きに眠ってたので公開してみました。懐かしいなあ。

Function::arguments

argumentsは引数リストだと思っていたら、実はオブジェクトらしい。
arrayにそのまま渡したい時に困るのだが、変換できる。

Array.prototype.slice.call(arguments)

https://developer.mozilla.org/en/JavaScript/Reference/functions_and_function_scope/arguments

Function::apply and call

JSのapplyってずっとよくわかってなかったので調べてみた。
schemeの(apply )と同じようなもんと考えて納得。

あるオブジェクトの関数を別のオブジェクトに適用する。

"hoge".slice()
//=> "hoge"

[].slice.apply("hoge")
// => ["h", "o", "g", "e"]

似たメソッドでcallがあるが、引数の取り方が異なる。

Array.prototype.slice.apply("hoge", [3,4])

Array.prototype.slice.call("hoge", 3, 4)

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

JDEEを使ってみる

Android書くときに、Eclipseもいいんだけど、やっぱり手馴れたエディタを使いたいよねってことでJDEEを試してみる。

というわけで、自分用コマンドリファレンス。

インストール

http://jdee.sourceforge.net/
JDEEとelibをダウンロードしてmake install

設定

Android SDK にもパスを通しておく
JDKのバージョンとか場所は適宜。書いてあるのはUbuntu環境でのもの。

;; jdee
(add-to-load-path "elib")
(add-to-load-path "jdee/lisp")
(autoload 'jde-mode "jde" "Java Development Environment for Emacs" t)
(setq auto-mode-alist (cons '("\.java$" . jde-mode) auto-mode-alist))

;; cedet
(add-to-load-path "cedet/cogre")
(add-to-load-path "cedet/common")
(add-to-load-path "cedet/contrib")
(add-to-load-path "cedet/ede")
(add-to-load-path "cedet/eieio")
(add-to-load-path "cedet/semantic")
(add-to-load-path "cedet/speedbar")
(add-to-load-path "cedet/srecode")

(setq semantic-load-turn-useful-things-on t)
(load "cedet")
;;(semantic-load-enable-code-helpers)

;; jde-mode-config
(custom-set-variables
 '(jde-jdk-registry (quote (("1.6.0.24" . "/usr/lib/jvm/java-6-sun/"))))
 '(jde-global-classpath (quote (
                                "~/lib/android-sdk/platforms/android-4/android.jar"
                                "~/lib/android-sdk/platforms/android-7/android.jar"
                                "~/lib/android-sdk/platforms/android-8/android.jar"
                                "~/lib/android-sdk/platforms/android-10/android.jar"
                                "~/lib/android-sdk/platforms/android-11/android.jar"
                                ))))

(add-hook 'jde-mode-hook
          '(lambda ()
             (c-set-offset 'arglist-intro '+)
             (c-set-offset 'arglist-close 0)
             (c-set-offset 'topmost-intro-cont 0) ;; new line on annotation
             (c-set-offset 'func-decl-cont 0)
             (setq indent-tabs-mode nil)
             (setq c-basic-offset 4)
             (setq c-set-style "java")
             ))

;; custom variables
(setq compilation-window-height 8)
(setq bsh-vm-args '("-Duser.language=en"))
(setq jde-import-auto-sort t)

;;; ant on jdee
(setq jde-build-function '(jde-ant-build))
(setq jde-ant-enabled-find t)
(setq jde-ant-program "/usr/bin/ant")
(setq jde-ant-read-target t)

;;; check style on jdee
(setq jde-checkstyle-option-rcurly (list "alone"))

(let ((elem (assq 'encoded-kbd-mode minor-mode-alist)))
  (when elem
    (setcar (cdr elem) "")))

コマンドリファレンス

  • テンプレート生成
Key Event
M-x jde-gen-class クラスのテンプレート生成
M-x jde-gen-xxx テンプレート自動生成
M-x jde-gen-get-set or M-x jde-wiz-gen-get-set-method Getter/Setter 生成
M-x jde-wiz-implement-interface インターフェースの実装ひな形生成
C-c C-v C-o オーバーライドメソッドのひな形生成 (jde-wiz-override-method)
Key Event
C-c C-v C-c コンパイル
C-c C-v C-r 実行
C-c C-v C-b antビルド
C-x ' or M-g n 次のエラー箇所へジャンプ
M-g p or M-g M-p 前のエラーへジャンプ
C-c C-v C-d デバッガ起動
M-x jde-bug-set-breakpoint カーソル位置にブレークポイントを設定
M-x jde-bug-clear-breakpoint カーソル位置のブレークポイント解除
M-x compile => ant -emacs build.xmlに従ってビルド
M-x compile => ant -emacs junit junitの実行
コンパイルエラー表示行でC-m エラー行へジャンプ
  • Import
Key Event
C-c C-v z 必要なimportをすべて追加する (jde-import-all)
C-c C-v C-z import文単体の挿入
M-x jde-import-kill-extra-imports 不要なimport文を削除
  • Edit
Key Event
C-c C-v C-. コード補完 (jde-complete)
C-c C-v C-l println
C-c C-v C-y カーソル位置のクラスのソースを表示
C-c C-v C-w カーソル位置のクラス名のマニュアルを表示
C-c C-v j Javadocコメント生成
C-c C-v C-s Speedbar起動
C-c C-v C-n JDKのドキュメントを表示
C-c C-v C-w クラスのJDKドキュメントを表示
C-c . 編集スタイルの切り替え
  • Othres
Key Event
M-x jde-chckstyle checkstyle
C-c C-v C-f プロジェクト内のgrep検索 (jde-find)
M-x jde-find-dig 実行時に設定可能なgrep検索
M-x jde-bsh-exit BeanShellの終了

Linux Kernelをビルドする

環境: Ubuntu 11.04 (VMWare fusion)

準備

$ sudo apt-get install build-essential
$ sudo apt-get install kernel-package libncurses-dev ncurses-dev libqt3-mt-dev

ソースを用意する

$ sudo apt-get install linux-source-2.6.38

$ cd /usr/src
$ sudo tar xvfj linux-source-2.6.38.tar.bz2
$ cd linux-source-2.6.38

バグフィックス

via https://bugs.launchpad.net/ubuntu/+source/linux/+bug/505420

$ ln -s /usr/src/linux-source-2.6.38/ubuntu /ubuntu

config

いったん設定初期化してから設定画面を立ち上げる。

$ sudo make mrproper
$ sudo make menuconfig
変更するconfig

Core i7 の 4coreでこんな感じの設定にしてみた。

Processor type and features:

Processor family > Core 2/newer Xeon
Maximum number of CPUs > 8
Preemption Model > Preemptible Kernel(Low-Latency Desktop)
Timer frequency >1000Hz
現在の設定をそのまま使うとき
$ sudo cp /boot/config-2.6.35-24-server .config
$ sudo make oldconfig

カーネルバージョンを変える

Makefileの4行目を書き換える

EXTRAVERSION=.3 

コンパイル

revisionは数値のみ指定できるみたい。適当に日付を指定。

$ make-kpkg clean
$ make-kpkg -j8 --initrd --revision=yyyymmdd kernel_image kernel_headers

20~30分かかりました。

インストール

$ dpkg -i ../linux-image-2.6.38_yyyymmdd_amd64.deb

再起動して完了。

TokyuRuby会議03で酔ってきました

というわけで、先週日曜に開催されたTokyuRuby会議03で盛大に酔いを晒してきました。

http://regional.rubykaigi.org/tokyu03
当日の様子: http://togetter.com/li/143092

勧められるがままにビールを空けていたら、いつのまにやら・・・
本当にすいません。

さて、本人は全く覚えてないのですが、抽選LT用に作っていた資料で話したらしいです。お酒って怖いですね。

一応資料上げておきます。
http://gomlog.com/docs/tqrk03/slides.html

最近はAndroid漬けな日々なので、それとRubyをからめてRubotoの紹介です。


迷惑をかけた方々、すみませんでした。
スタッフの皆様、おつかれさまでした。