2017/04/19

Linux で Logicool Unifying Receiver のペアリングをする

Android 端末にキーボードとマウスを繋いで検証する必要が出てきたので、新たに [Logicool](https://www.logicool.co.jp/ja-jp) のキーボードを買いました。

マウスは以前買ったものがあり、[Unifying Receiver](https://www.logicool.co.jp/ja-jp/promotions/6072) を使えばUSBポートの節約にもなるというわけです。
Unifying Receiver は購入時にペアリング済みなので、USB端子に挿せばそのまま USB の有線キーボード・マウスのように使用可能です。ただ、今回のように別々に買った場合は、どちらかを再ペアリングする必要があります。 再ペアリングには Logicool の提供しているユーティリティを使用しますが、Windows と Mac 用しか提供されていません。 しかし、我が家のマシンはほとんど Linux。 つまり、買っても再ペアリングできないという問題が正確には Windows のノートPC等があるので、実は大した問題ではないです。Linux でやりたかっただけ!

2017/04/04

/system/app と /system/priv-app の違い

今まで、「Android のプリインアプリは `/system/priv-app` にいれておく」と深く考えずに使っていました。
しかし、`/system/` 以下をよく見てみると `/system/app` というディレクトリもあって、apk がインストールされていますAndroid 7.0 (Google APIs) のエミュレーターで確認。

そこで、これらの違いは何なのか調べてみました。


### priv-app 以下だけがシステム権限を持てる

[What's the difference of /system/app/ and /system/priv-app in Kitkat? - Google グループ](https://groups.google.com/forum/#!topic/android-platform/Vsa4IsJcOPE)

> Only apks in /system/priv-app can use "system"-level permissions. Prior to Kitkat, all apks on the system partition could use those permissions.

「(Kitkat 以降は)`/system/priv-app` 以下にある apk だけがシステムレベルのパーミッションを使用できる。 Kitkat より前は `/system` 以下にある全ての apk がシステムレベルのパーミッションを使用できる。」ということのようです。

ただ、以下を読むと、この動作に関しての公式なドキュメントが無いとのこと。
明らかに動作から推測できるので深追いはしていませんが、本来は AOSP のコードを読むなりして裏を取るべきですね。

[Android system apps and stopped state - Stack Overflow](http://stackoverflow.com/questions/17200575/android-system-apps-and-stopped-state)


### どう使い分けるのか
`/system/priv-app` にインストールされているアプリを見ると「電話帳」「カレンダー」等、プライバシーに関わるコンテントプロバイダやサービスが主です。
対して、`/system/app` 以下は UI を提供したり「重要だけど特別な権限はいらなそう」なアプリがインストールされていますEasterEgg ってアプリもインストールされていますが、重要ではないな :-)。

つまり、以下のように使い分けているようです。

- `/system/priv-app`  
  本当にシステム権限を必要とする特権アプリ

- `/system/app`  
  システム権限は必要としないけど、アンインストールはされたくないアプリ

2017/03/21

バッチファイルで virtualenv activate する

Windows でタスク処理をする必要が出てきたので、超久しぶり10年以上…か?にバッチファイルを書きました。

と言っても、処理自体は Python で書いて、起動をバッチファイルで行うだけなので簡単・・・と思っていたら、ハマりました。

### activate しようとすると止まってしまう
私が最初に書いたバッチファイルが以下です。

`test` という名前の virtualenv を activate して、`main.py` を実行するだけ。
当然、問題なく動くと思ったのですが、`activate.bat` を呼んだ直後に止まってしまうのですちなみに、`%HOME%` はホームディレクトリを指定してます。

```
"%HOME%\Envs\test\Scripts\activate.bat"

cd "%HOME%\tasks"

python main.py
```

### バッチファイル中からバッチファイルを呼ぶ時は `call` を使う
調べてみたら、バッチファイルを直接記述で呼び出すと止まるらしいイケて無いと思うのは私だけ?。

> 参考
> - [Windows、バッチファイルからバッチファイルを呼び出す方法あれこれ|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~](http://piyopiyocs.blog115.fc2.com/blog-entry-280.html)

というわけで、`activate.bat` の呼び出しに `call` をつければオーケーでした。

```
call "%HOME%\Envs\test\Scripts\activate.bat"

cd "%HOME%\tasks"

python main.py
```

2017/03/08

git repository 中の CRLF を LF に一括変換する

以下のサイトを参考に自分用にちょっとアレンジ。特にバイナリを変換しちゃいそうになって危なかったので。

- [Git for Windows でレポジトリー上の CR LF を LF に変換する手順 - てっく煮ブログ](http://tech.nitoyon.com/ja/blog/2014/03/28/git-crlf-to-lf/)

2017/03/07

ls の出力が文字化けみたいになってしまう原因


> 注:  
> 今回は文字コードがらみの話ではありません。日本語が文字化けしてしまう場合は文字コードを確認してみると良いでしょう。

`ls` の出力をそのままファイルに出力すると、文字化けのようになってしまうことがあります。

```console
`gutter: false;
$ ls
Dir/
$ ls > ../test.txt
$ less ../test.txt
ESC[0mESC[01;34mDirESC[0m
```

### 原因はフォーマットコード
これ、最初に見るとびっくりしますが、実はターミナルのフォーマットコードです。
`ls` の出力をターミナル上で確認すると、以下のように色付きなのがわかります。

つまり、表示されてはいないけど、ターミナルの装飾用フォーマットコードが同時に出力されているということです。 例えば `.bashrc` 等の中で alias を設定していたりすると、こういった動作になります。 ```bash alias ls='ls --color' ``` `ls` はわかりやすい例ですが、その他の装飾文字を出力するコマンドは同様の問題が起こる可能性があります。 ### 対策1 フォーマットを切る 当たり前ですが、フォーマットしないように設定すれば直ります。一時的に対策するには良いでしょう。 ```console `gutter: false; $ ls --color=never > ../test.txt $ less ../test.txt Dir ``` ### 対策2 `--color=auto` を指定する `--color` は `--color=always` と等価なので問題が起こりますが、 `--color=auto` にするとターミナルに出力される時だけフォーマットコードが挿入されます。 `.bashrc` 等の設定で、以下のように `--color=auto` にしておくと問題が起きにくくなります。 ```bash alias ls='ls --color=auto' ``` ### フォーマットコードの仕様 フォーマットコードは慣れると簡単で、"ESC" (`0x1b`) "[" (`0x5b`) と "m" (`0x6d`) の間にコードを入れて表します。 文字装飾(太字、イタリック等)と文字色、背景色を設定することが出来ます。 具体的な値は以下のサイトにわかりやすくまとまっていたのでご参照ください。 > 参考 > - [bash:tip_colors_and_formatting - FLOZz' MISC](http://misc.flogisoft.com/bash/tip_colors_and_formatting) 例えば先程の例 `ESC[0mESC[01;34mDirESC[0m` だと、 以下のようになります。 - "01" Bold - ";" 区切り文字 - "34" Forground Blue - 前後の `ESC[0m` はリセット ちなみに、バイナリだと以下のようになります。 ```console `gutter: false; $ ls --color | od -t x1 0000000 1b 5b 30 6d 1b 5b 30 31 3b 33 34 6d 44 69 72 1b 0000020 5b 30 6d 0a ```