遠くのパン屋に行ってきた

最近、パン屋巡りにハマっている。
城の近所には、パン屋が5,6件あって(ただし徒歩30分圏内)割とそれぞれで特徴が違う。

なので、最近パン屋を巡って朝ごはん用のパンを買うということを続けている。
今日は徒歩20分くらいのところまで歩いてパンを買ってきた。
ちょっと行くのが遅かったせいでほとんど売り切れていた(15時くらいだった)けれども、なんか昔懐かしというかある意味ちょっと古い感じのパン屋さんだった。
(チョココロネとか、メロンパンとかが強いみたいな)

いくつか残っていたパンを買ってみたけど、甘くて美味しい、店員さんもいい人だったしすごくよかった。
また行く。

NASをどうにかしたいの巻

城のNASサーバーは、未だに Microserver Gen8を使っている。
とはいえ、CPUを換装したりして処理性能的にはそんなに不満はないのだが…

しかし、中古で入手したときから筐体がサビていたり、さすがに IvyBridgeなのはどうなのよとか
色々と問題が出てきている。とはいえ、今はPCを買うには大変時期が悪い。
とはいえ、もうこの問題は数年放置していていい加減どうにかしないとなぁと思っている。

奮発して、Minisforumの強いやつ(Ryzen AI 積んでます)みたいなのを買うのが一番良いのだが、
さすがにNASサーバーにそこまでのお金は出したくない。

ということで、自作でなんとかしよう。みたいな感じになるのだが、これがまた選択肢が難しい。
まず、NASケース自体がすごい高い。よく使われる Jonsbo N2とかN3 は大体2.5万円くらい。
よく使うN100のマザーも2万円、メモリも2万円(で済むのか?) みたいな状況。

ということで、ずっとヤフオクとかを眺めていたらいいことに気がついた。
Club One Systems NWS-2T100ES というサーバーがある。
このサーバーは、 ATX電源が使えて、HDDが4台のエンクロージャーがついている、mini-itx マザーが使える。
そしてこのサーバーは中古で1万円ちょっとで買える。
(そして、Skylake世代なのでそのまま使えばいいじゃん。という説はある)

今回はたまたまこのサーバーのジャンク品(CPU、メモリなし)が安く手に入ったのでコレを使う。
電源ユニットも250wのものがついているので、一旦これでいい。 送料込み 4300円

あとは、マザーとCPUがあれば1台でっち上げられる。
(メモリは、SODIMM DDR4 が16GB分あるのでこれを使う)
そして、なぜか、B250 マザーに Core i3 9100 が乗っているというセットが出品されていたのでこれを購入した。
7300円。

よく考えると、B250マザーは 6,7世代なので、9100が乗っているのは大変不思議なのだが、動作動画まで貼ってあったのでなにかのマジックで動くのだろう(ソケットは同じだし)
※ あとで調べたら、 1xx、2xxのチップセットで 8,9世代Coreを動かすというハックがあるらしい。おそらくそれが適用されているのだろう。 一応同じLGA1151なので(3xxのマザーは電源関係が強化されているとかなんとか)
物理的には刺さるが、何やらブロックしているとかなんとか… なのでそこをバイパスすれば動いちゃうみたいな話の模様。

あ、あとSODIMM→DIMM変換基盤を2枚買っているので 1723円。
合計すると 13,323 円。 これくらいならまぁ… というところ。

メールサーバー変更

さくらのレンタルサーバーから、purelymail.com に移転した。
決め手になったのは、 AWSの勉強をしようと思って、AWS Organizationを作って、アカウントを分離しようとしたら、アカウントごとにユニークなメールアドレスが必要だったこと。

調べてみてわかったけれども、 name+alias@example.com みたいなアドレスを plus addressing / subaddressing と呼ぶらしい。 ところによっては dynamic alias とも言う模様。

検討したのは、 Migadu と Purelymail。 Fastmailだと信頼性あっていいなと思ったものの、値段がちょっといい感じなのでパスしてPurelymailにした。
Migaduの方がそれっぽいのだけれども、 メール受信100通/day だと万が一SPAMで超えちゃった場合が不安なのが決め手だった。

Webmailが普通にRoundcubeだったりしてなんともはやだけど、機能的には十分なので一旦様子見な感じ。

ついでに、 Freshping から Cronitor への移行も始めた。

zigbee2mqttで遊ぶ その5

お風呂時間をGoogle Calendarに保存することにした。
これは、Rescue Time というアプリケーションがやってるのを真似した。

