androidアプリ開発はじめました

GW中にXperiaを買ったので、早速アプリ開発にも着手。

Xperia(に限らずスマートフォン全般だと思いますが)、電池の持ちが悪いので、常駐して動く余計なプロセスがないか気になります。
そこで、任意の区間での各プロセスのCPU使用時間を計測するアプリを作ろうとしています。

とりあえず、検証用に作ったもの。(野良アプリの直リンクです)
http://inutch.net/droid/ListProcStat.apk

「get stat」ボタンを押すと、

プロセス名(スレッド名),utime,stime

のフォーマットで出力されます。
utime: ユーザモードでのCPU使用時間
stime: カーネルモードでのCPU使用時間

やってることは、単に /proc ファイルシステムの中身を読んで整形しているだけです。
これだけじゃ何もわからないですが、間隔を置いて2回測定して、「send」ボタンでPCに内容をメールで送信して、PC側でEXCELとか使って2点間の差分を取れば、各プロセス/スレッドに対して、その区間のCPU使用時間がわかります。
※自分用に作ってるので、TO: のメールアドレスがデフォルトで僕のアドレスになっています。ご注意ください。
#なんか、普段仕事でやってることと変わらない気が・・・

これから、アプリとして単体で使えるように作りこんでいきます。

  • (済)測定開始時と測定終了時のデータをそれぞれ保持して差分を表示するようにする。
  • (済) /proc の読み込みはGUIとは別スレッドで。
  • プロセス名(パッケージ名)→アプリケーション名への変換。(わかりやすいように)
  • (済)表示のフィルタリング。(スレッドもすべて/プロセスのみ、全プロセス/動いたプロセスだけ、など)
  • GUIのデザイン。
  • 測定開始時の値を永続化してこのアプリ自体がkillされてもいいようにする。
  • 定期的な測定機能の追加。

ある程度アプリとしての体裁が整ってからMarketに載せます。

--- 2010/05/09 20:55追記 ---
上の(済)の機能は作りました。 
utime,stimeは区別しても意味が無いので、合計して表示するように変更しています。
ソート結果が見やすいように、

CPU使用時間[タブ]プロセス名(スレッド名)

と表示順序を変更しています。

http://inutch.net/droid/ListProcStat.apk

CGIでのperlプロファイリングを簡単に

昔書いたperlCGIが、データが増えてくると重いことがわかって、まあだいたい重い場所は見当がついてるけど、一応プロファイリングして確認しておこうと思いまして、perlのプロファイラを調べてみた。Devel::DProf と、Devel::Profile がよく使われてるみたい。

Devel::DProf http://search.cpan.org/~ilyaz/DProf-19990108/DProf.pm
Devel::Profile http://search.cpan.org/~jaw/Devel-Profile-1.05/Profile.pm

Dprofは、結果の表示に別コマンドが必要だけど、Profileは直接読みやすいフォーマットで出力してくれるみたいだから、Devel::Profileがいいな。

使い方は、
$ perl -d:Profile foo.pl
ってやるだけで、カレントディレクトリに prof.out っていうファイルが出力されます。

ただ、これだと、コマンドラインでは使えるけど、CGIのプロファイリングが出来ない。
Apache::DProf http://search.cpan.org/~FWILES/Apache-DB-0.10/lib/Apache/DProf.pm
はなんか準備が面倒だしなあ、、、と思ってたら、下記の記事を発見。
http://metatoys.org/propella/tips/Devel_DProf.html
そうか!perlの先頭行のパスの指定にオプションつけちゃえばいいんだ!
記事ではDProfでしたが、Profileでも同じことが出来ました(当然ですが)。

Windows上で、Apache+ActivePerlでテストするときは、先頭行は、
#!C:/perl/bin/perl
と書かないといけないので、そこにオプションをつけて、
#!C:/perl/bin/perl -d:Profile
としました。

IEでFlashVarsにJSONを渡すとダブルクォーテーションで切れる件

mixiアプリで、FlashVarsにJSON文字列を渡して、ActionScript側でデコードしようとして、ほかのブラウザではうまくいったのにIEだけ、ダブルクォーテーションで切れてしまう事に悩んでいたところ、下記の記事で文字列参照すればよいことがわかりました。
http://c-brains.jp/blog/wsg/09/01/15-202601.php
ただし、IE以外ではこれをやると逆にエラーになるので、下記のようにIE限定の対処としました。

  var json_str = JSON.stringify(json_obj);
  if( navigator.userAgent.toLowerCase().indexOf("msie") != -1 ){
    json_str = json_str.replace(/"/g,""");
  }
  var flashvars = {
    json: json_str
  };

Loaderで読み込んだ外部画像ファイルにスムージングをかける

ActionScript3 でコーディングしてて、Loader で読み込んだ外部の画像ファイルにスムージングをかけたくて、Loader の smoothing プロパティを探したけど無かったので、簡単なやり方を考えました。

Loader の Event.COMPLETE のイベントハンドラに下記の1行を加えるだけ。

protected function loaderCompleteHandler(event:Event):void {
    Bitmap(event.target.content).smoothing = true;
}

SoundBridgeでRSS表示するソフト

http://inutch.xrea.jp/soft/rokurss/

作りました!SoundBridge用のRSSリーダー

どうやって表示させるか悩んだ末、音楽を止めずに表示させるためには、Presetを1件書き換えて表示するしかないという結論に至りました。
Presetを書き換えた後で、IRコマンドを使ってPresetを表示しているため、下記の問題がありますが解決できない気がします。

  • 表示するRSSアイテムの先頭にPreset番号がついてしまう。

良い解決策を思いついたら教えてください!


2009/2/14 追記:
RSSアイテムの切り替え時に、IRの操作過程が見えてしまう」の問題は、ツール側でIRコマンドのバッファを止めたら解決しました。

RokuControlSwfバージョンアップ

http://inutch.xrea.jp/soft/rokuctrlswf/

ネットラジオの選局に対応しましたー。
あと、i-radio の各番組のURLから、再生用のリンクを解析する機能もつけました。他のサイトでも有効かなーと期待したけど、他のサイトではほとんどNGでした。今のところi-radio専用です。