SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|

2021-12-01(Wed) 「SEVENTH MOON」に指がかかる

  いまのところ、歌唱力の向上のためには、なにしろ音域を上に延ばし、それよりも下の音域の表現力、安定性を上げる、という認識で、日々、喉の筋肉を鍛えまくっている。

  そして週1〜2のカラオケでの練習であるが、定番曲を中心に、ちょくちょく新しい曲を加えつつ、時々、無理目だった曲に改めて挑戦してみるのだ。すると……あれほどに、高さが届かない、原曲の感じが出せない、と思っていた曲がフッと手の届く場所に下りてきていることに気づくのである。別に完璧に歌える状態ではない。あくまで「指がかかった」という感じ。しかし、そう思えた時の気持ちの高揚感といったらない。自分だけなのかな。こういう感覚を抱いているのは。

  今回、気づいたのは、マクロス7の主題歌「SEVENTH MOON」。主題歌なのに劇中では歌われておらず、あまり人気のない歌だが、全編がシャウト混じりで、かなり高音域。体力的にもキツい。しかし、まぁ、なんとか歌い切れるようになった感。

  調べるとマクロス7の放送は1994年下期。自分が23歳の頃だ。ほぼ、全話をリアルタイムで観るほど熱中していた気がする。別にその時から歌を目指していたわけではないが、カラオケに行く機会があれば、いくつかの曲を歌っていた。あれから四半世紀を経て、ようやくそれなりに歌えるレベルまで来たのか。長かったなぁ。

  バサラの曲を歌いこなすことが、ヴォーカル修行の大きな目的のひとつなので、そこに指がかかったことがなんとも嬉しい。引き続き、精度を上げていきたい。


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回に分けて作業を繰り返し、襟の部分だけもう一度。いや、これは気分イイわ。スゴいな。

  画像の説明

  改めて水をかけて拭き取ってからワックスをかける。見事にマダラ模様はなくなった。が、トランク側には見当たらないが、ボンネット側は透かすと細かいクレーター状の凹凸が見える。ウォータースポットというやつか。実際に微妙な凹凸があるのだろう。それが消えないのは残念ではあるが、しっかりとマダラ模様は除去できたので、見栄えは相当に良くなった。今回、トランクとボンネットだけしか施工しなかったが、フェンダーとかドアの上部もそれなりにマダラ模様があるので、そのうち施工することにしよう。

  聞くところによると、コーティングをしていても雨染みは付くらしい。だが、このクリーナを使えば、雨染みと一緒にコーティングも落ちる。とすれば、数万もかけてコーティングする意味はなんなんだろうね。やっぱり、コーティングは限りなくオカルトだな。

  しかし、このクリーナ、だいぶ大容量だが、今回はトランクとボンネットで10プッシュくらいしかしてない。施工は2年に一度くらいで十分そうだが、そうなると、この1本でほぼ一生ものってことに……。



2021-12-17(Fri) ホップアップオプションズ純正ダンパー4本セットをゲット


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.

  ちなみに、docker_logsはdocker_execのシンボリックリンクである。スクリプト内で自らのスクリプト名を見て処理を替えている。

  で、しばらくは心穏やかに幸せに暮らしていたのだが、そのうち既製のコンテナを使う状況で、コンテナ内で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

  で、以下がdocker_execのコードである。さっき作ったトコなんで、考慮不足も多いだろうが。まずは、バージョン0.1ということで。