そして、Mastodonへの投稿も復活させた。
あとは、Slackへの投稿だけではあるけれども、これはちょっとまだできていない
何にしても、あとはしばらく運用してみて不具合を潰したいなと思っている

zigbee2mqttで遊ぶ その4

ボタンをセットアップしたので、ChatGPTの力を借りながら、お風呂るボタンを復活させていく。
とりあえず処理全体をどうするかだが、Node-RED上ではJavascriptが動くのでここですべてを完了させることも
できなくは無さそう。 とはいえ、既存のスクリプトとかが色々とあるので、それは流用したい。

ということで今回の構成はこうした。
Node-RED上のfunctionで、ボタン→お風呂入った、出た というイベントに変換する。

別に用意してある、Jenkins上に General Webhook Plugin を入れる。
(別に入れなくても良いのだが、パラメタの処理が楽だったので入れた)
これで、 JENKINS_URL/general-webhook-plugin/invoke?token=任意のトークン
にPOSTすることで、Jenkinsジョブを起動することができる。
ついでに、リクエストボディにJSONを投げ込めば、それをこのプラグインの設定で、JSONPathを指定して環境変数に取り込んでくれる。
例えば、 BATH_EVENT = $.event とか書いておけば良い。

とりあえず、今日はWebhookでジョブが起動すること、パラメタが渡せていることまでは確認できた。

zigbee2mqttで遊ぶ その3

SNZB-01Pが届いた。
これは… Aqaraのスイッチを選ぶ必要が全くない。 個人的には完全にSonoffの方が上位互換である。
一番気に入ったのは、金属のプレートが同梱されていること。
これを、壁に貼り付けておけば、本体の裏に結構強力な磁石がついているため金属プレートにくっつくこと。

ボタンのサイズ自体はあまり変わらないし、ペアリング時の変なクセもなく素直。
敷いて言えば、電池部を開けるときに、スマホのSIMを開けるときのようなピンが必要なことくらいか。
といっても、ピン自体も付属しているので全く問題ない。
個人的には100点と言いたい感じ。

zigbee2mqttで遊ぶ その2

Zigbee2MQTT と mosquitto と node-red をセットアップしてとりあえずボタンを押したら何かを動かすことができるようにはなった。

さて、肝心のお風呂る機能を作るぞ…の前に、ボタン設置してこようと思ったら…
床に落とした。
そして、壊れた。。 ボタンが引っかかって押せなくなった。
なんてこったい。。

ChatGPTに相談してみたら、Aqaraのスイッチは小さい代わりに弱いです。
頑丈さならSonoff SNZB-01P を選んでください。だって・・・
それを早く言ってくれ。

そして、Sonoffのボタンはどうもあまり出回ってないようで… しばらく進展しなそう。

zigbee2mqttで遊ぶ

昔、Amazon Dashボタンでお風呂時間をログしていた。
しかし、DashボタンはAmazonに殺されてしまい、今ではもうただの不燃ごみ。

では…と、AWS IoT ボタンに乗り換えたが、これもまたサービス終了。

しばらく放置していたが、なんとなくまたログを取りたいなと思って考えてみた。
…考えてみたといってもChatGPTに相談しただけなんだけども。

Dashボタンの頃と同じことをするなら、Zigbeeボタンを使えばいいらしい。
Zigbeeでの通信は、USBドングルを使えば良く、Zigbeeボタンは Aqara のボタンを揃えろ。とのこと。
ソフトウェア的には zigbee2mqtt というブリッジソフトウェアがあるので、これを使えば構築できる。
なるほど。

Sonoff Dongle-P USBドングルとAqaraのボタンで5000円強。
届いたとき、Aqaraのボタンの電池の金具が変形していて明らかにおかしくなっていたので、手で直した。
(CR2032電池の上に来るべき金具が、下に行ってしまっていた。そのせいで蓋がやたら硬かった)

最初は、Raspberry Pi Zero W が余っているのでこれでやろうと思ったが、セットアップしてみると遅い…
さすがにこれは厳しい。何より、armhf は docker も node.js もサポート外という感じなのが辛い。
これでは構築してもいまいちなので、普通にx86のサーバー上で構築した。

zigbeeの機器は、それぞれがメッシュネットワークを構築して、パケットの中継みたいなことをするらしいので
理屈上は距離が届くのではないかという期待を込めている。
(お風呂場の前にRPiでも置きたくないし…湿度すごいので)

ハマりどころとしては、なかなかペアリングがうまく行かなかった。
エラーメッセージを貼ってみると、ChatGPT曰く

① ペアリング手順(重要)

