小技の寄せあつめ

# これは、何？

Mac、Raspberry Piを使うなかで、ちょっと便利だと思った小技を寄せあつめたものです。
都度、書き足します。

# Mac編

## nkfのオプション（2022.3.31追記）

最近、昔のFreeBSDで作成したテキストファイル（eucが多い）をみることが多いので、nkfを漢字コードを判定するために以下のように設定しました。


```sh
$ which nkf
nkf: aliased to nkf -g
```


lessでファイルをみる際に文字化けしないように、以下の設定を行っています。


```sh
$ which less
less () {
	/usr/local/bin/nkf $1 | /usr/bin/less
}
```

TeXにて処理を行うにあたり、eucで作成されたtexファイルを以下のコマンドにて、utf-8に変換しています。



```sh
function nkf_utf8(){
   /usr/local/bin/nkf -w8 --overwrite $1
}
```






## ApplePersistenceIgnoreStateメッセージ（2022.2.12追記）

Raspberry Piのgpioをpigpioから使用するために、Qtのアプリケーションを起動すると、以下のメッセージが出力されました。

```sh
Python[88016:8145500] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to /var/folders/ll/fpkbs_yd7nlfdrp99dnsc4y80000gn/T/org.python.python.savedState
```
調べてみると、このメッセージはOS Xの新しいバージョンに搭載された「アプリケーションの再開」機能によって表示されるもので、アプリケーションの再立ち上げ時に状態を復元する方法をサポートしています。ユーザーデフォルトのApplePersistenceIgnoreStateは、値YES/NOでリストア動作を有効または無効にします。

メッセージを表示しないようにするには、ApplePersistenceIgnoreStateをNOに設定します。

```sh
defaults write org.python.python ApplePersistenceIgnoreState NO
```


## Raspberry PiのX11の画面をMacにForwarding（2022.2.12追加）

Mac側にXQuartzをインストールして、ssh -XにてRaspberry Piへ接続します。
手順は、以下のとおりです。

- XQuartzのインストール
- ssh -XにてRaspberry Piへ接続


まずは、XQuartzのインストールから

