つれづれ日記 2021年4月

予定

毎日


2021年4月30日 (金曜日)

18:06:10 # Life CPPCON 2020のビデオをみていた。 ランチ時間にRing Fit Adventure と Fit Boxingで運動をするのに若干飽きてきたので YoutubeでCPPCON2020のビデオを全部一通り流しながらやってみました。 C++20の機能とかこれから実装したい機能とかを頑張ってみんな説明してくれてありがたい。 modulesとかrangeとか試したくてもなんかいまいちうごいてい気がしたけど今だったらもっと動いているのかな? ライトニングトークのビデオは5分くらいなんだけどほとんどのビデオは1時間あって、そういうのが80本くらいあるので80時間くらいは誰かがC++について熱く語るのを聞いていた気がする。 見た結果C++難しい、という印象がより強くなった気がするが・・・。

18:25:04 # Life Gnomeがサスペンドする問題について調べていた。 キーボードとかのアクティビティを見ているので、例えばSSHされているだけではIdleタイマーがリセットされないということがわかった。 そこをつかさどるのがmutter/src/backends/meta-idle-monitorあたりっぽい。 調べた感じよい方法が思いつかない。とりあえずDebianにおいてはこういう場合は/etc/gdm3/greeter.dconf-defaultsを編集して sleep-inactive-ac-timeout=0にしてタイムアウトを無効にするのがよさそう。 確認方法はgsettings list-recursivelyで確認、と確認してみたらなんか効いてない? ひょっとすると初回ログインにコピーされてしまうのか? ということでとりあえずgsettings setで設定したら反映された。

	  $ gsettings list-recursively org.gnome.settings-daemon.plugins.power
	  $ sudo -u Debian-gdm gsettings list-recursively org.gnome.settings-daemon.plugins.power

	  $ gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
	  $ sudo -u Debian-gdm gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
	

2021年4月29日 (木曜日)

09:15:53 # Life Emacs lispで現在選択している領域を囲む。 HTMLタグで囲みたいなぁとおもって、どうやるのかなと思ったので確認。 まず、interactiverを指定するとbegin end の2つ値をくれるというのを確認。 あと複数のパラメータがほしい場合はinteractiveは改行区切りらしい。なんじゃそりゃ。 あと編集しても維持できる文字位置を保存したい場合にはset-markerで保存、make-markerでからのマーカーを作成してから指定。 マーカーの数は編集速度に影響するらしいので再利用できるAPIになっているようだ。 ということで今日のLispハックは以下。


(defun dancer-region-tag (begin end tag)
  "Surround region with TAG"
  (interactive "r\nsTag:")
  (goto-char end)
  (insert tag)
  (let* ((real-end (set-marker (make-marker) (point))))
    (goto-char begin)
    (insert tag)
    (goto-char real-end)))

	

10:29:47 # Life Debian流儀でのWake On Lanの設定。 Systemdで設定する方法とかnmで設定する方法とかいろいろあるみたいだけど結局Debianをインストールしたそのままの状態だとinterfaces(5)で設定されているということを発見するまでが長かった。 ネットワークの設定をsystemdとかnmとかに切り替えても良いんだけど、Debianでの旧来の設定ファイルを編集するなら/etc/network/interfacesに一行追加するだけ。 ethernet-wol g。 この行の意味は/usr/share/doc/ethtool/README.Debianに書いてあった。

# The primary network interface
allow-hotplug eno1
iface eno1 inet dhcp
# This is an autoconfigured IPv6 interface
iface eno1 inet6 auto
        ethernet-wol g
	

systemdで管理されているかどうかを確認するにはnetworkctl list で見れば良くて、systemd-networkdが起動していないという警告が 出てて、SETUPもunmanaged(管理していない)というのも出てた。最 初はsystemd.link(5)にある設定を頑張ってしていたけど反映しな いしおかしいなぁと思ってはいたが、わかってみればこういうこと だった。

$ sudo networkctl list
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK TYPE     OPERATIONAL SETUP
  1 lo   loopback n/a         unmanaged
  2 eno1 ether    n/a         unmanaged

