<   2014年 07月 ( 5 )   > この月の画像一覧

目的


事の発端は、新しくお下がりされた Android 端末である。
標準音楽プレイヤーであるところのWALKMAN様が、私には激しく使いづらい。
前の端末に入っていた標準プレイヤーもイマイチ残念な子だったが、
そっちのほうがまだ良かった。
私が満足できるアプリも(無料では)存在しないようだ。
ならば自分で作るしかない。

しかしちゃんとした Android アプリは作ったことがない。
サンプルだのプロトタイプだのばかりである。
一から作るのは敷居が高い。
そうだ、前の端末の標準プレイヤーの作りを参考にさせてもらおう!

作業環境は windows7。
前の Android 端末はナイショ(使用規約的な意味で)。

準備


参考にしたページは以下。
Androidアプリケーションのリバースエンジニアリング | JUMPERZ.NET Blog

・参考にしたいアプリを前の端末から持ってくる
/system/apk 以下にいた。
少なくとも、*.apk, *.odex のセットが必要。
他に /system/framework も全部PCにコピーしておく。

・リバースエンジニアリング用ツールたちをDL

JDK
smali
baksmali
dex2jar
jad

smali と baksmali は以下から jar を落とす。
Downloads - smali - An assembler/disassembler for Android's dex format - Google Project Hosting

dex2jar は以下。
Downloads - dex2jar - Tools to work with android .dex and java .class files - Google Project Hosting

jad はこちら。
JAD Java Decompiler Download Mirror

apkを解凍


フツウにzip解凍すれば良い。

./myapk/ などをテキトウに作成して配置。

odex → smali


DOS窓で以下を実行。
.\myapk\smali\ 以下に各種ファイルが作成される。
-d の後のは、 /system/framework をコピーしたディレクトリ。
> java -jar baksmali.jar -a 9 -x appli.odex -o .\myapk\smali\ -d .\framework


引数なしで実行するとヘルプが出るので参考にする。

jar や -d の後のディレクトリなどは、ちゃんとパスが解決できるように指定すること。

-a の後の API-Level はこちらで調べた。
AndroidのバージョンとAPIレベルの対応関係

smali ファイルなんか見てもわからないので、作業を続けて *.java にしていく。

smali → dex


dex2jar に掛けるために、いったんdexにする。
.\myapk\smali\ 以下のファイルを dex に変換。
> java -jar smali.jar -o .\myapk\appli.dex .\myapk\smali\


dex → jar


.\myapk\appli_dex2jar が作成される。
> dex2jar.sh .\myapk\appli.dex


jar → class


.\myapk\class などを作って、フツウにzip解凍

class → java


.\myapk\class 以下を再帰的にデコンパイルして
*.java というファイル名にして、.\myapk\src ディレクトリに出力。
ディレクトリ構造をそのまま保持してくれるのは嬉しい。
> jad -o -r -sjava -d.\myapk\src .\myapk\class\**\*.class


「Couldn't fully decompile method ...」とか
たくさんのエラーが出るけど、
自分で作るための参考にするだけで、
大まかにわかれば良いので、これでおk。
[PR]
by xiaoxia | 2014-07-31 17:55 | ソフトウェア | Comments(2)
write.svm で出力したモデルファイルの内容について。
あちこちからかき集めた内容を、やや意訳してみた。
合ってないかも。


rho

バイアス項
決定関数 wx+b の切片 -b(正負を逆にするとbになる?)

ProbA, ProbB

2つで1組になっている。
確度を出力する際に使用するパラメータで、probability=FALSE(確度を出力しない)のときは、値が空になる。
二値分類(1 / (1 + exp(a x + b)))の判定予測値のためのロジスティック分布のパラメータである。
(↑ここの訳はかなり自信ない
  なんでロジスティック分布が出てくるんだろう?
  ガウシアンカーネルのときだけ、じゃないんだよね?
  よくわかってない)
k個のクラスがあるとき、k*(k-1)/2 の二値分類問題を解くことになり、rho, probA, probB も同数出力される。
これらの値は、二値分類問題の順番に対応して並んでいる。
二値分類問題は
  1 vs 2, 1 vs 3, ..., 1 vs k, 2 vs 3, ..., 2 vs k, ..., k-1 vs k.
という順番で、この番号(ラベル)はlabelの項で出力されていて、教師データのラベルである。
(教師データのラベルは、クラスの出現順に番号が付与され、
二値分類の場合は -1/1、多値分類の場合は 1,2,...のように付与される)

nr_sv

各クラスのサポートベクタの数。
クラスの数だけ、数字が並ぶ。
この数字を全部足すと total_sv の数になる。

SV

行頭のセミコロンなしの数値は、各クラスに対応した係数。
セミコロンありの数値は、特徴量番号:重み。
特徴量番号は1から。