brewからでもインストールできるようですが、[本家](https://www.xquartz.org/)からdmgをダウンロードしてインストールしました。

```sh
/usr/X11/bin/
```

を、パスに追加します。xeyesを実行するなどして、インストールが問題なくできていることを確認します。
XQuartzを手動で起動する必要はないようです。


次に、Raspberry Piへログインします。

```sh
$ ssh -X pi@raspi4.local
```

ログインできたら、DISPLAY変数の値を確認します。

```sh
$ echo $DISPLAY
localhost:10.0
```

sshのみのログインだと、DISPLAY変数は空になります。

xeyesを実行し、画面が表示されれば設定完了です。


![xeyes.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191337/f9bca236-c039-4b81-771c-d9de1fe3ebf8.gif)




## Macで暗号化zipを作成(2021.11.23)

```sh
$ zip -e -r data.zip data
```

パスワードを聞かれるので、設定。


## fffmgでpngファイルをmp4動画へ変換(2021.11.23)

```sh
$ ffmpeg -r 2 -pattern_type glob -i '*.png' -vcodec libx264  -acodec copy -pix_fmt yuv420p  -r 1 hogehoge.mp4
```

-r 1で、フレームレートを指定します。

## nkfとlessを連携(2021.11.23追加)

遠い昔に使用していたFreeBSDのバックアップにeucで記録された大量のメモがありまして。
nkfで中を覗いていましたが、反射的にlessというコマンドを打つ仕様にしたかったので、.zshrcのfunctionにしてみました。

lvやlesspipeを使用する手もありますが、nkfとの連携で良いかなと。

nkfは、brewでインストールします。
lessは、Mac標準のもので問題ありません。

```sh
$ brew install nkf
```

~/.zshrcに以下を追記します。

```sh
function less(){
  nkf $1 | /usr/bin/less
}
```

## zshの関数を利用してpyuic5の入力を楽にする(2021.2.2追加)

最近Qt Designerをよく使うのでpyuic5を頻繁に使用している。
そのたびに

```sh
% pyuic5 hogehoge.ui -o hogehoge.py
```
とするのが面倒になったので.zshrcにfunctionとして登録しました。

設定は、以下の内容を.zshrcに追加するだけです。関数名（コマンド名）は、ui2pyにしました。
同じ名前でも、.zshrcの設定が先に呼ばれるので問題ありません。

```sh
function ui2py(){
  pyuic5 $1 -o $1:r.py
}
```

使う前には、

```sh
% source ~/.zshrc
```

してください。
使い方（必要ないと思いますが、念のため）は以下のとおりです。

```sh
% ui2py hogehoge.ui
```

## sshでログインする際に、ログイン先のディレクトリを変更(2021.1.31追加)
```sh
% ssh -X raspi4 -t "cd /home/pi/share; bash --login"

```
## sshログイン時に、タイムアウトを防止(2021.1.31追加)

~/.ssh/configに、以下を追加。

```sh
ServerAliveInterval 30
```

# Raspberry Pi編

## パッケージ管理（2022.2.12追記）

パッケージ管理の意義は、 [公式ドキュメント](https://www.raspberrypi.com/documentation/computers/os.html#updating-and-upgrading-raspberry-pi-os)によると、

- 脆弱性の緩和とバグの可能性を低くするために、Raspberry Piを最新の状態に保つ
- ソフトウェアのインストール、アップグレード、削除などの管理は、Debian の APT (Advanced Packaging Tool) を使用するのが簡単

となっています。

### オペレーティングシステムを最新に保つ


APTはPi上のソフトウェアソースのリストを/etc/apt/sources.listというファイルに保存しています。ソフトウェアをインストールする前に、apt updateでパッケージリストを更新するには

```sh
$ sudo apt update
```

を実行。次に、インストールされているすべてのパッケージを以下のコマンドで最新版にアップグレード

```sh
$ sudo apt full-upgrade
```

フルアップグレードは、単純なアップグレードよりも、依存関係に変更があった場合にも対応できるようにするために使用され、定期的に行うことで、使用している Raspberry Pi OS のメジャーリリース (例: バスター) に対応した最新の状態を維持できる。

### フルアップグレードの留意点

- StretchからBuster、BusterからBullseyeのように、あるメジャーリリースから別のメジャーリリースへの更新は行われない
- フルアップグレードは、既にインストールされているパッケージのみを更新


## aptの使い方（2022.2.12追記）

Raspberry Piの公式にdebianのaptとあったので、aptの使い方を調べるために [Debianの公式ドキュメント](https://www.debian.org/doc/manuals/apt-howto/)を確認します。


### インストールされるパッケージの調査

[第5章のパッケージ情報の入手](https://www.debian.org/doc/manuals/apt-howto/ch-search.ja.html)が、今回欲しい情報に該当します。



パッケージ名を発見する。

```sh
$ apt-cache search atari
```

探しているものに関連するいくつかのパッケージと、その簡単な説明が表示されています。特定のパッケージに関するさらに詳しい情報を得るには、次のようにします。

```sh
$ apt-cache show stella  
```

上記の出力から、インストールしたい (あるいはしたくない) パッケージの 詳細が得ることができ、そのパッケージの完全な説明文もあります。 そのパッケージがインストール済で、しかも新バージョンが利用可能なら、 両バージョンの情報が表示されます。

例えば

```sh
$ apt-cache show code
```

最初のものが利用可能なパッケージのもので、二番目がインストール済の ものであることに注意してください。パッケージに関する一般的な情報を得るには、次のようにします。

```sh
$ apt-cache showpkg code
```

さらにどのパッケージに依存しているのかを見るには、以下の様にします。

```sh
$ apt-cache depends code
```

この他にも、以下の方法があります。


```sh
XXX@raspi4:~ $ apt-cache policy code
```

listを使用して

```sh
pi@raspi4:~ $ apt list code  -a
```