2026年 01月 08日

pprof 入れてバックエンドのプロファイルとって最適化した。プロファイラの解釈はLLMにやらせると眠くてもできて便利。しかしLLMに「推測するな計測せよ」「推測するなドキュメントを見よ」を徹底させることができない。すぐ「たぶんあれだ!」って検討違いに走り出して「ちがった〜」ってなってる。自分みたい。腹立つ。

html/template を便利に使いすぎるとやたらリフレクションがコールツリーに出てくるようになる。変なことするなら、渡すデータ構造変えたほうがいいというの一理あると思いつつ、そこまでじゃないんだよな、ということで複数回リフレクション読んでたところを、単に funcMap で一気にやる1個のリフレクションでいけるようにしたりとかした。

ここ数日夜遅くまでこのブログをいじっているので死ぬほど眠い

表側にも検索機能つけようか (管理画面には単純なLIKE検索がつけてある)と試行錯誤してみてたけどやっぱりあんまりよくない気がしている。Google が見捨てた(ひっかからない)ような古くて恥かしいやつが検索によって浮かびあがってくると辛い。元々表側に直接的な検索つけてない最大の理由だしなあ。

なんかいい方法があればなあ。といっても時間で足切りするぐらいしか思いついてないけど

I'm feeling lucky 的な検索しかできないとかだと良いかもしれない。

「あのとき見たあのエントリ検索したい」というぐらいの価値があるエントリならググればたぶんヒットするだろうし、独自にサイト内検索を実装するなら、本来の検索とは別の意味が必要なんじゃないか。

といっても最近は Google も個人サイトを超冷遇していて、site:lowreal.net してもひっかからないことが増えてしまったのだよなあ。だから検索は検索としてほしい。でも自分用の検索は別に管理画面で十分。寝ろ

ogp の画像が自分の写真で、Slack に流れきたのを見てゾっとしたので作りかえた

HTMLで1200x630指定して作って「ノードのスクリーンショットをキャプチャ」をするのが最速っぽい。

headless chrome でスクショとるのとか試してみたけど、なんか変な帯ができたりして意図したビューポートサイズにならないことに1時間ぐらいハマったので諦めた。

スクロールハイジャッキングがないことの安心感

モバイルでウェブサイト見る上での重要な要素になってしまったな。広告があるサイトだと、変なところをタッチしないための慎重なスクロールを要求される。

スクロールを邪魔してこないという信頼が価値になってしまったか

h2o ssl-offload: zerocopy

デフォルトだと fusion が有効にならなかったが明示的に指定したらいけた。

cmake -DWITH_BUNDLED_SSL=on  -DWITH_FUSION=ON -DCMAKE_C_FLAGS="-march=native" .

ゼロコピー系の設定をいれてみた。ただ効果測定できるほどの情報がない

proxy.zerocopy: ALWAYS  
ssl-offload: zerocopy   

AVIF

Lightroom Classic から AVIF が書けるようになってたことに気付いた。試してみる。画像サイズ取得するコードがたぶん動かんなこれ……

caniuse でも Baseline 2024らしい。

16Mピクセルで書き出したとき、この画像だとファイルサイズが JPEG 80% で 6MB ぐらい。AVIF だと 1.5MB ぐらい。

なんと、画像サイズちゃんととれてた。やったー

2026年 01月 07日

CSS 2026

せっかくバックエンドシステムも変わったことだしと思ってCSSをアてなおした。何年ぶりかわからん (調べたら約10年一緒だった)

以下のように gemini-3-flash-preview に指示して、何度かやりなおしたら割といい感じだったので、さらに指示を加えたり手動で数字いじってなんとかした。

この日記を以下の条件で CSS を書きなおして新しいデザイン(見た目)を適用するとしたらどうしますか。やってみて
- 落ち着いたトーン 
- 「読みやすさ」最重視  
-「コード」は情報密度を高く
- 「写真」はできる限り大きく 
- ブロックの大きさに px 基本的に指定しないこと 
- フルにレスポンシブ (モバイルも同一ページです) 

中央揃えだとなんかモダンに感じる。

コードブロックと写真の幅を画面いっぱいにしたりするのは後からの指示。

HTML の変更はしないつもりだったけど、結局微調整した。

ヘッダのアイコン

ヘッダにアイコンも追加してみた。Nano Banana Pro で何度かイメージを伝えつつ気に入るのをいろいろ出させてブラッシュアップしたあと、Inkscape でトレースして、「パスの簡略化」で点の数を削減した。