2 links listed.

	

NetworkManagerのほうも同様に、こっちでも管理されていないということであった。

$ nmcli d
DEVICE  TYPE      STATE      CONNECTION 
eno1    ethernet  unmanaged  --         
lo      loopback  unmanaged  --


$ sudo ifquery -l --allow=hotplug
eno1
$ sudo ifquery -l
lo

	

2021年4月28日 (水曜日)

14:30:18 # Life X11のCtrlとCapsを入れ替える方法。 最近はSystemdとX11が協調してキーボードの設定を調整してくれるようだ。 systemd-localed.serviceというサービスがうごいていて管轄していて、 localectl(1)コマンドで調整することができる。なんでサービスにする必要があるのかは不明? 気にする人は少ないかもしれないけど仮想コンソールとX11両方にキーボード設定が適用されてくれる。 ちゃんと途中でUSBキーボード抜き差ししても反映するみたい。 Debian流での管理はkeyboard-configurationパッケージで、例えば/etc/default/keyboardに設定が書いてある。 Debianパッケージのソースコードを眺めた感じdebian/patches/debian/Use-Debian-specific-config-files.patch にて設定ファイルの場所を/etc/X11/xorg.conf.d/00-keyboard.confから/etc/default/keyboardに変更しているのだった。しかしこれ、ドキュメントさ れてなくないか?

	  $ sudo localectl set-x11-keymap us pc105 us ctrl:swapcaps
	  $ cat /etc/default/keyboard 
XKBMODEL=pc105
XKBLAYOUT=us
XKBVARIANT=us
XKBOPTIONS=ctrl:swapcaps
BACKSPACE=guess
	

2021年4月26日 (月曜日)

08:30:52 # Life Lenovo ThinkCenter M75s gen2にDebianをインストールしてみたメモ続き、X編。 Busterを普通にインストールした状態でstartxすると画面が認識されていない雰囲気。 調べてみるとAPU内蔵のGPUはRenoir、Linuxカーネルのソースコードの中身を検索すると drivers/gpu/drm/amd/amdgpu/amdgpu_drv.cに該当する部分があって、kernel 5.5 以降くらいでは使えるようになっているようだ。 Busterのカーネルは4.19なのでそれより以前。 ちょっと迷ったけどまぁもうすぐリリースなのでとBullseyeにアップデート。カーネル5.10 になったので再起動したら起動したコンソールの解像度が画面にあった解像度に。 どうもamdgpudrmfbがコンソール画面になってくれたよう。 startxでXも起動。あとはctrl とcapsを入れ替えれば良いんだがどうするのか。

0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU

[    6.251021] fbcon: amdgpudrmfb (fb0) is primary device
	

2021年4月24日 (土曜日)

14:19:39 # Life 今月読んだ本の読書メモ。

2021年4月18日 (日曜日)

15:43:15 # Life Lenovo ThinkCenter M75s Small Gen2 の速度確認。 いつも使っている手元の趣味開発環境はRaspberry pi 3だったり Acer Chromebox CXI3 (SION) (CPUはCore i5-8250U 1.6GHz 4 core 8 threads)なんだけど、 Lenovo ThinkCentre M75s Gen 2、 AMD Ryzen 5 PRO 4650G (3.7GHz, 3MB)の速度を確認してみることにした。 いつもビルドしている趣味プロジェクトのごちゃっとテストとかもうごくninjaを実行する時間を比較してみたら、 CPU時間が倍くらいはやくていつもの環境はなんでこんなに遅いのかとびっくりする結果に。え、そんなに違うの?

Lenovo ThinkCentre M75s Gen 2
AMD Ryzen 5 PRO 4650G (3.7GHz, 3MB, 6 core 12 threads)
real	0m6.364s
user	0m42.769s
sys	0m2.897s

ChromeBox fizz SION crostini Core i5-8250U 1.6GHz 4 core 8 threads
real	0m14.968s
user	1m20.183s
sys	0m10.582s