SVの見方は結構ややこしい。
Q: Can you explain more about the model file?
+-+-+-+--------------------+
|1|1|1| |
|v|v|v| SVs from class 1 | SVが数行並ぶ
|2|3|4| |
+-+-+-+--------------------+
|1|2|2| |
|v|v|v| SVs from class 2 |
|2|3|4| |
+-+-+-+--------------------+
|1|2|3| |
|v|v|v| SVs from class 3 |
|3|3|4| |
+-+-+-+--------------------+
|1|2|3| |
|v|v|v| SVs from class 4 |
|4|4|4| |
+-+-+-+--------------------+


教師データのラベルに文字列を付与していた場合、
この1とか2とかがどれに当たるのかが、すごくわかりづらい。
多分こんなじゃないかと想像していることを以下に書いてみる。
違ったら誰か教えて。

この1とか2とかはクラス番号なので、ラベル番号とは違う。
モデルファイルに
  label 4 3 2 1
とある場合は、
  class 1 -> ラベル4
  class 2 -> ラベル3
  class 3 -> ラベル2
  class 4 -> ラベル1
となる。
このラベル番号は、教師データのラベル文字列の出現順に1から付与される。
出現順は何を見たらわかるかといえば、
predict の出力結果をprintすると出力される確度表のヘッダの順番だと思う。
これ以外に出力されていない希ガス。
Labels は全然違う順番になっちゃってる。
(文字で降順ソートされているのかな?)
[PR]
by xiaoxia | 2014-07-30 17:41 | ソフトウェア | Comments(0)
Android端末、ダンナのお下がりをもらった。
Galaxy S SC-02B(初代)から Xperia SO-03D にお引越しである。
使い始めて3週間。
色々思うところが。

良いところ


・UI が最近の Android ぽい
GalaS はまだ過渡期だったようで、各社バラバラだった。
この3年ほどでキャリアによる味付けの範囲がまとまってきたのだなと思う。
ホームや戻るボタン、設定の仕方などが、かなり最近の Android ぽい。
Xperia は、過剰なカスタマイズがなく、素の Android に近くて使いやすいと思う。
・重みがちょうど良い
GalaS (約120g)よりも重く(約150g)、片手で持つとずっしり感があるが、
その分、片手で操作しているときの安定感が良い。
幅は GalaS と同じくらいで、厚みのほうはちょっと増したものの、
片手での使い勝手はなかなか。

ちょっと残念な気もするところ


・docomo 謹製アプリのプロセス多すぎ
SIM なしで使っているので、これらのプロセスは不要。
root 取ってこれらを kill することもできるが、
不安定になると怖いので、そこまではしないけど、気分的にはしたい。
(/etc/init.d/とかないのかな?)
SIM の有無で起動判定してくれればいいのに。
・システムフォントが少ない
GalaS には「アップルミント」「チョコクッキー」など
ゆるふわ女子力高い系フォントがいくつか入っていた。
お気に入りは「ティンカーベル」で、
アルファベットに邪魔なかわいい星だのピロピロだのが付いていて、
ゆるゆるな脱力感が良かったのだが。
Xperia にも入れたいのだが、どこに入っているのだろう。
GalaS:/system/fonts には見当たらなかった。
 追記:/system/app/以下にパッケージとして入っているようだ。
   でもフォントの野良パッケージを見つけて入れたので解決。
・プロセス管理しづらい
GalaS には samsung 謹製プロセス管理アプリがあったので、
不要なプロセスをモリモリ切って、電池温存に勤めていたが、それができない。
プロセス管理アプリもあるが、
現在プロセスとして動いている以外の、オンメモリのアプリがわかりづらい。

やや残念なところ


・ホーム画面のショートカット
アプリをインストールすると、自動的にホーム画面にショートカットが作られる。
ホーム画面は基本的にウィジェットのみで、キレイにしておきたい派なので、
いちいち削除しており、非常に面倒くさい。

追記:以下の設定で修正できた
Google Playストア
→ 端末の「MENU」ボタン
 →「設定」
  →「ショートカットの自動追加」のチェックをはずす

ものすごく残念なところ


標準音楽プレイヤーであるところの天下の SONY ブランド WALKMAN 様が、
私には激しく使いづらい。
ネットの評判を見ると、イコライザとか音質などは良いらしい。
しかし私は生音至上主義なので、そのあたりは重要でない。

・スマートプレイリストが不要
勝手にリストが作られるのは許すとして、
リスト自体を非表示にできない。
リストのナカミも編集できない。
つボイノリオとブラームスと乙女系ドラマが並ぶカオスな状態である。
そして他の音楽プレイヤーを起動すると、
そのプレイリスト一覧もこのリストが出てくる。
不要な場合は、リスト自体を非表示にさせて欲しい。
リストの曲目を削除できるようにして欲しい。