なお gemini-3-pro-preview に同様にことをやらせたら、完全なるゴミができたため捨てました。遅いし

JS と WebComponents

CSS とは直接関係ないけどJSまわりも若干モダンにした。ものすごく古い書き方をしていたり、loading="lazy" がない時代の画像のプレースホルダーコードが残ったりしていた。なんか大抵のことはブラウザがやってくれる時代になっていた……

見出しの改行位置を調整するのを独自でやっていたけど、完全にやめて budou-xのWebComponents を導入した。

アーカイブあさり

  • 2014年1月 はこれはこれでよかったな
  • 2015年2月 は今も使ってるタイトルに近い。けどウェブフォントだったようだ
  • 2016年10月 は前のCSSに近い。ここからはほぼマイナーアプデしかしてないはず

バックエンドかえてからメタデータ(ogpとかもろもろ)がちゃんと入っておらず、はてブのタイトルとかがおかしくなっていた。なおしたつもり。

結構いろいろなおしまくっている

  • sitemap.xml / feed.xml は encoding/xml で出すように
    • html/template だと XML の PI が出せなかったり、そもそもXML用じゃないので問題がある。text/template は論外
  • 関連エントリを 2-gram かつより効率良い実装に書き換え。
    • エントリ数が1万弱なので、そんなに困ってはいないのだけどやりたくて

DB の DATE 型にしてあるカラムを TEXT 型にする

go-sqlite3 だと DATE を time.Time にしてくれちゃうが、それだと困るという。DBをそのままで持ってくる前提で、元々 CAST(date AS TEXT) as date とかで頑張っていたけど、これが sqlc と非常に相性が悪い。CAST するとそのクエリ専用の型が作られてしまう。そして共通の型に詰め替えるという手間 (コピー) が発生する。

sqlc の overrides とかでなんとかならないかと思ったが、go-sqlite3 の時点で time.Time になっちゃうのと、特にドライバオプションで切り替えることもできなそうなので、諦めて TEXT にすることにした。

ただ SQLite はカラムの型変更が ALTER TABLE でできない。知らなかった。

ということでめんどいことに……

BEGIN TRANSACTION;

-- 1. Create new table with TEXT type for date
CREATE TABLE entries_new (
    id INTEGER PRIMARY KEY,
    ...
);

-- 2. Copy data from old table
INSERT INTO entries_new (id, title, body, formatted_body, path, format, date, created_at, modified_at, publish_at, status)
SELECT id, title, body, formatted_body, path, format, CAST(date AS TEXT), created_at, modified_at, publish_at, status
FROM entries;

-- 3. Drop old table and rename new table
DROP TABLE entries;
ALTER TABLE entries_new RENAME TO entries;

-- 4. Re-create indexes
CREATE INDEX index_date ON entries (date, path);
...

COMMIT;
2026年 01月 06日

content-visibility とか content とかレンダリングまわりの最適化専用のCSSプロパティが増えていて知らなかった。

まぁなんかやっぱりサーバサイド再実装すると Cache-Control 忘れたりとかシンタックスハイライトの CSS が一部ロードされてないとか、微妙に気付きにくのがいろいろある……

年末年始2週間ぐらいずっとギターサボった。モチベあがらんな~ フェードアウトせず一応練習再開したのはえらい……

おうちでフラフラ持ち歩く用に使っている M1 MacBook Air も、買ったのが2023年11月と丸2年経過してしまった。ヘビーなことしないので、これで別に困ってはいなくて必要十分なんだけど、昨今の事情もあるしちょっと心配だなあ。

メインPCは2022年11月に更新したけど DDR4。DDR5 で組む機会を逃してしまった。今のところ別に困ってはいないので壊れたりしなければしばらくは……

メインスマフォの Pixel 7 は2023年8月に買っていて (たぶんセールだったんだと思う。62000円ぐらいだった)、バッテリーの持ちが悪くなってきた以外には不満がないので、買い替えるほどでもないんだよなあ。というか Pixel 10 も Pixel 9 もそもそも高いよ (256GB で14万)、Pixel 9a はカメラがちょっと心配だしなあ。Pixel 7 は下取りに出しても1万ぐらいにしかならないので、買い替えるとしても予備機として持ってたほうがよさそう。

Pixel 7 のサポート期限は 米国の Google ストアでのデバイス販売開始日から 5 年間らしい。Pixel 7 は2022年10 月発売なので、2027年10月までは大丈夫。もうすぐやんけという感じはする