battery-historian使ってみた

BatteryHistorianとは2014年のGoogleI/Oで発表されたAndroidアプリにおける電力使用量を詳しく調査するための開発者ツールの一種です.

前置き等はこちらの記事が参考になるかとおもいます.

techlife.cookpad.com

この記事ではpythonスクリプトという説明がなされていますが,あるとき見るとやり方が変わっていたので,それについてだらだらっと書きます.


battery-historianの公式リポジトリはこちら github.com

基本的にはこのリポジトリのREADMEを参照すれば良さそう.

またBatteryHistorian2.0からはpythonではなく,Golang製になっていました. Golangそのものの設定はググるといいと思う.GOPATHだけちゃんと設定していればいい.

ちなみに自分はGOPATH=~/localにしてる.そうするとそれ以外のソースコードとかも統一して管理できる.

Protocol BufferのGoライブラリを入れる

$ go get -u github.com/golang/protobuf/proto
$ go get -u github.com/golang/protobuf/protoc-gen-go

The compiler plugin, protoc-gen-go, will be installed in $GOBIN, which must be in your $PATH for the protocol compiler, protoc, to find it.

protoc-gen-goというバイナリを使用するらしいので,PATH通しておけとのこと.$GOBIN設定していればその場所に,してなければデフォルトで$GOPATH/binに入るらしい.

改めてREADME読んで$GOBINなるものを初めて知った.デフォルトは$GOPATH/binらしいから普通の人は気にしなくていいと思う.

Protocol BufferはGoogleが作ってるシリアライズフォーマット.研究室のコードで使われてた形跡とかあったけどあんまり知らない.

Battery-Historianダウンロード

# battery-historianダウンロード
$ go get -u github.com/google/battery-historian
# battery-historianのディレクトリに移動
$ cd $GOPATH/src/github.com/google/battery-historian

# セットアップスクリプトを起動
$ bash setup.sh
# Battery-historianサーバ起動
$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

あとはgitから落としてきた上で,セットアップスクリプト動かすだけ.

見て分かる通り今回のバージョンからGolangによるサーバが立つかんじらしい.

ここまでできたらlocalhost:9999にアクセス. f:id:programmerMOT:20150711123805p:plain

統計データ抽出

あとは開発者モードをオンにしたAndroid端末を用意する.これはググって.

その後adbを利用して

$ adb bugreport > bugreport.txt

として出てくるbugreport.txtをbattery-historianにアップロードすると解析してもらえる.

bugreport出力は時間がそこそこかかるので注意.

あとデフォルトで取れるデータで記録されないものとかあるらしいので,イカのコマンドで有効にする*1

$ adb shell dumpsys batterystats --enable full-wake-history

bugreportのリセットはイカのコマンドで.

$ adb shell dumpsys batterystats --reset

データの可視化

無事ファイルをセットできると,こんな画面が見える.

それぞれのパラメータの意味はぶっちゃけ全部分かってない...

f:id:programmerMOT:20150711135951p:plain


参考文献

5分でわかるBatteryHistorianによるAndroidアプリの解析方法 - クックパッド開発者ブログ

google/battery-historian · GitHub

Battery Historian (unofficial) - Google Docs

*1:ぶっちゃけこの操作の意味分かってない.また調べないと...

zshを江添さんっぽくする方法

mattn.kaoriya.net

要するにパクリリスペクトを受けた

bashではコマンドが無いときはcommand_not_found_handleでフックできる.

zshではちょっと違ってcommand_not_found_handlerでフックできる.rを忘れずに

command_not_found_handler(){
  echo "$1: コマンドではない。"
}

f:id:programmerMOT:20150601124925p:plain

mattnさんのように,最後にreturn 127;とつけたらzsh標準のnot foundも出てきて最初かっこわるかった.時間を見つけてソース読んでおきたい.

curlするruboty plugin書いた

書いた

github: ruboty-http_curl

gem: ruboty-http_curl | RubyGems.org | your community gem host

jenkinsのビルド開始とかをrubotyからしたくて,curlコマンド打てるようになりたかったから作った. ついでに,gemsへのアップロードもしてみたかったので勉強がてらやった.

ぶっちゃけ自分でも使いにくい.アップデートはやるつもり.

ruboty-gen

Ruboty の Plugin のつくりかた #ruboty - Qiita

ここを参考にpluginを書きました.ありがとうございます.

