zumaaのブログX

/dev/ttyUSB0をユーザーが使えるようにする

シリアルデバイス/dev/ttyUSB0のアクセス権はdialoutグループに所属するユーザー :

$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Nov 22 14:11 /dev/ttyUSB0

$ cat /dev/ttyUSB
cat: /dev/ttyUSB0: Permission denied

自分(zumaa)のグループを確認、所属してない :

$ id -a
uid=1000(zumaa) gid=1000(zumaa) groups=1000(zumaa),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),113(scanner),116(lpadmin)

ユーザーをグループに追加する :

$ sudo gpasswd -a zumaa dialout
Adding user zumma to group dialout

(グループ追加を反映するため再ログインする)
$ su - zumaa
< zummaのパスワード

$ cat /dev/ttyUSB0
...

または

$ su
< ルートのパスワード
# gpasswd -a zumaa dialout
# exit

REF:

sudoをユーザーが使えるようにする

(Debian 11 Bullseyeで確認)

ユーザーは使えない :

$ sudo --version
Sorry, user ユーザー名 may not run sudo on debian11

使えるようにする :

(rootに移行)
$ su
< rootのパスワード

(sudoがなければ入れる)
# apt-get install sudo

(ユーザーを追加する, /usr/sbin/visudoの場合もある)
# /sbin/visudo
< ユーザー名  ALL=(ALL:ALL) ALL
(ctrl+x, y, enter で/etc/sudoers.tmpへ保存)

# exit

使えるよになったか確認する :

$ sudo --version
< ユーザーのパスワード

RPi: 起動時のDHCP接続待ち時間を短くする

スタンドアローン*1運用の時、起動時のdhcpcd接続待ちタイムアウトが長い。

恐らくデフォルトで60sec接続待ちする。それだけ起動が遅くなる。

起動時のログ :

[------] A start job is running for dhcpcd on all interfaces (45 / 1min 48s)

設定ファイル :

/etc/systemd/system/dhcpcd.service.d/wait.conf

ここに-t <timeout>オプションでsec指定する。 5秒にしてやったぜ :

[Service]
ExecStart=
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w -t 5

(自環境はRaspberry Pi OS: 11 Bullseye)


REF :

*1:ネットワークや他の機器に接続なしで単独で動作している環境

RPi: スワップファイルを無効にする

スワップファイルを消して、無効にする(永続) :

sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile

check :

$ systemctl is-enabled dphys-swapfile
> disabled

$ systemctl status dphys-swapfile
> Active: inactive (dead)

$ free
> Swap: 0 0 0

有効にする :

sudo systemctl enable dphys-swapfile
sudo systemctl start dphys-swapfile

REF :

Raspberry PiでWi-Fi接続が切れる

放置しておくとWi-Fi接続が切れて復帰しない。

どうやらWi-FiはPower management対象で、省電のためスリープする。

何かしらネットワーク系に動きがあれば復帰するらしいが、Headless*1のWi-Fi運用だと復帰できない(と思う。1日放置した後などはssh接続しても応答しない)

Power managementの対象外にしてもダメらしく、編み出されたのがdhcpcdが切れたらwlan0を強制ONする技法。

/etc/dhcpcd.exit-hook を作成して以下にする :

[ -n ${disable_pm} ] || return 0

if [ “${interface}” = “wlan0” ]; then
    case ${reason} in
        CARRIER | NOCARRIER)  iwconfig ${interface} power off ;;
        STOP | STOPPED) iwconfig ${interface} power on ;;
    esac
fi

再起動すれば有効になる。

とりあえずRaspberry Pi 4BRaspberry Pi OS(12 bookworm)で上手く行ってる。


REF :

*1:画面、マウス、キーボードなし

BeautifulSoupのインストールで失敗する

失敗

pip install beautifulsoup

正解

pip install beautifulsoup4

beautifulsoupだとv3を入れようとしてエラーになる(v3はpython2向け)

