SVX日記
2021-12-01(Wed) 「SEVENTH MOON」に指がかかる
そして週1〜2のカラオケでの練習であるが、定番曲を中心に、ちょくちょく新しい曲を加えつつ、時々、無理目だった曲に改めて挑戦してみるのだ。すると……あれほどに、高さが届かない、原曲の感じが出せない、と思っていた曲がフッと手の届く場所に下りてきていることに気づくのである。別に完璧に歌える状態ではない。あくまで「指がかかった」という感じ。しかし、そう思えた時の気持ちの高揚感といったらない。自分だけなのかな。こういう感覚を抱いているのは。
今回、気づいたのは、マクロス7の主題歌「SEVENTH MOON」。主題歌なのに劇中では歌われておらず、あまり人気のない歌だが、全編がシャウト混じりで、かなり高音域。体力的にもキツい。しかし、まぁ、なんとか歌い切れるようになった感。
2021-12-04(Sat) 「1,000,000人の少女」に指がかかる
先日に引き続き、久々に筋肉少女帯の「1,000,000人の少女」に改めて挑戦してみると、こんな高さのシャウトできるかよ! ……と思っていた音に指がかかった感覚がした。たぶん、hiC。
調べると「1,000,000人の少女」の入ったシングルCD「蜘蛛の糸」の発売は1994年1月。自分が筋肉少女帯に興味を持ったのは、ストリートファイターⅡのCMソング「バトル野郎〜100万人の兄貴〜」からで、シャウトなヴォーカルに魅せられたのもその時だ。失礼ながら、当時、大槻ケンヂ氏のヴォーカルはヘタウマなんじゃないかと感じていたが、その時点でhiCのシャウトをこなしてたんだなぁ。
2021-12-11(Sat) ウルトラハードにクリーニングする
いわゆる車のコーティングというヤツに非常に懐疑的なオイラである。汚れが付きにくいとか、汚れが落ちやすいとかいうけれど、一部だけコーティングしない、なんてことをしない限り、同一条件で比較することは不可能なのであるから、業者には都合のいい話である。なぜ、誰も検証をしないのだろう。まぁ、この21世紀になっても、オカルトチューンが生き残っている理由がそのへんにあるのだろうが。
というわけなので、新車で乗り始めたロードスターだが、コーティングなんぞはしていない。しかも、ウチは露天駐車である。思った以上には、マメに洗車しているが、ワックスは季節に1度くらい。しかも、耐久性はあまりないらしいシュアラスターのマンハッタンゴールド。
しかし、ガラスコーティングだろうがワックスだろうが、そんなようなモンの何を塗ったくったって、たかだか数ミクロン。保護能力なんてないに等しい。そもそも、塗装の上にはクリアという透明な塗装が厚く塗ってある。であるから、気分良く雨をハジいたり、艶を楽しむために、時々、ワックスをかける程度でいいと思っている。
というような、意識の低いオイラではあるが、新車からもうすぐ丸4年、いわゆる雨染みというのが、ちょっと気になってきた。洗車しても、ワックスをかけても、モヤっとしたマダラ模様が残る。そう気にはなるほどではないが、取り除けるならば、取り除きたい。
いろいろ調べると、ウロコとか、イオンデポジットとか、ウォータスポットとかいうらしいが、普通に洗車しても取れないらしい。細かいコンパウンドでクリアを削るしかないのだろうか……と、思っていたら、なんでもそれを取り除けるケミカルクリーナがあるらしい。その名も「リンレイ ウルトラハードクリーナ 水アカ・ウロコ・ウォータースポット用」。
1500円とそれなりに高価なのに、それを買っておきながら、その効果に非常に懐疑的なオイラである。そんなもんでポロポロと落ちたら世話ないわ。しかも、スプレーしたら、すぐに拭き取れとある。そんなんで、4年も雨ざらしで積み重ねてきた汚れが……
ウソ。ホントに落ちるわ。直接にスプレーして、水に浸しキツく絞ったクロスで塗り伸ばすと、瞬時に水はじきがなくなり、マダラ模様が溶けていく感がある。水に浸しユルく絞ったクロスで2回ほど拭き取り、キツく絞ったクロスで仕上げ。水が蒸発すると、マダラ模様が消えている。トランク部分のチリの上にあるマダラ模様が、チリの下では除去できているのがわかる。
そもそも、最初に塗り伸ばしたクロスの裏に、謎の汚れが手の形に付いている。シャンプー洗車した後でこうなのだから、そりゃ効果があるはずである。使い勝手がわかったので、ボンネットも施工する。3回に分けて作業を繰り返し、襟の部分だけもう一度。いや、これは気分イイわ。スゴいな。
改めて水をかけて拭き取ってからワックスをかける。見事にマダラ模様はなくなった。が、トランク側には見当たらないが、ボンネット側は透かすと細かいクレーター状の凹凸が見える。ウォータースポットというやつか。実際に微妙な凹凸があるのだろう。それが消えないのは残念ではあるが、しっかりとマダラ模様は除去できたので、見栄えは相当に良くなった。今回、トランクとボンネットだけしか施工しなかったが、フェンダーとかドアの上部もそれなりにマダラ模様があるので、そのうち施工することにしよう。
2021-12-21(Tue) dockerのコンテナ内でアレしたい
というわけで、私はdockerが好きなのだが、どうにも使い勝手の悪い部分がある。コンテナの開発をしていると、docker execでコンテナ内に入ったり、docker logsでコンテナのログを見たりする機会が非常に多いのだが、その都度、対象となるコンテナ名をフルで入力しなければならない点だ。マウスでコピペとか、キーボードから手が離れるのは、かなりのストレスなんじゃ!
コンテナ名の部分一致でマッチしてくれりゃいいのに……などと、ブツブツ文句をいうヒマがあるならば、ラッパースクリプトを作ってしまえばいいのである。で、作った。コンテナ名の一部を入力すればマッチしてくれる。便利。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b41353b0f15e docker.io/furutanian/maverick "bash startup.sh" 11 days ago Up 11 days 0.0.0.0:8081->80/tcp maverick-gamma
d474d17534d1 docker.io/furutanian/hyperestraier "bash startup.sh" 4 months ago Up 2 weeks 0.0.0.0:8091->80/tcp hyperestraier-gamma
54eef26064e9 docker.io/furutanian/pinchmail "bash -c 'bash sta..." 4 months ago Up 2 weeks 0.0.0.0:8025->25/tcp, 0.0.0.0:8110->110/tcp pinchmail-alpha
# docker_exec pin
# INTO [pinchmail-alpha].
[root@54eef26064e9 /]# ls
Dockerfile bin boot crontab.index dev etc extract.sh home lib lib64 lost+found media mnt opt proc root run sbin srv startup.sh sys tmp usr var
[root@54eef26064e9 /]# exit
exit
# docker_logs pin
# INTO [pinchmail-alpha].
startup.sh start.
TZ='Asia/Tokyo'
'/etc/localtime' -> '/usr/share/zoneinfo/Asia/Tokyo'
:
MAILTO=""
* * * * * cd /root/pinchmail; ./pinchmail
#__END1__crontab.index__
startup.sh done.
で、しばらくは心穏やかに幸せに暮らしていたのだが、そのうち既製のコンテナを使う状況で、コンテナ内でnetstat等が実行できないことにイラつき始めた。「docker netstat」とググると、同じようにイラついている人は多いようだ。しかし、あまりロクな解法は見当たらない。コンテナ内で「cat /proc/net/tcp」して結果をデコードすりゃいいだけじゃん。そうなりゃ、docker_execに乗っけるしかないでしょ。コマンド名はdocker_netstatだな。
で、作り始めたら、容易には「PID/Program name」欄が出力できないことに気づいた。自分は「netstat」といえば「-anp」な人なので、それは出したい。しかし、それを実現するには大きくふたつの障害がある。(1)コンテナ内で使えるコマンドは非常に限定的、(2)「docker exec」を介するので、基本ワンライナーで情報を得る必要がある。というわけで、それをクリアする解法は「ls -lR /proc」なのであった。どうよ、この再現度。
# docker_netstat pin
# INTO [pinchmail-alpha].
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:39751 0.0.0.0:0 LISTEN -
tcp 0 0 0.0.0.0:110 0.0.0.0:0 LISTEN 55/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:0 LISTEN 55/dovecot
tcp 0 0 0.0.0.0:25 0.0.0.0:0 LISTEN 130/master
tcp 0 0 172.18.0.3:110 172.18.0.2:60954 TIME_WAIT -
tcp6 0 0 :::110 :::0 LISTEN 55/dovecot
tcp6 0 0 :::143 :::0 LISTEN 55/dovecot
tcp6 0 0 :::25 :::0 LISTEN 130/master
tcp6 0 0 ::1:55838 ::1:110 TIME_WAIT -
udp 0 0 127.0.0.11:47826 0.0.0.0:0 CLOSE -
# docker exec pinchmail-alpha netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:39751 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 55/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 55/dovecot
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 130/master
tcp 0 0 172.18.0.3:110 172.18.0.2:60954 TIME_WAIT -
tcp6 0 0 :::110 :::* LISTEN 55/dovecot
tcp6 0 0 :::143 :::* LISTEN 55/dovecot
tcp6 0 0 :::25 :::* LISTEN 130/master
tcp6 0 0 ::1:55838 ::1:110 TIME_WAIT -
udp 0 0 127.0.0.11:47826 0.0.0.0:* -
とかなんとかやっていると、普通にコンテナ内でpsが実行できてもいいじゃねぇか、ということになって、やっぱり、docker_execに乗っけて、docker_psの誕生である。例によって、基本ワンライナーで情報を得る必要がある、というところで、かなり首をひねったが、内部でシェル芸をかませば、なんでもできることに気がついたのであった。どうよ、この再現度。
# docker_ps pin
# INTO [pinchmail-alpha].
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 - - - /sbin/init
root 43 1 0 - - - /usr/lib/systemd/systemd-journald
root 50 1 0 - - - /usr/lib/systemd/systemd-homed
root 53 1 0 - - - /usr/sbin/crond -n
root 55 1 0 - - - /usr/sbin/dovecot -F
dbus 56 1 0 - - - /usr/bin/dbus-broker-launch --scope system --audit
dbus 59 56 0 - - - dbus-broker --log 4 --controller 9 --machine-id a2b06096cef94996b35ec906189d7873 --max-bytes 536870912 --max-fds 4096 --max-matches 16384 --audit
dovecot 62 55 0 - - - dovecot/anvil
root 63 55 0 - - - dovecot/log
root 64 55 0 - - - dovecot/config
root 130 1 0 - - - /usr/libexec/postfix/master -w
postfix 132 130 0 - - - qmgr -l -t unix -u
dovecot 135 55 0 - - - dovecot/stats
root 146 1 0 - - - /usr/lib/systemd/systemd-userdbd
postfix 59937 130 0 - - - tlsmgr -l -t unix -u
dovecot 147675 55 0 - - - dovecot/auth
root 159689 146 0 - - - systemd-userwork
root 159697 146 0 - - - systemd-userwork
root 159706 146 0 - - - systemd-userwork
postfix 159723 130 0 - - - pickup -l -t unix -u
root 159730 55 0 - - - dovecot/auth -w
root 159738 55 0 - - - dovecot/auth -w
root 159740 0 0 - - -
# docker exec pinchmail-alpha ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Dec02 ? 00:00:35 /sbin/init
root 43 1 0 Dec02 ? 00:01:15 /usr/lib/systemd/systemd-journald
root 50 1 0 Dec02 ? 00:00:29 /usr/lib/systemd/systemd-homed
root 53 1 0 Dec02 ? 00:00:08 /usr/sbin/crond -n
root 55 1 0 Dec02 ? 00:00:57 /usr/sbin/dovecot -F
dbus 56 1 0 Dec02 ? 00:00:04 /usr/bin/dbus-broker-launch --scope system --audit
dbus 59 56 0 Dec02 ? 00:00:11 dbus-broker --log 4 --controller 9 --machine-id a2b06096cef94996b35ec906189d7873 --max-bytes 536870912 --max-fds 4096 --max-matches 16384 --audit
dovecot 62 55 0 Dec02 ? 00:00:21 dovecot/anvil
root 63 55 0 Dec02 ? 00:00:23 dovecot/log
root 64 55 0 Dec02 ? 00:01:02 dovecot/config
root 130 1 0 Dec02 ? 00:00:04 /usr/libexec/postfix/master -w
postfix 132 130 0 Dec02 ? 00:00:00 qmgr -l -t unix -u
dovecot 135 55 0 Dec02 ? 00:00:35 dovecot/stats
root 146 1 0 Dec02 ? 00:00:05 /usr/lib/systemd/systemd-userdbd
postfix 59937 130 0 Dec10 ? 00:00:00 tlsmgr -l -t unix -u
dovecot 147675 55 0 08:29 ? 00:00:02 dovecot/auth
root 159689 146 0 23:26 ? 00:00:00 systemd-userwork
root 159697 146 0 23:27 ? 00:00:00 systemd-userwork
root 159706 146 0 23:28 ? 00:00:00 systemd-userwork
postfix 159723 130 0 23:30 ? 00:00:00 pickup -l -t unix -u
root 159730 55 0 23:31 ? 00:00:00 dovecot/auth -w
root 159738 55 0 23:32 ? 00:00:00 dovecot/auth -w
root 159820 0 0 23:32 ? 00:00:00 ps -ef
#!/usr/bin/env ruby
# coding: utf-8
class String
def to_ipaddr
r = self.scan(/.{8}/).map {|h8|
h8.scan(/../).map {|hh|
hh.to_i(16)
}.reverse
}.join('.')
self.size < 9 ? r : r.gsub(/(0\.){3,}0?/, '::')
end
end
states = [
'', 'ESTABLISHED', 'SYN_SENT', 'SYN_RECV', 'FIN_WAIT1', 'FIN_WAIT2',
'TIME_WAIT', 'CLOSE', 'CLOSE_WAIT', 'LAST_ACK', 'LISTEN', 'CLOSING',
]
$0 =~ /docker_(.+)/ and subcmd = $1
ps = `docker ps`
targets = []; ps.split(/\n/)[1..-1].each {|l|
(it = l.split(/\s+/).last) =~ /#{ARGV.last}/ and targets << it
}
if(targets.size == 0)
puts('# NOT MATCH...')
elsif(targets.size == 1)
def get_ps(target)
uids = {}; progs = {}; sockets = {}
IO.popen(['docker', 'exec', target, 'ls', '-lR', '/proc'], :err => [:child, :out]) {|io|
pid = nil; io.each {|line|
if(!pid and line =~ /^d.*?(\d+)$/)
uids[$1] = line.split(/\s+/)[2]
end
if(line =~ /^\/proc\/(\d+):/)
pid = $1
end
if(line =~ / exe -> (.+)/)
progs[pid] ||= []
progs[pid] << $1
end
if(line =~ / -> socket:\[(\d+)\]/)
sockets[$1] ||= []
sockets[$1] << pid
end
}
}
[uids, progs, sockets]
end
def get_ps2(target)
ppids = {}; cmdlines = {}
IO.popen(['docker', 'exec', target, '/bin/bash', '-c',
'ls /proc | grep -e "^[1-9]" | sed "s/\(.*\)/cat \/proc\/\\1\/status/" | sh 2>/dev/null'], :err => [:child, :out]) {|io|
pid = nil; io.each {|line|
line =~ /^Pid:\s*(\d+)/ and pid = $1
line =~ /^PPid:\s*(\d+)/ and ppids[pid] = $1
}
}
IO.popen(['docker', 'exec', target, '/bin/bash', '-c',
'ls /proc | grep -e "^[1-9]" | sed "s/\(.*\)/echo -n \\1:; cat \/proc\/\\1\/cmdline; echo/" | sh 2>/dev/null'], :err => [:child, :out]) {|io|
io.each {|line|
line =~ /^(\d+):(.*)/ and cmdlines[$1] = $2.gsub(/\u0000/, ' ')
}
}
[ppids, cmdlines]
end
puts('# INTO [%s].' % targets[0])
if(subcmd == 'exec')
# TODO
system('docker exec -it %s %s /bin/bash' % [ARGV[0..-2].join(' '), targets[0]])
elsif(subcmd == 'ps')
uids, progs, sockets = get_ps(targets[0])
ppids, cmdlines = get_ps2(targets[0])
puts('UID PID PPID C STIME TTY TIME CMD')
progs.keys.sort {|a, b|
a.to_i <=> b.to_i
}.each {|pid|
puts('%-8s %7d %7d %2d %5s %-8s %8s %s' % [uids[pid], pid, ppids[pid] || 0, 0, '-', '-', '-', cmdlines[pid]])
}
elsif(subcmd == 'netstat')
uids, progs, sockets = get_ps(targets[0])
puts('Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name')
['tcp', 'tcp6', 'udp', 'udp6'].each {|prot|
IO.popen(['docker', 'exec', targets[0], 'cat', '/proc/net/' + prot]) {|io|
io.each {|line|
ls = line.split(/[:\s]+/)
ls[1] =~ /^\d/ or next
laddr = ls[2].to_ipaddr + ':' + ls[3].to_i(16).to_s
faddr = ls[4].to_ipaddr + ':' + ls[5].to_i(16).to_s
prog = '-'; (it = sockets[ls[14]]) and prog = '%s/%s' % [it[0], progs[it[0]][0].split('/').last]
puts('%-5s %6d %6d %-23s %-23s %-11s %-s' % [prot, ls[8].to_i(16), ls[7].to_i(16), laddr, faddr, states[ls[6].to_i(16)], prog])
}
}
(it = $?.exitstatus and it == 0) or raise 'failed.'
}
else
system('docker %s %s %s' % [subcmd, ARGV[0..-2].join(' '), targets[0]])
end
else
puts('# MULTIPLE MATCH...')
puts(targets.join("\n"))
end
__END__
2021-12-25(Sat) スプリングコンプレッして、サスペンションをバラす
しばらく前にNDロードスター用の純正サスペンション一式を購入したのだが、その後、更にもう一式を購入していたのであった。
というのも、最初に買った一式は「アッパーマウント付き、走行10000km、ダンパー前N243-34-700B、後N243-28-70XB、スプリング前ピンクと赤、後ピンクと黄」というもの。だいぶ値が張ったものの、実際にかなりの美品なのでそれはいいとして、AT車から外したものということで、どうやらスプリングがSグレードのものとは違うようなのである。
思い返せば、10月末に契約してから、納車までの一日千秋を紛らわすため、12月初旬に購入した書籍「スピリット・オブ・ロードスター」を読んでいた時のこと。「Sグレードは、低い速度域でも大きく姿勢変化するように仕立てられていて荷重移動を楽しめる、単純な廉価グレードではない」などという記述を見つけたのである。逆に言うと、NR-Aはサーキット用であるから、高い速度域にチューニングされていて、低い速度域ではまったく姿勢変化しないらしい。そんな深い意味があるなら先に言ってくれよ。ビルシュタインとか言われたら、どうしたって見栄で選んでしまうではないか。
まぁ、NR-Aの、Sグレード以上に簡素な内装も、シルバーなホイールも、むしろお気に入りなので、後悔まではしていないのだが、いつかサスペンションがクタビレたらSグレードのサスペンションに入れ替えたいな、と常々思っていたのであった。いうなればNR-S化である。ちなみに、リアのスタビライザは2020年の6月にディーラーで外してもらっている。あまり差はわからなかったが。
ネットで調べると、Sグレードのショック・アブソーバは、前N243-34-700B、後N243-28-70XBと、購入したものと同じらしいのであるが、スプリングは前が緑と赤、後が白と黄であるという情報が見つかった。せっかくなら、スプリングもSグレードに合わせたいが、オークションサイトを見て回っても「緑と赤」なんて組み合わせの色のスプリングは見つからな……あ、いや、あるじゃん!……ということで、更にもう一式を購入したのであった。「アッパーマウント無し、走行距離不明、ショック・アブソーバ前N243-34-700B、後N243-28-70XB、スプリング前緑と赤、後白と黄」で送料込みで2000円チョイ。完全に捨て値である。走行距離不明なのが難点ではあるが、ショック・アブソーバはともかく、スプリングは基本的に劣化しないらしいので、組み替えれば完璧なサスペンションが仕上がるという寸法である。
人生でサスペンションを組み替えることがあるとは思わなかったが、そこは整備書まで購入しているのであるから、熟読して、自分で組み替えて、交換までする予定である。いやなに、ここしばらく「名車再生!クラシックカー・ディーラーズ」を視聴していて影響されているというのもあるのだが。
とはいえ、武器は必要だ。少なくとも、スプリングコンプレッサが必要なので購入しなくてはならない。レンチは30年近く前に購入したコンビネーションレンチセット(8, 10, 12, 13, 14, 17mm)がある。鏡面仕上げの美品で、調べるとダイヤ精工のTOUGHシリーズらしい。ラチェットレンチはあるにはあるが、安物なのでこれは新調したい。高級品を買いたいが、そんなに高頻度では使わないので、ソコソコの物を。悩みに悩んでSK11のソケットレンチセットをチョイス。
問題は作業場所である。自室は書斎、兼、工房で半土間なのであるが、自分は片付けができない人なので、土間がゴミで埋まっているのだ……年末だし、一念発起して片付けるか! ……ということで、午前中いっぱい使って土間を片付けて磨き上げた。あー、疲れた。
しかし、小休止したら、すぐに、スプリングの圧縮開始である。スプリングコンプレッサというものを、初めて使うが、まぁ、想像通りであった。スプリングにキズが付かないように、革の端切れを挟む加工を加えたら、ラチェットでゴリゴリとスプリングを圧縮していく。程なくして、スプリングがガタつきはじめる。思ったよりは、そう大変ということもない作業であった。
2021-12-26(Sun) サスペンションのバラしに反省する
昨日、サスペンションをバラしたのだが、よく考えると、ショック・アブソーバの頭にあるピストン・ロッド・ナットを緩める場合の反力は、ピストン・ロッドの頭にある六角で取らなければならなかったような気がする。
実際には、ショック・アブソーバの本体を固定して、ピストン・ロッド・ナットにメガネを掛けて、ハンマでガンガン叩いて緩めてしまった。ピストン・ロッドはショック・アブソーバの本体からすれば可動部であり、別パーツなのであるから、回転方向に強い衝撃を加えるのはよろしくないはずである。
そう考えると、指定の締め付けトルクの割に、恐ろしく強力な締め付け具合だったことにも合点がいく。一度、締めると粘着的な効果が生じて、ちょっとやそっとじゃ緩まないという状態になるというわけか。すると、マツダのディーラーに部品の取り寄せをお願いしないといかんな。面倒くさいな。
などと考えながら、少し近所をドライブして、ホームセンターでSK11の21mmのソケットとシリコンスプレーを買い足した。やっぱりなんだか楽しい。今晩はリアのサスペンション一式と一緒に風呂に入って、(カー)シャンプーしてあげて、ナメられるくらいピカピカに磨き上げてやることにしよう。うふふふふ。
2021-12-27(Mon) 部品検索からのモノタロウコンボ
昨日「マツダのディーラーに部品の取り寄せをお願いしないといかんな。面倒くさいな。」などと書いたが、何げに「マツダ 部品 検索」などと、どストレートにググったところ、ジャストミートなサイトを発見してしまった。その名も「Zoom Zoom NationParts」。
2021-12-28(Tue) キミはそこにいるべきなんだ!
先日、SK11の21mmのソケットを購入した。ロードスターのホイールナットを締める用である。SK11のソケットレンチセットは19mmまでなので、追加購入という形だ。
2021-12-29(Wed) トルクレンチを試す、タワーバーを外してみる、uWSGIを動かす
実は、アレコレの工具と一緒に、トルクレンチも購入していたのであった。ロードスターのホイール・ナット締付けトルクである108〜147(Nm)を上限に、できるだけ下の方までと欲張ったら上記の製品になった。どうやら自転車用のようであるが。
トルクレンチという存在はだいぶ前から知っていたが、使ったことがなく、使ってみたかったので買ってみた。21mmソケットも手に入ったので、イザ、既に固く締まっているホイールナットに掛けて40Nmで締めてみよう……と、思ったら、トルクレンチのハンドルがホイールの凸凹に干渉してしまう。ソケットのエクステンションって、意外と必要なんだな。ソケットレンチセットを買っておいてよかった。では、改めて。
「コキンッ」。なるほど、こういう感触なのか。わかりやすい。70Nmでも締めてみる。「コキンッ」。70Nmでも、そう大きな力じゃないんだな。説明書に「下限付近だとクリック感が小さい」と、あったので、7Nmでも試してみるが、十分なクリック感である。へー。そのうち、バネ秤でも手配して、簡易に校正でもしてみたいもんである。
ソケットのエクステンションなしだと周囲に当たりがち、とか、ナットを落としたらすごく面倒そう、とか、整備書はクリアファイルに入れておくといい、とか、クリアファイルに付箋を貼っておくとメモできていい、とか、部品の向きを保持するならラベルを貼るといい、とか、ラベルには養生テープと油性ペンがいい、とか、である。
と、ここで大きく話が替わるが、もしかしたら、仕事でNGINXとPythonを組み合わせて使うかもしれない、という流れがあるので、ちょっとお試ししてみることにした。基本、ApacheとRuby派なので、どっちもアウェーである。
まぁ、しかし、勝手がわからない。NGINXとPythonを組み合わせるということは、NGINXとuWSGIとPythonとFlaskを組み合わせるということと同義だ。特にuWSGIがわからない。自分は、できるだけFedoraのオフィシャルパッケージを使いたいし、それを意図されたとおりに使いたい主義なので、そのへんのウェブ上のノウハウは役に立たず、パッケージャの意図を読み取る必要がある。Emperorモードってなんなんだよ。
なかなか理解が進まなかった理由が、uWSGIの設定が多くて意味不明なこと、UNIXドメインソケットでつなぐと、通信の中身を知る方法がなく、切り分けが進まないこと、WSGIの仕様がよくわからず、telnet接続して試せないこと、あたりだ。TCPでつなぐことも可能だったので、まずはそれで進めたところ、tcpdump等で切り分けが進んで、どうにか全貌を理解することができた。結局、/etc/uwsgi.dの下に置くwsgi.iniの内容は以下で済んだ。
[uwsgi]
plugin = python3
chdir = /var/lib/uwsgi
wsgi-file = wsgi.py
callable = app
socket = /run/uwsgi/wsgi.sock
chmod-socket = 666
logto = /var/lib/pv/log/uwsgi/%n.log
というようなことも、間違いなく動作するスケルトンコンテナにまとめてしまえば、瞬時に理解できる。というわけで、コンテナの定義ファイル一式を置いておく。
2021-12-30(Thu) 2021年の終わりに
ヴォーカルも、体作りも、今年の頭以前から始めているので、新しい取り組みではない。この歳になると、積極的に新しい取り組みをしていかなければ、とは思う。とはいえ、それらがしっかりと充実して継続できたのはよかったな。
ヴォーカルは、5月頃から、風呂で10分の喉の筋トレを始めたことが、すごく上達に効いた気がしている。キーを無理に上げて歌うより、ひとつひとつの音をキレイに出す方向に舵を切ったので、明確にいくつキーが上がった、とは言えないが、間違いなく前よりラクに出るようになっていて、表現力も上がった実感がある。
時々、特に悪気はないかもしれないが「〇〇の歌声って素敵すぎる、叶うならその声が欲しい」というコメントを目にするが、苦笑いである。その歌手は「喉の筋肉を鍛え上げて、苦労の末にその声を手に入れた」のである。天性の部分もゼロではないだろうが、単に運良く持って生まれたような言い方は、その歌手の取り組みに対して失礼である、ということを認識すべき。オマエはイチローに「振り子打法がスゴすぎる、叶うならその技が欲しい」というのかと。
そして、歌声において、音の高低なんてイチ要素にすぎないということ。音の高さが同じでも出し方は多種多様なのである。ミックスボイスで高い声が出ても、それはミックスボイスで高い声が出せるというだけに過ぎない。地声でも、裏声でも、シャウトでも、その高さが出せるようになるべきである。
この間「〇〇は、奇をてらって無理して声を出している感じ。そのうち喉を痛める」というコメントを目にしたが、これも苦笑いである。シャウトに対してのコメントなのだろうが、徐々に訓練していけば、音程ばかりか、清音に混ぜるシャウト成分も自在に調整できるし、ガラガラせずに、すぐ次の音を清音に戻せるのだ。一般人がシャウトのマネゴトをして、音程も付けられず、一発で喉をガラガラにしてるのと一緒にしてくれるなと言いたい。オマエはイチローに「無理して速く送球している感じ。そのうち肩を痛める」というのかと。
一方で、体作りも、だいぶカッコいい体になってきて、気分が落ち着いてきた感がある。現在は、7月の3回目の減量期の終了から、増量を経て、4回目の減量期の終了直前といったところ。