IT

hugo再再起動

先日再公開したWebサイト。

Perplexity作の扉絵

この仕組みをイラスト1枚の扉絵にして

rNote版のサイトとイメージが乖離してしまうと面倒なので記事内のHTMLをそのまま引き継ぐ形で構築したのが、リンク切れなど細かく確認チェックしたところ、実体パスが変わっていたり、エラーで変換漏れしている事がわかった。

詳しく言うと、rNoteでいうところのAnker:20171115_b_routeは、アンダーバーを使わないHugoではslug:20171115-b-routeになるらしいので、改めて「清く正しくMarkdownのお作法に従うべし」という考えに立って、今度はPerplexityでやり直し。

変換漏れは、slugの元ネタとなるAnkerが元々間違っていた(コピー元から派生した際の変更忘れ)事に起因する、slug重複による上書きと判明し、XML側のAnkerをファイル名に合わせて手動で訂正。

アンダーバー問題は内部参照リンクをスクリプトで変換する形で対応。

公開サーバにアップロードすると記事内の画像や参照リンクURLが/images/~と絶対パスになってしまう問題も復活したが、Hugoのテンプレートに清く正しくRelPermalinkやrelURLなどを盛り込む対処でOK。

Gemini版とは違うものの、Archiveを年月でドリルダウンする仕掛けもそれなりにできた。いずれにせよrNote版とは乖離しており、どっちが良いとも言い切れないのが悩みだが、レスポンシブデザインだったりユニバーサルデザインとか考えるとそのあたりに拘るのは時代的によろしくないのかもしれないなぁ、と理解。

