なんだかんだ無駄に資格集めていたが、業務独占はまだ3つ目 (運転免許と小型船舶)。
試験内容自体はそんなに難しくなく、電子工作ちょっとやってたりすれば、多少試験対策すればすぐ合格できそうな内容だった。
練習後の余った部材が大量にあり、これまた処分がだるだる。。。
すでに先日買ったボロ家の漏電修理とかしています。
とりあえず家中の古めかしくて汚いスイッチやらコンセントやらを総取り替えする予定。
あとCD管の中の配線とかもやり直したいんだけど、流石に難しそうだなぁ。。。
なんだかんだ無駄に資格集めていたが、業務独占はまだ3つ目 (運転免許と小型船舶)。
試験内容自体はそんなに難しくなく、電子工作ちょっとやってたりすれば、多少試験対策すればすぐ合格できそうな内容だった。
練習後の余った部材が大量にあり、これまた処分がだるだる。。。
すでに先日買ったボロ家の漏電修理とかしています。
とりあえず家中の古めかしくて汚いスイッチやらコンセントやらを総取り替えする予定。
あとCD管の中の配線とかもやり直したいんだけど、流石に難しそうだなぁ。。。
築50年ぐらいの激古RC造のおうち買いました。表面的にはだいぶガタ来てたけど、躯体自体は大丈夫そう。
自分でちょいちょいなんちゃってリフォームしてます。
だいぶ茂る時期なので外も大変です。そんな広くないけど。
とうとう手を出してしまいました。
趣味でいろんなセンサーを家中にバラ撒いているんですが、いままでユニバーサル基板を駆使してきたので一つ作るだけでも大変で不器用な自分にとってはなかなかうんざりする作業だった。
いつか深センの格安系基板製造は試してみたいと思っていたけけど、なんだかんだ自分でこしらえてしまっていた。当たり前なんだけど、これ発注するとすげー楽で、見栄えもちゃんと基板だしなかなかの感動モノ。早く使っとけばよかった。時間はかかるけど。
今回はお試し的な感じで簡単なものをオーダーした。ついでに「Sunaga Lab」とシルクまで入れてしまいました。とくに意味ないけど。
基板設計にはKicadを使いました。オープンソースです。
オーダーしてから一週間ほどで手元に届きました。配送はOCSを使いました。なんか安めで早い。
製造費が$19.68、輸送費と$13.54でした。小ロットにしては安い。
これはまずいな・・・だいぶ課金してしまいそうだ・・・。
そうなんです。バイクの調子が最近悪いんです。
先日オイルとフィルター交換してしばらくアイドルしてたら動かなくなりました。
だいぶ昔にスパークブラグが錆びまくりで動かなくなったことがあり、また交換してみました。
今回の作業はこのあたりの偉大なる先人を参考にさせていただきました。
サイドカウルを外し、ラジエーターをどかした上でスパークプラグコネクタを外し、頑張ってスパークプラグまでたどり着く。
下側から手を突っ込んでやったけど、すごく狭かった。あとプラグレンチ+エクステンションバーでやったけど狭くて上部にあるゴムシート?みたいなものもだいぶ外して作業しました。 それでもだいぶ狭かった。
道具さえちゃんとしてれば、難しいのはプラグからレンチを外すときぐらい。(結構無理やり外した)
だいぶ黒くなってはいるが、ググってみた写真と比べた感じ、そんなにやばい感じだとは思えない。まぁ安いからいいんだけど。
一応エアクリーナーも交換。
このバイク買って10年ぐらい無交換でしたが、猫の毛まみれでした。もちろん色も全然違う。
ついでにガソリン添加剤も入れてみました。
これで自分ができそうな消耗品系はバッテリー以外一通りやった。
とりあえずエンジンがまた始動するようになったので、この後ガソリン入れて6kぐらいまで回して走ったら、再びエンストして動かなくなった。
自分でできそうな範囲では無さそうなのでお手上げ。おとなしくホンダウィング木更津に入院となりました。。。
できないといけないということもないけれど、ふと思い立ったので自分でバイクのエンジンオイル&オイルエレメントの交換やってみた。
ググればいくらでも情報があって、自分のようなズボラーな素人でも問題なくできた。
今回は主に以下の偉大なる先人達の情報を参考にさせていただきました。本当こういうの助かります。
ズボラーなのでオイル受けを用意せず (買うのが面倒というか、オイルで汚れたタライとか考えただけで面倒) で、使い捨てのオイル処理ボックス買ってきて、直でドレインから流し込んだ。 容量的にも余裕があるものをかったので、流し込むまでは問題なし。
作業が一通り終わって、エンジン回しても漏れないかどうかの確認するとき、「万が一オイル地面に垂れたらやだし」と思ってこの箱をおいたままにした。 このときエキパイに思いっきり袋が触れていて、溶けてしまった。
袋が溶けるのは良いんだけど、エキパイ側にべったりついて剥がすのに苦労した。。。
エキパイがすごく錆びていたので、ついでにKUREのCRC-336を吹きながらゴリゴリやってしまった。その後エンジンをつけると煙が。
よく考えたらこれ表面コーティングするし、耐熱じゃないし、当たり前だよな。。。
この人はエキパイが非常に熱いものだという考慮がごっそり抜け落ちている様子ですね。反省シナサイ。
ミスっていうわけでもないけど、意外とググっても出てこない。
次の自分のためのメモ: カバーボルト 10Nm, ドレインポルト 24Nm
ドレインボルトは意外とつけ外ししづらい場所にある。これ普通の小さいラチェとかで回すだけならできるんだけど、首が回らず90度しかならないトルクレンチとかだとエクステンションバーつけるか、アンダーカウルを両方外すかしないと回せない。
今回はちゃんとトルクレンチで回したかったため、仕方なく両方のアンダーカウル外した。
次回はちゃんとエクステンションバーを買うことにする。
凡ミス・・・。
冷めれば大丈夫になるに違いない、とするか、頑張って抜くか。。。
エンジニアの語源はエンジンだと思ってたけど、気になってググってみた所どうも違う様子。。。
知らなかった。。。
タイトル | 「社会正義」はいつも正しい: 人種、ジェンダー、アイデンティティにまつわる捏造のすべて |
---|---|
著者 | Helen Pluckrose, James Lindsay, 山形 浩生 (翻訳), 森本 正史 (翻訳) |
出版日 | 2022-11-16 |
ISBN | 4152101873 |
ページ | 単行本 432ページ |
出版社 | 早川書房 |
リンク | →Amazon商品ページ |
「人種、ジェンダー、アイデンティティ」とかそういう〈社会正義〉といわれているっぽい、大切そうで面倒そうなものについて、どうして面倒なことになっているのか分析した本。
リベラルっぽいこういうやつが実はリベラルではなく、ミシェル・フーコーなどのポストモダン的思想から来ている危険な思想であると指摘している。
著者の主義主張としてはリベラリズム押しのようなので、そこは踏まえて読む必要がある。
(ファットスタディーズの文脈で)「どんなサイズでも健康で居られるのだと論じた。医学的なコンセンサスでは、この発送は否定されている。」(No.3430)
ファット・アクティビズム、「ファッティリンピック」 (No.3454)
ペイリーは、〈社会正義〉アプローチへの異論を「シャドーテクスト」として扱う。つまり、〈社会正義〉に対して書かれた批判は、誠実でも有益でもなく、まともな学術として認められるべきではない、という。 (No.4105)
Protocol Bufferにて、あるoneofフィールドについてケースごとに処理の振り分けをしたいことがあった。 これ、いくら探しても簡単にできるいい方法が見つからず (探し方が悪いのかもしれない)、結局簡単なプラグインを作った。
別のプログラムのサブプログラムとして作ったんだけど、他にPythonとかでさっと使える簡単な例も見つからず、微妙に苦労したので一応 protobuf-oneof-listing-plugin としてその部分だけGithubで公開しておくことにした。
簡単な実装例程度のソースなので読めば必要なさそうだけど、軽くソース抜粋して作り方をメモしておく。
まずprotobufライブラリをインストールしておく。
$ pip install protobuf
環境によっては--user
などをつける必要がある。あとレポジトリ内のやつはテンプレートによる生成のためもうちょっと色々インストール必要。
protobufのpluginをインポートする。
from google.protobuf.compiler import plugin_pb2 as plugin
リクエストはstdinから来るようなので、それを読み取って CodeGeneratorRequest
としてパースする。
import sys
data = sys.stdin.buffer.read()
request = plugin.CodeGeneratorRequest()
request.ParseFromString(data)
入力されたファイルはパースされた状態でrequest.proto_file
に入っている。配列になっていて、複数個ファイルの場合もあるので注意。
リクエストパラメータ (protoc実行時に--hoge_out=XXXXX:./out/
とするときのXXXXX
の部分)
は request.parameter
に入っている。この部分はパースとかされず :
の前そのままの文字列。
生成結果は同様に CodeGeneratorResponse
として生成して、stdout。
response = plugin.CodeGeneratorResponse()
# ... responseに生成結果を色々書き込む ...
output = response.SerializeToString()
sys.stdout.buffer.write(output)
このresponse
にはfile
フィールドがあり、そこにadd
していくことで結果となるファイルの生成ができる。
f = response.file.add() # f の型は response.File
f.name = "test-output-file.txt"
f.content = "Generation result"
エラーが起こった場合は error
フィールドに書く。
response.error = "エラーです"
今回作ったプラグインの主目的であるoneofの場合の処理などは protobuf-oneof-listing-plugin レポジトリ にある protoc_oneof_listing_plugin.py
が参考になるかもしれない。
その他 CodeGeneratorResponse
や CodeGeneratorRequest
のフィールドなどは Google の plugin.proto などを参考に頑張る。
実行は基本的には protoc に実行ファイル名を与えるだけ。プラグインの例えばファイル名が test_plugin.py
だったら
$ protoc test.proto --plugin="protoc-gen-test=./test_plugin.py" \
--test_out=templates=hoge:./out/
といった感じ。
test
// どうでもいいけど自宅サーバーって響きが既に年季を感じる時代になってしまいました。
宅サバのZpool (ZFS) にあるHDDからずっと異音がしてるのでリプレースすることにした。 何度かやってるけど、そのたびに調べ直すことになって結構面倒なので、その時のメモを残す。
(以下はzpoolのPool1にある、DiskId11をDiskId22に交換する場合のコマンド例)
今回は交換先ドライブがまだないので、まずディスクをoffline。
(既に手元にあって、マシンに接続されている場合はスキップしてbadblock後いきなりreplaceでok)
# zpool offline Pool1 DiskId11
状態確認
# zpool status
pool: Pool1
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: resilvered NNNK in N days NN:NN:NN with 0 errors on NN NN:NN:NN NNNN
config:
NAME STATE READ WRITE CKSUM
Pool1 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ata-XXXXXXXXXXX-XXXXXX_DiskIdAA ONLINE 0 0 0
ata-XXXXXXXXXXX-XXXXXX_DiskId11 OFFLINE 0 0 0
ata-XXXXXXXXXXX-XXXXXX_DiskIdCC ONLINE 0 0 0
ata-XXXXXXXXXXX-XXXXXX_DiskIdDD ONLINE 0 0 0
logs
nvme-XXXXXXXXXX-XXXXXX_XXXXXXXXXXXX-part5 ONLINE 0 0 0
cache
nvme-XXXXXXXXXX-XXXXXX_XXXXXXXXXXXX-part6 ONLINE 0 0 0
必要であればIDからデバイスファイル名を確認
# ls -lah /dev/disk/by-id/*DiskId11*
デバイスの停止
# echo 1 > /sys/block/sdX/device/delete
ディスク停止の確認
# dmesg
[日 5月 23 08:59:09 2021] sd X:X:0:0: [sdX] Synchronizing SCSI cache
[日 5月 23 08:59:09 2021] sd X:X:0:0: [sdX] Stopping disk
[日 5月 23 08:59:10 2021] ataX.XX: disabled
SeagateのディスクだったのでSeagateのサイトからRMA申請。(微妙に分かりづらい場所に申請フォームがあったりするのは嫌がらせだろうか)
「Seagate ST3000DM001 の RMA 制度でクロネコヤマトの「宅急便コンパクト」で送ってみた - What I Know ~ワッタイナ」あたりを参考にさせていただいて、ヤマトの宅配便コンパクトで送った。
今回はマシンをoffにしてHDD追加作業したけど、onのまま刺したりしても認識されたと思う。(M/Bとかによるはず)
作業後マシン起動して、追加されたディスクの確認。
一応smartctlやhdparmなどでシリアル番号を見て、追加したディスクのラベルと一致するデバイスを探して確認。
# smartctl -a /dev/sdY
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.4.109-gentoo-x86_64] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Seagate IronWolf
Device Model: XXXXXXXXXXX-XXXXXX
Serial Number: DiskId22
...
念の為、パーティションテーブルが空っぽいことを確認 (ディスクによってはWindows用にフォーマット済みのpartが一つあったりするかも)
# gdisk -l /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22
GPT fdisk (gdisk) version 1.0.6.1
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries in memory.
Disk /dev/disk/by-id/ata-XXXXXXXX-XXXXXX_DiskId22: NNNNNNNN sectors, N.N TiB
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is NNNNNNNN
Partitions will be aligned on 2048-sector boundaries
Total free space is NNNNNNNN sectors (N.N TiB)
Number Start (sector) End (sector) Size Code Name
注意: 以下実行するとディスクにかかれていたデータは消えます
とりあえず毎回badblocksフルで実施している (時間かかるのでscreenやtmux上で)。 大容量ディスクの場合そのままやると以下のようなエラーが出る
# badblocks -wsv /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22
badblocks: Value too large for defined data type invalid end block (NNNNNNNN): must be 32-bit value
なので、ブロックサイズを確認・指定して実行する。
ブロックサイズ確認
# blockdev --getbsz /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22
4096
ブロックサイズ指定してbadblocks。
badblocks -wsv -b 4096 /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22
(ここでかなり時間かかる。1TBごとに半日ぐらいかな)
badblocks完了後、zpoolに追加するまえに一応再確認。
# gdisk -l /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22
GPT fdisk (gdisk) version 1.0.6.1
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries in memory.
Disk /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22: NNNNNNNN sectors, N.N TiB
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 64A78E1B-26D3-4E32-940C-2693C69A9A10
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is NNNNNNNN
Partitions will be aligned on 2048-sector boundaries
Total free space is NNNNNNNN sectors (N.N TiB)
Number Start (sector) End (sector) Size Code Name
zpool replaceを実行してresilver開始。
# zpool replace Pool1 ata-XXXXXXXX-XXXXXXXX_DiskId11 /dev/disk/by-id/ata-XXXXXXXX-XXXXXXXX_DiskId22
# zpool status Pool1
pool: Pool1
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since NN NN:NN:NN NNNN
NN.NG scanned at N.NNG/s, NNNM issued at NN.NM/s, N.NT total
0B resilvered, 0.00% done, N days NN:NN:NN to go
config:
NAME STATE READ WRITE CKSUM
Pool1 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskIdAA ONLINE 0 0 0
replacing-1 DEGRADED 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskId11 OFFLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskId22 ONLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskIdCC ONLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskIdDD ONLINE 0 0 0
logs
nvme-WDS100T2X0C-XXXXXXXX_XXXXXXXX-part5 ONLINE 0 0 0
cache
nvme-WDS100T2X0C-XXXXXXXX_XXXXXXXX-part6 ONLINE 0 0 0
errors: No known data errors
しばらくしてresilverが完了したことを確認してDone。
# zpool status Pool1
pool: Pool1
state: ONLINE
scan: resilvered N.NNT in N days NN:NN:NN with 0 errors on NN NN:NN:NN NNNN
config:
NAME STATE READ WRITE CKSUM
Pool1 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskIdAA ONLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskId22 ONLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskIdCC ONLINE 0 0 0
ata-XXXXXXXXX-XXXXXXXX_DiskIdDD ONLINE 0 0 0
logs
nvme-WDS100T2X0C-XXXXXXXX_XXXXXXXX-part5 ONLINE 0 0 0
cache
nvme-WDS100T2X0C-XXXXXXXX_XXXXXXXX-part6 ONLINE 0 0 0
errors: No known data errors
昔にこういうのでデータ飛ばしたことは数え切れないほどあるので、この手の作業は毎回ヒヤヒヤする。
とはいえZFSは全体的に安全に使えるように考慮されている感じがあって、安心感はある。
CBR250RはメータのバックライトLEDがやたら壊れやすいらしく、ウチのやつも数年前ぐらいに たまにチカチカするようになり、最近ほとんどつかなくなってしまった。
タコメーターはまぁいいかというか感じだが、速度表示は夜にちょっと困る。 というか捕まる。(らしい。バイク屋さん談)
これ、交換になると何万円かは掛かるらしい。
貧乏性なのでLEDごときで・・・と思ってしまったため自分で修理しました。
// という事を参考メモとして書いておこうとずっと思いながら半年放置してしまった。ようやく書いた。
LEDは秋月電子に売っていた 高輝度白色チップLED OSW5DLS1C1A を使った。
偉大なる先駆者たち (参考参照) がこれ使ってたから。
まずは表面から見えるボルトを外してメーター部分をバイク本体から外す。 裏のケーブルさえ気をつければそんなに難しくない。
次にメーター裏から見える三盆のネジを取り外して、カバーからメーター本体を取り外す。
裏側から8本のネジを外す。 一箇所Warrantyがどうのこうのって書いてあるが、もはやWarrantyもクソもないので気にせず除去。
全て外すと、メーター部・基板から、カバーが取れます。
タコメーターの針を外す。
正しいやり方はわからんのですが、僕はペンチで掴んでメリッと外しました。結構硬かった。
あとは、基板側のツメを外せるよように真っ直ぐにする。これもペンチでやった。
↑これを↓
こうする。(戻すときは逆)
こういう止めかたって初めてみたが、自動車関連では一般的なんだろうか。
残りは液晶の部分のた端子がつながってるので、その部分を折らないように引き離す。 この端子は多分刺さっているだけなので、まっすぐ引き離せば素直に離れる。 剥がすときに、表示切り替えとかのボタン部分のパーツが外れるので注意。
(ちなみにこのボタンの部分、戻すときの取り付け方を間違え手戻りしたりして苦労したので、 初めのうちからどうついていたかよく確認しておいたほうがいい)
ここまでしてようやくLED部分にたどりつく。
(どうせすぐ壊れるならもう少しアクセスしやすい作りにしてくれてもいいのに・・・ととか思ってしまう。)
ここから先は電子工作的な領域です。
まずは、壊れているのがLEDだけか?というのをある確認。
本体の配線に、分解した基板部分だけ接続して、通電してみる。
下にある4つが速度計のLED。N灯とかはついてますが、ここは見事に消灯してる。
消えているLEDの端子電圧をそれぞれ測り、ついでに極性も見ておく。とりあえず今回は4つとも電圧があったので、回路自体は多分大丈夫なんでしょう。 ここで電圧が来てなかったりすると、結局付け替えても治らず、という悲しいことが起こります。 (実際どの程度あり得るのかはわかりませんが・・・)
電圧が来てることまで分かったので、あとは頑張って付け替える。
うちにはハンダごてが一本しか無いので、挟んで外す、みたいな上品なことは出来ません。
破壊上等って感じで壊れたLEDごと溶かす勢いで焼いた上で、半田吸収線を併用して外しました。 (良い子は真似しないでね)
LED側はどうでもいいけど、基板側でショートした状態にならないようには注意したほうが良いとは思う。
後は秋月で手配したLEDをハンダ付ける。 そして再度基板のみ本体とコネクタをつないで、動作確認。
今回は面倒なのでメーターの方は交換せず。 面倒と言うか、わざわざ危険を犯してまで光らせなくてもいいかな、という感じ。
あとは分解した逆の手順で戻していくだけ。 先述したボタンの付け方以外では特に苦労すること無くできた。
作業中にバイク内に蜂の巣を発見した。ずっと一緒にツーリングしてたのかな・・・。
10期目です。まだやってます。以下、なんて事はない近況です。
持続化給付金、幸いなことに満額受給される予定 (最近申請したけどほんとにもらえるのかな)。
コロナ自体は怖くないんだけど、何より世の中の反応がクレイジーすぎてそれが恐怖。
今後ともよろしくお願いいたします。