androidアプリ開発はじめました
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使用時間[タブ]プロセス名(スレッド名)
と表示順序を変更しています。
CGIでのperlプロファイリングを簡単に
昔書いたperlのCGIが、データが増えてくると重いことがわかって、まあだいたい重い場所は見当がついてるけど、一応プロファイリングして確認しておこうと思いまして、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 };
mixiアプリ作りました
SmoothAlbum
http://mixi.jp/view_appli.pl?id=7540
前作ったFlashのフォトアルバムの使いまわしですが・・・。
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専用です。