yano@cometlake:~$ cd ~/hugo_site/
yano@cometlake:~/hugo_site$ source .venv/bin/activate
(.venv) yano@cometlake:~/hugo_site$ rsync -avu gt110b.local:~/public_html/entries/diary/* rnote_xml/; \
                                    rsync -avu gt110b.local:~/public_html/images static/;
(.venv) yano@cometlake:~/hugo_site$ python rnote2hugo.py -b "/~yano" -i rnote_xml/ -o content/post/
完了: 8667 件変換, 0 件エラー  →  content/post/
(.venv) yano@cometlake:~/hugo_site$ hugo
Start building sites …
hugo v0.161.0-98d396c16a07b51df06e7673d817a3880da6218d+extended linux/amd64 BuildDate=2026-04-28T11:46:32Z VendorInfo=gohugoio
~~
Total in 40521 ms
(.venv) yano@cometlake:~/hugo_site$ rsync -avu ./public/* vps:~/public.hugo.20260516/

前回ので10分以上かかっていた8,000件のbuild時間も40秒ほどに短縮されて、何より。

参照

The world’s fastest framework for building websites https://gohugo.io/

hugo再起動

geminiによるダッシュボード作成がうまくいったので、2008年のMTOS乗り換え検討以来の懸案にも活用してみた。

1枚の扉絵してもらった

この仕組みをイラスト1枚の扉絵にして

もう一度rNoteを立ち上げて移行する方法を相談してみたところ、やっぱりXML記事をMarkdownに変換して静的サイトジェネレーター(SSG)で構築するのが良さそうだ。というわけで2019年4月に着手したHugoに再トライ。

テーマはひとまずMainroadを選択。さらにArchive記事を年月日で絞り込めるようにレイアウト/テンプレートを補強し、大枠はいい感じになったものの、肝心の画像と参考リンクのスタイルがどうにも以前のサイトとイメージが乖離してしまうので、記事を真面目にMarkdownに変換するのは止めて、ひとまず記事内のHTMLはそのまま残す方針で再公開を優先。

公開サーバにアップロードすると記事内の画像や参照リンクURが/images/~(/~yanoが入らない絶対パス)になってしまう問題があって、hugo serverで起動してhttp://localhost:1313/で確認ケースと折り合いを付けるのに四苦八苦したのだが、どうやら「記事内のHTMLはそのまま残す」方針がHugoの仕様と相容れない結果らしい。

いずれ自家製AIに喰わせて遊ぼうと思ったら、画像や参照リンクも含めてMarkdownのお作法に従うのがいいんだろなぁ、というのもなんとなくわかったので、今回はMarkdown変換スクリプトで強制的にURLに/~yanoを入れてしまう方向で着地。

2019年4月のHugo着手から7年余りの紆余曲折を経てようやく結実。2024年9月に一時閉鎖したサイトもひとまず再開できた。

参照

The world’s fastest framework for building websites https://gohugo.io/

GitHub - Vimux/Mainroad https://github.com/Vimux/Mainroad/

Google Gemini https://gemini.google.com/

Wikipedia http://ja.wikipedia.org/wiki/

Tapo P110M投入

2017年11月に調達したArmadillo-Box WS1をベースにしたIIJのWi-SUN対応Bルートアダプター「SA-M0」

Tapo P110M

Tapo P110M

少々挙動が怪しくなってきた事もあって、2022年2月に「Nature Remo E Lite」を調達してみたのだが、こっちはこっちでもっと電力取得ができたりできなかったりしているので、「Nature Remo Cloud API」を叩いたところで悩みが増えるだけかもしれない…

と思っていたら、どうやら「スマートメーターのWi-SUN Bルートは、原則メーター1台あたり1アダプタ接続」らしい事がわかり、相変わらずSA-M0を使い続けている今日このごろ。

やっぱり24時間365日連続運転というのが良くないのかも?というありがちな思いに到り、ひとまず手持ちのTapo P110Mを投入。

Matter対応なら自宅サーバのcronで叩けるかと思ったが、そもそもTapoアプリのスケジューラ機能でOFF、1分後にONさせるだけで済んでしまったよ。

参照

INTERNET Watch https://internet.watch.impress.co.jp/

TP-Link 日本 https://www.tp-link.com/jp/

Amazon.co.jp https://www.amazon.co.jp

Wikipedia https://ja.wikipedia.org/wiki/

epgrecもJCOM対応

2024年1月に地デジの『J:COMチャンネル』、『J:COMテレビ』の2チャンネルが増えたが、epgrecの対応を忘れていた。

というわけで、まずはepg.Recorder_channelTblに追加。

yano@GT110b:~$ mysql epg -e "INSERT INTO Recorder_channelTbl (type, channel, channel_disc, sid, name) VALUES ('GR', 33, 'GR33', 'hd', 'J:COMチャンネル'),('GR', 37, 'GR37', 'hd', 'J:COMテレビ');"
yano@GT110b:~$

続いて/var/www/html/epgrec/config.phpにも追加。

yano@GT110b:/var/www/html/epgrec$ diff -bc config.php.old config.php
*** config.php.old      2019-04-09 23:54:30.000000000 +0900
--- config.php  2026-05-03 01:28:00.204597368 +0900
***************
*** 44,49 ****
--- 44,51 ----
        "GR32" => "32",         // FBS
        "GR26" => "26",         // TVQ
        "GR34" => "34",         // TNC
+       "GR33" => "33",         // J:COMチャンネル
+       "GR37" => "37",         // J:COMテレビ
  );
yano@GT110b:/var/www/html/epgrec$

あとは/etc/cron.d/getepg周期でEPG番組表が更新されるのを待つだけだが、お急ぎの場合は

キーパッドタッチ電池切れ

毎度おなじみSwitchBot スマートロック

バッテリー残量警告「電力低下」

SwitchBotアプリ

…のボタンや指紋センサーのあるキーパッドタッチ

昨年12月ごろから

デバイスキーパッドタッチ のバッテリー残量が少なくなっています。早めに電池を交換してください。

というメールが飛んできていたものの、アプリで表示されるバッテリー残量も7%あり、本体のLEDも点いたり消えたりしてたので「さすがに早くね?」と思って様子見していたのだが、ついに1%になって反応しなくなったので交換。

アプリの設定で「取り外しアラート」を解除し、キーパッドタッチ下から「SIMカード取り出しピン」を突っ込んでキーパッドタッチを取り外したあと、電池蓋を開ける「付属された三角形のオープナー」を探すのに手間取ったが、無事に交換終了。

前回の交換が2024年7月末だったので、今回もちょうど21ヶ月もったことになる。次回は2028年の2月末頃かな?

スマートロック本体用にストックしてあったCR123Aリチウム電池の使い道があって良かった。

参照

SwitchBot (スイッチボット) https://www.switchbot.jp/

Amazon.co.jp https://www.amazon.co.jp/

Wikipedia https://ja.wikipedia.org/wiki/

バイブコーディングgemini編

Perplexity Proの無料期間が6月で終了する。

gemini版のダッシュボード

gemini版のダッシュボード

2,950円/月、2万9500円/年で継続する必要があるかどうか判断するために、本腰入れて4月に契約したGoogle AI Plus(LLMモデルはGemini 3)を試す事に。

そんなわけで、先週完成したスマメ電力ダッシュボードについて、Perplexityでプロンプトを逆生成しGoogle Geminiにコピペしてみた。

さすがに一発OKとはいかなかったが、3ターンほどでやり取りして完成。細部の出来栄えはClaudeのSonnet 4.6に分があるものの、こっちを先に見ていれば文句なしの合格だろう。ちなみにGemini 3の生成コードは500steps/20KB、Claude Sonnet 4.6のコードは530step/24KB。

せっかくなので、別に40Aを超えたらGoogle Homeに警告アナウンスをキャストするスクリプト作成にもトライ。NestHubでのダッシュボード&警告表示はNestHubのブラウザJavascript対応がうまくいかずひとまず諦めたが、Google Home Miniへの音声キャストだけなら3~4ターンほどであっけなく完成した。

2017年11月にスマートメーターBルートを開通して8年以上経ってしまったが、奇しくも2016年5月のGoogle Home発売のアナウンスから10年目前なので、滑り込みセーフという事で喜びたい。

最後に「この一連のバイブコーディング作業を扉絵に」と頼んだところ、“バイブ"ではなく"ライブ"という文字が入ってしまい、わけわかめw

参照

ITmedia NEWS https://www.itmedia.co.jp/news/

Google Cloud https://cloud.google.com/

Google Gemini https://gemini.google.com/

Claude https://claude.ai/

Anthropic https://www.anthropic.com/

Wikipedia https://ja.wikipedia.org/wiki/

BenQ EW2880U登板

2020年1月に調達したHPのハイグレードディスプレイZ27s。

28インチ 4K IPS HDRi treVoloスピーカー搭載

BenQより

昨日(18日)未明より数十秒起きで手ブレのように画面が乱れるようになった…

ディスプレイドライバの問題っぽい?とか思いつつも、ケーブル類を弄ったり交換したりしたが効果なく、PC未接続での設定画面や「No Signal」の画面ですら乱れることに気づいた。

よく考えると4年落ち中古購入なのでそろそろ10年選手、寿命と言ってもいいだろう、という事で2024年9月に調達したIBenQのEW2880U/EW2880U-JPに入れ替えることに。

最初、DP接続しても(DP選択されているように見えるのに)画面が表示されず、本体の「入力切替」ボタンも何度押しても反応せず。「やべー、初期不良のまま未開封だったか?」と焦ったが、添付リモコンの「入力切替」ボタンを使えば、HDMI接続を選択して表示でき、ホッとした。

ちなみに本体裏のボタンは実は「カスタムボタン」でリモコンから「入力切替」に設定すると、ボタン押下時の表示も変わったので、まずは赤外線リモコンで設定する必要があるようだ。最終的に「システム」→「入力自動切り替え」をONにして設定完了。

参照

ITmedia PC USER https://www.itmedia.co.jp/pcuser/

PC Watch https://pc.watch.impress.co.jp/

ベンキュージャパン https://www.benq.com/ja-jp/

ちもろぐ https://chimolog.co/

NTT-X Store https://nttxstore.jp/

価格.com https://kakaku.com/

合理的みんなのプラン

moto g52j 5G SPECIALでゼロ円運用中のpovo 2.0回線(7233)。

月額1,390円、20GB+5分かけ放題

合理的みんなのプラン

高校入学という事もあり、月額1,390円で20GB+70分通話し放題の合理的みんなのプランにMNP実施。

スマホアプリから19時26分に「MNP回線切替え」を実施し、SIMカードを挿入していたところ、1分ほどでpovoから「解約手続き完了」、日本通信から「MNP回線切り替え完了」のお知らせが立て続けに着弾。日本通信SIMのAPNも設定済みだったので、選択するだけのラクチンさはさすがmotorolaだ。WiFiを切ってブラウザ表示とspeedtestを行って設定確認を完了。

これで日本通信SIMは3回線という事に。

参照

ケータイ Watch https://k-tai.watch.impress.co.jp/

日本通信 https://www.j-com.co.jp/

日本通信SIM https://www.nihontsushin.com/

Wikipedia https://ja.wikipedia.org/wiki/

ダッシュボード完成

9日10日の続報。

ダッシュボード完成形

Perplexity+Claude Sonnet 4.6

PerplexityでLLMモデルを「Claude Sonnet 4.6」に指定して「バイブコーディング」を続行。

PC、スマホ、タブレットで確認しつつ情報やレイアウトを整理し、時系列グラフの表示幅(時間軸)を選択できるようにしたら、情報が多すぎて縦画面では選択ボタンが表示されなくなった。

縦画面ではプルダウンにしたり、いろいろと試行錯誤していたら「データ取得エラー」となって何も表示されなくなってしまったのだが、

原因が分かりました。applyRangeUiMode() 関数が .range-desktop / .range-mobile クラスを探していますが、前のリファクタリングでそれらの要素を削除済みです。さらに re.sub で isDual を全置換した際にJSコードが壊れている可能性があります。

と自己分析。

申し訳ありません、次のターンで改めてファイル全体を整合性のとれた状態で再生成します。現状は複数回の差分編集が積み重なってJS内部に矛盾が生じています。一度クリーンなベースから書き直した方が確実です。続行してよいですか?

という提案に乗って続けてもらい、無事に回復。

…すごいな。

参照

Perplexity https://www.perplexity.ai/

Claude https://claude.ai/

Anthropic https://www.anthropic.com/

Wikipedia https://ja.wikipedia.org/wiki/

バイブコーディング

昨日の生成AIで作ったスマートメーターモニターがいきなりいい感じだった件。

ほぼ完成形のダッシュボード

Perplexity+Claude Sonnet 4.6

速攻でClaude Codeの無料分(5時間枠)を使い切ってしまったので、さてどうしたもんかと思ったのだが、Perplexityで使用できるLLMモデルに「Claude Sonnet 4.6」があったので、こいつを使ったところ手作業で修正する必要がないものがサクッと出来上がってしまった。

そんなわけで、Perplexityのチャットインタフェースで、2要素グラフの軸を入れ替えたり、スマートフォン向けに位置や大きさを微調整したり、例外表示を追加したり、要件をプロンプトして、ほぼ完成。

なるほど、これが「バイブコーディング」か…

参照

Claude Code https://code.claude.com/

Perplexity https://www.perplexity.ai/

Google Cloud https://cloud.google.com/

IBM https://www.ibm.com/jp-ja/

Perplexity https://www.perplexity.ai/

Gemini https://gemini.google.com/

Microsoft Copilot https://copilot.microsoft.com/

ChatGPT https://chatgpt.com/

Wikipedia https://ja.wikipedia.org/wiki/