#!/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グレードのものとは違うようなのである。

  そうなのである。実はNR-Aなどというモータースポーツベース車のグレードを自ら選んでおきながら、足が一番ヤワらかいという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のソケットレンチセットをチョイス。

  問題は作業場所である。自室は書斎、兼、工房で半土間なのであるが、自分は片付けができない人なので、土間がゴミで埋まっているのだ……年末だし、一念発起して片付けるか! ……ということで、午前中いっぱい使って土間を片付けて磨き上げた。あー、疲れた。

  画像の説明

  しかし、小休止したら、すぐに、スプリングの圧縮開始である。スプリングコンプレッサというものを、初めて使うが、まぁ、想像通りであった。スプリングにキズが付かないように、革の端切れを挟む加工を加えたら、ラチェットでゴリゴリとスプリングを圧縮していく。程なくして、スプリングがガタつきはじめる。思ったよりは、そう大変ということもない作業であった。

  問題は、サスペンションの最上部のナットである。とてもではないが、手では回らない。整備書によれば、締め付けトルクは「27-32Nm」とあるが、そんなもんじゃない感じの締め付け具合である。結局、サスペンションを横に倒して足で踏んで、メガネを掛けて、反対側をハンマで叩くことでようやく緩めた。だいぶハードに叩く必要があったので、ちょっと怖いくらいであった。

  とりあえず、それが外れたら一段落である。串焼きのようにパーツが外れる。一応、向きや順番や組み合わせを保持するために、紐で括る。それを4回繰り返して、全てのサスペンションをバラし終えた。

  画像の説明

  こうなれば、あとは、Sグレードのスプリングと組み合わせてサスペンションを組み立て、実車のサスペンションと入れ替えるだけである。なんだか楽しくなってきて、フロントのサスペンション一式と一緒に風呂に入り、(カー)シャンプーしてあげて、ナメられるくらいピカピカに磨き上げてしまった。うふふふふ。


2021-12-26(Sun) サスペンションのバラしに反省する

  昨日、サスペンションをバラしたのだが、よく考えると、ショック・アブソーバの頭にあるピストン・ロッド・ナットを緩める場合の反力は、ピストン・ロッドの頭にある六角で取らなければならなかったような気がする。

  実際には、ショック・アブソーバの本体を固定して、ピストン・ロッド・ナットにメガネを掛けて、ハンマでガンガン叩いて緩めてしまった。ピストン・ロッドはショック・アブソーバの本体からすれば可動部であり、別パーツなのであるから、回転方向に強い衝撃を加えるのはよろしくないはずである。

  まぁ、やっちまったもんはしょうがない……と、思いながら、改めて整備書を眺めていたら、ピストン・ロッド・ナットに「R」というマークが付いていることに気づいた。ハテ……?

  と、整備書の冒頭を見てみると「交換部品(再使用不可部品)」とある。げげッ。そういうことか。ナットの内側に緩み止めが塗布されているから、一度外したら捨てて、新品を締めないといけない、ということなのか。

  そう考えると、指定の締め付けトルクの割に、恐ろしく強力な締め付け具合だったことにも合点がいく。一度、締めると粘着的な効果が生じて、ちょっとやそっとじゃ緩まないという状態になるというわけか。すると、マツダのディーラーに部品の取り寄せをお願いしないといかんな。面倒くさいな。

  画像の説明

  などと考えながら、少し近所をドライブして、ホームセンターでSK11の21mmのソケットシリコンスプレーを買い足した。やっぱりなんだか楽しい。今晩はリアのサスペンション一式と一緒に風呂に入って、(カー)シャンプーしてあげて、ナメられるくらいピカピカに磨き上げてやることにしよう。うふふふふ。