Raspberry pi 3、4 cores
real	1m43.559s
user	5m17.088s
sys	0m16.586s

MacBook Air 6,1 Early 2014 Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz 2 core 4 threads.
real	0m18.329s
user	0m59.608s
sys	0m3.792s

GCE n1-standard-4 (broadwell, Intel(R) Xeon(R) CPU @ 2.20GHz) PD-HDD
real    0m20.865s
user    1m6.492s
sys     0m6.318s


	

17:54:23 # Life 最近の作業スタイルにあわせてポモドーロテクニック用のタイマーを作り直した。 開始とともに音がなり、30秒位何をするのか宣言して、50分になったら何が達成できたかを共有して休憩10分間。 ポモドーロタイマーの25分はちょっと短すぎてあと休憩時間が長かったり短かったりするのはいまいち継続できなかったし、 操作するのが頻繁すぎて忘れるのでこれくらい何も操作しないのが良いかなと思った。 これで行けるかどうかはもうちょっと試してみないとわからない。 タイマーアプリ。

2021年4月17日 (土曜日)

18:19:13 # Life Lenovo ThinkCenter M75s Small Gen2にDebianをインストールしてみた。 Ryzenが使ってみたかったのでクリックしていたのだが10日くらいで届いたので試してみた。 事前準備として、Chrome OS 上でDebianのISOイメージを準備、ファイル名を.binで終わるようにして Chrome OS リカバリツールでUSB sd cardリーダ上のmicro sdに書き込んだ。 まず最初に入っているWindowsを起動してLenovoの管理ツール(Commercial Vantage)でアップデートをし、 BIOSのアップデートなどを実行。懐かしのDOS画面を拝見。 Lenovoロゴの出ているブート画面にどのキーを押したら何が起きるのかという情報が出ないのでなんどか試行錯誤のため再起動を繰り返した。 SecureBootで動かせる気がしなかったので起動画面でF1を押してBIOS設定でSecureBootをオフ。 起動してF10を押してDiagnosticsを眺めながらこれじゃないなぁと試行錯誤(必要なかった)。 起動してF12を押してブートデバイスを選択する画面を発見。 どれだ一体、と思ったんだけどデバイスの名前が USB CDROM Generic USB3.0 CRW-SD/MS1.00というのになっていた。CDROM? まぁそこからはふつうにインストールできてネットワークも認識して満足。

2021年4月11日 (日曜日)

11:05:53 # Life 複数の拠点のタイムゾーンをざっと眺めれるようにしたいなとおもって作ってみた。 カスタマイズ方法とかはあとで考える。 タイムゾーン

2021年4月10日 (土曜日)

09:10:30 # Life git-status消えてしまって困ったなぁとおもっていたらvcで大体同じことができることに気づいた。 C-x v d でディレクトリモードにはいり、適当にファイルを選択してコミットすることができる。 しかしコミットメッセージのテンプレートがほしいんだけどコマンドでgit commit -a -v してEDITOR=emacsclientとしておいてemacsから編集するようにしているほうがよいかも。 C-x v v に (shell-command "EDITOR=emacsclient git commit -a -v &") と指定したほうがよいんかな。

11:15:05 # Life journalctlでファイル消す。 なんかjournaldのログが1GBくらいあるのがきになったので。 sudo journalctl --vacuum-time 10d としてみたらファイルが98個削除された。 /etc/systemd/journald.confを眺めた感じ一か月に一回はログをローテートするようになっているよう。 そして、デフォルトは100ファイルまで保存するようになっている。 8MBを超えるとログがローテートされているっぽくて、800MB常に保持しているのか。 そもそもエラーログをはき続けているのも問題なのでこれはcrostiniの問題かな?いやしかし100ファイルまでの保存は1GBか。

2021年4月6日 (火曜日)