手順

  1. Zigbee2MQTTで Permit join ON
  2. ボタンのリセット穴(ピン)を長押し 5秒以上
  3. LEDが点滅したらすぐ離す
  4. その後 2〜3回 短押し(これ重要)

👉 この「短押し追撃」で安定して join します

だそうで。 怪しいなと思いながら試したら、本当にjoinした。 短押し追撃をしないとjoinが失敗する。
ChatGPTすげーな・・・

Joinが成功すると、MQTTにイベントが流れ出すのであとはそれをListenして好きに処理すればいいだけ。
多分 n8n とかを通して楽する感じになるかなと。
(相談してみたら、 node-red のがいいよと言われて結局従った)

Thinkpad X13 Gen2 が起動しなくなった

再起動したら、Boot menuに入ってしまい、どの項目を選んでも起動しなくなった。
BIOSセットアップに入ろうと思ったら、またBoot menuが表示され、 System Deployment Modeと表示された。

これは、おそらくUEFIに内蔵されたMSの証明書の有効期限が切れたので、UEFIセットアップすら起動しなくなったに違いない。

このPCは、ずっとLinuxで使っているので、証明書の更新はされていないはず。

…ということで、NVMe SSDを入れ替えて、Windows 11をセットアップし、Windows Updateをすべて更新した。ライセンスはBIOSに書いてあるタイプなので助かった。 まあ、アクティベーションが必要になるまでの間にWindows Updateだけなら終わるだろうけど。
Windows Updateの中に、Lenovo Firmware というのがあったのでコレがおそらく問題のかなと。

Windows Updateをあてて、再起動してみると BIOSセットアップにも入れるようになっていた。
で、SSDを元に戻して、念のためBIOSセットアップに入って Save and Exit したら、何事もなかったかのようにLinuxが起動してきた。

PCの寿命に対して証明書の寿命が足りないというか、証明書の更新プロセスがWindows Onlyなのはひどいというか…

JenkinsサーバーをDocker化した

めちゃくちゃ大変だった。
大変だったのは主に以下

依存パッケージの洗い出し

ホストに適当にパッケージを入れて運用していたので、それを洗い出すのが大変だった。
ジョブを実行してはコケ、パッケージを入れて… という感じ。
途中からは docker exec -it -u root container bash とやって、パッケージ追加してOKかどうかを見てから次に進む。ということをした。
ついでに、言語処理系はすべてmiseに寄せることにした。

avahi

avahi のsocketとD-BUSをコンテナにbindして、avahi-utils 入れて nsswitch.conf を書き換えれば mDNSをコンテナでも解決できる

SSH トンネル

ControlMaster と、 initがなくてゾンビが回収されなかった問題、 BUILD_ID=dontKillMe 問題

python

venv を使って書いていたが、なんか妙なディレクトリができたり、 bin/activate が実行できないとか言われたりで微妙だったので、全面的に uv に移行した。

ChatGPT契約した

個人で ChatGPT の有料プランに入ってみることにした。

なんか、自分のコーチとして使えそうな気がしたので…
ただ、今のところ、写真の加工とかをやってもらってる。 これだけでもだいぶすごい。とてもいい

AIすごいなと思った

実は会社でClaudeのアカウントをもらっていたことが判明し、早速使ってみた。

これは、なかなかいい。
それ以前にも、AIがあることを前提に仕事のやり方を考えないといけないよね。という話もあって、色々と変わっていかないと行けないんだろうなぁと思った。

初詣

近所の神社に行った。
普段は人がいる感じがしないのに正月は行列ができてる。

和服の着付けができるようになってちょっとよかった

初詣

テレビすてた。 回収所まで持っていくのたいへんだった。

Ozz 新宿行った

いつも迷子になって遠回りするので、めっちゃ遠いと思って足が遠のいてた。
実は、駅からはそんなに遠くなくて、割と近所だということがわかった。

今日は馴染みの店員さんがいたので、本当に本当に話が早かった。
おかげで、それは着れるかもしれない、これは絶対無理。ってバッサリとやってくれて、めちゃくちゃ助かった。
あと、セール中だったらしく… 1着お迎えするつもりが2着お迎えしてしまった。
この値段で1着買えるなら、もう普段着もこっちに切り替えていいのかも。。

そして、BOZのコート初出し。アームホールがキツいけれども、これはちょっと痩せたらまた変わる気がする。
部屋で着たときはこれは… だめかもと思ったけれども、着てしまえば意外と大丈夫。
大きな動きをすると怖いけど…(破れそうという意味で)
程々に暖かくて大変よかった。見た目と暖かさのバランスのギリギリ見た目寄りみたいなところ。