・再生範囲の設定が貧弱
「アーティスト」「アルバム」しかない。
私は聴くジャンルが比較的広めだろうと思うのだが、
それらをフォルダで分けているので、
フォルダごとの再生はマストである。
嘉門達夫も聴くし、ドボルザークも聴くし、アニソンも雅楽も海外の民族音楽も聴く。
「替え歌メドレー」と「新世界」があったら、フォルダ分けたくなるよね?
「フォルダ」は欲しい。
加えて「ジャンル」「年」、可能であれば「作曲者」も加えて欲しい。

・再生範囲の再生順が設定できない
見た目(タイトル順?ファイル名順?)か、シャッフルか、の二択である。
「タイトル順」「ファイル名順」「トラック番号順」などでソートさせて欲しい。
[PR]
by xiaoxia | 2014-07-29 17:42 | コンピュータ関係 | Comments(0)
絶対音感保有者の音楽的音高認知過程
絶対音感保有者が一種の音楽的ハンディキャップをかかえているかもしれない

今日の一番びっくりしたこと。
ちなみに、私は絶対音感は持っていない。
バイオリンの音限定で、相対音感のようなものが多少ある程度。

日本には絶対音感信仰みたいなものが確かにあるなぁと感じる。
絶対音感のある人には「すごーい!」と思ってしまうし、
相手もその能力を良いものと思っている風を感じる。
それがあったからと言って、
別段良いこともないわけだが、
それでもなんとなくすごい感じがする。

そこで、絶対音感保有者が音楽的にどれだけすごいか、という
実験を行ったのが、上のリンクである。
思った以上に、絶対音感保有者は
ピアノの白鍵にしばられているのだなぁと感じる。
市井のピアノの先生になるならば好都合だろうけれど、
本当の音楽のプロとして生きていくならば、
むしろ絶対音感など無いほうが良いのではないか、
という感じがするほどである。

ある一部の感覚が高度に研ぎ澄まされているというのは
不便も多いのだなと思う。
たとえが違うかもしれないが、
自閉症の人は、色々な感覚が研ぎ澄まされているために、
人ごみや光や音が大変に苦手らしい。
自閉症の人の感じる世界を体験できる動画というのを先日見つけたが、
実は私は、動画を見る前に説明文を読んだだけで、
ちょっと気持ちが悪くなった。
ある面では似ているものを感じる。

私の周りにも絶対音感保有者と言っている人はいる。
みんな、音楽関係の仕事ではなく、そこらのフツウの仕事に就いている。
彼らがどの程度の音感かわからないけれど、
それがあって良かったという話も、困ったという話も聞かない。
普通の人として暮らす分には、
それはあってもなくても、どちらでもそう差はないのだろう。
[PR]
by xiaoxia | 2014-07-09 17:51 | | Comments(0)
使い分けがわからない。
日本語だと「正規化」とか「標準化」とか「正則化」書いてあって、
あまり厳密に区別していないように見える。
「Normalization Standardization Scaling」で検索すると、
多くの人が混同しているようで、
「違いがわかりません!」というページがたくさん出てくる。
ぜんぶ英語だけど。
で、自分なりにまとめてみた。
間違ってたら教えて偉い人。

・Normalization
各ベクトルのL2ノルムが1になるように収める。
L1ノルムを指定することもあるらしい。
(ノルム norm を使うから normalization なの?)
「正則化」と訳してあることが多い。
L2ノルムとは各特徴量の二乗の和。
L1ノルムは二乗しない絶対値の和。
ちなL0ノルムもあって、値が0でない特徴量の和、らしい。
どんな説明を読んでも、なんかぴんと来ない(笑

・Standardization
各ベクトルの平均0、標準偏差1にする。
これは各ベクトルなのか、
全ベクトルの特定の feature ごとなのか、
どっちもアリなのかは不明。
ちなみに R e1071 パッケージ svm の scale オプションは、
TRUE にすると、全ベクトルの各特徴量を串刺しで
ゼロ平均+分散1の変換をするので、
厳密には standardization なのだろうと思う。
(標準偏差を見るから、standardization なのかも)

・Scaling
値を特定の範囲([0,1]とか?[-1,1]とか?)に収める。
これも、各ベクトルなのか、
全ベクトルなのか、
全ベクトルの特定のrowなのか、
全部アリなのかは不明。
normalization も standardization も含めて scaling と言ったり、
別扱いしているページもあったり、
色々でよくわからない。


参考(主なもの):
http://scikit-learn.org/stable/modules/preprocessing.html
http://blog.pengyifan.com/scale-standardize-and-normalize-data/
http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-16.html

×××

機械学習とかパタン認識とかの説明を読むと、
どうも日本語よりも英語のほうがわかりそうな気がする
(多分に気のせいだと思うんだが)。
日本語に訳して、難しい感じになっちゃったり、
視認性が下がったりして読みづらくなっているのかなぁ。
例えば、クラス分類とクラスタリングを混同する人が多いのも、
classification / clustering と書くと、
全然違うから混同しないのではと思ったり。
[PR]
by xiaoxia | 2014-07-01 18:42 | コンピュータ関係 | Comments(0)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