10:29:47 # Life EmacsでGit管理しているときにでてくるVCモードの *vc-log* バッファのコミットメッセージのテンプレートを作成したい。 どうしたらよいか、ソースとドキュメントを眺めてみる。 EmacsのVCモードはバージョン管理ツール汎用のモードで、vc-gitはGitようの実装、汎用の部分はvcモードが実装している。VCでコミット操作はvc-checkinっぽくて、そこから vc-git-checkinがよばれているっぽい。 つまりコミットメッセージの編集まわりはVCの管轄でvc-gitに処理がわたっている段階ではすでにコミットメッセージはEmacs側から与えられている。 さすがにコミットメッセージの仕組みは全く同じではないと思うのでバックエンドごとにいろいろカスタマイズしているんじゃないかという予想がつくがどうなっているんだろう。 vc-before-checkin-hookとvc-checkin-hookというフックがあるようだ。 vc-start-logentry処理、 vc-before-checkin-hookはコミットメッセージ編集前、 vc-checkin-hookはコミットメッセージ編集後っぽい。 vc.elのvc-checkinにわたってくるパラメータのcommentと initial-contentsがそれっぽいがここをどうかえるのか。 とおもってしらべていたらコメントが書いてあった。 いやしかし。

2021年4月3日 (土曜日)

12:08:43 # Life raspberry pi 3でシンプルなfor loopでの負荷をかけてみた。 全コアで動かしてみるとかならずコア0番が一番遅いっぽい。 /proc/interruptsをながめるとコア0番が割り込みを全部うけているのかな。こういうのはどういう仕組みなんだったろうか。

$ cat /proc/interrupts
          CPU0       CPU1       CPU2       CPU3
 17:   21502192          0          0          0  ARMCTRL-level   1 Edge      3f00b880.mailbox
 18:         48          0          0          0  ARMCTRL-level   2 Edge      VCHIQ doorbell
 40:          0          0          0          0  ARMCTRL-level  48 Edge      bcm2708_fb DMA
 42:     137359          0          0          0  ARMCTRL-level  50 Edge      DMA IRQ
 44:    2287903          0          0          0  ARMCTRL-level  52 Edge      DMA IRQ
 56: 2222544811          0          0          0  ARMCTRL-level  64 Edge      dwc_otg, dwc_otg_pcd, dwc_otg_hcd:usb1
 77:    1443662          0          0          0  ARMCTRL-level  85 Edge      3f804000.i2c
 80:    2079078          0          0          0  ARMCTRL-level  88 Edge      mmc0
 81:       4207          0          0          0  ARMCTRL-level  89 Edge      uart-pl011
 86:   46804443          0          0          0  ARMCTRL-level  94 Edge      mmc1
161:          0          0          0          0  bcm2836-timer   0 Edge      arch_timer
162:   55166228   78210063   47503666   78307132  bcm2836-timer   1 Edge      arch_timer
165:          0          0          0          0  bcm2836-pmu   9 Edge      arm-pmu
FIQ:              usb_fiq
IPI0:          0          0          0          0  CPU wakeup interrupts
IPI1:          0          0          0          0  Timer broadcast interrupts
IPI2:   22952464   86791620   61433702   87885218  Rescheduling interrupts
IPI3:     637958     908167     856293    1170053  Function call interrupts
IPI4:          0          0          0          0  CPU stop interrupts
IPI5:    6303231   14041324    2841915   12741199  IRQ work interrupts
IPI6:          0          0          0          0  completion interrupts
Err:          0

	

16:23:57 # Life 現在のコアを取得するというgetcpu. なんかgetcpu(2)とgetcpu(3)とsched_getcpu(3)がありそれぞれ微妙にインタフェースが違う。 全部読んでみてから結論としては多分sched_getcpuを使うべきな気がする。 sched_getcpuはintで0から順番にCPU番号が返ってきて、get_nprocs_confの数と一致しているように見える。 そしてsched_setaffinityのSET_CPUで設定する値と一致しているように見える。 CPUがonlineとconfの違いを毎回忘れるので調べることになるんだけどどっちだ。

2021年4月1日 (木曜日)

11:25:05 # Life 4月になった。世間は新年度。子どもたちは新しい学年と学校環境か。


Junichi Uekawa