2021-12-27(Mon) 部品検索からのモノタロウコンボ

  昨日「マツダのディーラーに部品の取り寄せをお願いしないといかんな。面倒くさいな。」などと書いたが、何げに「マツダ 部品 検索」などと、どストレートにググったところ、ジャストミートなサイトを発見してしまった。その名も「Zoom Zoom NationParts」。

  英語サイトだが、それを意識することなく、ポチポチするだけで、アッいう間に目的のパーツにたどり着く。アキネイターもびっくりだ。目的のナットの部品番号は9YB101008らしい。

  画像の説明

  で、その部品番号をモノタロウの検索窓に入力すれば、パッと出てくる。こりゃ、便利すぎる。

  意味もなく、整備書と、部品検索と、モノタロウとを往復しまくってしまった。楽しすぎるな、これは。で、いきおい余って、サスペンションを仮組みしてみたり。

  画像の説明

  とはいえ、部品の手配は正月明けだし、タイヤ交換が先なので、いまはワクワクと一緒に大事に箱に仕舞っておくのであった。


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年の終わりに

  ちょっと早いが、正月はカミさんの実家で過ごすので、1年を振り返ってみた。

  ヴォーカルも、体作りも、今年の頭以前から始めているので、新しい取り組みではない。この歳になると、積極的に新しい取り組みをしていかなければ、とは思う。とはいえ、それらがしっかりと充実して継続できたのはよかったな。

  ヴォーカルは、5月頃から、風呂で10分の喉の筋トレを始めたことが、すごく上達に効いた気がしている。キーを無理に上げて歌うより、ひとつひとつの音をキレイに出す方向に舵を切ったので、明確にいくつキーが上がった、とは言えないが、間違いなく前よりラクに出るようになっていて、表現力も上がった実感がある。

  余談だが、そうやって、それなりに歌い続けていると、気づく点は多い。

  まず、歌声は喉の筋肉だということだ。鍛え上げれば、歌声はどんどん良くなるのである。

  時々、特に悪気はないかもしれないが「〇〇の歌声って素敵すぎる、叶うならその声が欲しい」というコメントを目にするが、苦笑いである。その歌手は「喉の筋肉を鍛え上げて、苦労の末にその声を手に入れた」のである。天性の部分もゼロではないだろうが、単に運良く持って生まれたような言い方は、その歌手の取り組みに対して失礼である、ということを認識すべき。オマエはイチローに「振り子打法がスゴすぎる、叶うならその技が欲しい」というのかと。

  そして、歌声において、音の高低なんてイチ要素にすぎないということ。音の高さが同じでも出し方は多種多様なのである。ミックスボイスで高い声が出ても、それはミックスボイスで高い声が出せるというだけに過ぎない。地声でも、裏声でも、シャウトでも、その高さが出せるようになるべきである。

  この間「〇〇は、奇をてらって無理して声を出している感じ。そのうち喉を痛める」というコメントを目にしたが、これも苦笑いである。シャウトに対してのコメントなのだろうが、徐々に訓練していけば、音程ばかりか、清音に混ぜるシャウト成分も自在に調整できるし、ガラガラせずに、すぐ次の音を清音に戻せるのだ。一般人がシャウトのマネゴトをして、音程も付けられず、一発で喉をガラガラにしてるのと一緒にしてくれるなと言いたい。オマエはイチローに「無理して速く送球している感じ。そのうち肩を痛める」というのかと。

  一方で、体作りも、だいぶカッコいい体になってきて、気分が落ち着いてきた感がある。現在は、7月の3回目の減量期の終了から、増量を経て、4回目の減量期の終了直前といったところ。

  画像の説明

  今期は、昼こそ、オールブラン、ヨーグルト、サラダチキン、温泉卵という固定メニューながら、晩飯はたっぷり目に食べ、減量の速度をさらに緩やかにした。まったく空腹感を感じないどころか、減量するのが不思議なくらいの満腹生活である。それでいて、ほとんど筋肉量を減らさずに、体重が落ちていく。つまりは、体脂肪だけが落ちていく状況なので、前回より1kg弱多い体重で減量終了となる見込みである。

  週5日は10kmほど走るのも、完全に習慣化して、平坦な道を走ることなぞ、屁でもなくなっている。ちょっとヒザの調子にダマしダマし感はあるが、いまやどんだけでも動き続けられる自信があるな。

  ヴォーカルと体作り以外だと、プログラミングやドライブにも、それなりに時間を割けたなぁ。職場でコミュニケーションの活発化に取り組んで成果も出せたし、個人的に若い社員ともいっぱい遊ぶ機会を作れたし。

  来年は、まずは、ロードスターのタイヤ交換、そして、サスペンションの交換に挑戦したい。自分で作詞作曲して歌ってみたりとかもしてみたいな。