(.venv) % python3 -m pip install beautifulsoup
Collecting BeautifulSoup
  Downloading BeautifulSoup-3.2.2.tar.gz (32 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error
  
  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [19 lines of output]
...
      "You're trying to run a very old release of Beautiful Soup under Python 3. This will not work."<>"Please use Beautiful Soup 4, available through the pip package 'beautifulsoup4'."

      SyntaxError: invalid syntax
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
...

REF :

pip install requests => urllib3 v2 only supports OpenSSL 1.1.1+

仮想環境にrequestsを入れ、importするとNotOpenSSLWarning警告がでる(以前はImportErrorだった)

% python3 -m venv .venv
% source .venv/bin/activate
(.venv) % python3 -m pip install requests
...

(.venv) % python3 -m pip list
Package            Version
------------------ ---------
requests           2.32.3
urllib3            2.2.3
...

(.venv) % python3
>>> import requests
/path/to/.venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
原因

requestsを入れると、依存関係で最新urllib3(==2.2.3)が入る。

urllib3 v2はOpenSSL機能のためOpenSSL 1.1.1+を必要とするが、macOSには入っておらず(代わりにLibreSSL 2.8.3が入っている)正常に動作しねぇかも警告。

解法

古いurllib3(==1.21.1~1.26.15)ではこの問題が起きない。

拘りがなければ、古いurllib3を入れると解決する。

(.venv) % python3 -m pip install urllib3==1.26.15

またはOpenSSL 1.1.1以降をインストールする。 これはシステム全体に大きく影響するので注意が必要。


REF :

pipとvenvを使い仮想環境にパッケージを入れる

仮想環境は、ホストOS環境に影響を与えず、異なるプロジェクトそれぞれに別のパッケージを入れれる。

要約 :

# 仮想環境を作り、仮想環境下にする
% python3 -m venv .venv
% source .venv/bin/activate

# 仮想環境でpipを最新にしてからパッケージを入れる
(.venv) % python3 -m pip install --upgrade pip
(.venv) % python3 -m pip install requests
(.venv) % python3 -m pip list
...

# 仮想環境を抜ける
(.venv) % deactivate
%

(以前、仮想環境上で直にpip installで入れれた気がするが、環境のせいか仮想環境突き抜けてホストOS環境に直入れしてしまう。のでpython3 -m pip installを使う)


REF :

vscode: flask8で特定エラーを無視する

flake8は口うるさい。

特定エラーを無視するよう設定する。

vscodeの設定 > Flake8で検索し、Flake8: Argsへ項目の追加で値を入れる。

Flake8:Args
--ignore=E501,W605

ルールは以下参照。 Anti-pattern, Best practiceも書かれているので参考になる。

E501 Line too long (82 > 79 characters)
W605 Invalid escape sequence 'x'


REF :

vscode: markdownlintでHTMLタグを許可する(MD033)

markdownlintは口うるさい。

HTMLタグを入れると怒られる。許可設定を入れる。

MD033 - Inline HTML

This rule is triggered whenever raw HTML is used in a markdown document:
Note: To allow specific HTML elements, use the 'allowed_elements' parameter.

setting.json :

"markdownlint.config" :{
    "MD033": {
        "allowed_elements": [
            "img",
            "br"
        ]
    }
}

allowed_elementsで指定したタグだけ許可される。


REF :

vscode: minimapの色を変える

配色テーマによってミニマップ領域の境目がわかりづらい。

うっかりクリックでスクロールし、迷子になる。

色を変える。

setting.json :

"workbench.colorCustomizations": {
    "minimap.background": "#352f3c"
},

// スライダーを常に表示(ミニマップ右クリック>スライダーからいつでも変更できる)
"editor.minimap.showSlider": "always"

REF :

パイプ途中のエラーで中断させる

パイプ途中のエラーで中断させるには設定が必要。

set -o pipefail

未設定だとパイプ末尾の結果になる。

$ false | true; echo $?
0

設定すると、エラーで中断した時点の結果になる(この場合trueは実行されない)

$ set -o pipefail
$ false | true; echo $?
1

設定を戻す。

set +o pipefail

REF :

あらゆる物事の上達を早める練習の仕方

www.youtube.com

練習すると神経伝達速度が速くなる。

効果的な練習とは、一貫性があり、しっかり集中して行われ、その人の現在の能力ぎりぎりの内容で、弱点に狙いを絞ったもののことです。

練習時間を最大限に活かすには :

  • 目の前の課題に集中すること、気を散らすものは遠ざける
  • 最初はゆっくりスローモーションで、正確な動き、質の良い繰り返しをしながら少しずつスピードを上げていくと、正確にできる確率が上がる
  • 決められた間をおいて何度も繰り返す、時間制限を設け、日常練習のメニューごとに区切って行う
  • 詳細を鮮明に思い浮かべて脳内で練習する、いったん身体動作が確立したら、それを想像するだけで強化できる

REF :