rubygems

なんかruboty-genに全部用意されてて,rake releaseってしたらアップロードされた便利.

rubygemsのアカウントつくるのも簡単で,rubygemsのページでアカウント作った後,おもむろにこのコマンドを打てみたいなこと言われるから打ったら認証情報も落ちてきて便利だった.

おわりに

長文書く力なくなってきた.

2015/04/06に解決した問題

今日解決した問題雑に書く.

とあるマシンが再起動時に上がってこないうえsshdも立ち上がってない

マシンのリブート時にNASへのマウントでパスワード求められて止まってた.sshd起動前に止まってたからsshは入れないのにpingは通るみたいな辛い感じだった.apachessl鍵とかパスワード付きだと起動時にパスワード求められて止まるのと同じ症状かな.

NASにはcifsでマウントするんだけど,guestでアクセスできればよかったので/etc/fstabにguestでつなげるよう設定を書いた.

/etc/fstabに

//xxx.xxx.xxx.xxx/nas_dir /mnt/mnt_dir     cifs    defaults,guest 0 0

ってした.

slack移行の準備

slack移行のために通知をslackでも有効にした.物によって通知先変えたいからかなり頑張った.時間があったらジョブを複数指定して指定したジョブの通知をあそこに向けるみたいなプラグイン書きたい.ジョブを分けているとたくさんあって大変*1.今回は手でjenkinsおじさんの通知を全部書き換えた.死ぬかと思った.

jenkinsおじさんのジョブ階層化

jenkinsのジョブが死ぬほどあってスクロールとかもろもろ大変だったので,階層化するプラグイン入れた.

参考文献: blog.fenrir-inc.com

これの

Categorized Jobs View - Jenkins - Jenkins Wiki

Categorized Jobs Viewというのを入れた.正規表現でジョブを区分けもできるので,プロジェクトごとに共通した単語が入っていればプロジェクトごとに分けるのも簡単.

以上

*1:ユニットテストとかアクセプタンステストごとに分けてる

mavenをgradleにするの簡単になってた

pom.xmlが鎮座するプロジェクトで,とりあえずgradle化しようとしておもむろにgradle initしたらgradleの関連ファイルが自動生成された上いい感じにpom.xmlを読んでいい感じのbuild.gradleが生成されてた.便利.

dependenciesとかrootProject.nameとかいい感じにセットアップされてて本当に便利.

シンプルなpom.xmlだったというのもあるだろうから,めっちゃ複雑なやつのときはどうなるか今度試したい*1

*1:複雑なpom.xmlとは

bitbucketのリポジトリURLを出すchrome extension書いた

書いた.

programmerMOT/repo_url_expand_chrome_extension · GitHub

developerじゃないから野良だけどまあいいでしょう.

入れ方はこの辺り( http://chrome.half-moon.org/49.html )みたらいいと思います.

これを入れてbitbucketのdashboardにアクセスすると,

f:id:programmerMOT:20150224210604p:plain

こんなかんじにリポジトリURLが見えるようにしています.

これはcloneしたいなと思っていちいちリポジトリにアクセスして,URLコピーという動作がだるかったのでchrome extensionの勉強がてら作りました.

どうぞご利用ください.

ついでに

昔作ったやつも晒しておきます.

programmerMOT/RitsLibrarySearch · GitHub

これは文字列とかAmazonのページから某大学の図書館検索を行うextensionです.

f:id:programmerMOT:20150224210949p:plain

f:id:programmerMOT:20150224210959p:plain

こんな感じで使えたりします.

こちらもどうぞご利用ください.

ホームディレクトリ構成とかもろもろ

こないだ使ってるmacの再インストールした.ついでにディレクトリ運用を全面的に見なおすことにした

忙しい人向け

前とあんまり変わらなかった

/Users/mot以下の構成

~/local : この下にbinとかsrcとかlibとか入れる.ついでにGOPATHとしても利用される

~/works : この下に組織ごとにディレクトリを分ける.(研究室,バイト先,個人プロジェクトetc).その下にさらにプロジェクトごとに分ける感じ

あとghqリポジトリ管理とかしてる.(参考: http://qiita.com/strsk/items/9151cef7e68f0746820d)

あんまり書くこと無い.こういうの書いたほうが他の人の参考になるかもみたいな情報あったらコメントしてもらえたら追記するかもしれない.